Organized injection
This commit is contained in:
parent
ed79eb018e
commit
6b72dbb108
6 changed files with 63 additions and 60 deletions
|
|
@ -235,23 +235,21 @@ MODULE moduleSolver
|
|||
|
||||
INTEGER:: nn, n, e
|
||||
INTEGER, SAVE:: nPartNew
|
||||
INTEGER, SAVE:: nInjIn, nOldIn, nWScheme, nCollisions, nSurfaces
|
||||
INTEGER, SAVE:: nOldIn, nInj, nWScheme, nCollisions, nSurfaces
|
||||
TYPE(particle), ALLOCATABLE, SAVE:: partTemp(:)
|
||||
INTEGER:: s
|
||||
|
||||
!$OMP SECTIONS
|
||||
!$OMP SECTION
|
||||
nInjIn = 0
|
||||
IF (ALLOCATED(partInj)) THEN
|
||||
nInjIn = COUNT(partInj%n_in)
|
||||
|
||||
END IF
|
||||
!$OMP SECTION
|
||||
nOldIn = 0
|
||||
IF (ALLOCATED(partOld)) THEN
|
||||
nOldIn = COUNT(partOld%n_in)
|
||||
|
||||
END IF
|
||||
|
||||
!$OMP SECTION
|
||||
nInj = partInj%amount
|
||||
|
||||
!$OMP SECTION
|
||||
nWScheme = partWScheme%amount
|
||||
|
||||
|
|
@ -267,30 +265,14 @@ MODULE moduleSolver
|
|||
|
||||
!$OMP SINGLE
|
||||
CALL MOVE_ALLOC(partOld, partTemp)
|
||||
nPartNew = nInjIn + nOldIn + nWScheme + nCollisions + nSurfaces
|
||||
nPartNew = nInj + nOldIn + nWScheme + nCollisions + nSurfaces
|
||||
ALLOCATE(partOld(1:nPartNew))
|
||||
!$OMP END SINGLE
|
||||
|
||||
!$OMP SECTIONS
|
||||
!$OMP SECTION
|
||||
!Reset particles from injection
|
||||
nn = 0
|
||||
DO n = 1, nPartInj
|
||||
IF (partInj(n)%n_in) THEN
|
||||
nn = nn + 1
|
||||
partOld(nn) = partInj(n)
|
||||
IF (nProbes > 0) THEN
|
||||
CALL doProbes(partOld(nn))
|
||||
|
||||
END IF
|
||||
|
||||
END IF
|
||||
|
||||
END DO
|
||||
|
||||
!$OMP SECTION
|
||||
!Reset particles from previous iteration
|
||||
nn = nInjIn
|
||||
nn = 0
|
||||
DO n = 1, nPartOld
|
||||
IF (partTemp(n)%n_in) THEN
|
||||
nn = nn + 1
|
||||
|
|
@ -304,19 +286,24 @@ MODULE moduleSolver
|
|||
|
||||
END DO
|
||||
|
||||
!$OMP SECTION
|
||||
!Reset particles from injection
|
||||
nn = nOldIn
|
||||
call resetList(partInj, partOld, nn)
|
||||
|
||||
!$OMP SECTION
|
||||
!Reset particles from weighting scheme
|
||||
nn = nInjIn + nOldIn
|
||||
nn = nOldIn + nInj
|
||||
CALL resetList(partWScheme, partOld, nn)
|
||||
|
||||
!$OMP SECTION
|
||||
!Reset particles from collisional process
|
||||
nn = nInjIn + nOldIn + nWScheme
|
||||
nn = nOldIn + nInj + nWScheme
|
||||
CALL resetList(partCollisions, partOld, nn)
|
||||
|
||||
!$OMP SECTION
|
||||
!Reset particles from surface process
|
||||
nn = nInjIn + nOldIn + nWScheme + nCollisions
|
||||
nn = nOldIn + nInj + nWScheme + nCollisions
|
||||
CALL resetList(partSurfaces, partOld, nn)
|
||||
|
||||
!$OMP SECTION
|
||||
|
|
@ -473,6 +460,28 @@ MODULE moduleSolver
|
|||
|
||||
END SUBROUTINE splitParticle
|
||||
|
||||
!Injection of particles
|
||||
SUBROUTINE doInjects()
|
||||
USE moduleSpecies
|
||||
use moduleInject
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER:: i, n, sp
|
||||
|
||||
DO i=1, nInject
|
||||
associate(inject => injects(i)%obj)
|
||||
sp = inject%species%n
|
||||
IF (solver%pusher(sp)%pushSpecies) THEN
|
||||
|
||||
CALL inject%addParticles()
|
||||
|
||||
END IF
|
||||
end associate
|
||||
|
||||
END DO
|
||||
|
||||
END SUBROUTINE doInjects
|
||||
|
||||
SUBROUTINE updateParticleCell(self, part)
|
||||
USE moduleSpecies
|
||||
USE moduleMesh
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue