Minor improvements in performance and code clarity.
Still no solution for the reset subroutine. It is really time consumming.
This commit is contained in:
parent
60f38a2d95
commit
ffb03e634b
12 changed files with 233 additions and 117 deletions
|
|
@ -2,38 +2,25 @@ MODULE moduleSolver
|
|||
|
||||
CONTAINS
|
||||
|
||||
SUBROUTINE scatterGrid()
|
||||
SUBROUTINE scatterGrid(meshIn, partArray)
|
||||
USE moduleSpecies
|
||||
USE moduleRefParam
|
||||
USE moduleMesh
|
||||
USE moduleOutput
|
||||
INTEGER:: n, e, k
|
||||
|
||||
!Cleans previous output
|
||||
!$OMP DO PRIVATE(k)
|
||||
DO e = 1, mesh%numNodes
|
||||
DO k= 1, nSpecies
|
||||
mesh%nodes(e)%obj%output(k)%den = 0.D0
|
||||
mesh%nodes(e)%obj%output(k)%mom = 0.D0
|
||||
mesh%nodes(e)%obj%output(k)%tensorS = 0.D0
|
||||
|
||||
END DO
|
||||
|
||||
END DO
|
||||
!$OMP END DO
|
||||
CLASS(meshGeneric), INTENT(in):: meshIn
|
||||
TYPE(particle), INTENT(in):: partArray(:)
|
||||
INTEGER:: n
|
||||
|
||||
!Loops over the particles to scatter them
|
||||
!$OMP DO
|
||||
DO n=1, n_part_old
|
||||
CALL mesh%vols(part_old(n)%e_p)%obj%scatter(part_old(n))
|
||||
CALL meshIn%vols(partArray(n)%e_p)%obj%scatter(partArray(n))
|
||||
|
||||
END DO
|
||||
!$OMP END DO
|
||||
|
||||
|
||||
END SUBROUTINE scatterGrid
|
||||
|
||||
SUBROUTINE push(part)
|
||||
PURE SUBROUTINE push(part)
|
||||
USE moduleSpecies
|
||||
USE moduleMesh
|
||||
IMPLICIT NONE
|
||||
|
|
@ -68,44 +55,66 @@ MODULE moduleSolver
|
|||
part_temp%e_p = part%e_p
|
||||
!Assign cell to particle
|
||||
part=part_temp
|
||||
CALL mesh%vols(part%e_p)%obj%findCell(part)
|
||||
|
||||
END SUBROUTINE push
|
||||
|
||||
SUBROUTINE resetParticles()
|
||||
SUBROUTINE resetParticles(partInj, partOld)
|
||||
USE moduleSpecies
|
||||
USE moduleList
|
||||
USE moduleMesh
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(particle), INTENT(in), ALLOCATABLE:: partInj(:)
|
||||
TYPE(particle), INTENT(inout), ALLOCATABLE:: partOld(:)
|
||||
INTEGER:: nn, n
|
||||
INTEGER, SAVE:: n_inj_in, n_old_in
|
||||
TYPE(particle), ALLOCATABLE:: partTemp(:)
|
||||
|
||||
IF (n_part_old > 0) THEN
|
||||
n_part_new = COUNT(part_old%n_in) + COUNT(part_inj%n_in)
|
||||
ELSE
|
||||
n_part_new = COUNT(part_inj%n_in)
|
||||
END IF
|
||||
!$OMP SECTIONS
|
||||
!$OMP SECTION
|
||||
n_inj_in = 0
|
||||
IF (ALLOCATED(partInj)) THEN
|
||||
n_inj_in = COUNT(partInj%n_in)
|
||||
|
||||
END IF
|
||||
!$OMP SECTION
|
||||
n_old_in = 0
|
||||
IF (ALLOCATED(partOld)) THEN
|
||||
n_old_in = COUNT(partOld%n_in)
|
||||
|
||||
END IF
|
||||
!$OMP END SECTIONS
|
||||
|
||||
!$OMP BARRIER
|
||||
|
||||
!$OMP SINGLE
|
||||
CALL MOVE_ALLOC(part_old, partTemp)
|
||||
ALLOCATE(part_old(1:n_part_new))
|
||||
n_part_new = n_inj_in + n_old_in
|
||||
ALLOCATE(partOld(1:n_part_new))
|
||||
|
||||
nn = 0
|
||||
DO n = 1, nPartInj
|
||||
IF (part_inj(n)%n_in) THEN
|
||||
nn = nn + 1
|
||||
part_old(nn) = part_inj(n)
|
||||
CALL mesh%vols(part_old(nn)%e_p)%obj%listPart_in%add(nn)
|
||||
CALL mesh%vols(part_old(nn)%e_p)%obj%listPart_in%add(part_old(nn))
|
||||
|
||||
END IF
|
||||
|
||||
END DO
|
||||
|
||||
DO n = 1, n_part_old
|
||||
IF (partTemp(n)%n_in) THEN
|
||||
nn = nn + 1
|
||||
part_old(nn) = partTemp(n)
|
||||
CALL mesh%vols(part_old(nn)%e_p)%obj%listPart_in%add(nn)
|
||||
partOld(nn) = partTemp(n)
|
||||
CALL mesh%vols(partOld(nn)%e_p)%obj%listPart_in%add(partOld(nn))
|
||||
|
||||
END IF
|
||||
|
||||
END DO
|
||||
|
||||
n_part_old = n_part_new
|
||||
!$OMP END SINGLE
|
||||
|
||||
END SUBROUTINE resetParticles
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue