@@ -731,7 +731,7 @@ SUBROUTINE SET_CUTCELLS_3D
731731REAL(EB), DIMENSION(MAX_DIM) :: PLNORMAL
732732INTEGER, DIMENSION(MAX_DIM) :: INDX1
733733REAL(EB) :: X1PLN, X3RAY
734- LOGICAL :: TRI_ONPLANE_ONLY, RAYTRACE_X2_ONLY
734+ LOGICAL :: TRI_ONPLANE_ONLY, RAYTRACE_X2_ONLY, MESH_BOUNDARY_FACE
735735LOGICAL, SAVE :: FIRST_CALL = .TRUE.
736736INTEGER :: NCUTFACE_IAXIS, NCUTFACE_JAXIS, NCUTFACE_KAXIS, ICE1, ICF1, NFACE, IERR, &
737737 NCUTEDGE_IBCC, NCUTEDGE_IBCF
@@ -1401,7 +1401,6 @@ SUBROUTINE SET_CUTCELLS_3D
14011401 ENDIF
14021402 ENDDO
14031403
1404-
14051404 IF (ONE_CC_PER_CARTESIAN_CELL) THEN
14061405 ! Here Block all cells that have volume less (or equal) than the first largest cell found.
14071406 DO ICC1=1,MESHES(NM)%N_CUTCELL_MESH+MESHES(NM)%N_GCCUTCELL_MESH
@@ -1540,6 +1539,51 @@ SUBROUTINE SET_CUTCELLS_3D
15401539 K=K+1
15411540 ENDDO
15421541 ENDDO
1542+
1543+ ! Block cells trapped against a mesh boundary whose only same-mesh gas opening is a small cut-face.
1544+ DO ICC1=1,MESHES(NM)%N_CUTCELL_MESH+MESHES(NM)%N_GCCUTCELL_MESH
1545+ CC=>MESHES(NM)%CUT_CELL(ICC1)
1546+ DO J=1,CC%NCELL
1547+ IF(CC%NOADVANCE(J)/=NOT_BLOCKED) CYCLE
1548+ SUM_FACE=0; SUM_CCELL=0; ICF1=0
1549+ DO I=1,CC%CCELEM(1,J)
1550+ IFACE = CC%CCELEM(I+1,J)
1551+ SELECT CASE(CC%FACE_LIST(1,IFACE))
1552+ CASE(CC_FTYPE_CFGAS,CC_FTYPE_RCGAS)
1553+ SIDE = CC%FACE_LIST(2,IFACE)
1554+ X1AXIS = CC%FACE_LIST(3,IFACE)
1555+ IIF = CC%IJK(IAXIS) + ADDI(SIDE,X1AXIS)
1556+ JJF = CC%IJK(JAXIS) + ADDJ(SIDE,X1AXIS)
1557+ KKF = CC%IJK(KAXIS) + ADDK(SIDE,X1AXIS)
1558+ MESH_BOUNDARY_FACE = .FALSE.
1559+ SELECT CASE(X1AXIS)
1560+ CASE(IAXIS); MESH_BOUNDARY_FACE = IIF==0 .OR. IIF==M%IBAR
1561+ CASE(JAXIS); MESH_BOUNDARY_FACE = JJF==0 .OR. JJF==M%JBAR
1562+ CASE(KAXIS); MESH_BOUNDARY_FACE = KKF==0 .OR. KKF==M%KBAR
1563+ END SELECT
1564+ IF(MESH_BOUNDARY_FACE) CYCLE
1565+ SELECT CASE(CC%FACE_LIST(1,IFACE))
1566+ CASE(CC_FTYPE_CFGAS)
1567+ SUM_FACE = SUM_FACE+1
1568+ ICF1 = CC%FACE_LIST(4,IFACE)
1569+ CASE(CC_FTYPE_RCGAS)
1570+ SUM_CCELL = SUM_CCELL+1
1571+ END SELECT
1572+ END SELECT
1573+ ENDDO
1574+ IF(SUM_FACE/=1 .OR. SUM_CCELL>0) CYCLE
1575+ CF => M%CUT_FACE(ICF1)
1576+ IIF=CF%IJK(IAXIS); JJF=CF%IJK(JAXIS); KKF=CF%IJK(KAXIS)
1577+ SELECT CASE(CF%IJK(KAXIS+1))
1578+ CASE(IAXIS); ACRT = DY(JJF)*DZ(KKF)
1579+ CASE(JAXIS); ACRT = DZ(KKF)*DX(IIF)
1580+ CASE(KAXIS); ACRT = DX(IIF)*DY(JJF)
1581+ END SELECT
1582+ IF(SUM(CF%AREA(1:CF%NFACE))/ACRT>=CCVOL_LINK) CYCLE
1583+ CC%NOADVANCE(J)=BLOCKED_CAVITY_CELL
1584+ K=K+1
1585+ ENDDO
1586+ ENDDO
15431587 IF (K>0) THEN
15441588 CALL BLOCK_SMALL_UNLINKED_CUTCELLS(NM,SUM_CCELL)
15451589 IF(SUM_CCELL>0) THEN ! Rebuild incidences and cell linking information:
0 commit comments