Skip to content

Commit 83a5533

Browse files
committed
Merge remote-tracking branch 'firemodels/master' into FireX
2 parents 3ef804f + 8f3c0f3 commit 83a5533

5 files changed

Lines changed: 301 additions & 85 deletions

File tree

Build/makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ soot.o : prec.o mesh.o cons.o func.o turb.o
469469
pois.o : prec.o cons.o
470470
geom.o : gsmv.o func.o prec.o cons.o type.o mesh.o turb.o imkl.o data.o
471471
ccib.o : gsmv.o func.o prec.o cons.o type.o mesh.o turb.o geom.o
472-
radi.o : func.o prec.o cons.o type.o mesh.o rcal.o geom.o
472+
radi.o : func.o prec.o cons.o type.o mesh.o rcal.o geom.o ccib.o
473473
part.o : func.o prec.o cons.o type.o mesh.o devc.o data.o geom.o soot.o ccib.o
474474
vege.o : func.o prec.o cons.o type.o mesh.o geom.o
475475
ctrl.o : prec.o cons.o type.o mesh.o func.o
@@ -504,7 +504,7 @@ soot.obj : prec.obj mesh.obj cons.obj func.obj turb.obj
504504
pois.obj : prec.obj cons.obj
505505
geom.obj : gsmv.obj func.obj prec.obj cons.obj type.obj mesh.obj turb.obj imkl.obj data.obj
506506
ccib.obj : gsmv.obj func.obj prec.obj cons.obj type.obj mesh.obj turb.obj geom.obj
507-
radi.obj : func.obj prec.obj cons.obj type.obj mesh.obj rcal.obj geom.obj
507+
radi.obj : func.obj prec.obj cons.obj type.obj mesh.obj rcal.obj geom.obj ccib.obj
508508
part.obj : func.obj prec.obj cons.obj type.obj mesh.obj devc.obj data.obj geom.obj soot.obj ccib.obj
509509
vege.obj : func.obj prec.obj cons.obj type.obj mesh.obj geom.obj
510510
ctrl.obj : prec.obj cons.obj type.obj mesh.obj func.obj

Source/ccib.f90

Lines changed: 186 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ MODULE CC_SCALARS
132132
GET_CFACE_OPEN_BC_COEF,GET_FN_DIVERGENCE_CUTCELL,GET_OPENBC_TANGENTIAL_CUTFACE_VEL,&
133133
GET_CUTCELL_DDDT,GET_H_CUTFACES,GET_H_MATRIX_CC,GET_H_GUARD_CUTCELL,GET_CRTCFCC_INT_STENCILS,GET_RCFACES_H, &
134134
GET_CC_MATRIXGRAPH_H,GET_CC_IROW,GET_CC_UNKH,GET_CUTCELL_HP, GET_LINKED_FV, GET_PRES_CFACE_BCS, &
135-
GET_PRES_CFACE, GET_PRES_CFACE_TEST, GET_UVWGAS_CFACE, GET_MUDNS_CFACE, GET_BOUNDFACE_GEOM_INFO_H, &
135+
GET_PRES_CFACE, GET_PRES_CFACE_TEST, GET_UVWGAS_CFACE, GET_CFACE_RAD_NVEC, GET_MUDNS_CFACE, &
136+
GET_BOUNDFACE_GEOM_INFO_H, &
136137
GET_FH_FROM_PRHS_AND_BCS,GET_LINKED_VELOCITIES, &
137138
FINISH_CC, INIT_CUTCELL_DATA,MESH_CC_EXCHANGE,NUMBER_UNKH_CUTCELLS,&
138139
ROTATED_CUBE_ANN_SOLN,ROTATED_CUBE_VELOCITY_FLUX,ROTATED_CUBE_RHS_ZZ,&
@@ -154,11 +155,11 @@ MODULE CC_SCALARS
154155
SUBROUTINE INITIALIZE_BACK_CFACE_EXCHANGE
155156

156157
INTEGER :: NM,NOM,IQ,NQ,IIO,JJO,KKO,NOM2,ICFACE,SURF_B,FRONT,OD_INDEX,N_RESOLVED,N_GLOBAL,IP,K,P,TOTAL_SEND,TOTAL_RECV,IERR
157-
REAL(EB) :: POS(3)
158+
REAL(EB) :: POS(3),NBACK(3)
158159
INTEGER, ALLOCATABLE :: SEND_CNT(:),RECV_CNT(:),SDISPL(:),RDISPL(:),CNT3_S(:),CNT3_R(:),DSP3_S(:),DSP3_R(:),COUNTER(:)
159160
INTEGER, ALLOCATABLE :: SEND_NOM(:),RECV_NOM(:),REPLY_IDX(:),REPLY_SURF(:),REPLY_DIM(:), &
160161
REPLY_BACK(:),REPLY_BSURF(:),REPLY_BDIM(:),MAP_NM(:),MAP_FRONT(:)
161-
REAL(EB), ALLOCATABLE :: SEND_POS(:),RECV_POS(:)
162+
REAL(EB), ALLOCATABLE :: SEND_POS(:),RECV_POS(:),SEND_NBACK(:),RECV_NBACK(:)
162163

