Final adjustments, format of verbose corrected and minor modifications

to the input case cylFlow.
This commit is contained in:
Jorge Gonzalez 2020-10-18 00:21:13 +02:00
commit bf6caad56a
11 changed files with 189 additions and 117 deletions

View file

@ -1,24 +1,25 @@
MODULE moduleSolver
CONTAINS
SUBROUTINE scatterGrid(meshIn, partArray)
SUBROUTINE doPushes()
USE moduleSpecies
USE moduleMesh
IMPLICIT NONE
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 meshIn%vols(partArray(n)%e_p)%obj%scatter(partArray(n))
DO n=1, nPartOld
CALL push(partOld(n))
CALL mesh%vols(partOld(n)%e_p)%obj%findCell(partOld(n))
END DO
!$OMP END DO
END SUBROUTINE scatterGrid
END SUBROUTINE doPushes
!Push one particle. Boris pusher for 2D Cyl
!TODO: make general for any pusher
PURE SUBROUTINE push(part)
USE moduleSpecies
USE moduleMesh
@ -57,28 +58,58 @@ MODULE moduleSolver
END SUBROUTINE push
SUBROUTINE resetParticles(partInj, partOld)
USE moduleSpecies, ONLY: particle, &
n_part_old, n_part_new, nPartInj
!Do the collisions in all the cells
SUBROUTINE doCollisions()
USE moduleMesh
IMPLICIT NONE
INTEGER:: e
!$OMP DO
DO e=1, mesh%numVols
CALL mesh%vols(e)%obj%collision()
END DO
!$OMP END DO
END SUBROUTINE doCollisions
!Scatter particles in the grid
SUBROUTINE doScatter
USE moduleSpecies
USE moduleMesh
INTEGER:: n
!Loops over the particles to scatter them
!$OMP DO
DO n=1, nPartOld
CALL mesh%vols(partOld(n)%e_p)%obj%scatter(partOld(n))
END DO
!$OMP END DO
END SUBROUTINE doScatter
SUBROUTINE doReset()
USE moduleSpecies
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
INTEGER:: nPartNew
INTEGER, SAVE:: nInjIn, nOldIn
TYPE(particle), ALLOCATABLE:: partTemp(:)
!$OMP SECTIONS
!$OMP SECTION
n_inj_in = 0
nInjIn = 0
IF (ALLOCATED(partInj)) THEN
n_inj_in = COUNT(partInj%n_in)
nInjIn = COUNT(partInj%n_in)
END IF
!$OMP SECTION
n_old_in = 0
nOldIn = 0
IF (ALLOCATED(partOld)) THEN
n_old_in = COUNT(partOld%n_in)
nOldIn = COUNT(partOld%n_in)
END IF
!$OMP END SECTIONS
@ -87,8 +118,8 @@ MODULE moduleSolver
!$OMP SINGLE
CALL MOVE_ALLOC(partOld, partTemp)
n_part_new = n_inj_in + n_old_in
ALLOCATE(partOld(1:n_part_new))
nPartNew = nInjIn + nOldIn
ALLOCATE(partOld(1:nPartNew))
nn = 0
DO n = 1, nPartInj
@ -100,7 +131,7 @@ MODULE moduleSolver
END DO
DO n = 1, n_part_old
DO n = 1, nPartOld
IF (partTemp(n)%n_in) THEN
nn = nn + 1
partOld(nn) = partTemp(n)
@ -109,10 +140,50 @@ MODULE moduleSolver
END DO
n_part_old = n_part_new
nPartOld = nPartNew
!$OMP END SINGLE
END SUBROUTINE resetParticles
END SUBROUTINE doReset
SUBROUTINE doOutput(t)
USE moduleMesh
USE moduleOutput
USE moduleSpecies
USE moduleCompTime
IMPLICIT NONE
INTEGER, INTENT(in):: t
counterOutput=counterOutput+1
IF (counterOutput>=triggerOutput .OR. &
t == tmax .OR. t == 0) THEN
!Resets output counter
counterOutput=0
CALL mesh%printOutput(t)
CALL printTime(t, t == 0)
CALL mesh%printColl(t)
WRITE(*, "(5X,A21,I10,A1,I8)") "t/tmax: ", t, "/", tmax
WRITE(*, "(5X,A21,I10)") "Particles: ", nPartOld
IF (t == 0) THEN
WRITE(*, "(5X,A21,F8.1,A2)") " init time: ", 1.D3*tStep, "ms"
ELSE
WRITE(*, "(5X,A21,F8.1,A2)") "iteration time: ", 1.D3*tStep, "ms"
END IF
IF (nPartOld > 0) THEN
WRITE(*, "(5X,A21,F8.1,A2)") "avg t/particle: ", 1.D9*(tPush+tReset+tColl+tWeight)/DBLE(nPartOld), "ns"
END IF
WRITE(*,*)
END IF
END SUBROUTINE doOutput
END MODULE moduleSolver