File: N:\mfix\model\source_pp_g.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SUBROUTINE SOURCE_PP_G(A_M, B_M, B_MMAX)
19
20
21
22 USE bc, ONLY: IJK_P_G
23 USE compar, ONLY: IJKSTART3, IJKEND3
24 USE cutcell, ONLY: CARTESIAN_GRID, A_UPG_E, A_VPG_N, A_WPG_T
25 USE fldvar, ONLY: U_G, V_G, W_G, U_S, V_S, W_S, ROP_G, ROP_S
26 USE fldvar, only: ROP_GO, ROP_SO, RO_G
27 USE geometry, ONLY: VOL
28 USE param, only: dimension_3, dimension_m
29 USE param, only: east, west, south, north, top, bottom
30 USE param1, ONLY: SMALL_NUMBER, ONE, ZERO, UNDEFINED
31 USE pgcor, ONLY: D_E, D_N, D_T
32 USE physprop, ONLY: CLOSE_PACKED, MMAX, RO_G0
33 USE run, ONLY: SHEAR, ODT, UNDEFINED_I
34 USE rxns, ONLY: SUM_R_G, SUM_R_S
35 USE vshear, ONLY: VSH
36 IMPLICIT NONE
37
38
39
40
41 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
42
43 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
44
45 DOUBLE PRECISION, INTENT(INOUT) :: B_mmax(DIMENSION_3, 0:DIMENSION_M)
46
47
48
49
50 INTEGER :: M
51
52 INTEGER :: IJK, IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
53
54 DOUBLE PRECISION bma, bme, bmw, bmn, bms, bmt, bmb, bmr
55
56 CHARACTER(LEN=80) :: LINE(1)
57
58
59
60 IF (SHEAR) THEN
61
62 DO IJK = IJKSTART3, IJKEND3
63 IF (FLUID_AT(IJK)) THEN
64 V_G(IJK)=V_G(IJK)+VSH(IJK)
65 ENDIF
66 ENDDO
67 ENDIF
68
69
70
71
72
73
74
75
76
77
78
79 DO IJK = ijkstart3, ijkend3
80 IF (FLUID_AT(IJK)) THEN
81 IMJK = IM_OF(IJK)
82 IJMK = JM_OF(IJK)
83 IJKM = KM_OF(IJK)
84
85 bma = (ROP_G(IJK)-ROP_GO(IJK))*VOL(IJK)*ODT
86 bme = A_M(IJK,east,0)*U_G(IJK)
87 bmw = A_M(IJK,west,0)*U_G(IMJK)
88 bmn = A_M(IJK,north,0)*V_G(IJK)
89 bms = A_M(IJK,south,0)*V_G(IJMK)
90 bmt = A_M(IJK,top,0)*W_G(IJK)
91 bmb = A_M(IJK,bottom,0)*W_G(IJKM)
92 bmr = SUM_R_G(IJK)*VOL(IJK)
93 B_M(IJK,0) = -((-(bma + bme - bmw + &
94 bmn - bms + bmt - bmb ))+ bmr )
95 B_MMAX(IJK,0) = max(abs(bma),abs(bme),abs(bmw),&
96 abs(bmn),abs(bms),abs(bmt),abs(bmb),abs(bmr) )
97
98 A_M(IJK,east,0) = A_M(IJK,east,0)*D_E(IJK,0)
99 A_M(IJK,west,0) = A_M(IJK,west,0)*D_E(IMJK,0)
100 A_M(IJK,north,0) = A_M(IJK,north,0)*D_N(IJK,0)
101 A_M(IJK,south,0) = A_M(IJK,south,0)*D_N(IJMK,0)
102 A_M(IJK,top,0) = A_M(IJK,top,0)*D_T(IJK,0)
103 A_M(IJK,bottom,0) = A_M(IJK,bottom,0)*D_T(IJKM,0)
104
105 IF(CARTESIAN_GRID) THEN
106 A_M(IJK,east,0) = A_M(IJK,east,0) * A_UPG_E(IJK)
107 A_M(IJK,west,0) = A_M(IJK,west,0) * A_UPG_E(IMJK)
108 A_M(IJK,north,0) = A_M(IJK,north,0) * A_VPG_N(IJK)
109 A_M(IJK,south,0) = A_M(IJK,south,0) * A_VPG_N(IJMK)
110 A_M(IJK,top,0) = A_M(IJK,top,0) * A_WPG_T(IJK)
111 A_M(IJK,bottom,0) = A_M(IJK,bottom,0) * A_WPG_T(IJKM)
112 ENDIF
113
114
115
116
117
118
119 DO M = 1, MMAX
120 IF (.NOT.CLOSE_PACKED(M)) THEN
121 B_M(IJK,0) = B_M(IJK,0) - &
122 ((-((ROP_S(IJK,M)-ROP_SO(IJK,M))*VOL(IJK)*ODT+&
123 A_M(IJK,east,M)*U_S(IJK,M)-A_M(IJK,west,M)*U_S(IMJK,M)+&
124 A_M(IJK,north,M)*V_S(IJK,M)-A_M(IJK,south,M)*V_S(IJMK,M)+&
125 A_M(IJK,top,M)*W_S(IJK,M)-A_M(IJK,bottom,M)*W_S(IJKM,M)))+&
126 SUM_R_S(IJK,M)*VOL(IJK))
127
128 IF(.NOT.CARTESIAN_GRID) THEN
129 A_M(IJK,east,0) = A_M(IJK,east,0) + A_M(IJK,east,M)*D_E(IJK,M)
130 A_M(IJK,west,0) = A_M(IJK,west,0) + A_M(IJK,west,M)*D_E(IMJK,M)
131 A_M(IJK,north,0) = A_M(IJK,north,0) + A_M(IJK,north,M)*D_N(IJK,M)
132 A_M(IJK,south,0) = A_M(IJK,south,0) + A_M(IJK,south,M)*D_N(IJMK,M)
133 A_M(IJK,top,0) = A_M(IJK,top,0) + A_M(IJK,top,M)*D_T(IJK,M)
134 A_M(IJK,bottom,0) = A_M(IJK,bottom,0) + A_M(IJK,bottom,M)*D_T(IJKM,M)
135 ELSE
136 A_M(IJK,east,0) = A_M(IJK,east,0) + A_M(IJK,east,M)*D_E(IJK,M) * A_UPG_E(IJK)
137 A_M(IJK,west,0) = A_M(IJK,west,0) + A_M(IJK,west,M)*D_E(IMJK,M) * A_UPG_E(IMJK)
138 A_M(IJK,north,0) = A_M(IJK,north,0) + A_M(IJK,north,M)*D_N(IJK,M) * A_VPG_N(IJK)
139 A_M(IJK,south,0) = A_M(IJK,south,0) + A_M(IJK,south,M)*D_N(IJMK,M) * A_VPG_N(IJMK)
140 A_M(IJK,top,0) = A_M(IJK,top,0) + A_M(IJK,top,M)*D_T(IJK,M) * A_WPG_T(IJK)
141 A_M(IJK,bottom,0) = A_M(IJK,bottom,0) + A_M(IJK,bottom,M)*D_T(IJKM,M) * A_WPG_T(IJKM)
142 ENDIF
143 ENDIF
144 ENDDO
145
146 A_M(IJK,0,0) = -(A_M(IJK,east,0)+A_M(IJK,west,0)+&
147 A_M(IJK,north,0)+A_M(IJK,south,0)+&
148 A_M(IJK,top,0)+A_M(IJK,bottom,0))
149
150 IF (ABS(A_M(IJK,0,0)) < SMALL_NUMBER) THEN
151 IF (ABS(B_M(IJK,0)) < SMALL_NUMBER) THEN
152 A_M(IJK,0,0) = -ONE
153 B_M(IJK,0) = ZERO
154 ELSEIF (RO_G0 .NE. UNDEFINED) THEN
155
156 WRITE (LINE, '(A,I6,A,I1,A,G12.5)') 'Error: At IJK = ', IJK, &
157 ' M = ', 0, ' A = 0 and b = ', B_M(IJK,0)
158 CALL WRITE_ERROR ('SOURCE_Pp_g', LINE, 1)
159
160 ENDIF
161 ENDIF
162
163
164 ELSE
165
166
167
168
169 (IJK,east,0) = ZERO
170 A_M(IJK,west,0) = ZERO
171 A_M(IJK,north,0) = ZERO
172 A_M(IJK,south,0) = ZERO
173 A_M(IJK,top,0) = ZERO
174 A_M(IJK,bottom,0) = ZERO
175 A_M(IJK,0,0) = -ONE
176 B_M(IJK,0) = ZERO
177 ENDIF
178 ENDDO
179
180
181
182
183 IF (SHEAR) THEN
184
185 DO IJK = IJKSTART3, IJKEND3
186 IF (FLUID_AT(IJK)) THEN
187 V_G(IJK)=V_G(IJK)-VSH(IJK)
188 ENDIF
189 ENDDO
190 ENDIF
191
192
193 IF (RO_G0 == UNDEFINED) CALL COMPRESSIBLE_PP_G(A_M)
194
195
196
197
198
199
200
201 DO IJK = ijkstart3, ijkend3
202 IF (FLUID_AT(IJK)) THEN
203 IMJK = IM_OF(IJK)
204 IPJK = IP_OF(IJK)
205 IJMK = JM_OF(IJK)
206 IJPK = JP_OF(IJK)
207 IJKM = KM_OF(IJK)
208 IJKP = KP_OF(IJK)
209
210 if(p_flow_at(imjk)) A_m(IJK, west, 0) = ZERO
211 if(p_flow_at(ipjk)) A_m(IJK, east, 0) = ZERO
212 if(p_flow_at(ijmk)) A_m(IJK, south, 0) = ZERO
213 if(p_flow_at(ijpk)) A_m(IJK, north, 0) = ZERO
214 if(p_flow_at(ijkm)) A_m(IJK, bottom, 0) = ZERO
215 if(p_flow_at(ijkp)) A_m(IJK, top, 0) = ZERO
216 ENDIF
217 ENDDO
218
219
220
221 IF (IJK_P_G /= UNDEFINED_I) THEN
222 B_M(IJK_P_G,0) = ZERO
223 A_M(IJK_P_G,:,0) = ZERO
224 A_M(IJK_P_G,0,0) = -ONE
225 ENDIF
226
227 RETURN
228
229 CONTAINS
230
231 INCLUDE 'functions.inc'
232
233 END SUBROUTINE SOURCE_PP_G
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249 SUBROUTINE COMPRESSIBLE_PP_G(A_M)
250
251
252
253 use compar, only: ijkstart3, ijkend3
254 use eos, only: droodp_g
255 use fldvar, only: ep_g, u_g, v_g, w_g, rop_g, ro_g, p_g
256 use functions, only: fluid_at, im_of, jm_of, km_of
257 use functions, only: east_of, west_of, north_of, south_of
258 use functions, only: top_of, bottom_of
259 use geometry, only: vol, ayz, axz, axy, do_k
260 use param, only: dimension_3, dimension_m
261 use param, only: east, west, south, north, top, bottom
262 use param1, only: one
263 use run, only: discretize, odt
264 use ur_facs, only: ur_fac
265 use xsi
266 IMPLICIT NONE
267
268
269
270 LOGICAL, PARAMETER :: HS_CORRECT = .FALSE.
271
272
273
274
275 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
276
277
278
279
280 integer :: incr
281
282
283 DOUBLE PRECISION :: XSI_e(DIMENSION_3)
284 DOUBLE PRECISION :: XSI_n(DIMENSION_3)
285 DOUBLE PRECISION :: XSI_t(DIMENSION_3)
286
287 double precision :: fac
288
289 INTEGER :: IJK, IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
290 INTEGER :: IJKE, IJKW, IJKN, IJKS, IJKT, IJKB
291
292
293
294 = UR_FAC(1)
295
296 IF (.NOT.HS_CORRECT) THEN
297
298
299 DO IJK = ijkstart3, ijkend3
300 IF (FLUID_AT(IJK)) THEN
301
302 (IJK,0,0) = A_M(IJK,0,0) - ur_fac(1)*&
303 DROODP_G(RO_G(IJK),P_G(IJK))*EP_G(IJK)*VOL(IJK)*ODT
304 ENDIF
305 ENDDO
306 ENDIF
307
308 IF (HS_CORRECT) THEN
309
310
311 =0
312 CALL CALC_XSI(DISCRETIZE(1),ROP_G,U_G,V_G,W_G,XSI_E,XSI_N,XSI_T,incr)
313
314
315
316
317 DO IJK = ijkstart3, ijkend3
318 IF (FLUID_AT(IJK)) THEN
319 IMJK = IM_OF(IJK)
320 IJMK = JM_OF(IJK)
321 IJKM = KM_OF(IJK)
322 IJKE = EAST_OF(IJK)
323 IJKW = WEST_OF(IJK)
324 IJKN = NORTH_OF(IJK)
325 IJKS = SOUTH_OF(IJK)
326 IJKT = TOP_OF(IJK)
327 IJKB = BOTTOM_OF(IJK)
328 A_M(IJK,0,0) = A_M(IJK,0,0) - fac*DROODP_G(RO_G(IJK),P_G(IJK))*&
329 EP_G(IJK)*((ONE - XSI_E(IJK))*U_G(IJK)*AYZ(IJK)-&
330 XSI_E(IMJK)*U_G(IMJK)*AYZ(IMJK)+&
331 (ONE-XSI_N(IJK))*V_G(IJK)*AXZ(IJK)-&
332 XSI_N(IJMK)*V_G(IJMK)*AXZ(IJMK))
333
334 A_M(IJK,east,0) = A_M(IJK,east,0) - EP_G(IJKE)*fac*&
335 DROODP_G(RO_G(IJKE),P_G(IJKE))*XSI_E(IJK)*U_G(IJK)*AYZ(IJK)
336 A_M(IJK,west,0) = A_M(IJK,west,0) + EP_G(IJKW)*fac*&
337 DROODP_G(RO_G(IJKW),P_G(IJKW))*(ONE - XSI_E(IMJK))*U_G(IMJK)*AYZ(IMJK)
338 A_M(IJK,north,0) = A_M(IJK,north,0) - EP_G(IJKN)*fac*&
339 DROODP_G(RO_G(IJKN),P_G(IJKN))*XSI_N(IJK)*V_G(IJK)*AXZ(IJK)
340 A_M(IJK,south,0) = A_M(IJK,south,0) + EP_G(IJKS)*fac*&
341 DROODP_G(RO_G(IJKS),P_G(IJKS))*(ONE - XSI_N(IJMK))*V_G(IJMK)*AXZ(IJMK)
342 IF (DO_K) THEN
343 A_M(IJK,0,0) = A_M(IJK,0,0) - fac*DROODP_G(RO_G(IJK),P_G(IJK))*&
344 EP_G(IJK)*((ONE - XSI_T(IJK))*W_G(IJK)*AXY(IJK)-&
345 XSI_T(IJKM)*W_G(IJKM)*AXY(IJKM))
346 A_M(IJK,top,0) = A_M(IJK,top,0) - EP_G(IJKT)*fac*&
347 DROODP_G(RO_G(IJKT),P_G(IJKT))*XSI_T(IJK)*W_G(IJK)*AXY(IJK)
348 A_M(IJK,bottom,0) = A_M(IJK,bottom,0) + EP_G(IJKB)*fac*&
349 DROODP_G(RO_G(IJKB),P_G(IJKB))*(ONE - XSI_T(IJKM))*W_G(IJKM)*AXY(IJKM)
350 ENDIF
351
352 ENDIF
353 ENDDO
354 ENDIF
355
356 RETURN
357 END SUBROUTINE COMPRESSIBLE_PP_G
358
359
360