Modification to Probes to use all particles
Now, probes check all particles in the domain. This is done only when probes are outputed to save CPU time. However, still some issues and distribution functions are not properly being calculated.
This commit is contained in:
parent
550f6e2d2e
commit
e683c66ff8
4 changed files with 132 additions and 83 deletions
|
|
@ -497,17 +497,48 @@ MODULE moduleSolver
|
|||
|
||||
END SUBROUTINE push0D
|
||||
|
||||
!Takes the particles from a list and put them into an array
|
||||
!nStart indicates the last fill index in the array
|
||||
SUBROUTINE resetList(partList, partArray, nStart)
|
||||
USE moduleSpecies
|
||||
USE moduleList
|
||||
USE moduleProbe
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(listNode), INTENT(inout):: partList
|
||||
TYPE(particle), INTENT(inout), DIMENSION(1:):: partArray
|
||||
INTEGER, INTENT(in):: nStart
|
||||
TYPE(lNode), POINTER:: partCurr, partNext
|
||||
INTEGER:: n
|
||||
|
||||
partCurr => partList%head
|
||||
DO n = 1, partList%amount
|
||||
partNext => partCurr%next
|
||||
partArray(nStart + n) = partCurr%part
|
||||
CALL doProbes(partArray(nStart+n))
|
||||
DEALLOCATE(partCurr)
|
||||
partCurr => partNext
|
||||
|
||||
END DO
|
||||
|
||||
!Resest head, tail and number of nodes in the list
|
||||
IF (ASSOCIATED(partList%head)) NULLIFY(partList%head)
|
||||
IF (ASSOCIATED(partList%tail)) NULLIFY(partList%tail)
|
||||
partList%amount = 0
|
||||
|
||||
END SUBROUTINE resetList
|
||||
|
||||
SUBROUTINE doReset()
|
||||
USE moduleSpecies
|
||||
USE moduleMesh
|
||||
USE moduleList
|
||||
USE moduleProbe
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER:: nn, n, e
|
||||
INTEGER, SAVE:: nPartNew
|
||||
INTEGER, SAVE:: nInjIn, nOldIn, nWScheme, nCollisions, nSurfaces
|
||||
TYPE(particle), ALLOCATABLE, SAVE:: partTemp(:)
|
||||
TYPE(lNode), POINTER:: partCurr, partNext
|
||||
|
||||
!$OMP SECTIONS
|
||||
!$OMP SECTION
|
||||
|
|
@ -524,10 +555,13 @@ MODULE moduleSolver
|
|||
END IF
|
||||
!$OMP SECTION
|
||||
nWScheme = partWScheme%amount
|
||||
|
||||
!$OMP SECTION
|
||||
nCollisions = partCollisions%amount
|
||||
|
||||
!$OMP SECTION
|
||||
nSurfaces = partSurfaces%amount
|
||||
|
||||
!$OMP END SECTIONS
|
||||
|
||||
!$OMP BARRIER
|
||||
|
|
@ -546,6 +580,7 @@ MODULE moduleSolver
|
|||
IF (partInj(n)%n_in) THEN
|
||||
nn = nn + 1
|
||||
partOld(nn) = partInj(n)
|
||||
CALL doProbes(partOld(nn))
|
||||
|
||||
END IF
|
||||
|
||||
|
|
@ -558,54 +593,26 @@ MODULE moduleSolver
|
|||
IF (partTemp(n)%n_in) THEN
|
||||
nn = nn + 1
|
||||
partOld(nn) = partTemp(n)
|
||||
CALL doProbes(partOld(nn))
|
||||
|
||||
END IF
|
||||
|
||||
END DO
|
||||
|
||||
!$OMP SECTION
|
||||
!Reset particles from weighting scheme
|
||||
nn = nInjIn + nOldIn
|
||||
partCurr => partWScheme%head
|
||||
DO n = 1, nWScheme
|
||||
partNext => partCurr%next
|
||||
partOld(nn+n) = partCurr%part
|
||||
DEALLOCATE(partCurr)
|
||||
partCurr => partNext
|
||||
|
||||
END DO
|
||||
IF (ASSOCIATED(partWScheme%head)) NULLIFY(partWScheme%head)
|
||||
IF (ASSOCIATED(partWScheme%tail)) NULLIFY(partWScheme%tail)
|
||||
partWScheme%amount = 0
|
||||
CALL resetList(partWScheme, partOld, nn)
|
||||
|
||||
!$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
|
||||
CALL resetList(partCollisions, partOld, nn)
|
||||
|
||||
!$OMP SECTION
|
||||
!Reset particles from surface process
|
||||
nn = nInjIn + nOldIn + nWScheme + nCollisions
|
||||
partCurr => partSurfaces%head
|
||||
DO n = 1, nSurfaces
|
||||
partNext => partCurr%next
|
||||
partOld(nn+n) = partCurr%part
|
||||
DEALLOCATE(partCurr)
|
||||
partCurr => partNext
|
||||
|
||||
END DO
|
||||
IF (ASSOCIATED(partSurfaces%head)) NULLIFY(partSurfaces%head)
|
||||
IF (ASSOCIATED(partSurfaces%tail)) NULLIFY(partSurfaces%tail)
|
||||
partSurfaces%amount = 0
|
||||
CALL resetList(partSurfaces, partOld, nn)
|
||||
|
||||
!$OMP SECTION
|
||||
!Reset output in nodes
|
||||
|
|
@ -827,6 +834,7 @@ MODULE moduleSolver
|
|||
USE moduleOutput
|
||||
USE moduleSpecies
|
||||
USE moduleCompTime
|
||||
USE moduleProbe
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER, INTENT(in):: t
|
||||
|
|
@ -838,6 +846,7 @@ MODULE moduleSolver
|
|||
!Resets output counter
|
||||
counterOutput=0
|
||||
|
||||
CALL outputProbes(t)
|
||||
CALL mesh%printOutput(t)
|
||||
IF (ASSOCIATED(meshForMCC)) CALL meshForMCC%printColl(t)
|
||||
CALL mesh%printEM(t)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue