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