@@ -952,8 +952,8 @@ SUBROUTINE INSERT_VOLUMETRIC_PARTICLES
952952INTEGER :: IIP,N_INSERT,I1,J1,K1,I2,J2,K2,N,N_PARTICLES_INSERT,ND,ICC,IFACE,INDCF,I_RAND,N_INSERT_CELLS
953953REAL (EB) :: XC1,XC2,YC1,YC2,ZC1,ZC2,X0,Y0,Z0,RR,RRI,HH,INSERT_VOLUME,INPUT_VOLUME,VOLUME_SPLIT_FACTOR,LP_X,LP_Y,LP_Z,RAMP_FACTOR,&
954954 IN_X1,IN_X2,IN_Y1,IN_Y2,IN_Z1,IN_Z2,IN_X0,IN_Y0,IN_Z0,VCX,VCY,VCZ,MOIST_CONT,FILLED_VOLUME,DIST,DIST_MIN,&
955- P_VECTOR(3 ),P_VECTOR_MIN(3 ),NVEC_MIN(3 )
956- LOGICAL :: CC_VALID
955+ INIT_CELL_VOLUME,SOLID_INIT_VOLUME,GAS_CELL_VOLUME,CELL_VOLUME, P_VECTOR(3 ),P_VECTOR_MIN(3 ),NVEC_MIN(3 )
956+ LOGICAL :: CELL_VALID
957957TYPE (CC_CUTFACE_TYPE), POINTER :: CF
958958
959959IN = > INITIALIZATION(INIT_INDEX)
@@ -1223,17 +1223,17 @@ SUBROUTINE INSERT_VOLUMETRIC_PARTICLES
12231223
12241224 IF (CELL(CELL_INDEX(II,JJ,KK))% SOLID .AND. IN % SHAPE==' LINE' ) CYCLE INSERT_PARTICLE_LOOP
12251225 ! Check for solid inside GEOM
1226- CC_VALID = .TRUE.
1226+ CELL_VALID = .TRUE.
12271227 IF (CC_IBM) THEN
12281228 IF (CCVAR(II,JJ,KK,CC_CGSC)==CC_SOLID) THEN
1229- CC_VALID = .FALSE.
1229+ CELL_VALID = .FALSE.
12301230 ELSE
12311231 INDCF = CCVAR(II,JJ,KK,CC_IDCF)
12321232 ! If closest CFACE has positive dot-product of normal and centroid-particle vector, location is assumed valid
12331233 IF (INDCF> 0 ) THEN
12341234 DIST_MIN= HUGE_EB
12351235 CF = > CUT_FACE(INDCF)
1236- CC_VALID = .FALSE.
1236+ CELL_VALID = .FALSE.
12371237 CFA_LOOP1: DO IFACE= 1 ,CF% NFACE
12381238 P_VECTOR = (/ LP_X- CF% XYZCEN(IAXIS,IFACE), LP_Y- CF% XYZCEN(JAXIS,IFACE), LP_Z- CF% XYZCEN(KAXIS,IFACE)/ )
12391239 DIST = NORM2(P_VECTOR)
@@ -1243,11 +1243,11 @@ SUBROUTINE INSERT_VOLUMETRIC_PARTICLES
12431243 NVEC_MIN = MESHES(NM)% BOUNDARY_COORD(CFACE(CF% CFACE_INDEX(IFACE))% BC_INDEX)% NVEC
12441244 ENDIF
12451245 ENDDO CFA_LOOP1
1246- IF (DOT_PRODUCT (NVEC_MIN,P_VECTOR_MIN) > TWENTY_EPSILON_EB) CC_VALID = .TRUE.
1246+ IF (DOT_PRODUCT (NVEC_MIN,P_VECTOR_MIN) > TWENTY_EPSILON_EB) CELL_VALID = .TRUE.
12471247 ENDIF
12481248 ENDIF
12491249 ENDIF
1250- IF (.NOT. CELL(CELL_INDEX(II,JJ,KK))% SOLID .AND. CC_VALID ) EXIT CHOOSE_XYZ_LOOP
1250+ IF (.NOT. CELL(CELL_INDEX(II,JJ,KK))% SOLID .AND. CELL_VALID ) EXIT CHOOSE_XYZ_LOOP
12511251
12521252 ! If cannot find non-solid grid cell, stop searching
12531253
@@ -1295,8 +1295,8 @@ SUBROUTINE INSERT_VOLUMETRIC_PARTICLES
12951295ELSEIF (IN % N_PARTICLES_PER_CELL > 0 ) THEN TOTAL_OR_PER_CELL
12961296
12971297 N_INSERT = 0
1298- INSERT_VOLUME = 0._EB
12991298 FILLED_VOLUME = 0._EB
1299+ SOLID_INIT_VOLUME = 0._EB
13001300 CALL GET_IJK(MIN (X1+ MICRON,X2),MIN (Y1+ MICRON,Y2),MIN (Z1+ MICRON,Z2),NM,XI,YJ,ZK,I1,J1,K1)
13011301 CALL GET_IJK(MAX (X2- MICRON,X1),MAX (Y2- MICRON,Y1),MAX (Z2- MICRON,Z1),NM,XI,YJ,ZK,I2,J2,K2)
13021302 I2 = MIN (I2,IBAR)
@@ -1310,11 +1310,6 @@ SUBROUTINE INSERT_VOLUMETRIC_PARTICLES
13101310 DO KK= K1,K2
13111311 DO JJ= J1,J2
13121312 II_LOOP: DO II= I1,I2
1313- CC_VALID = .TRUE.
1314- IF (CC_IBM) THEN
1315- IF (CCVAR(II,JJ,KK,CC_CGSC)==CC_SOLID) CC_VALID = .FALSE.
1316- ENDIF
1317- IF (CELL(CELL_INDEX(II,JJ,KK))% SOLID .OR. .NOT. CC_VALID) CYCLE II_LOOP
13181313 IF (IN % SHAPE==' CONE' ) THEN
13191314 IF (((XC(II)- X0)** 2 + (YC(JJ)- Y0)** 2 <(RRI* (1._EB - (ZC(KK)- Z0)/ HH))** 2 ) .OR. &
13201315 ((XC(II)- X0)** 2 + (YC(JJ)- Y0)** 2 >(RR* (1._EB - (ZC(KK)- Z0)/ HH))** 2 )) CYCLE II_LOOP
@@ -1323,23 +1318,30 @@ SUBROUTINE INSERT_VOLUMETRIC_PARTICLES
13231318 IF (((XC(II)- X0)** 2 + (YC(JJ)- Y0)** 2 < RRI** 2 ) .OR. &
13241319 ((XC(II)- X0)** 2 + (YC(JJ)- Y0)** 2 > RR** 2 )) CYCLE II_LOOP
13251320 ENDIF
1326- ! If local XB intersects with cutcell, estimate this intersection volume
1327- VCX = ( MIN (X(II),IN_X2) - MAX (X(II -1 ),IN_X1))
1328- VCY = ( MIN (Y(JJ),IN_Y2) - MAX (Y(JJ -1 ),IN_Y1) )
1329- VCZ = ( MIN (Z(KK),IN_Z2) - MAX (Z(KK -1 ),IN_Z1))
1321+ ! Exclude overlap volume of INIT and solid regions when calculating PWT
1322+ ICC = 0
1323+ CELL_VOLUME = DX(II) * DY(JJ) * DZ(KK )
1324+ CELL_VALID = .NOT. CELL(CELL_INDEX(II,JJ,KK)) % SOLID
13301325 IF (CC_IBM) THEN
1326+ IF (CCVAR(II,JJ,KK,CC_CGSC)==CC_SOLID) CELL_VALID = .FALSE.
13311327 ICC = CCVAR(II,JJ,KK,CC_IDCC)
1332- ! Approximate intersection as min of the two volumes
1333- IF (ICC> 0 ) THEN
1334- INSERT_VOLUME = INSERT_VOLUME + MIN (VCX* VCY* VCZ,SUM (CUT_CELL(ICC)% VOLUME(:)))
1335- FILLED_VOLUME = FILLED_VOLUME + SUM (CUT_CELL(ICC)% VOLUME(:))
1336- ELSE
1337- INSERT_VOLUME = INSERT_VOLUME + VCX* VCY* VCZ
1338- FILLED_VOLUME = FILLED_VOLUME + DX(II)* DY(JJ)* DZ(KK)
1339- ENDIF
1328+ ENDIF
1329+ IF (.NOT. CELL_VALID .OR. ICC> 0 ) THEN
1330+ VCX = MIN (X(II),IN_X2)- MAX (X(II-1 ),IN_X1)
1331+ VCY = MIN (Y(JJ),IN_Y2)- MAX (Y(JJ-1 ),IN_Y1)
1332+ VCZ = MIN (Z(KK),IN_Z2)- MAX (Z(KK-1 ),IN_Z1)
1333+ INIT_CELL_VOLUME = VCX* VCY* VCZ
1334+ ENDIF
1335+ IF (.NOT. CELL_VALID) THEN
1336+ SOLID_INIT_VOLUME = SOLID_INIT_VOLUME + INIT_CELL_VOLUME
1337+ CYCLE II_LOOP
1338+ ENDIF
1339+ IF (ICC> 0 ) THEN
1340+ GAS_CELL_VOLUME = SUM (CUT_CELL(ICC)% VOLUME(:))
1341+ SOLID_INIT_VOLUME = SOLID_INIT_VOLUME + INIT_CELL_VOLUME* MAX (0._EB ,1._EB - GAS_CELL_VOLUME/ CELL_VOLUME)
1342+ FILLED_VOLUME = FILLED_VOLUME + GAS_CELL_VOLUME
13401343 ELSE
1341- INSERT_VOLUME = INSERT_VOLUME + VCX* VCY* VCZ
1342- FILLED_VOLUME = FILLED_VOLUME + DX(II)* DY(JJ)* DZ(KK)
1344+ FILLED_VOLUME = FILLED_VOLUME + CELL_VOLUME
13431345 ENDIF
13441346 N_INSERT_CELLS = N_INSERT_CELLS + 1
13451347
@@ -1441,6 +1443,7 @@ SUBROUTINE INSERT_VOLUMETRIC_PARTICLES
14411443 ENDDO II_LOOP
14421444 ENDDO
14431445 ENDDO
1446+ INSERT_VOLUME = MAX (0._EB ,INSERT_VOLUME- SOLID_INIT_VOLUME)
14441447
14451448ENDIF TOTAL_OR_PER_CELL
14461449
0 commit comments