@@ -1855,10 +1855,6 @@ SUBROUTINE MOVE_PARTICLES(T,DT,NM)
18551855
18561856PART_UVWMAX = 0._EB
18571857
1858- IF (MESHES(NM)% NLP== 0 ) RETURN
1859-
1860- ! Set the CPU timer and point to the current mesh variables
1861-
18621858TNOW= CURRENT_TIME()
18631859CALL POINT_TO_MESH(NM)
18641860
@@ -1868,6 +1864,8 @@ SUBROUTINE MOVE_PARTICLES(T,DT,NM)
18681864 FVZ_D = 0._EB
18691865ENDIF
18701866
1867+ IF (MESHES(NM)% NLP== 0 ) RETURN
1868+
18711869IF (CC_IBM) CALL CUTFACE_VELOCITIES(NM,U,V,W,CUTFACES= .TRUE. )
18721870
18731871! Loop through all Lagrangian particles and move them one time step
@@ -2564,6 +2562,8 @@ SUBROUTINE MOVE_PARTICLES(T,DT,NM)
25642562
25652563IF (CC_IBM) CALL CUTFACE_VELOCITIES(NM,U,V,W,CUTFACES= .FALSE. )
25662564
2565+ IF (PARTICLE_DRAG) CALL CLIP_PARTICLE_DRAG(DT,NM)
2566+
25672567! Remove out-of-bounds particles
25682568
25692569CALL REMOVE_PARTICLES(T,NM)
@@ -4570,21 +4570,18 @@ END SUBROUTINE PARTICLE_RUNNING_AVERAGES
45704570END SUBROUTINE PARTICLE_MASS_ENERGY_TRANSFER
45714571
45724572
4573- ! > \brief Add PARTICLE momentum as a force term in momentum equation
4574- ! > \param DT Current time step (s)
4573+ ! > \brief Clip particle drag fluxes to plus/minus abs(u)/dt
4574+ ! > \param DT Time step size (s)
45754575! > \param NM Current mesh number
45764576
4577- SUBROUTINE PARTICLE_MOMENTUM_TRANSFER (DT ,NM )
4577+ SUBROUTINE CLIP_PARTICLE_DRAG (DT ,NM )
45784578
4579- USE CC_SCALARS, ONLY: CUTFACE_VELOCITIES
45804579INTEGER , INTENT (IN ) :: NM
45814580REAL (EB), INTENT (IN ) :: DT
45824581REAL (EB), POINTER , DIMENSION (:,:,:) :: UU,VV,WW
45834582REAL (EB) :: RDT,UODT,VODT,WODT
45844583INTEGER :: I,J,K
45854584
4586- IF (MESHES(NM)% NLP== 0 ) RETURN
4587-
45884585CALL POINT_TO_MESH(NM)
45894586
45904587RDT = 1._EB / DT
@@ -4599,25 +4596,172 @@ SUBROUTINE PARTICLE_MOMENTUM_TRANSFER(DT,NM)
45994596 WW = > WS
46004597ENDIF
46014598
4602- IF (CC_IBM) CALL CUTFACE_VELOCITIES(NM,UU,VV,WW,CUTFACES= .TRUE. )
4603-
4604- ! Add summed particle accelerations to the momentum equation. Limit the value to plus/minus abs(u)/dt to prevent a sudden
4605- ! change in gas direction.
4599+ ! Limit drag flux to plus/minus abs(u)/dt to prevent a sudden change in gas direction.
46064600
46074601DO K= 0 ,KBAR
46084602 DO J= 0 ,JBAR
46094603 DO I= 0 ,IBAR
46104604 UODT = ABS (UU(I,J,K)* RDT)
46114605 VODT = ABS (VV(I,J,K)* RDT)
46124606 WODT = ABS (WW(I,J,K)* RDT)
4613- FVX (I,J,K) = FVX(I,J,K) + MIN (UODT,MAX (- UODT,FVX_D(I,J,K)))
4614- FVY (I,J,K) = FVY(I,J,K) + MIN (VODT,MAX (- VODT,FVY_D(I,J,K)))
4615- FVZ (I,J,K) = FVZ(I,J,K) + MIN (WODT,MAX (- WODT,FVZ_D(I,J,K)))
4607+ FVX_D (I,J,K) = MIN (UODT,MAX (- UODT,FVX_D(I,J,K)))
4608+ FVY_D (I,J,K) = MIN (VODT,MAX (- VODT,FVY_D(I,J,K)))
4609+ FVZ_D (I,J,K) = MIN (WODT,MAX (- WODT,FVZ_D(I,J,K)))
46164610 ENDDO
46174611 ENDDO
46184612ENDDO
46194613
4620- IF (CC_IBM) CALL CUTFACE_VELOCITIES(NM,UU,VV,WW,CUTFACES= .FALSE. )
4614+ END SUBROUTINE CLIP_PARTICLE_DRAG
4615+
4616+
4617+ ! > \brief Add PARTICLE momentum as a force term in momentum equation
4618+ ! > \param DT Current time step (s)
4619+ ! > \param NM Current mesh number
4620+
4621+ SUBROUTINE PARTICLE_MOMENTUM_TRANSFER (NM )
4622+
4623+ INTEGER , INTENT (IN ) :: NM
4624+ INTEGER :: NOM,II,JJ,KK,IOR,IW,IIO,JJO,KKO
4625+ REAL (EB) :: DA_OTHER,FVX_OTHER,FVY_OTHER,FVZ_OTHER
4626+ TYPE (OMESH_TYPE), POINTER :: OM
4627+ TYPE (MESH_TYPE), POINTER :: M2
4628+ TYPE (WALL_TYPE), POINTER :: WC
4629+ TYPE (EXTERNAL_WALL_TYPE), POINTER :: EWC
4630+ TYPE (BOUNDARY_COORD_TYPE), POINTER :: BC
4631+
4632+ CALL POINT_TO_MESH(NM)
4633+
4634+ ! Add area-weighted particle drag from neighboring meshes at interpolated boundaries.
4635+
4636+ IF (NMESHES> 1 .AND. CORRECTOR) THEN
4637+
4638+ EXTERNAL_WALL_LOOP: DO IW= 1 ,N_EXTERNAL_WALL_CELLS
4639+
4640+ WC= >WALL(IW)
4641+ EWC= >EXTERNAL_WALL(IW)
4642+ IF (WC% BOUNDARY_TYPE/= INTERPOLATED_BOUNDARY) CYCLE EXTERNAL_WALL_LOOP
4643+
4644+ BC = > BOUNDARY_COORD(WC% BC_INDEX)
4645+ II = BC% II
4646+ JJ = BC% JJ
4647+ KK = BC% KK
4648+ IOR = BC% IOR
4649+ NOM = EWC% NOM
4650+ OM = > OMESH(NOM)
4651+ M2 = > MESHES(NOM)
4652+
4653+ DA_OTHER = 0._EB
4654+
4655+ SELECT CASE (ABS (IOR))
4656+ CASE (1 )
4657+ DO KKO= EWC% KKO_MIN,EWC% KKO_MAX
4658+ DO JJO= EWC% JJO_MIN,EWC% JJO_MAX
4659+ DO IIO= EWC% IIO_MIN,EWC% IIO_MAX
4660+ DA_OTHER = DA_OTHER + M2% DY(JJO)* M2% DZ(KKO)
4661+ ENDDO
4662+ ENDDO
4663+ ENDDO
4664+ CASE (2 )
4665+ DO KKO= EWC% KKO_MIN,EWC% KKO_MAX
4666+ DO JJO= EWC% JJO_MIN,EWC% JJO_MAX
4667+ DO IIO= EWC% IIO_MIN,EWC% IIO_MAX
4668+ DA_OTHER = DA_OTHER + M2% DX(IIO)* M2% DZ(KKO)
4669+ ENDDO
4670+ ENDDO
4671+ ENDDO
4672+ CASE (3 )
4673+ DO KKO= EWC% KKO_MIN,EWC% KKO_MAX
4674+ DO JJO= EWC% JJO_MIN,EWC% JJO_MAX
4675+ DO IIO= EWC% IIO_MIN,EWC% IIO_MAX
4676+ DA_OTHER = DA_OTHER + M2% DX(IIO)* M2% DY(JJO)
4677+ ENDDO
4678+ ENDDO
4679+ ENDDO
4680+ END SELECT
4681+
4682+ SELECT CASE (IOR)
4683+
4684+ CASE ( 1 )
4685+
4686+ FVX_OTHER = 0._EB
4687+ DO KKO= EWC% KKO_MIN,EWC% KKO_MAX
4688+ DO JJO= EWC% JJO_MIN,EWC% JJO_MAX
4689+ DO IIO= EWC% IIO_MIN,EWC% IIO_MAX
4690+ FVX_OTHER = FVX_OTHER + OM% FVX_D(IIO,JJO,KKO)* M2% DY(JJO)* M2% DZ(KKO)/ DA_OTHER
4691+ ENDDO
4692+ ENDDO
4693+ ENDDO
4694+ FVX_D(0 ,JJ,KK) = FVX_D(0 ,JJ,KK) + FVX_OTHER
4695+
4696+ CASE (- 1 )
4697+
4698+ FVX_OTHER = 0._EB
4699+ DO KKO= EWC% KKO_MIN,EWC% KKO_MAX
4700+ DO JJO= EWC% JJO_MIN,EWC% JJO_MAX
4701+ DO IIO= EWC% IIO_MIN,EWC% IIO_MAX
4702+ FVX_OTHER = FVX_OTHER + OM% FVX_D(IIO-1 ,JJO,KKO)* M2% DY(JJO)* M2% DZ(KKO)/ DA_OTHER
4703+ ENDDO
4704+ ENDDO
4705+ ENDDO
4706+ FVX_D(IBAR,JJ,KK) = FVX_D(IBAR,JJ,KK) + FVX_OTHER
4707+
4708+ CASE ( 2 )
4709+
4710+ FVY_OTHER = 0._EB
4711+ DO KKO= EWC% KKO_MIN,EWC% KKO_MAX
4712+ DO JJO= EWC% JJO_MIN,EWC% JJO_MAX
4713+ DO IIO= EWC% IIO_MIN,EWC% IIO_MAX
4714+ FVY_OTHER = FVY_OTHER + OM% FVY_D(IIO,JJO,KKO)* M2% DX(IIO)* M2% DZ(KKO)/ DA_OTHER
4715+ ENDDO
4716+ ENDDO
4717+ ENDDO
4718+ FVY_D(II,0 ,KK) = FVY_D(II,0 ,KK) + FVY_OTHER
4719+
4720+ CASE (- 2 )
4721+
4722+ FVY_OTHER = 0._EB
4723+ DO KKO= EWC% KKO_MIN,EWC% KKO_MAX
4724+ DO JJO= EWC% JJO_MIN,EWC% JJO_MAX
4725+ DO IIO= EWC% IIO_MIN,EWC% IIO_MAX
4726+ FVY_OTHER = FVY_OTHER + OM% FVY_D(IIO,JJO-1 ,KKO)* M2% DX(IIO)* M2% DZ(KKO)/ DA_OTHER
4727+ ENDDO
4728+ ENDDO
4729+ ENDDO
4730+ FVY_D(II,JBAR,KK) = FVY_D(II,JBAR,KK) + FVY_OTHER
4731+
4732+ CASE ( 3 )
4733+
4734+ FVZ_OTHER = 0._EB
4735+ DO KKO= EWC% KKO_MIN,EWC% KKO_MAX
4736+ DO JJO= EWC% JJO_MIN,EWC% JJO_MAX
4737+ DO IIO= EWC% IIO_MIN,EWC% IIO_MAX
4738+ FVZ_OTHER = FVZ_OTHER + OM% FVZ_D(IIO,JJO,KKO)* M2% DX(IIO)* M2% DY(JJO)/ DA_OTHER
4739+ ENDDO
4740+ ENDDO
4741+ ENDDO
4742+ FVZ_D(II,JJ,0 ) = FVZ_D(II,JJ,0 ) + FVZ_OTHER
4743+
4744+ CASE (- 3 )
4745+
4746+ FVZ_OTHER = 0._EB
4747+ DO KKO= EWC% KKO_MIN,EWC% KKO_MAX
4748+ DO JJO= EWC% JJO_MIN,EWC% JJO_MAX
4749+ DO IIO= EWC% IIO_MIN,EWC% IIO_MAX
4750+ FVZ_OTHER = FVZ_OTHER + OM% FVZ_D(IIO,JJO,KKO-1 )* M2% DX(IIO)* M2% DY(JJO)/ DA_OTHER
4751+ ENDDO
4752+ ENDDO
4753+ ENDDO
4754+ FVZ_D(II,JJ,KBAR) = FVZ_D(II,JJ,KBAR) + FVZ_OTHER
4755+
4756+ END SELECT
4757+
4758+ ENDDO EXTERNAL_WALL_LOOP
4759+
4760+ ENDIF
4761+
4762+ FVX = FVX + FVX_D
4763+ FVY = FVY + FVY_D
4764+ FVZ = FVZ + FVZ_D
46214765
46224766END SUBROUTINE PARTICLE_MOMENTUM_TRANSFER
46234767
0 commit comments