Number of collisions per collision pair
Now the number of collisions is calculated per species pair. This allows that the randomly particles selected for collisions do not have collisions assigned.
This commit is contained in:
parent
97718209cc
commit
4e9514876e
10 changed files with 111 additions and 46 deletions
|
|
@ -63,6 +63,7 @@ MODULE moduleMesh0D
|
||||||
!Inits dummy 0D volume
|
!Inits dummy 0D volume
|
||||||
SUBROUTINE initVol0D(self, n, p, nodes)
|
SUBROUTINE initVol0D(self, n, p, nodes)
|
||||||
USE moduleRefParam
|
USE moduleRefParam
|
||||||
|
USE moduleSpecies
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
|
|
||||||
CLASS(meshVol0D), INTENT(out):: self
|
CLASS(meshVol0D), INTENT(out):: self
|
||||||
|
|
@ -80,6 +81,9 @@ MODULE moduleMesh0D
|
||||||
|
|
||||||
CALL OMP_INIT_LOCK(self%lock)
|
CALL OMP_INIT_LOCK(self%lock)
|
||||||
|
|
||||||
|
ALLOCATE(self%listPart_in(1:nSpecies))
|
||||||
|
ALLOCATE(self%totalWeight(1:nSpecies))
|
||||||
|
|
||||||
END SUBROUTINE initVol0D
|
END SUBROUTINE initVol0D
|
||||||
|
|
||||||
PURE FUNCTION getNodes0D(self) RESULT(n)
|
PURE FUNCTION getNodes0D(self) RESULT(n)
|
||||||
|
|
|
||||||
|
|
@ -220,6 +220,9 @@ MODULE moduleMesh1DCart
|
||||||
|
|
||||||
CALL OMP_INIT_LOCK(self%lock)
|
CALL OMP_INIT_LOCK(self%lock)
|
||||||
|
|
||||||
|
ALLOCATE(self%listPart_in(1:nSpecies))
|
||||||
|
ALLOCATE(self%totalWeight(1:nSpecies))
|
||||||
|
|
||||||
END SUBROUTINE initVol1DCartSegm
|
END SUBROUTINE initVol1DCartSegm
|
||||||
|
|
||||||
!Calculates a random position in 1D volume
|
!Calculates a random position in 1D volume
|
||||||
|
|
|
||||||
|
|
@ -222,6 +222,9 @@ MODULE moduleMesh1DRad
|
||||||
|
|
||||||
CALL OMP_INIT_LOCK(self%lock)
|
CALL OMP_INIT_LOCK(self%lock)
|
||||||
|
|
||||||
|
ALLOCATE(self%listPart_in(1:nSpecies))
|
||||||
|
ALLOCATE(self%totalWeight(1:nSpecies))
|
||||||
|
|
||||||
END SUBROUTINE initVol1DRadSegm
|
END SUBROUTINE initVol1DRadSegm
|
||||||
|
|
||||||
!Calculates a random position in 1D volume
|
!Calculates a random position in 1D volume
|
||||||
|
|
|
||||||
|
|
@ -311,6 +311,9 @@ MODULE moduleMesh2DCart
|
||||||
|
|
||||||
CALL OMP_INIT_LOCK(self%lock)
|
CALL OMP_INIT_LOCK(self%lock)
|
||||||
|
|
||||||
|
ALLOCATE(self%listPart_in(1:nSpecies))
|
||||||
|
ALLOCATE(self%totalWeight(1:nSpecies))
|
||||||
|
|
||||||
END SUBROUTINE initVolQuad2DCart
|
END SUBROUTINE initVolQuad2DCart
|
||||||
|
|
||||||
!Computes element area
|
!Computes element area
|
||||||
|
|
@ -638,6 +641,9 @@ MODULE moduleMesh2DCart
|
||||||
|
|
||||||
CALL OMP_INIT_LOCK(self%lock)
|
CALL OMP_INIT_LOCK(self%lock)
|
||||||
|
|
||||||
|
ALLOCATE(self%listPart_in(1:nSpecies))
|
||||||
|
ALLOCATE(self%totalWeight(1:nSpecies))
|
||||||
|
|
||||||
END SUBROUTINE initVolTria2DCart
|
END SUBROUTINE initVolTria2DCart
|
||||||
|
|
||||||
!Random position in quadrilateral volume
|
!Random position in quadrilateral volume
|
||||||
|
|
|
||||||
|
|
@ -299,6 +299,9 @@ MODULE moduleMesh2DCyl
|
||||||
|
|
||||||
CALL OMP_INIT_LOCK(self%lock)
|
CALL OMP_INIT_LOCK(self%lock)
|
||||||
|
|
||||||
|
ALLOCATE(self%listPart_in(1:nSpecies))
|
||||||
|
ALLOCATE(self%totalWeight(1:nSpecies))
|
||||||
|
|
||||||
END SUBROUTINE initVolQuad2DCyl
|
END SUBROUTINE initVolQuad2DCyl
|
||||||
|
|
||||||
!Computes element area
|
!Computes element area
|
||||||
|
|
@ -659,6 +662,9 @@ MODULE moduleMesh2DCyl
|
||||||
|
|
||||||
CALL OMP_INIT_LOCK(self%lock)
|
CALL OMP_INIT_LOCK(self%lock)
|
||||||
|
|
||||||
|
ALLOCATE(self%listPart_in(1:nSpecies))
|
||||||
|
ALLOCATE(self%totalWeight(1:nSpecies))
|
||||||
|
|
||||||
END SUBROUTINE initVolTria2DCyl
|
END SUBROUTINE initVolTria2DCyl
|
||||||
|
|
||||||
!Random position in quadrilateral volume
|
!Random position in quadrilateral volume
|
||||||
|
|
|
||||||
|
|
@ -285,6 +285,9 @@ MODULE moduleMesh3DCart
|
||||||
|
|
||||||
CALL OMP_INIT_LOCK(self%lock)
|
CALL OMP_INIT_LOCK(self%lock)
|
||||||
|
|
||||||
|
ALLOCATE(self%listPart_in(1:nSpecies))
|
||||||
|
ALLOCATE(self%totalWeight(1:nSpecies))
|
||||||
|
|
||||||
END SUBROUTINE initVolTetra3DCart
|
END SUBROUTINE initVolTetra3DCart
|
||||||
|
|
||||||
!Random position in volume tetrahedron
|
!Random position in volume tetrahedron
|
||||||
|
|
|
||||||
|
|
@ -152,13 +152,13 @@ MODULE moduleMesh
|
||||||
!Volume
|
!Volume
|
||||||
REAL(8):: volume = 0.D0
|
REAL(8):: volume = 0.D0
|
||||||
!List of particles inside the volume
|
!List of particles inside the volume
|
||||||
TYPE(listNode):: listPart_in
|
TYPE(listNode), ALLOCATABLE:: listPart_in(:)
|
||||||
!Lock indicator for listPart_in
|
!Lock indicator for listPart_in
|
||||||
INTEGER(KIND=OMP_LOCK_KIND):: lock
|
INTEGER(KIND=OMP_LOCK_KIND):: lock
|
||||||
!Number of collisions per volume
|
!Number of collisions per volume
|
||||||
INTEGER:: nColl = 0
|
INTEGER:: nColl = 0
|
||||||
!Total weight of particles inside cell
|
!Total weight of particles inside cell
|
||||||
REAL(8):: totalWeight = 0.D0
|
REAL(8), ALLOCATABLE:: totalWeight(:)
|
||||||
CONTAINS
|
CONTAINS
|
||||||
PROCEDURE(initVol_interface), DEFERRED, PASS:: init
|
PROCEDURE(initVol_interface), DEFERRED, PASS:: init
|
||||||
PROCEDURE(getNodesVol_interface), DEFERRED, PASS:: getNodes
|
PROCEDURE(getNodesVol_interface), DEFERRED, PASS:: getNodes
|
||||||
|
|
@ -516,6 +516,7 @@ MODULE moduleMesh
|
||||||
CLASS(meshVol), OPTIONAL, INTENT(in):: oldCell
|
CLASS(meshVol), OPTIONAL, INTENT(in):: oldCell
|
||||||
REAL(8):: xi(1:3)
|
REAL(8):: xi(1:3)
|
||||||
CLASS(meshElement), POINTER:: nextElement
|
CLASS(meshElement), POINTER:: nextElement
|
||||||
|
INTEGER:: sp
|
||||||
|
|
||||||
xi = self%phy2log(part%r)
|
xi = self%phy2log(part%r)
|
||||||
!Checks if particle is inside 'self' cell
|
!Checks if particle is inside 'self' cell
|
||||||
|
|
@ -525,8 +526,9 @@ MODULE moduleMesh
|
||||||
part%n_in = .TRUE.
|
part%n_in = .TRUE.
|
||||||
!Assign particle to listPart_in
|
!Assign particle to listPart_in
|
||||||
CALL OMP_SET_LOCK(self%lock)
|
CALL OMP_SET_LOCK(self%lock)
|
||||||
CALL self%listPart_in%add(part)
|
sp = part%species%n
|
||||||
self%totalWeight = self%totalWeight + part%weight
|
CALL self%listPart_in(sp)%add(part)
|
||||||
|
self%totalWeight(sp) = self%totalWeight(sp) + part%weight
|
||||||
CALL OMP_UNSET_LOCK(self%lock)
|
CALL OMP_UNSET_LOCK(self%lock)
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
|
|
@ -586,6 +588,7 @@ MODULE moduleMesh
|
||||||
CLASS(meshVol), POINTER:: vol
|
CLASS(meshVol), POINTER:: vol
|
||||||
REAL(8), DIMENSION(1:3):: xii
|
REAL(8), DIMENSION(1:3):: xii
|
||||||
CLASS(meshElement), POINTER:: nextElement
|
CLASS(meshElement), POINTER:: nextElement
|
||||||
|
INTEGER:: sp
|
||||||
|
|
||||||
found = .FALSE.
|
found = .FALSE.
|
||||||
|
|
||||||
|
|
@ -595,8 +598,9 @@ MODULE moduleMesh
|
||||||
IF (vol%inside(xii)) THEN
|
IF (vol%inside(xii)) THEN
|
||||||
part%volColl = vol%n
|
part%volColl = vol%n
|
||||||
CALL OMP_SET_LOCK(vol%lock)
|
CALL OMP_SET_LOCK(vol%lock)
|
||||||
CALL vol%listPart_in%add(part)
|
sp = part%species%n
|
||||||
vol%totalWeight = vol%totalWeight + part%weight
|
CALL vol%listPart_in(sp)%add(part)
|
||||||
|
vol%totalWeight(sp) = vol%totalWeight(sp) + part%weight
|
||||||
CALL OMP_UNSET_LOCK(vol%lock)
|
CALL OMP_UNSET_LOCK(vol%lock)
|
||||||
found = .TRUE.
|
found = .TRUE.
|
||||||
|
|
||||||
|
|
@ -660,61 +664,83 @@ MODULE moduleMesh
|
||||||
INTEGER, INTENT(in):: t
|
INTEGER, INTENT(in):: t
|
||||||
INTEGER:: e
|
INTEGER:: e
|
||||||
CLASS(meshVol), POINTER:: vol
|
CLASS(meshVol), POINTER:: vol
|
||||||
INTEGER:: nPart !Number of particles inside the cell
|
INTEGER:: k, nPairs, i, j
|
||||||
|
INTEGER:: nPart_i, nPart_j, nPart!Number of particles inside the cell
|
||||||
REAL(8):: pMax !Maximum probability of collision
|
REAL(8):: pMax !Maximum probability of collision
|
||||||
|
TYPE(pointerArray), ALLOCATABLE:: partTemp_i(:), partTemp_j(:)
|
||||||
INTEGER:: rnd !random index
|
INTEGER:: rnd !random index
|
||||||
TYPE(particle), POINTER:: part_i, part_j
|
TYPE(particle), POINTER:: part_i, part_j
|
||||||
INTEGER:: n !collision
|
INTEGER:: n, c
|
||||||
INTEGER:: ij, k
|
|
||||||
REAL(8):: sigmaVrelMaxNew
|
REAL(8):: sigmaVrelMaxNew
|
||||||
TYPE(pointerArray), ALLOCATABLE:: partTemp(:)
|
|
||||||
|
|
||||||
IF (MOD(t, everyColl) == 0) THEN
|
IF (MOD(t, everyColl) == 0) THEN
|
||||||
!Collisions need to be performed in this iteration
|
!Collisions need to be performed in this iteration
|
||||||
!$OMP DO SCHEDULE(DYNAMIC)
|
!$OMP DO SCHEDULE(DYNAMIC)
|
||||||
DO e=1, self%numVols
|
DO e=1, self%numVols
|
||||||
vol => self%vols(e)%obj
|
vol => self%vols(e)%obj
|
||||||
nPart = vol%listPart_in%amount
|
|
||||||
|
|
||||||
!Resets the number of collisions
|
!TODO: Simplify this, to many sublevels
|
||||||
vol%nColl = 0
|
!Iterate over the number of pairs
|
||||||
|
nPairs = SIZE(interactionMatrix) !TODO: This does not change, make a variable in a module
|
||||||
|
DO k = 1, nPairs
|
||||||
|
IF (interactionMatrix(k)%amount > 0) THEN
|
||||||
|
!Select the species for the collision pair
|
||||||
|
i = interactionMatrix(k)%sp_i%n
|
||||||
|
j = interactionMatrix(k)%sp_j%n
|
||||||
|
|
||||||
!Calculates number of collisions if there is more than one particle in the cell
|
!Number of particles per species in the collision pair
|
||||||
IF (nPart > 1) THEN
|
nPart_i = vol%listPart_in(i)%amount
|
||||||
!Probability of collision
|
nPart_j = vol%listPart_in(j)%amount
|
||||||
pMax = vol%totalWeight*vol%sigmaVrelMax*tauColl/vol%volume
|
|
||||||
|
|
||||||
!Number of collisions in the cell
|
IF (nPart_i > 0 .AND. nPart_j > 0) THEN
|
||||||
vol%nColl = NINT(REAL(nPart)*pMax*0.5D0)
|
!Total number of particles for the collision pair
|
||||||
|
nPart = nPart_i + nPart_j
|
||||||
|
|
||||||
IF (vol%nColl > 0) THEN
|
!Resets the number of collisions in the cell
|
||||||
!Converts the list of particles to an array for easy access
|
vol%nColl = 0
|
||||||
partTemp = vol%listPart_in%convert2Array()
|
|
||||||
|
|
||||||
END IF
|
!Probability of collision for pair i-j
|
||||||
|
pMax = (vol%totalWeight(i) + vol%totalWeight(j))*vol%sigmaVrelMax*tauColl/vol%volume
|
||||||
|
|
||||||
DO n = 1, vol%nColl
|
!Number of collisions in the cell
|
||||||
!Select random numbers
|
vol%nColl = NINT(REAL(nPart)*pMax*0.5D0)
|
||||||
rnd = random(1, nPart)
|
|
||||||
part_i => partTemp(rnd)%part
|
|
||||||
rnd = random(1, nPart)
|
|
||||||
part_j => partTemp(rnd)%part
|
|
||||||
ij = interactionIndex(part_i%species%n, part_j%species%n)
|
|
||||||
sigmaVrelMaxNew = 0.D0
|
|
||||||
DO k = 1, interactionMatrix(ij)%amount
|
|
||||||
CALL interactionMatrix(ij)%collisions(k)%obj%collide(vol%sigmaVrelMax, sigmaVrelMaxNew, part_i, part_j)
|
|
||||||
|
|
||||||
END DO
|
!Converts the list of particles to an array for easy access
|
||||||
|
IF (vol%nColl > 0) THEN
|
||||||
|
partTemp_i = vol%listPart_in(i)%convert2Array()
|
||||||
|
partTemp_j = vol%listPart_in(j)%convert2Array()
|
||||||
|
|
||||||
!Update maximum cross section*v_rel per each collision
|
END IF
|
||||||
IF (sigmaVrelMaxNew > vol%sigmaVrelMax) THEN
|
|
||||||
vol%sigmaVrelMax = sigmaVrelMaxNew
|
!Do collisions
|
||||||
|
DO n = 1, vol%nColl
|
||||||
|
!Select random particles
|
||||||
|
rnd = random(1, nPart_i)
|
||||||
|
part_i => partTemp_i(rnd)%part
|
||||||
|
rnd = random(1, nPart_j)
|
||||||
|
part_j => partTemp_j(rnd)%part
|
||||||
|
|
||||||
|
!Check all possible collisions in the pair
|
||||||
|
!TODO: Stop when collision occurs (and count it)
|
||||||
|
sigmaVrelMaxNew = 0.D0
|
||||||
|
DO c = 1, interactionMatrix(k)%amount
|
||||||
|
CALL interactionMatrix(k)%collisions(c)%obj%collide(vol%sigmaVrelMax, sigmaVrelMaxNew, part_i, part_j)
|
||||||
|
|
||||||
|
END DO
|
||||||
|
|
||||||
|
!Update maximum cross section*v_rel per each collision
|
||||||
|
IF (sigmaVrelMaxNew > vol%sigmaVrelMax) THEN
|
||||||
|
vol%sigmaVrelMax = sigmaVrelMaxNew
|
||||||
|
|
||||||
|
END IF
|
||||||
|
|
||||||
|
END DO
|
||||||
|
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
END DO
|
END IF
|
||||||
|
|
||||||
END IF
|
END DO
|
||||||
|
|
||||||
END DO
|
END DO
|
||||||
!$OMP END DO
|
!$OMP END DO
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,8 @@ MODULE moduleCollisions
|
||||||
|
|
||||||
!Type for interaction matrix
|
!Type for interaction matrix
|
||||||
TYPE:: interactionsBinary
|
TYPE:: interactionsBinary
|
||||||
|
CLASS(speciesGeneric), POINTER:: sp_i
|
||||||
|
CLASS(speciesGeneric), POINTER:: sp_j
|
||||||
INTEGER:: amount
|
INTEGER:: amount
|
||||||
TYPE(collisionCont), ALLOCATABLE:: collisions(:)
|
TYPE(collisionCont), ALLOCATABLE:: collisions(:)
|
||||||
CONTAINS
|
CONTAINS
|
||||||
|
|
@ -139,11 +141,15 @@ MODULE moduleCollisions
|
||||||
END FUNCTION interactionIndex
|
END FUNCTION interactionIndex
|
||||||
|
|
||||||
!Inits the binary interaction
|
!Inits the binary interaction
|
||||||
SUBROUTINE initInteractionBinary(self, amount)
|
SUBROUTINE initInteractionBinary(self, amount, i, j)
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
|
|
||||||
CLASS(interactionsBinary), INTENT(inout):: self
|
CLASS(interactionsBinary), INTENT(inout):: self
|
||||||
INTEGER, INTENT(in):: amount
|
INTEGER, INTENT(in):: amount
|
||||||
|
INTEGER, INTENT(in):: i, j
|
||||||
|
|
||||||
|
self%sp_i => species(i)%obj
|
||||||
|
self%sp_j => species(j)%obj
|
||||||
|
|
||||||
self%amount = amount
|
self%amount = amount
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -685,7 +685,7 @@ MODULE moduleInput
|
||||||
CALL config%info(object // '.cTypes', found, n_children = nCollisions)
|
CALL config%info(object // '.cTypes', found, n_children = nCollisions)
|
||||||
ij = interactionIndex(pt_i,pt_j)
|
ij = interactionIndex(pt_i,pt_j)
|
||||||
!Allocates the required number of collisions per each pair of species ij
|
!Allocates the required number of collisions per each pair of species ij
|
||||||
CALL interactionMatrix(ij)%init(nCollisions)
|
CALL interactionMatrix(ij)%init(nCollisions, pt_i, pt_j)
|
||||||
|
|
||||||
DO k = 1, nCollisions
|
DO k = 1, nCollisions
|
||||||
WRITE (kString, '(I2)') k
|
WRITE (kString, '(I2)') k
|
||||||
|
|
|
||||||
|
|
@ -243,8 +243,6 @@ MODULE moduleSolver
|
||||||
v_prime = v_minus + fn * crossProduct(v_minus, B)
|
v_prime = v_minus + fn * crossProduct(v_minus, B)
|
||||||
v_plus = v_minus + 2.D0 * fn / (1.D0 + fn**2 * B**2)*crossProduct(v_prime, B)
|
v_plus = v_minus + 2.D0 * fn / (1.D0 + fn**2 * B**2)*crossProduct(v_prime, B)
|
||||||
|
|
||||||
PRINT *, v_minus, v_plus
|
|
||||||
|
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
!Half step for electrostatic
|
!Half step for electrostatic
|
||||||
|
|
@ -459,6 +457,7 @@ MODULE moduleSolver
|
||||||
INTEGER, SAVE:: nPartNew
|
INTEGER, SAVE:: nPartNew
|
||||||
INTEGER, SAVE:: nInjIn, nOldIn, nWScheme, nCollisions, nSurfaces
|
INTEGER, SAVE:: nInjIn, nOldIn, nWScheme, nCollisions, nSurfaces
|
||||||
TYPE(particle), ALLOCATABLE, SAVE:: partTemp(:)
|
TYPE(particle), ALLOCATABLE, SAVE:: partTemp(:)
|
||||||
|
INTEGER:: s
|
||||||
|
|
||||||
!$OMP SECTIONS
|
!$OMP SECTIONS
|
||||||
!$OMP SECTION
|
!$OMP SECTION
|
||||||
|
|
@ -545,7 +544,10 @@ MODULE moduleSolver
|
||||||
!Erase the list of particles inside the cell
|
!Erase the list of particles inside the cell
|
||||||
DO e = 1, mesh%numVols
|
DO e = 1, mesh%numVols
|
||||||
mesh%vols(e)%obj%totalWeight = 0.D0
|
mesh%vols(e)%obj%totalWeight = 0.D0
|
||||||
CALL mesh%vols(e)%obj%listPart_in%erase()
|
DO s = 1, nSpecies
|
||||||
|
CALL mesh%vols(e)%obj%listPart_in(s)%erase()
|
||||||
|
|
||||||
|
END DO
|
||||||
|
|
||||||
END DO
|
END DO
|
||||||
|
|
||||||
|
|
@ -553,7 +555,10 @@ MODULE moduleSolver
|
||||||
!Erase the list of particles inside the cell in coll mesh
|
!Erase the list of particles inside the cell in coll mesh
|
||||||
DO e = 1, meshColl%numVols
|
DO e = 1, meshColl%numVols
|
||||||
meshColl%vols(e)%obj%totalWeight = 0.D0
|
meshColl%vols(e)%obj%totalWeight = 0.D0
|
||||||
CALL meshColl%vols(e)%obj%listPart_in%erase()
|
DO s = 1, nSpecies
|
||||||
|
CALL meshColl%vols(e)%obj%listPart_in(s)%erase()
|
||||||
|
|
||||||
|
END DO
|
||||||
|
|
||||||
END DO
|
END DO
|
||||||
|
|
||||||
|
|
@ -687,6 +692,7 @@ MODULE moduleSolver
|
||||||
REAL(8):: newWeight
|
REAL(8):: newWeight
|
||||||
TYPE(particle), POINTER:: newPart
|
TYPE(particle), POINTER:: newPart
|
||||||
INTEGER:: p
|
INTEGER:: p
|
||||||
|
INTEGER:: sp
|
||||||
|
|
||||||
newWeight = part%weight / nSplit
|
newWeight = part%weight / nSplit
|
||||||
|
|
||||||
|
|
@ -699,12 +705,14 @@ MODULE moduleSolver
|
||||||
ALLOCATE(newPart)
|
ALLOCATE(newPart)
|
||||||
!Copy data from original particle
|
!Copy data from original particle
|
||||||
newPart = part
|
newPart = part
|
||||||
|
!Add particle to list of new particles from weighting scheme
|
||||||
CALL OMP_SET_LOCK(lockWScheme)
|
CALL OMP_SET_LOCK(lockWScheme)
|
||||||
CALL partWScheme%add(newPart)
|
CALL partWScheme%add(newPart)
|
||||||
CALL OMP_UNSET_LOCK(lockWScheme)
|
CALL OMP_UNSET_LOCK(lockWScheme)
|
||||||
!Add particle to cell list
|
!Add particle to cell list
|
||||||
CALL OMP_SET_lock(vol%lock)
|
CALL OMP_SET_lock(vol%lock)
|
||||||
CALL vol%listPart_in%add(newPart)
|
sp = part%species%n
|
||||||
|
CALL vol%listPart_in(sp)%add(newPart)
|
||||||
CALL OMP_UNSET_lock(vol%lock)
|
CALL OMP_UNSET_lock(vol%lock)
|
||||||
|
|
||||||
END DO
|
END DO
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue