File: RELATIVE:/../../../mfix.git/model/source_pp_g.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 SUBROUTINE SOURCE_PP_G(A_M, B_M, B_MMAX)
25
26
27
28
29 USE bc, ONLY: SMALL_NUMBER, ONE, ZERO, UNDEFINED, IJK_P_G, DIMENSION_3, DIMENSION_M
30 USE compar, ONLY: IJKSTART3, IJKEND3
31 USE cutcell, ONLY: CARTESIAN_GRID, A_UPG_E, A_VPG_N, A_WPG_T
32 USE eos, ONLY: DROODP_G
33 USE fldvar, ONLY: U_G, V_G, W_G, U_S, V_S, W_S, ROP_G, ROP_S, ROP_GO, ROP_SO, RO_G, P_G, EP_G
34 USE geometry, ONLY: VOL
35 USE matrix, ONLY: E, W, N, S, T, B
36 USE pgcor, ONLY: D_E, D_N, D_T
37 USE physprop, ONLY: CLOSE_PACKED, MMAX, RO_G0
38 USE run, ONLY: SHEAR, ODT, UNDEFINED_I
39 USE rxns, ONLY: SUM_R_G, SUM_R_S
40 USE ur_facs, ONLY: UR_FAC
41 USE vshear, ONLY: VSH
42 USE xsi_array, ONLY: LOCK_XSI_ARRAY, UNLOCK_XSI_ARRAY
43
44 IMPLICIT NONE
45
46
47
48
49 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
50
51 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
52
53 DOUBLE PRECISION, INTENT(INOUT) :: B_mmax(DIMENSION_3, 0:DIMENSION_M)
54
55
56
57
58 INTEGER :: M
59
60 INTEGER :: IJK, IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
61
62 DOUBLE PRECISION fac
63
64 DOUBLE PRECISION bma, bme, bmw, bmn, bms, bmt, bmb, bmr
65
66 integer :: incr
67
68 CHARACTER(LEN=80) :: LINE(1)
69
70
71
72
73
74 call lock_xsi_array
75
76
77 IF (SHEAR) THEN
78
79 DO IJK = IJKSTART3, IJKEND3
80 IF (FLUID_AT(IJK)) THEN
81 V_G(IJK)=V_G(IJK)+VSH(IJK)
82 ENDIF
83 ENDDO
84 ENDIF
85
86
87
88
89
90
91
92
93 DO IJK = ijkstart3, ijkend3
94 IF (FLUID_AT(IJK)) THEN
95 IMJK = IM_OF(IJK)
96 IJMK = JM_OF(IJK)
97 IJKM = KM_OF(IJK)
98
99 bma = (ROP_G(IJK)-ROP_GO(IJK))*VOL(IJK)*ODT
100 bme = A_M(IJK,E,0)*U_G(IJK)
101 bmw = A_M(IJK,W,0)*U_G(IMJK)
102 bmn = A_M(IJK,N,0)*V_G(IJK)
103 bms = A_M(IJK,S,0)*V_G(IJMK)
104 bmt = A_M(IJK,T,0)*W_G(IJK)
105 bmb = A_M(IJK,B,0)*W_G(IJKM)
106 bmr = SUM_R_G(IJK)*VOL(IJK)
107 B_M(IJK,0) = -((-(bma + bme - bmw + bmn - bms + bmt - bmb ))+ bmr )
108 B_MMAX(IJK,0) = max(abs(bma), abs(bme), abs(bmw), abs(bmn), abs(bms), abs(bmt), abs(bmb), abs(bmr) )
109
110 A_M(IJK,E,0) = A_M(IJK,E,0)*D_E(IJK,0)
111 A_M(IJK,W,0) = A_M(IJK,W,0)*D_E(IMJK,0)
112 A_M(IJK,N,0) = A_M(IJK,N,0)*D_N(IJK,0)
113 A_M(IJK,S,0) = A_M(IJK,S,0)*D_N(IJMK,0)
114 A_M(IJK,T,0) = A_M(IJK,T,0)*D_T(IJK,0)
115 A_M(IJK,B,0) = A_M(IJK,B,0)*D_T(IJKM,0)
116
117 IF(CARTESIAN_GRID) THEN
118 A_M(IJK,E,0) = A_M(IJK,E,0) * A_UPG_E(IJK)
119 A_M(IJK,W,0) = A_M(IJK,W,0) * A_UPG_E(IMJK)
120 A_M(IJK,N,0) = A_M(IJK,N,0) * A_VPG_N(IJK)
121 A_M(IJK,S,0) = A_M(IJK,S,0) * A_VPG_N(IJMK)
122 A_M(IJK,T,0) = A_M(IJK,T,0) * A_WPG_T(IJK)
123 A_M(IJK,B,0) = A_M(IJK,B,0) * A_WPG_T(IJKM)
124 ENDIF
125
126
127
128
129
130
131 DO M = 1, MMAX
132 IF (.NOT.CLOSE_PACKED(M)) THEN
133 B_M(IJK,0) = B_M(IJK,0) - &
134 ((-((ROP_S(IJK,M)-ROP_SO(IJK,M))*VOL(IJK)*ODT+&
135 A_M(IJK,E,M)*U_S(IJK,M)-A_M(IJK,W,M)*U_S(IMJK,M)+&
136 A_M(IJK,N,M)*V_S(IJK,M)-A_M(IJK,S,M)*V_S(IJMK,M)+&
137 A_M(IJK,T,M)*W_S(IJK,M)-A_M(IJK,B,M)*W_S(IJKM,M)))+&
138 SUM_R_S(IJK,M)*VOL(IJK))
139
140 IF(.NOT.CARTESIAN_GRID) THEN
141 A_M(IJK,E,0) = A_M(IJK,E,0) + A_M(IJK,E,M)*D_E(IJK,M)
142 A_M(IJK,W,0) = A_M(IJK,W,0) + A_M(IJK,W,M)*D_E(IMJK,M)
143 A_M(IJK,N,0) = A_M(IJK,N,0) + A_M(IJK,N,M)*D_N(IJK,M)
144 A_M(IJK,S,0) = A_M(IJK,S,0) + A_M(IJK,S,M)*D_N(IJMK,M)
145 A_M(IJK,T,0) = A_M(IJK,T,0) + A_M(IJK,T,M)*D_T(IJK,M)
146 A_M(IJK,B,0) = A_M(IJK,B,0) + A_M(IJK,B,M)*D_T(IJKM,M)
147 ELSE
148 A_M(IJK,E,0) = A_M(IJK,E,0) + A_M(IJK,E,M)*D_E(IJK,M) * A_UPG_E(IJK)
149 A_M(IJK,W,0) = A_M(IJK,W,0) + A_M(IJK,W,M)*D_E(IMJK,M) * A_UPG_E(IMJK)
150 A_M(IJK,N,0) = A_M(IJK,N,0) + A_M(IJK,N,M)*D_N(IJK,M) * A_VPG_N(IJK)
151 A_M(IJK,S,0) = A_M(IJK,S,0) + A_M(IJK,S,M)*D_N(IJMK,M) * A_VPG_N(IJMK)
152 A_M(IJK,T,0) = A_M(IJK,T,0) + A_M(IJK,T,M)*D_T(IJK,M) * A_WPG_T(IJK)
153 A_M(IJK,B,0) = A_M(IJK,B,0) + A_M(IJK,B,M)*D_T(IJKM,M) * A_WPG_T(IJKM)
154 ENDIF
155 ENDIF
156 ENDDO
157
158 A_M(IJK,0,0) = -(A_M(IJK,E,0)+A_M(IJK,W,0)+A_M(IJK,N,0)+A_M(IJK,S,0&
159 )+A_M(IJK,T,0)+A_M(IJK,B,0))
160
161 IF (ABS(A_M(IJK,0,0)) < SMALL_NUMBER) THEN
162 IF (ABS(B_M(IJK,0)) < SMALL_NUMBER) THEN
163 A_M(IJK,0,0) = -ONE
164 B_M(IJK,0) = ZERO
165 ELSEIF (RO_G0 .NE. UNDEFINED) THEN
166
167 WRITE (LINE, '(A,I6,A,I1,A,G12.5)') 'Error: At IJK = ', IJK, &
168 ' M = ', 0, ' A = 0 and b = ', B_M(IJK,0)
169 CALL WRITE_ERROR ('SOURCE_Pp_g', LINE, 1)
170
171 ENDIF
172 ENDIF
173
174 ELSE
175
176
177
178
179 (IJK,E,0) = ZERO
180 A_M(IJK,W,0) = ZERO
181 A_M(IJK,N,0) = ZERO
182 A_M(IJK,S,0) = ZERO
183 A_M(IJK,T,0) = ZERO
184 A_M(IJK,B,0) = ZERO
185 A_M(IJK,0,0) = -ONE
186 B_M(IJK,0) = ZERO
187 ENDIF
188 ENDDO
189
190
191
192
193 IF (SHEAR) THEN
194
195 DO IJK = IJKSTART3, IJKEND3
196 IF (FLUID_AT(IJK)) THEN
197 V_G(IJK)=V_G(IJK)-VSH(IJK)
198 ENDIF
199 ENDDO
200 ENDIF
201
202
203
204 IF (RO_G0 == UNDEFINED) THEN
205 fac = UR_FAC(1)
206
207
208 =0
209
210
211
212
213
214 DO IJK = ijkstart3, ijkend3
215 IF (FLUID_AT(IJK)) THEN
216
217 A_M(IJK,0,0) = A_M(IJK,0,0) - &
218 fac*DROODP_G(RO_G(IJK),P_G(IJK))*&
219 EP_G(IJK)*VOL(IJK)*ODT
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259 ENDIF
260 ENDDO
261 ENDIF
262
263
264
265
266
267
268
269
270 DO IJK = ijkstart3, ijkend3
271 IF (FLUID_AT(IJK)) THEN
272 IMJK = IM_OF(IJK)
273 IPJK = IP_OF(IJK)
274 IJMK = JM_OF(IJK)
275 IJPK = JP_OF(IJK)
276 IJKM = KM_OF(IJK)
277 IJKP = KP_OF(IJK)
278
279 if(p_flow_at(imjk)) A_m(IJK, w, 0) = ZERO
280 if(p_flow_at(ipjk)) A_m(IJK, e, 0) = ZERO
281 if(p_flow_at(ijmk)) A_m(IJK, s, 0) = ZERO
282 if(p_flow_at(ijpk)) A_m(IJK, n, 0) = ZERO
283 if(p_flow_at(ijkm)) A_m(IJK, b, 0) = ZERO
284 if(p_flow_at(ijkp)) A_m(IJK, t, 0) = ZERO
285 ENDIF
286 ENDDO
287
288
289
290 IF (IJK_P_G /= UNDEFINED_I) THEN
291 B_M(IJK_P_G,0) = ZERO
292 A_M(IJK_P_G,:,0) = ZERO
293 A_M(IJK_P_G,0,0) = -ONE
294 ENDIF
295
296 call unlock_xsi_array
297
298 RETURN
299
300 CONTAINS
301
302 INCLUDE 'functions.inc'
303
304 END SUBROUTINE SOURCE_PP_G
305