File: /nfs/home/0/users/jenkins/mfix.git/model/des/gas_drag.f
1
2
3
4
5
6
7
8
9
10
11 SUBROUTINE GAS_DRAG_U(A_M, B_M, IER)
12
13
14
15
16 use particle_filter, only: DES_INTERP_SCHEME_ENUM, DES_INTERP_GARG
17
18 use discretelement, only: DES_ONEWAY_COUPLED
19
20 use discretelement, only: DES_CONTINUUM_HYBRID
21
22 use discretelement, only: DES_EXPLICITLY_COUPLED
23
24 use discretelement, only: DRAG_AM, F_GDS
25
26 use discretelement, only: DRAG_BM
27
28 use geometry, only: VOL_U
29
30 use fldvar, only: U_GO
31
32 use geometry, only: DO_K
33
34
35
36
37 use param, only: DIMENSION_3, DIMENSION_M
38
39 use param1, only: SMALL_NUMBER
40
41 use compar, only: IJKStart3, IJKEnd3
42
43 use indices, only: I_OF, J_OF, K_OF
44
45 use functions, only: FLUID_AT
46
47 use functions, only: EAST_OF
48
49 use compar, only: FUNIJK_MAP_C
50
51 use fun_avg, only: AVG_X
52
53 use compar, only: ISTART2, JSTART2, KSTART2
54 use compar, only: IEND2, JEND2, KEND2
55
56 IMPLICIT NONE
57
58
59
60
61 DOUBLE PRECISION, INTENT(INOUT) :: A_M(DIMENSION_3,-3:3,0:DIMENSION_M)
62
63 DOUBLE PRECISION, INTENT(INOUT) :: B_M(DIMENSION_3, 0:DIMENSION_M)
64
65 INTEGER, INTENT(INOUT) :: IER
66
67
68
69
70
71 INTEGER :: I, J, K, IJK, IJMK, IJKM, IJMKM, IJKE
72
73 DOUBLE PRECISION :: tmp_A, tmp_B
74
75 DOUBLE PRECISION :: AVG_FACTOR
76
77
78
79 = 0
80
81
82 IF(DES_ONEWAY_COUPLED) RETURN
83
84
85 IF(DES_INTERP_SCHEME_ENUM == DES_INTERP_GARG)THEN
86
87 AVG_FACTOR = merge(0.25d0, 0.5d0, DO_K)
88
89
90
91
92
93 DO IJK = IJKSTART3, IJKEND3
94
95 IF(.NOT.FLUID_AT(IJK)) CYCLE
96
97 I = I_OF(IJK)
98 J = J_OF(IJK)
99 K = K_OF(IJK)
100
101 IF (I.LT.ISTART2 .OR. I.GT.IEND2) CYCLE
102 IF (J.LT.JSTART2 .OR. J.GT.JEND2) CYCLE
103 IF (K.LT.KSTART2 .OR. K.GT.KEND2) CYCLE
104
105 IJMK = FUNIJK_MAP_C(I, J-1, K)
106
107 tmp_A = -AVG_FACTOR*(DRAG_AM(IJK) + DRAG_AM(IJMK))
108 tmp_B = -AVG_FACTOR*(DRAG_BM(IJK,1) + DRAG_BM(IJMK,1))
109
110 IF(DO_K) THEN
111 IJKM = FUNIJK_MAP_C(I, J, K-1)
112 IJMKM = FUNIJK_MAP_C(I, J-1, K-1)
113 tmp_A = tmp_A - AVG_FACTOR* &
114 (DRAG_AM(IJKM) + DRAG_AM(IJMKM))
115 tmp_B = tmp_B - AVG_FACTOR* &
116 (DRAG_BM(IJKM,1) + DRAG_BM(IJMKM,1))
117 ENDIF
118
119 A_M(IJK,0,0) = A_M(IJK,0,0) + tmp_A*VOL_U(IJK)
120 B_M(IJK,0) = B_M(IJK,0) + tmp_B*VOL_U(IJK)
121
122 ENDDO
123
124
125 ELSE
126
127
128
129
130 DO IJK = IJKSTART3, IJKEND3
131 IF(FLUID_AT(IJK)) THEN
132 I = I_OF(IJK)
133 IJKE = EAST_OF(IJK)
134
135 tmp_A = AVG_X(F_GDS(IJK), F_GDS(IJKE), I)
136 tmp_B = AVG_X(DRAG_BM(IJK,1), DRAG_BM(IJKE,1), I)
137
138 IF(DES_EXPLICITLY_COUPLED) tmp_B = tmp_B+tmp_A*U_GO(IJK)
139
140 A_M(IJK,0,0) = A_M(IJK,0,0) - VOL_U(IJK) * tmp_A
141 B_M(IJK,0) = B_M(IJK,0) - VOL_U(IJK) * tmp_B
142 ENDIF
143 ENDDO
144
145 ENDIF
146
147 END SUBROUTINE GAS_DRAG_U
148
149
150
151
152
153
154
155
156
157
158
159 SUBROUTINE GAS_DRAG_V(A_M, B_M, IER)
160
161
162
163
164
165 use particle_filter, only: DES_INTERP_SCHEME_ENUM, DES_INTERP_GARG
166
167 use discretelement, only: DES_ONEWAY_COUPLED
168
169 use discretelement, only: DES_CONTINUUM_HYBRID
170
171 use discretelement, only: DES_EXPLICITLY_COUPLED
172
173 use discretelement, only: DRAG_AM, F_GDS
174
175 use discretelement, only: DRAG_BM
176
177 use geometry, only: VOL_V
178
179 use fldvar, only: V_GO
180
181 use geometry, only: DO_K
182
183
184
185
186 use param, only: DIMENSION_3, DIMENSION_M
187
188 use param1, only: SMALL_NUMBER
189
190 use compar, only: IJKStart3, IJKEnd3
191
192 use indices, only: I_OF, J_OF, K_OF
193
194 use functions, only: FLUID_AT
195
196 use functions, only: NORTH_OF
197
198 use compar, only: FUNIJK_MAP_C
199
200 use fun_avg, only: AVG_Y
201
202 use compar, only: ISTART2, JSTART2, KSTART2
203 use compar, only: IEND2, JEND2, KEND2
204
205
206 IMPLICIT NONE
207
208
209
210
211 DOUBLE PRECISION, INTENT(INOUT) :: A_M(DIMENSION_3, -3:3, 0:DIMENSION_M)
212
213 DOUBLE PRECISION, INTENT(INOUT) :: B_M(DIMENSION_3, 0:DIMENSION_M)
214
215 INTEGER, INTENT(INOUT) :: IER
216
217
218
219
220 INTEGER :: I, J, K, IJK, IMJK, IJKM, IMJKM, IJKN
221
222 DOUBLE PRECISION tmp_A, tmp_B
223
224 DOUBLE PRECISION :: AVG_FACTOR
225
226
227
228 = 0
229
230
231 IF(DES_ONEWAY_COUPLED) RETURN
232
233 IF(DES_INTERP_SCHEME_ENUM == DES_INTERP_GARG)THEN
234
235 AVG_FACTOR = merge(0.25d0, 0.5d0, DO_K)
236
237
238
239
240
241 DO IJK = IJKSTART3, IJKEND3
242 IF(.NOT.FLUID_AT(IJK)) CYCLE
243
244 I = I_OF(IJK)
245 J = J_OF(IJK)
246 K = K_OF(IJK)
247
248 IF (I.LT.ISTART2 .OR. I.GT.IEND2) CYCLE
249 IF (J.LT.JSTART2 .OR. J.GT.JEND2) CYCLE
250 IF (K.LT.KSTART2 .OR. K.GT.KEND2) CYCLE
251
252 IMJK = FUNIJK_MAP_C(I-1,J,K)
253
254 tmp_A = -AVG_FACTOR*(DRAG_AM(IJK) + DRAG_AM(IMJK))
255 tmp_B = -AVG_FACTOR*(DRAG_BM(IJK,2) + DRAG_BM(IMJK,2))
256
257 IF(DO_K) THEN
258
259 IJKM = FUNIJK_MAP_C(I,J,K-1)
260 IMJKM = FUNIJK_MAP_C(I-1,J,K-1)
261
262 tmp_A = tmp_A - AVG_FACTOR* &
263 (DRAG_AM(IJKM) + DRAG_AM(IMJKM))
264 tmp_B = tmp_B - AVG_FACTOR* &
265 (DRAG_BM(IJKM,2) + DRAG_BM(IMJKM,2))
266 ENDIF
267
268 A_M(IJK,0,0) = A_M(IJK,0,0) + tmp_A*VOL_V(IJK)
269 B_M(IJK,0) = B_M(IJK,0) + tmp_B*VOL_V(IJK)
270
271 ENDDO
272
273
274 ELSE
275
276
277
278
279 DO IJK = IJKSTART3, IJKEND3
280 IF(FLUID_AT(IJK)) THEN
281 J = J_OF(IJK)
282 IJKN = NORTH_OF(IJK)
283
284 tmp_A = AVG_Y(F_GDS(IJK), F_GDS(IJKN), J)
285 tmp_B = AVG_Y(DRAG_BM(IJK,2), DRAG_BM(IJKN,2), J)
286
287 IF(DES_EXPLICITLY_COUPLED) tmp_B = tmp_B+tmp_A*V_GO(IJK)
288
289 A_M(IJK,0,0) = A_M(IJK,0,0) - VOL_V(IJK) * tmp_A
290 B_M(IJK,0) = B_M(IJK,0) - VOL_V(IJK) * tmp_B
291 ENDIF
292 ENDDO
293
294 ENDIF
295
296 END SUBROUTINE GAS_DRAG_V
297
298
299
300
301
302
303
304
305
306
307
308 SUBROUTINE GAS_DRAG_W(A_M, B_M, IER)
309
310
311
312
313 use particle_filter, only: DES_INTERP_SCHEME_ENUM, DES_INTERP_GARG
314
315 use discretelement, only: DES_ONEWAY_COUPLED
316
317 use discretelement, only: DES_CONTINUUM_HYBRID
318
319 use discretelement, only: DES_EXPLICITLY_COUPLED
320
321 use discretelement, only: DRAG_AM, F_GDS
322
323 use discretelement, only: DRAG_BM
324
325 use geometry, only: VOL_W
326
327 use geometry, only: DO_K
328
329 use fldvar, only: W_GO
330
331
332
333
334 use param, only: DIMENSION_3, DIMENSION_M
335
336 use param1, only: SMALL_NUMBER
337
338 use compar, only: IJKStart3, IJKEnd3
339
340 use indices, only: I_OF, J_OF, K_OF
341
342 use functions, only: FLUID_AT
343
344 use functions, only: TOP_OF
345
346 use compar, only: FUNIJK_MAP_C
347
348 use fun_avg, only: AVG_Z
349
350 use compar, only: ISTART2, JSTART2, KSTART2
351 use compar, only: IEND2, JEND2, KEND2
352
353 IMPLICIT NONE
354
355
356
357
358 DOUBLE PRECISION, INTENT(INOUT) :: A_M(DIMENSION_3,-3:3,0:DIMENSION_M)
359
360 DOUBLE PRECISION, INTENT(INOUT) :: B_M(DIMENSION_3, 0:DIMENSION_M)
361
362 INTEGER, INTENT(INOUT) :: IER
363
364
365
366
367 INTEGER :: I, J, K, IJK, IMJK, IJMK, IMJMK, IJKT
368
369 DOUBLE PRECISION tmp_A, tmp_B
370
371
372 DOUBLE PRECISION :: AVG_FACTOR
373
374
375
376 = 0
377
378
379 IF(DES_ONEWAY_COUPLED) RETURN
380
381 IF(DES_INTERP_SCHEME_ENUM == DES_INTERP_GARG)THEN
382
383 AVG_FACTOR = 0.25d0
384
385
386
387
388
389 DO IJK = IJKSTART3, IJKEND3
390 IF(.NOT.FLUID_AT(IJK)) CYCLE
391
392 I = I_OF(IJK)
393 J = J_OF(IJK)
394 K = K_OF(IJK)
395
396 IF (I.LT.ISTART2 .OR. I.GT.IEND2) CYCLE
397 IF (J.LT.JSTART2 .OR. J.GT.JEND2) CYCLE
398 IF (K.LT.KSTART2 .OR. K.GT.KEND2) CYCLE
399
400 IMJK = FUNIJK_MAP_C(I-1,J,K)
401 IJMK = FUNIJK_MAP_C(I,J-1,K)
402 IMJMK = FUNIJK_MAP_C(I-1,J-1,K)
403
404 tmp_A = -AVG_FACTOR*(DRAG_AM(IJK) + DRAG_AM(IMJK) + &
405 DRAG_AM(IJMK) + DRAG_AM(IMJMK))
406
407 tmp_B = -AVG_FACTOR*(DRAG_BM(IJK,3) + DRAG_BM(IMJK,3) + &
408 DRAG_BM(IJMK,3) + DRAG_BM(IMJMK,3))
409
410 A_M(IJK,0,0) = A_M(IJK,0,0) + tmp_A*VOL_W(IJK)
411 B_M(IJK,0) = B_M(IJK,0) + tmp_B*VOL_W(IJK)
412
413 ENDDO
414
415
416 ELSE
417
418
419
420
421 DO IJK = IJKSTART3, IJKEND3
422 IF(FLUID_AT(IJK)) THEN
423 K = K_OF(IJK)
424 IJKT = TOP_OF(IJK)
425
426 tmp_A = AVG_Z(F_GDS(IJK), F_GDS(IJKT), K)
427 tmp_B = AVG_Z(DRAG_BM(IJK,3), DRAG_BM(IJKT,3), K)
428
429 IF(DES_EXPLICITLY_COUPLED) tmp_B = tmp_B+tmp_A*W_GO(IJK)
430
431 A_M(IJK,0,0) = A_M(IJK,0,0) - VOL_W(IJK) * tmp_A
432 B_M(IJK,0) = B_M(IJK,0) - VOL_W(IJK) * tmp_B
433 ENDIF
434 ENDDO
435
436
437 ENDIF
438
439 RETURN
440 END SUBROUTINE GAS_DRAG_W
441