@@ -20,15 +20,16 @@ MODULE MASS
2020SUBROUTINE MASS_FINITE_DIFFERENCES (NM )
2121
2222USE MATH_FUNCTIONS, ONLY: GET_SCALAR_FACE_VALUE
23+ USE PHYSICAL_FUNCTIONS, ONLY: GET_MOLECULAR_WEIGHT
2324
2425INTEGER , INTENT (IN ) :: NM
25- REAL (EB) :: TNOW
26+ REAL (EB) :: TNOW,MW_F,MW_G,ZZ_GET( 1 :N_TRACKED_SPECIES)
2627REAL (EB), DIMENSION (0 :3 ,0 :3 ,0 :3 ) :: U_TEMP,Z_TEMP,F_TEMP
2728REAL (EB), PARAMETER :: DUMMY= 0._EB
2829INTEGER :: I,J,K,N,IOR,IW,IIG,JJG,KKG,II,JJ,KK,IC
2930REAL (EB), POINTER , DIMENSION (:,:,:) :: UU,VV,WW,RHOP
3031REAL (EB), POINTER , DIMENSION (:,:,:,:) :: ZZP
31- REAL (EB), POINTER , DIMENSION (:,:,:) :: RHO_Z_P
32+ REAL (EB), POINTER , DIMENSION (:,:,:) :: RHO_Z_P,RHO_RMW
3233TYPE (WALL_TYPE), POINTER :: WC
3334TYPE (BOUNDARY_COORD_TYPE), POINTER :: BC
3435TYPE (BOUNDARY_PROP1_TYPE), POINTER :: B1
@@ -181,11 +182,25 @@ SUBROUTINE MASS_FINITE_DIFFERENCES(NM)
181182
182183 ! Repeat the above for DENSITY
183184
184- CALL GET_SCALAR_FACE_VALUE(UU,RHOP,FX(:,:,:,0 ),1 ,IBM1,1 ,JBAR,1 ,KBAR,1 ,I_FLUX_LIMITER)
185- CALL GET_SCALAR_FACE_VALUE(VV,RHOP,FY(:,:,:,0 ),1 ,IBAR,1 ,JBM1,1 ,KBAR,2 ,I_FLUX_LIMITER)
186- CALL GET_SCALAR_FACE_VALUE(WW,RHOP,FZ(:,:,:,0 ),1 ,IBAR,1 ,JBAR,1 ,KBM1,3 ,I_FLUX_LIMITER)
185+ RHO_RMW= >WORK1
187186
188- ! $OMP PARALLEL DO PRIVATE(IW,WC,BC,B1,II,JJ,KK,IIG,JJG,KKG,IOR,IC,U_TEMP,Z_TEMP,F_TEMP)
187+ ! $OMP PARALLEL DO PRIVATE(ZZ_GET,MW_G) SCHEDULE(STATIC)
188+ DO K= 0 ,KBP1
189+ DO J= 0 ,JBP1
190+ DO I= 0 ,IBP1
191+ ZZ_GET(1 :N_TRACKED_SPECIES) = ZZP(I,J,K,1 :N_TRACKED_SPECIES)
192+ CALL GET_MOLECULAR_WEIGHT(ZZ_GET,MW_G)
193+ RHO_RMW(I,J,K) = RHOP(I,J,K)/ MW_G
194+ ENDDO
195+ ENDDO
196+ ENDDO
197+ ! $OMP END PARALLEL DO
198+
199+ CALL GET_SCALAR_FACE_VALUE(UU,RHO_RMW,FX(:,:,:,0 ),1 ,IBM1,1 ,JBAR,1 ,KBAR,1 ,I_FLUX_LIMITER)
200+ CALL GET_SCALAR_FACE_VALUE(VV,RHO_RMW,FY(:,:,:,0 ),1 ,IBAR,1 ,JBM1,1 ,KBAR,2 ,I_FLUX_LIMITER)
201+ CALL GET_SCALAR_FACE_VALUE(WW,RHO_RMW,FZ(:,:,:,0 ),1 ,IBAR,1 ,JBAR,1 ,KBM1,3 ,I_FLUX_LIMITER)
202+
203+ ! $OMP PARALLEL DO PRIVATE(IW,WC,BC,B1,II,JJ,KK,IIG,JJG,KKG,IOR,IC,U_TEMP,Z_TEMP,F_TEMP,ZZ_GET,MW_F)
189204 WALL_LOOP_3: DO IW= 1 ,N_EXTERNAL_WALL_CELLS+ N_INTERNAL_WALL_CELLS
190205 WC= >WALL(IW)
191206 IF (WC% BOUNDARY_TYPE== NULL_BOUNDARY) CYCLE WALL_LOOP_3
@@ -211,13 +226,15 @@ SUBROUTINE MASS_FINITE_DIFFERENCES(NM)
211226 CASE (- 3 ); FZ(IIG,JJG,KKG,0 ) = 0._EB
212227 END SELECT
213228 ELSE
229+ ZZ_GET(1 :N_TRACKED_SPECIES) = B1% ZZ_F(1 :N_TRACKED_SPECIES)
230+ CALL GET_MOLECULAR_WEIGHT(ZZ_GET,MW_F)
214231 SELECT CASE (IOR)
215- CASE ( 1 ); FX(IIG-1 ,JJG,KKG,0 ) = B1% RHO_F
216- CASE (- 1 ); FX(IIG,JJG,KKG,0 ) = B1% RHO_F
217- CASE ( 2 ); FY(IIG,JJG-1 ,KKG,0 ) = B1% RHO_F
218- CASE (- 2 ); FY(IIG,JJG,KKG,0 ) = B1% RHO_F
219- CASE ( 3 ); FZ(IIG,JJG,KKG-1 ,0 ) = B1% RHO_F
220- CASE (- 3 ); FZ(IIG,JJG,KKG,0 ) = B1% RHO_F
232+ CASE ( 1 ); FX(IIG-1 ,JJG,KKG,0 ) = B1% RHO_F/ MW_F
233+ CASE (- 1 ); FX(IIG,JJG,KKG,0 ) = B1% RHO_F/ MW_F
234+ CASE ( 2 ); FY(IIG,JJG-1 ,KKG,0 ) = B1% RHO_F/ MW_F
235+ CASE (- 2 ); FY(IIG,JJG,KKG,0 ) = B1% RHO_F/ MW_F
236+ CASE ( 3 ); FZ(IIG,JJG,KKG-1 ,0 ) = B1% RHO_F/ MW_F
237+ CASE (- 3 ); FZ(IIG,JJG,KKG,0 ) = B1% RHO_F/ MW_F
221238 END SELECT
222239 ENDIF
223240
@@ -231,7 +248,7 @@ SUBROUTINE MASS_FINITE_DIFFERENCES(NM)
231248 ! /// II /// II+1 | II+2 | ...
232249 ! ^ WALL_INDEX(II+1,+1)
233250 IF ((UU(II+1 ,JJ,KK)>0._EB ) .AND. .NOT. (CELL(CELL_INDEX(II+1 ,JJ,KK))% WALL_INDEX(+ 1 )>0 )) THEN
234- Z_TEMP(0 :3 ,1 ,1 ) = (/ RHOP (II+1 ,JJ,KK),RHOP (II+1 :II+2 ,JJ,KK),DUMMY/ )
251+ Z_TEMP(0 :3 ,1 ,1 ) = (/ RHO_RMW (II+1 ,JJ,KK),RHO_RMW (II+1 :II+2 ,JJ,KK),DUMMY/ )
235252 U_TEMP(1 ,1 ,1 ) = UU(II+1 ,JJ,KK)
236253 CALL GET_SCALAR_FACE_VALUE(U_TEMP,Z_TEMP,F_TEMP,1 ,1 ,1 ,1 ,1 ,1 ,1 ,I_FLUX_LIMITER)
237254 FX(II+1 ,JJ,KK,0 ) = F_TEMP(1 ,1 ,1 )
@@ -241,35 +258,35 @@ SUBROUTINE MASS_FINITE_DIFFERENCES(NM)
241258 ! ... | II-2 | II-1 /// II ///
242259 ! ^ WALL_INDEX(II-1,-1)
243260 IF ((UU(II-2 ,JJ,KK)<0._EB ) .AND. .NOT. (CELL(CELL_INDEX(II-1 ,JJ,KK))% WALL_INDEX(- 1 )>0 )) THEN
244- Z_TEMP(0 :3 ,1 ,1 ) = (/ DUMMY,RHOP (II-2 :II-1 ,JJ,KK),RHOP (II-1 ,JJ,KK)/ )
261+ Z_TEMP(0 :3 ,1 ,1 ) = (/ DUMMY,RHO_RMW (II-2 :II-1 ,JJ,KK),RHO_RMW (II-1 ,JJ,KK)/ )
245262 U_TEMP(1 ,1 ,1 ) = UU(II-2 ,JJ,KK)
246263 CALL GET_SCALAR_FACE_VALUE(U_TEMP,Z_TEMP,F_TEMP,1 ,1 ,1 ,1 ,1 ,1 ,1 ,I_FLUX_LIMITER)
247264 FX(II-2 ,JJ,KK,0 ) = F_TEMP(1 ,1 ,1 )
248265 ENDIF
249266 CASE ( 2 ) OFF_WALL_SELECT_3
250267 IF ((VV(II,JJ+1 ,KK)>0._EB ) .AND. .NOT. (CELL(CELL_INDEX(II,JJ+1 ,KK))% WALL_INDEX(+ 2 )>0 )) THEN
251- Z_TEMP(1 ,0 :3 ,1 ) = (/ RHOP (II,JJ+1 ,KK),RHOP (II,JJ+1 :JJ+2 ,KK),DUMMY/ )
268+ Z_TEMP(1 ,0 :3 ,1 ) = (/ RHO_RMW (II,JJ+1 ,KK),RHO_RMW (II,JJ+1 :JJ+2 ,KK),DUMMY/ )
252269 U_TEMP(1 ,1 ,1 ) = VV(II,JJ+1 ,KK)
253270 CALL GET_SCALAR_FACE_VALUE(U_TEMP,Z_TEMP,F_TEMP,1 ,1 ,1 ,1 ,1 ,1 ,2 ,I_FLUX_LIMITER)
254271 FY(II,JJ+1 ,KK,0 ) = F_TEMP(1 ,1 ,1 )
255272 ENDIF
256273 CASE (- 2 ) OFF_WALL_SELECT_3
257274 IF ((VV(II,JJ-2 ,KK)<0._EB ) .AND. .NOT. (CELL(CELL_INDEX(II,JJ-1 ,KK))% WALL_INDEX(- 2 )>0 )) THEN
258- Z_TEMP(1 ,0 :3 ,1 ) = (/ DUMMY,RHOP (II,JJ-2 :JJ-1 ,KK),RHOP (II,JJ-1 ,KK)/ )
275+ Z_TEMP(1 ,0 :3 ,1 ) = (/ DUMMY,RHO_RMW (II,JJ-2 :JJ-1 ,KK),RHO_RMW (II,JJ-1 ,KK)/ )
259276 U_TEMP(1 ,1 ,1 ) = VV(II,JJ-2 ,KK)
260277 CALL GET_SCALAR_FACE_VALUE(U_TEMP,Z_TEMP,F_TEMP,1 ,1 ,1 ,1 ,1 ,1 ,2 ,I_FLUX_LIMITER)
261278 FY(II,JJ-2 ,KK,0 ) = F_TEMP(1 ,1 ,1 )
262279 ENDIF
263280 CASE ( 3 ) OFF_WALL_SELECT_3
264281 IF ((WW(II,JJ,KK+1 )>0._EB ) .AND. .NOT. (CELL(CELL_INDEX(II,JJ,KK+1 ))% WALL_INDEX(+ 3 )>0 )) THEN
265- Z_TEMP(1 ,1 ,0 :3 ) = (/ RHOP (II,JJ,KK+1 ),RHOP (II,JJ,KK+1 :KK+2 ),DUMMY/ )
282+ Z_TEMP(1 ,1 ,0 :3 ) = (/ RHO_RMW (II,JJ,KK+1 ),RHO_RMW (II,JJ,KK+1 :KK+2 ),DUMMY/ )
266283 U_TEMP(1 ,1 ,1 ) = WW(II,JJ,KK+1 )
267284 CALL GET_SCALAR_FACE_VALUE(U_TEMP,Z_TEMP,F_TEMP,1 ,1 ,1 ,1 ,1 ,1 ,3 ,I_FLUX_LIMITER)
268285 FZ(II,JJ,KK+1 ,0 ) = F_TEMP(1 ,1 ,1 )
269286 ENDIF
270287 CASE (- 3 ) OFF_WALL_SELECT_3
271288 IF ((WW(II,JJ,KK-2 )<0._EB ) .AND. .NOT. (CELL(CELL_INDEX(II,JJ,KK-1 ))% WALL_INDEX(- 3 )>0 )) THEN
272- Z_TEMP(1 ,1 ,0 :3 ) = (/ DUMMY,RHOP (II,JJ,KK-2 :KK-1 ),RHOP (II,JJ,KK-1 )/ )
289+ Z_TEMP(1 ,1 ,0 :3 ) = (/ DUMMY,RHO_RMW (II,JJ,KK-2 :KK-1 ),RHO_RMW (II,JJ,KK-1 )/ )
273290 U_TEMP(1 ,1 ,1 ) = WW(II,JJ,KK-2 )
274291 CALL GET_SCALAR_FACE_VALUE(U_TEMP,Z_TEMP,F_TEMP,1 ,1 ,1 ,1 ,1 ,1 ,3 ,I_FLUX_LIMITER)
275292 FZ(II,JJ,KK-2 ,0 ) = F_TEMP(1 ,1 ,1 )
@@ -281,20 +298,30 @@ SUBROUTINE MASS_FINITE_DIFFERENCES(NM)
281298 ENDDO WALL_LOOP_3
282299 ! $OMP END PARALLEL DO
283300
284- ! Now correct the face value of (RHO*ZZ) such that SUM(RHO*ZZ)_FACE = RHO_FACE
301+ ! Now correct the max face value of (RHO*ZZ) such that SUM(RHO*ZZ/MW)_FACE = RHO_FACE/MW_FACE
302+ ! (necessary condition to preserve isothermal flow)
285303
286- ! $OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
304+ ! $OMP PARALLEL DO PRIVATE(N,MW_G ) SCHEDULE(STATIC)
287305 DO K= 0 ,KBAR
288306 DO J= 0 ,JBAR
289307 DO I= 0 ,IBAR
290308 N= MAXLOC (FX(I,J,K,1 :N_TRACKED_SPECIES),1 )
291- FX(I,J,K,N) = MAX ( 0._EB , FX(I,J,K,0 ) - SUM (FX(I,J,K,1 :(N-1 ))) - SUM (FX(I,J,K,(N+1 ):N_TRACKED_SPECIES)) )
309+ MW_G = SPECIES_MIXTURE(N)% MW
310+ FX(I,J,K,N) = MW_G* MAX ( 0._EB , FX(I,J,K,0 ) &
311+ - SUM (FX(I,J,K,1 :(N-1 ))/ SPECIES_MIXTURE(1 :(N-1 ))% MW) &
312+ - SUM (FX(I,J,K,(N+1 ):N_TRACKED_SPECIES)/ SPECIES_MIXTURE((N+1 ):N_TRACKED_SPECIES)% MW) )
292313
293314 N= MAXLOC (FY(I,J,K,1 :N_TRACKED_SPECIES),1 )
294- FY(I,J,K,N) = MAX ( 0._EB , FY(I,J,K,0 ) - SUM (FY(I,J,K,1 :(N-1 ))) - SUM (FY(I,J,K,(N+1 ):N_TRACKED_SPECIES)) )
315+ MW_G = SPECIES_MIXTURE(N)% MW
316+ FY(I,J,K,N) = MW_G* MAX ( 0._EB , FY(I,J,K,0 ) &
317+ - SUM (FY(I,J,K,1 :(N-1 ))/ SPECIES_MIXTURE(1 :(N-1 ))% MW) &
318+ - SUM (FY(I,J,K,(N+1 ):N_TRACKED_SPECIES)/ SPECIES_MIXTURE((N+1 ):N_TRACKED_SPECIES)% MW) )
295319
296320 N= MAXLOC (FZ(I,J,K,1 :N_TRACKED_SPECIES),1 )
297- FZ(I,J,K,N) = MAX ( 0._EB , FZ(I,J,K,0 ) - SUM (FZ(I,J,K,1 :(N-1 ))) - SUM (FZ(I,J,K,(N+1 ):N_TRACKED_SPECIES)) )
321+ MW_G = SPECIES_MIXTURE(N)% MW
322+ FZ(I,J,K,N) = MW_G* MAX ( 0._EB , FZ(I,J,K,0 ) &
323+ - SUM (FZ(I,J,K,1 :(N-1 ))/ SPECIES_MIXTURE(1 :(N-1 ))% MW) &
324+ - SUM (FZ(I,J,K,(N+1 ):N_TRACKED_SPECIES)/ SPECIES_MIXTURE((N+1 ):N_TRACKED_SPECIES)% MW) )
298325 ENDDO
299326 ENDDO
300327 ENDDO
0 commit comments