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:
Jorge Gonzalez 2021-10-18 16:00:28 +02:00
commit e683c66ff8
4 changed files with 132 additions and 83 deletions

View file

@ -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)