163164
N_RESOLVED = 0
164165
ALLOCATE(SEND_CNT(0:N_MPI_PROCESSES-1)) ; SEND_CNT = 0
@@ -169,10 +170,11 @@ SUBROUTINE INITIALIZE_BACK_CFACE_EXCHANGE
169170
IF (NQ==0) CYCLE
170171
IF (PROCESS(NOM)==MY_RANK) THEN ! Owner is on this process: resolve directly.
171172
DO IQ=1,NQ
172-
POS(1:3) = MESHES(NM)%OMESH(NOM)%CFACE_QUERY_XYZ(IAXIS:KAXIS,IQ)
173+
POS(1:3) = MESHES(NM)%OMESH(NOM)%CFACE_QUERY_XYZ(IAXIS:KAXIS,IQ)
174+
NBACK(1:3) = MESHES(NM)%OMESH(NOM)%CFACE_QUERY_NBACK(IAXIS:KAXIS,IQ)
173175
CALL SEARCH_OTHER_MESHES(POS(1),POS(2),POS(3),NOM2,IIO,JJO,KKO)
174176
IF (NOM2/=NOM) CYCLE
175-
ICFACE = GET_BACK_CFACE_INDEX(NOM,IIO,JJO,KKO,POS,-1,-1)
177+
ICFACE = GET_BACK_CFACE_INDEX(NOM,IIO,JJO,KKO,POS,-1,-1,NBACK)
176178
IF (ICFACE>0) THEN
177179
FRONT = MESHES(NM)%OMESH(NOM)%CFACE_QUERY_FRONT(IQ)
178180
OD_INDEX = MESHES(NM)%CFACE(FRONT)%OD_INDEX
@@ -206,10 +208,12 @@ SUBROUTINE INITIALIZE_BACK_CFACE_EXCHANGE
206208
TOTAL_SEND = SDISPL(N_MPI_PROCESSES-1) + SEND_CNT(N_MPI_PROCESSES-1)
207209
TOTAL_RECV = RDISPL(N_MPI_PROCESSES-1) + RECV_CNT(N_MPI_PROCESSES-1)
208210
CNT3_S = 3*SEND_CNT ; CNT3_R = 3*RECV_CNT ; DSP3_S = 3*SDISPL ; DSP3_R = 3*RDISPL
209-
ALLOCATE(SEND_NOM(MAX(TOTAL_SEND,1)),SEND_POS(MAX(3*TOTAL_SEND,1)),MAP_NM(MAX(TOTAL_SEND,1)), &
211+
ALLOCATE(SEND_NOM(MAX(TOTAL_SEND,1)),SEND_POS(MAX(3*TOTAL_SEND,1)),SEND_NBACK(MAX(3*TOTAL_SEND,1)), &
212+
MAP_NM(MAX(TOTAL_SEND,1)), &
210213
MAP_FRONT(MAX(TOTAL_SEND,1)),REPLY_BACK(MAX(TOTAL_SEND,1)),REPLY_BSURF(MAX(TOTAL_SEND,1)), &
211214
REPLY_BDIM(MAX(TOTAL_SEND,1)))
212-
ALLOCATE(RECV_NOM(MAX(TOTAL_RECV,1)),RECV_POS(MAX(3*TOTAL_RECV,1)),REPLY_IDX(MAX(TOTAL_RECV,1)), &
215+
ALLOCATE(RECV_NOM(MAX(TOTAL_RECV,1)),RECV_POS(MAX(3*TOTAL_RECV,1)),RECV_NBACK(MAX(3*TOTAL_RECV,1)), &
216+
REPLY_IDX(MAX(TOTAL_RECV,1)), &
213217
REPLY_SURF(MAX(TOTAL_RECV,1)),REPLY_DIM(MAX(TOTAL_RECV,1)))
214218
ALLOCATE(COUNTER(0:N_MPI_PROCESSES-1)) ; COUNTER = SDISPL
215219

@@ -224,24 +228,28 @@ SUBROUTINE INITIALIZE_BACK_CFACE_EXCHANGE
224228
IP = PROCESS(NOM)
225229
DO IQ=1,NQ
226230
P = COUNTER(IP) + 1 ; COUNTER(IP) = P
227-
SEND_NOM(P) = NOM
228-
SEND_POS(3*P-2:3*P) = MESHES(NM)%OMESH(NOM)%CFACE_QUERY_XYZ(IAXIS:KAXIS,IQ)
229-
MAP_NM(P) = NM
230-
MAP_FRONT(P) = MESHES(NM)%OMESH(NOM)%CFACE_QUERY_FRONT(IQ)
231+
SEND_NOM(P) = NOM
232+
SEND_POS(3*P-2:3*P) = MESHES(NM)%OMESH(NOM)%CFACE_QUERY_XYZ(IAXIS:KAXIS,IQ)
233+
SEND_NBACK(3*P-2:3*P) = MESHES(NM)%OMESH(NOM)%CFACE_QUERY_NBACK(IAXIS:KAXIS,IQ)
234+
MAP_NM(P) = NM
235+
MAP_FRONT(P) = MESHES(NM)%OMESH(NOM)%CFACE_QUERY_FRONT(IQ)
231236
ENDDO
232237
ENDDO
233238
ENDDO
234239
CALL MPI_ALLTOALLV(SEND_NOM,SEND_CNT,SDISPL,MPI_INTEGER,RECV_NOM,RECV_CNT,RDISPL,MPI_INTEGER,MPI_COMM_WORLD,IERR)
235240
CALL MPI_ALLTOALLV(SEND_POS,CNT3_S,DSP3_S,MPI_DOUBLE_PRECISION,RECV_POS,CNT3_R,DSP3_R,MPI_DOUBLE_PRECISION,&
236241
MPI_COMM_WORLD,IERR)
242+
CALL MPI_ALLTOALLV(SEND_NBACK,CNT3_S,DSP3_S,MPI_DOUBLE_PRECISION,RECV_NBACK,CNT3_R,DSP3_R,MPI_DOUBLE_PRECISION,&
243+
MPI_COMM_WORLD,IERR)
237244

238245
! Owner side: resolve each received query against its local cut-face data.
239246
DO K=1,TOTAL_RECV
240247
NOM = RECV_NOM(K)
241-
POS(1:3) = RECV_POS(3*K-2:3*K)
248+
POS(1:3) = RECV_POS(3*K-2:3*K)
249+
NBACK(1:3) = RECV_NBACK(3*K-2:3*K)
242250
CALL SEARCH_OTHER_MESHES(POS(1),POS(2),POS(3),NOM2,IIO,JJO,KKO)
243251
ICFACE = 0 ; SURF_B = 0
244-
IF (NOM2==NOM) ICFACE = GET_BACK_CFACE_INDEX(NOM,IIO,JJO,KKO,POS,-1,-1)
252+
IF (NOM2==NOM) ICFACE = GET_BACK_CFACE_INDEX(NOM,IIO,JJO,KKO,POS,-1,-1,NBACK)
245253
IF (ICFACE>0) SURF_B = MESHES(NOM)%CFACE(ICFACE)%SURF_INDEX
246254
REPLY_IDX(K) = ICFACE
247255
REPLY_SURF(K) = SURF_B
@@ -304,8 +312,8 @@ SUBROUTINE INITIALIZE_BACK_CFACE_EXCHANGE
304312
CALL MPI_ALLREDUCE(MPI_IN_PLACE,N_GLOBAL,1,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,IERR)
305313
IF (N_GLOBAL>0) CF_BACK_EXCHANGE_ACTIVE = .TRUE.
306314

307-
DEALLOCATE(RECV_CNT,SDISPL,RDISPL,CNT3_S,CNT3_R,DSP3_S,DSP3_R,COUNTER,SEND_NOM,SEND_POS,MAP_NM,MAP_FRONT, &
308-
REPLY_BACK,REPLY_BSURF,REPLY_BDIM,RECV_NOM,RECV_POS,REPLY_IDX,REPLY_SURF,REPLY_DIM)
315+
DEALLOCATE(RECV_CNT,SDISPL,RDISPL,CNT3_S,CNT3_R,DSP3_S,DSP3_R,COUNTER,SEND_NOM,SEND_POS,SEND_NBACK,MAP_NM,MAP_FRONT, &
316+
REPLY_BACK,REPLY_BSURF,REPLY_BDIM,RECV_NOM,RECV_POS,RECV_NBACK,REPLY_IDX,REPLY_SURF,REPLY_DIM)
309317

310318
ENDIF CROSS_PROCESS_IF
311319
DEALLOCATE(SEND_CNT)
@@ -622,7 +630,7 @@ SUBROUTINE GET_H_GUARD_CUTCELL(IPZ,HP)
622630
ELSE; D_EXT = ABS(MESHES(NOM)%ZC(KKO) - XFN)
623631
ENDIF
624632
END SELECT
625-
! Refinement seam only: match GET_H_MATRIX_CC sub-face selection (skip solid/no-unknown partners).
633+
! Refinement seam only: match GET_H_MATRIX_CC sub-face selection (skip solid/no-unknown partners).
626634
IF (WC%BOUNDARY_TYPE == INTERPOLATED_BOUNDARY) THEN
627635
IF (ALLOCATED(OM%MUNKH)) THEN; IF (OM%MUNKH(IIO,JJO,KKO) < 1) CYCLE; ENDIF
628636
IF (MESHES(NOM)%FCVAR(IIO+ISHF(IAXIS),JJO+ISHF(JAXIS),KKO+ISHF(KAXIS),CC_FGSC,X1AXIS) == CC_SOLID) CYCLE
@@ -6756,6 +6764,20 @@ SUBROUTINE GET_UVWGAS_CFACE(U_CELL,V_CELL,W_CELL,IND1,IND2,UP,VP,WP,PREDFCT)
67566764
RETURN
67576765
END SUBROUTINE GET_UVWGAS_CFACE
67586766

6767+
! ----------------------------------- GET_CFACE_RAD_NVEC ---------------------------------
6768+
FUNCTION GET_CFACE_RAD_NVEC(CFA) RESULT(NVEC)
6769+
6770+
TYPE(CFACE_TYPE), INTENT(IN) :: CFA
6771+
REAL(EB) :: NVEC(IAXIS:KAXIS)
6772+
INTEGER :: IBOD,IWSEL
6773+
6774+
NVEC(IAXIS:KAXIS) = BOUNDARY_COORD(CFA%BC_INDEX)%NVEC(IAXIS:KAXIS)
6775+
IBOD = CUT_FACE(CFA%CUT_FACE_IND1)%BODTRI(1,CFA%CUT_FACE_IND2)
6776+
IWSEL= CUT_FACE(CFA%CUT_FACE_IND1)%BODTRI(2,CFA%CUT_FACE_IND2)
6777+
IF (IBOD>=1 .AND. IWSEL>=1) NVEC(IAXIS:KAXIS) = GEOMETRY(IBOD)%FACES_NORMAL(IAXIS:KAXIS,IWSEL)
6778+
6779+
END FUNCTION GET_CFACE_RAD_NVEC
6780+
67596781
! ----------------------------------- GET_PRES_CFACE ---------------------------------
67606782

67616783
SUBROUTINE GET_PRES_CFACE(PRESS,IND1,IND2,CFA)
@@ -8936,7 +8958,7 @@ SUBROUTINE CCSPECIES_ADVECTION
89368958
! region and adds components to thermodynamic divergence.
89378959

89388960
! Local Variables:
8939-
REAL(EB) :: RHO_Z_PV(-2:1), VELC, FN_ZZ, ZZ_GET_N
8961+
REAL(EB) :: RHO_Z_PV(-2:1), VELC, FN_ZZ, FN_ZZ_USE, ZZ_GET_N
89408962
REAL(EB), PARAMETER :: SGNFCT=1._EB
89418963
INTEGER :: IOR, ICFA
89428964
TYPE(BOUNDARY_PROP1_TYPE), POINTER :: B1
@@ -9127,6 +9149,12 @@ SUBROUTINE CCSPECIES_ADVECTION
91279149
CASE(INTERPOLATED_BOUNDARY)
91289150
VELC = UVW_SAVE(IW)
91299151
END SELECT
9152+
! For a cut-cell against a mesh interface,flux-limited value built across the interface.
9153+
IF ((WC%BOUNDARY_TYPE==INTERPOLATED_BOUNDARY .OR. WC%BOUNDARY_TYPE==PERIODIC_BOUNDARY) .AND. &
9154+
RCF%CELL_LIST(1,ISIDE+2)==CC_FTYPE_CFGAS) THEN
9155+
ICC = RCF%CELL_LIST(2,ISIDE+2); JCC = RCF%CELL_LIST(3,ISIDE+2)
9156+
CALL GET_CCIFACE_RHOZZ_LIM(X1AXIS,I,J,K,ISIDE+2,ICC,JCC,N,VELC,PRFCT,FN_ZZ)
9157+
ENDIF
91309158
SELECT CASE(RCF%CELL_LIST(1,ISIDE+2))
91319159
CASE(CC_FTYPE_RGGAS)
91329160
SELECT CASE(X1AXIS)
@@ -9342,8 +9370,12 @@ SUBROUTINE CCSPECIES_ADVECTION
93429370
RHOPV(ISIDE) = PRFCT *CUT_CELL(ICC)%RHO(JCC) + (1._EB-PRFCT) *CUT_CELL(ICC)%RHOS(JCC)
93439371
ZZ_GET_N = PRFCT*CUT_CELL(ICC)%ZZ(N,JCC) + (1._EB-PRFCT)*CUT_CELL(ICC)%ZZS(N,JCC)
93449372
RHO_Z_PV(ISIDE) = RHOPV(ISIDE)*ZZ_GET_N
9373+
! At a mesh interface use the flux-limited bar{rho*Z} across the interface.
9374+
FN_ZZ_USE = FN_ZZ
9375+
IF (WC%BOUNDARY_TYPE==INTERPOLATED_BOUNDARY .OR. WC%BOUNDARY_TYPE==PERIODIC_BOUNDARY) &
9376+
CALL GET_CCIFACE_RHOZZ_LIM(X1AXIS,I,J,K,ISIDE+2,ICC,JCC,N,VELC,PRFCT,FN_ZZ_USE)
93459377
CUT_CELL(ICC)%U_DOT_DEL_RHO_Z_VOL(N,JCC) = CUT_CELL(ICC)%U_DOT_DEL_RHO_Z_VOL(N,JCC) + &
9346-
FCT*SGNFCT*(FN_ZZ-RHO_Z_PV(ISIDE))*VELC*AF
9378+
FCT*SGNFCT*(FN_ZZ_USE-RHO_Z_PV(ISIDE))*VELC*AF
93479379
ENDIF
93489380
ENDDO ! IFACE
93499381

@@ -9473,7 +9505,7 @@ SUBROUTINE CCENTHALPY_ADVECTION
94739505

94749506

94759507
! Local Variables:
9476-
REAL(EB) :: RHO_H_S_PV(-2:1), VELC, VELC2, FN_H_S, TMP_F_GAS
9508+
REAL(EB) :: RHO_H_S_PV(-2:1), VELC, VELC2, FN_H_S, FN_H_S_USE, TMP_F_GAS
94779509
INTEGER :: IOR, ICFA
94789510
TYPE(BOUNDARY_PROP1_TYPE), POINTER :: B1
94799511
TYPE(CC_REGFACEZ_TYPE), POINTER, DIMENSION(:) :: REGFACE_Z
@@ -10070,6 +10102,12 @@ SUBROUTINE CCENTHALPY_ADVECTION
1007010102
ZZ_GET(1:N_TRACKED_SPECIES) = B1%ZZ_F(1:N_TRACKED_SPECIES)
1007110103
CALL GET_SENSIBLE_ENTHALPY(ZZ_GET,H_S,TMP_F_GAS)
1007210104
FN_H_S = B1%RHO_F*H_S ! bar{rho*hs}
10105+
! At a mesh interface with a cut-cell, use the flux-limited bar{rho*h_s} built across the interface.
10106+
IF ((WC%BOUNDARY_TYPE==INTERPOLATED_BOUNDARY .OR. WC%BOUNDARY_TYPE==PERIODIC_BOUNDARY) .AND. &
10107+
RC_FACE(IFACE)%CELL_LIST(1,ISIDE+2)==CC_FTYPE_CFGAS) THEN
10108+
ICC = RC_FACE(IFACE)%CELL_LIST(2,ISIDE+2); JCC = RC_FACE(IFACE)%CELL_LIST(3,ISIDE+2)
10109+
CALL GET_CCIFACE_RHOHS_LIM(X1AXIS,I,J,K,ISIDE+2,ICC,JCC,VELC,PRFCT,FN_H_S)
10110+
ENDIF
1007310111
! Finally add to Div:
1007410112
SELECT CASE(RC_FACE(IFACE)%CELL_LIST(1,ISIDE+2))
1007510113
CASE(CC_FTYPE_RGGAS) ! Regular cell
@@ -10133,7 +10171,13 @@ SUBROUTINE CCENTHALPY_ADVECTION
1013310171
(1._EB-PRFCT)*CUT_CELL(ICC)%ZZS(1:N_TRACKED_SPECIES,JCC)
1013410172
CALL GET_SENSIBLE_ENTHALPY(ZZ_GET,H_S,TMPV(ISIDE))
1013510173
RHO_H_S_PV(ISIDE) = RHOPV(ISIDE)*H_S
10136-
CUT_CELL(ICC)%DVOL(JCC)=CUT_CELL(ICC)%DVOL(JCC)+FCT*(-1._EB)*(FN_H_S-RHO_H_S_PV(ISIDE))*VELC*AF ! +ve or -ve dot
10174+
! At a mesh interface use the flux-limited bar{rho*h_s} built across the interface.
10175+
FN_H_S_USE = FN_H_S
10176+
IF (WC%BOUNDARY_TYPE==INTERPOLATED_BOUNDARY .OR. WC%BOUNDARY_TYPE==PERIODIC_BOUNDARY) &
10177+
CALL GET_CCIFACE_RHOHS_LIM(CUT_FACE(ICF)%IJK(KAXIS+1), &
10178+
CUT_FACE(ICF)%IJK(IAXIS),CUT_FACE(ICF)%IJK(JAXIS),CUT_FACE(ICF)%IJK(KAXIS), &
10179+
ISIDE+2,ICC,JCC,VELC,PRFCT,FN_H_S_USE)
10180+
CUT_CELL(ICC)%DVOL(JCC)=CUT_CELL(ICC)%DVOL(JCC)+FCT*(-1._EB)*(FN_H_S_USE-RHO_H_S_PV(ISIDE))*VELC*AF ! +ve or -ve dot
1013710181
END SELECT
1013810182
ENDDO ! IFACE
1013910183
ENDDO ! ICF
@@ -13449,6 +13493,112 @@ SUBROUTINE GET_RHOZZVECTOR_SCALAR_3D(N)
1344913493
END SUBROUTINE GET_RHOZZVECTOR_SCALAR_3D
1345013494

1345113495

13496+
! ----------------------------- GET_CCIFACE_RHOZZ_LIM --------------------------
13497+
! Flux-limited bar{rho*Z_N} face value at an INTERPOLATED / PERIODIC-boundary gasphase cut-face.
13498+
SUBROUTINE GET_CCIFACE_RHOZZ_LIM(X1AXIS,IFC,JFC,KFC,ILOC,ICC,JCC,N,VELC,PRFCT,FN_ZZ)
13499+
13500+
INTEGER, INTENT(IN) :: X1AXIS,IFC,JFC,KFC,ILOC,ICC,JCC,N
13501+
REAL(EB), INTENT(IN) :: VELC,PRFCT
13502+
REAL(EB), INTENT(OUT):: FN_ZZ
13503+
INTEGER :: DD,ILSD,ILOUT,II,JJ,KK,SHFT(3)
13504+
REAL(EB) :: RZPV(-2:1)
13505+
REAL(EB), POINTER, DIMENSION(:,:,:) :: RHOP
13506+
REAL(EB), POINTER, DIMENSION(:,:,:,:) :: ZZP
13507+
REAL(EB), TARGET :: ZT(0:3,1,1),UT(1,1,1),FT(1,1,1)
13508+
REAL(EB), POINTER, DIMENSION(:,:,:) :: ZTP,UTP,FTP
13509+
13510+
IF (PRFCT > 0.5_EB) THEN; RHOP=>RHO ; ZZP=>ZZ ! PRFCT=1 -> n-level fields
13511+
ELSE ; RHOP=>RHOS; ZZP=>ZZS ! PRFCT=0 -> star fields
13512+
ENDIF
13513+
13514+
SELECT CASE(X1AXIS)
13515+
CASE(IAXIS); SHFT=(/1,0,0/)
13516+
CASE(JAXIS); SHFT=(/0,1,0/)
13517+
CASE(KAXIS); SHFT=(/0,0,1/)
13518+
END SELECT
13519+
13520+
! Cartesian rho*Z on the four stencil cells: cell(DD) = base_face_cell + (1+DD) along the face axis.
13521+
DO DD=-2,1
13522+
II=IFC+(1+DD)*SHFT(1); JJ=JFC+(1+DD)*SHFT(2); KK=KFC+(1+DD)*SHFT(3)
13523+
RZPV(DD)=RHOP(II,JJ,KK)*ZZP(II,JJ,KK,N)
13524+
ENDDO
13525+
13526+
! Override the local immediate cut-cell (side ILOC) with the detailed cut-cell rho*Z:
13527+
ILSD = ILOC-2 ! LOW_IND(1) -> -1 ; HIGH_IND(2) -> 0
13528+
RZPV(ILSD) = (PRFCT*CUT_CELL(ICC)%RHO(JCC) +(1._EB-PRFCT)*CUT_CELL(ICC)%RHOS(JCC)) * &
13529+
(PRFCT*CUT_CELL(ICC)%ZZ(N,JCC)+(1._EB-PRFCT)*CUT_CELL(ICC)%ZZS(N,JCC))
13530+
13531+
! Solid fall-back only for the local-outer stencil cell (the ghost-outer cell is remote gas):
13532+
IF (ILOC==LOW_IND) THEN; ILOUT=-2; ELSE; ILOUT=1; ENDIF
13533+
II=IFC+(1+ILOUT)*SHFT(1); JJ=JFC+(1+ILOUT)*SHFT(2); KK=KFC+(1+ILOUT)*SHFT(3)
13534+
IF (II>=1.AND.II<=IBAR .AND. JJ>=1.AND.JJ<=JBAR .AND. KK>=1.AND.KK<=KBAR) THEN
13535+
IF (CELL(CELL_INDEX(II,JJ,KK))%SOLID .OR. CCVAR(II,JJ,KK,CC_CGSC)==CC_SOLID) RZPV(ILOUT)=RZPV(ILSD)
13536+
ENDIF
13537+
ZT(0:3,1,1)=RZPV(-2:1); UT(1,1,1)=VELC
13538+
ZTP=>ZT; UTP=>UT; FTP=>FT
13539+
CALL GET_SCALAR_FACE_VALUE(UTP,ZTP,FTP,1,1,1,1,1,1,1,I_FLUX_LIMITER)
13540+
FN_ZZ=FT(1,1,1)
13541+
13542+
RETURN
13543+
END SUBROUTINE GET_CCIFACE_RHOZZ_LIM
13544+
13545+
13546+
! ----------------------------- GET_CCIFACE_RHOHS_LIM --------------------------
13547+
! Enthalpy counterpart of GET_CCIFACE_RHOZZ_LIM: flux-limited bar{rho*h_s} face value at an
13548+
! INTERPOLATED / PERIODIC-boundary gasphase cut-face.
13549+
SUBROUTINE GET_CCIFACE_RHOHS_LIM(X1AXIS,IFC,JFC,KFC,ILOC,ICC,JCC,VELC,PRFCT,FN_H_S)
13550+
USE PHYSICAL_FUNCTIONS, ONLY: GET_SENSIBLE_ENTHALPY
13551+
13552+
INTEGER, INTENT(IN) :: X1AXIS,IFC,JFC,KFC,ILOC,ICC,JCC
13553+
REAL(EB), INTENT(IN) :: VELC,PRFCT
13554+
REAL(EB), INTENT(OUT):: FN_H_S
13555+
INTEGER :: DD,ILSD,ILOUT,II,JJ,KK,SHFT(3)
13556+
REAL(EB) :: RHS_PV(-2:1),HS1,ZZ_GET(1:N_TRACKED_SPECIES)
13557+
REAL(EB), POINTER, DIMENSION(:,:,:) :: RHOP
13558+
REAL(EB), POINTER, DIMENSION(:,:,:,:) :: ZZP
13559+
REAL(EB), TARGET :: ZT(0:3,1,1),UT(1,1,1),FT(1,1,1)
13560+
REAL(EB), POINTER, DIMENSION(:,:,:) :: ZTP,UTP,FTP
13561+
13562+
IF (PRFCT > 0.5_EB) THEN; RHOP=>RHO ; ZZP=>ZZ
13563+
ELSE ; RHOP=>RHOS; ZZP=>ZZS
13564+
ENDIF
13565+
13566+
SELECT CASE(X1AXIS)
13567+
CASE(IAXIS); SHFT=(/1,0,0/)
13568+
CASE(JAXIS); SHFT=(/0,1,0/)
13569+
CASE(KAXIS); SHFT=(/0,0,1/)
13570+
END SELECT
13571+
13572+
! Cartesian rho*h_s on the four stencil cells: cell(DD) = base_face_cell + (1+DD) along the axis.
13573+
DO DD=-2,1
13574+
II=IFC+(1+DD)*SHFT(1); JJ=JFC+(1+DD)*SHFT(2); KK=KFC+(1+DD)*SHFT(3)
13575+
ZZ_GET(1:N_TRACKED_SPECIES)=ZZP(II,JJ,KK,1:N_TRACKED_SPECIES)
13576+
CALL GET_SENSIBLE_ENTHALPY(ZZ_GET,HS1,TMP(II,JJ,KK))
13577+
RHS_PV(DD)=RHOP(II,JJ,KK)*HS1
13578+
ENDDO
13579+
13580+
! Override the local immediate cut-cell (side ILOC) with the detailed cut-cell rho*h_s:
13581+
ILSD = ILOC-2
13582+
ZZ_GET(1:N_TRACKED_SPECIES)=PRFCT*CUT_CELL(ICC)%ZZ(1:N_TRACKED_SPECIES,JCC)+ &
13583+
(1._EB-PRFCT)*CUT_CELL(ICC)%ZZS(1:N_TRACKED_SPECIES,JCC)
13584+
CALL GET_SENSIBLE_ENTHALPY(ZZ_GET,HS1,CUT_CELL(ICC)%TMP(JCC))
13585+
RHS_PV(ILSD)=(PRFCT*CUT_CELL(ICC)%RHO(JCC)+(1._EB-PRFCT)*CUT_CELL(ICC)%RHOS(JCC))*HS1
13586+
13587+
! Solid fall-back for the local-outer stencil cell only:
13588+
IF (ILOC==LOW_IND) THEN; ILOUT=-2; ELSE; ILOUT=1; ENDIF
13589+
II=IFC+(1+ILOUT)*SHFT(1); JJ=JFC+(1+ILOUT)*SHFT(2); KK=KFC+(1+ILOUT)*SHFT(3)
13590+
IF (II>=1.AND.II<=IBAR .AND. JJ>=1.AND.JJ<=JBAR .AND. KK>=1.AND.KK<=KBAR) THEN
13591+
IF (CELL(CELL_INDEX(II,JJ,KK))%SOLID .OR. CCVAR(II,JJ,KK,CC_CGSC)==CC_SOLID) RHS_PV(ILOUT)=RHS_PV(ILSD)
13592+
ENDIF
13593+
ZT(0:3,1,1)=RHS_PV(-2:1); UT(1,1,1)=VELC
13594+
ZTP=>ZT; UTP=>UT; FTP=>FT
13595+
CALL GET_SCALAR_FACE_VALUE(UTP,ZTP,FTP,1,1,1,1,1,1,1,I_FLUX_LIMITER)
13596+
FN_H_S=FT(1,1,1)
13597+
13598+
RETURN
13599+
END SUBROUTINE GET_CCIFACE_RHOHS_LIM
13600+
13601+
1345213602
! ------------------------- GET_ADVDIFFVECTOR_SCALAR_3D -------------------------
1345313603

1345413604
SUBROUTINE GET_ADVDIFFVECTOR_SCALAR_3D(N)
@@ -13460,7 +13610,7 @@ SUBROUTINE GET_ADVDIFFVECTOR_SCALAR_3D(N)
1346013610
REAL(EB):: PRFCT
1346113611
INTEGER :: X1AXIS,IFACE,IND(LOW_IND:HIGH_IND),IND_LOC(LOW_IND:HIGH_IND),ICF,IND1,IND2,IOR
1346213612
INTEGER :: LOCROW_1,LOCROW_2,ILOC,IROW,ICC,JCC,IW
13463-
REAL(EB):: AF,VELC,RHO_Z,FN_ZZ,FCT
13613+
REAL(EB):: AF,VELC,RHO_Z,FN_ZZ,FCT,FN_ZZ_USE
1346413614
REAL(EB), POINTER, DIMENSION(:,:,:) :: RHOP,UP,VP,WP
1346513615
REAL(EB), POINTER, DIMENSION(:,:,:,:):: ZZP
1346613616
TYPE(CC_REGFACEZ_TYPE), POINTER, DIMENSION(:) :: REGFACE_Z
@@ -13620,6 +13770,12 @@ SUBROUTINE GET_ADVDIFFVECTOR_SCALAR_3D(N)
1362013770
CASE(INTERPOLATED_BOUNDARY)
1362113771
VELC = UVW_SAVE(IW)
1362213772
END SELECT
13773+
! For a cut-cell against a mesh interface , use the flux-limited bar{rho*Z} built across the interface.
13774+
IF ((WC%BOUNDARY_TYPE==INTERPOLATED_BOUNDARY .OR. WC%BOUNDARY_TYPE==PERIODIC_BOUNDARY) .AND. &
13775+
MESHES(NM)%RC_FACE(IFACE)%CELL_LIST(1,ILOC)==CC_FTYPE_CFGAS) THEN
13776+
ICC = MESHES(NM)%RC_FACE(IFACE)%CELL_LIST(2,ILOC); JCC = MESHES(NM)%RC_FACE(IFACE)%CELL_LIST(3,ILOC)
13777+
CALL GET_CCIFACE_RHOZZ_LIM(X1AXIS,I,J,K,ILOC,ICC,JCC,N,VELC,PRFCT,FN_ZZ)
13778+
ENDIF
1362313779

1362413780
IROW=IND_LOC(ILOC) ! Process Local Unknown number.
1362513781
FCT = REAL(3-2*ILOC,EB)
@@ -13652,7 +13808,15 @@ SUBROUTINE GET_ADVDIFFVECTOR_SCALAR_3D(N)
1365213808
! First (rho hs)_i,j,k:
1365313809
IF (CUT_FACE(ICF)%CELL_LIST(1,ILOC,IFACE) == CC_FTYPE_CFGAS) THEN
1365413810
IROW=IND_LOC(ILOC) ! Process Local Unknown number.
13655-
F_Z(IROW) = F_Z(IROW) + FCT*FN_ZZ*VELC*AF
13811+
FN_ZZ_USE = FN_ZZ
13812+
! Build the flux-limited bar{rho*Z} across the interface.
13813+
IF (WC%BOUNDARY_TYPE==INTERPOLATED_BOUNDARY .OR. WC%BOUNDARY_TYPE==PERIODIC_BOUNDARY) THEN
13814+
ICC = CUT_FACE(ICF)%CELL_LIST(2,ILOC,IFACE); JCC = CUT_FACE(ICF)%CELL_LIST(3,ILOC,IFACE)
13815+
CALL GET_CCIFACE_RHOZZ_LIM(CUT_FACE(ICF)%IJK(KAXIS+1), &
13816+
CUT_FACE(ICF)%IJK(IAXIS),CUT_FACE(ICF)%IJK(JAXIS),CUT_FACE(ICF)%IJK(KAXIS), &
13817+
ILOC,ICC,JCC,N,VELC,PRFCT,FN_ZZ_USE)
13818+
ENDIF
13819+
F_Z(IROW) = F_Z(IROW) + FCT*FN_ZZ_USE*VELC*AF
1365613820
ENDIF
1365713821
ENDDO ! IFACE
1365813822

0 commit comments

Comments
 (0)