Implementation of ionization process.

Now collisions can have a different time step.

Added species name to output names as it was starting to get confusing
in Gmsh for multiple species.

Output filenames adapted to match any number of iterations.
This commit is contained in:
Jorge Gonzalez 2020-12-25 23:08:59 +01:00
commit e50cc3325b
13 changed files with 569 additions and 375 deletions

View file

@ -295,17 +295,22 @@ MODULE moduleSolver
END SUBROUTINE push1DRadCharged
!Do the collisions in all the cells
SUBROUTINE doCollisions()
SUBROUTINE doCollisions(t)
USE moduleMesh
USE moduleCollisions
IMPLICIT NONE
INTEGER, INTENT(in):: t
INTEGER:: e
!$OMP DO SCHEDULE(DYNAMIC)
DO e=1, mesh%numVols
CALL mesh%vols(e)%obj%collision()
END DO
!$OMP END DO
IF (MOD(t, everyCollisions) == 0) THEN
!$OMP DO SCHEDULE(DYNAMIC)
DO e=1, mesh%numVols
CALL mesh%vols(e)%obj%collision()
END DO
!$OMP END DO
END IF
END SUBROUTINE doCollisions
@ -317,7 +322,7 @@ MODULE moduleSolver
INTEGER:: nn, n, e
INTEGER, SAVE:: nPartNew
INTEGER, SAVE:: nInjIn, nOldIn, nWScheme
INTEGER, SAVE:: nInjIn, nOldIn, nWScheme, nCollisions
TYPE(particle), ALLOCATABLE, SAVE:: partTemp(:)
TYPE(lNode), POINTER:: partCurr, partNext
@ -336,13 +341,15 @@ MODULE moduleSolver
END IF
!$OMP SECTION
nWScheme = partWScheme%amount
!$OMP SECTION
nCollisions = partCollisions%amount
!$OMP END SECTIONS
!$OMP BARRIER
!$OMP SINGLE
CALL MOVE_ALLOC(partOld, partTemp)
nPartNew = nInjIn + nOldIn + nWScheme
nPartNew = nInjIn + nOldIn + nWScheme + nCollisions
ALLOCATE(partOld(1:nPartNew))
!$OMP END SINGLE
@ -385,12 +392,35 @@ MODULE moduleSolver
IF (ASSOCIATED(partWScheme%tail)) NULLIFY(partWScheme%tail)
partWScheme%amount = 0
!$OMP SECTION
!Reset particles from collisional process
nn = nInjIn + nOldIn + nWScheme
partCurr => partCollisions%head
DO n = 1, nCollisions
partNext => partCurr%next
partOld(nn+n) = partCurr%part
DEALLOCATE(partCurr)
partCurr => partNext
END DO
IF (ASSOCIATED(partCollisions%head)) NULLIFY(partCollisions%head)
IF (ASSOCIATED(partCollisions%tail)) NULLIFY(partCollisions%tail)
partCollisions%amount = 0
!$OMP SECTION
!Reset output in nodes
DO e = 1, mesh%numNodes
CALL mesh%nodes(e)%obj%resetOutput()
END DO
!$OMP SECTION
!Erase the list of particles inside the cell
DO e = 1, mesh%numVols
CALL mesh%vols(e)%obj%listPart_in%erase()
END DO
!$OMP END SECTIONS
!$OMP SINGLE