File: RELATIVE:/../../../mfix.git/model/des/drag_gs_des1.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 SUBROUTINE DRAG_GS_DES1
20
21
22 use discretelement, only: DES_EXPLICITLY_COUPLED
23
24 use fldvar, only: EP_G
25
26 use fldvar, only: U_G, V_G, W_G
27
28 use discretelement, only: MAX_PIP
29
30 use particle_filter, only: DES_INTERP_ON
31
32 use particle_filter, only: FILTER_CELL, FILTER_WEIGHT
33
34 use discretelement, only: PIJK
35
36 use discretelement, only: F_GP
37
38 use discretelement, only: DES_VEL_NEW
39
40 use discretelement, only: FC
41
42 use discretelement, only: P_FORCE
43
44 use discretelement, only: PVOL
45
46 use discretelement, only: DRAG_FC
47
48 use run, only: MODEL_B
49
50 use tmp_array, only: UGC => ARRAY1
51 use tmp_array, only: VGC => ARRAY2
52 use tmp_array, only: WGC => ARRAY3
53
54 use mfix_pic, only: MPPIC
55
56 use mfix_pic, only: MPPIC_PDRAG_IMPLICIT
57
58 use geometry, only: DO_K
59
60 use functions, only: FLUID_AT
61
62 use functions, only: is_normal
63
64
65
66
67 use param1, only: ZERO
68
69
70 use tmp_array, only: LOCK_TMP_ARRAY
71 use tmp_array, only: UNLOCK_TMP_ARRAY
72
73 IMPLICIT NONE
74
75
76 INTEGER :: NP, IJK, LC
77
78 DOUBLE PRECISION :: WEIGHT
79
80 DOUBLE PRECISION :: lEPg, VELFP(3), lPF(3)
81
82 DOUBLE PRECISION :: D_FORCE(3)
83
84 LOGICAL :: MODEL_A
85
86 INTEGER :: LP_BND
87
88
89 = .NOT.MODEL_B
90
91 = merge(27,9,DO_K)
92
93
94 CALL LOCK_TMP_ARRAY
95
96
97 CALL CALC_CELL_CENTER_GAS_VEL(U_G, V_G, W_G)
98
99
100
101
102
103
104
105
106 DO NP=1,MAX_PIP
107 IF(.NOT.IS_NORMAL(NP)) CYCLE
108
109 IF(.NOT.FLUID_AT(PIJK(NP,4))) CYCLE
110
111 lEPG = ZERO
112 VELFP = ZERO
113 lPF = ZERO
114
115
116
117 IF(DES_INTERP_ON) THEN
118 DO LC=1,LP_BND
119 IJK = FILTER_CELL(LC,NP)
120 WEIGHT = FILTER_WEIGHT(LC,NP)
121
122 = lEPG + EP_G(IJK)*WEIGHT
123
124 (1) = VELFP(1) + UGC(IJK)*WEIGHT
125 VELFP(2) = VELFP(2) + VGC(IJK)*WEIGHT
126 VELFP(3) = VELFP(3) + WGC(IJK)*WEIGHT
127
128 = lPF + P_FORCE(:,IJK)*WEIGHT
129 ENDDO
130 ELSE
131 IJK = PIJK(NP,4)
132 lEPG = EP_G(IJK)
133 VELFP(1) = UGC(IJK)
134 VELFP(2) = VGC(IJK)
135 VELFP(3) = WGC(IJK)
136 lPF = P_FORCE(:,IJK)
137 ENDIF
138
139
140
141 IF(DES_EXPLICITLY_COUPLED) THEN
142
143 DRAG_FC(:,NP) = F_GP(NP)*(VELFP - DES_VEL_NEW(:,NP))
144
145 ELSE
146
147
148 CALL DES_DRAG_GP(NP, DES_VEL_NEW(:,NP), VELFP, lEPg)
149
150
151 IF(MPPIC .AND. MPPIC_PDRAG_IMPLICIT) THEN
152
153 = F_GP(NP)*VELFP
154 ELSE
155
156 = F_GP(NP)*(VELFP - DES_VEL_NEW(:,NP))
157 ENDIF
158
159
160
161 (:,NP) = FC(:,NP) + D_FORCE(:)
162
163 IF(MODEL_A) FC(:,NP) = FC(:,NP) + lPF*PVOL(NP)
164
165 ENDIF
166
167 ENDDO
168
169
170
171 CALL UNLOCK_TMP_ARRAY
172
173 RETURN
174 END SUBROUTINE DRAG_GS_DES1
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193 SUBROUTINE DRAG_GS_GAS1
194
195
196 use discretelement, only: DES_EXPLICITLY_COUPLED
197
198 use fldvar, only: EP_G
199
200 use fldvar, only: U_G, V_G, W_G
201 use fldvar, only: U_GO, V_GO, W_GO
202
203 use discretelement, only: MAX_PIP
204
205 use particle_filter, only: DES_INTERP_ON
206
207 use particle_filter, only: FILTER_CELL, FILTER_WEIGHT
208
209 use discretelement, only: PIJK
210
211 use discretelement, only: F_GP
212
213 use discretelement, only: DES_VEL_NEW
214
215 use discretelement, only: DRAG_BM
216
217 use discretelement, only: F_GDS
218
219 use mfix_pic, only: MPPIC
220
221 use mfix_pic, only: DES_STAT_WT
222
223 use geometry, only: VOL
224
225 use geometry, only: DO_K
226
227 use tmp_array, only: UGC => ARRAY1
228 use tmp_array, only: VGC => ARRAY2
229 use tmp_array, only: WGC => ARRAY3
230
231 use tmp_array, only: LOCK_TMP_ARRAY
232 use tmp_array, only: UNLOCK_TMP_ARRAY
233
234 use sendrecv, only: SEND_RECV
235
236 use functions, only: IS_NONEXISTENT, IS_ENTERING, IS_ENTERING_GHOST, IS_EXITING, IS_EXITING_GHOST
237
238
239
240
241 use param1, only: ZERO, ONE
242
243 IMPLICIT NONE
244
245
246 INTEGER :: NP, IJK, LC
247
248 DOUBLE PRECISION :: WEIGHT
249
250 DOUBLE PRECISION :: lEPg, VELFP(3)
251
252 INTEGER :: LP_BND
253
254 DOUBLE PRECISION :: lFORCE
255
256 DOUBLE PRECISION :: lDRAG_BM(3)
257
258
259 = ZERO
260 DRAG_BM = ZERO
261
262
263 = merge(27,9,DO_K)
264
265
266 CALL LOCK_TMP_ARRAY
267
268
269 IF(DES_EXPLICITLY_COUPLED) THEN
270 CALL CALC_CELL_CENTER_GAS_VEL(U_GO, V_GO, W_GO)
271 ELSE
272 CALL CALC_CELL_CENTER_GAS_VEL(U_G, V_G, W_G)
273 ENDIF
274
275
276
277
278
279
280
281 DO NP=1,MAX_PIP
282 IF(IS_NONEXISTENT(NP)) CYCLE
283
284
285
286 IF(IS_ENTERING(NP) .OR. IS_EXITING(NP) .OR. IS_ENTERING_GHOST(NP) .OR. IS_EXITING_GHOST(NP)) CYCLE
287
288 lEPG = ZERO
289 VELFP = ZERO
290
291
292
293 IF(DES_INTERP_ON) THEN
294 DO LC=1,LP_BND
295 IJK = FILTER_CELL(LC,NP)
296 WEIGHT = FILTER_WEIGHT(LC,NP)
297
298 = lEPG + EP_G(IJK)*WEIGHT
299
300 (1) = VELFP(1) + UGC(IJK)*WEIGHT
301 VELFP(2) = VELFP(2) + VGC(IJK)*WEIGHT
302 VELFP(3) = VELFP(3) + WGC(IJK)*WEIGHT
303 ENDDO
304 ELSE
305 IJK = PIJK(NP,4)
306 lEPG = EP_G(IJK)
307 VELFP(1) = UGC(IJK)
308 VELFP(2) = VGC(IJK)
309 VELFP(3) = WGC(IJK)
310 ENDIF
311
312
313 IF(lEPg == ZERO) lEPG = EP_g(PIJK(NP,4))
314
315
316 CALL DES_DRAG_GP(NP, DES_VEL_NEW(:,NP), VELFP, lEPg)
317
318 lFORCE = F_GP(NP)
319 IF(MPPIC) lFORCE = lFORCE*DES_STAT_WT(NP)
320
321 lDRAG_BM = lFORCE*DES_VEL_NEW(:,NP)
322
323 IF(DES_INTERP_ON) THEN
324 DO LC=1,LP_BND
325 IJK = FILTER_CELL(LC,NP)
326 WEIGHT = FILTER_WEIGHT(LC,NP)/VOL(IJK)
327
328
329 (IJK,1) = DRAG_BM(IJK,1) + lDRAG_BM(1)*WEIGHT
330
331 (IJK,2) = DRAG_BM(IJK,2) + lDRAG_BM(2)*WEIGHT
332
333 (IJK,3) = DRAG_BM(IJK,3) + lDRAG_BM(3)*WEIGHT
334
335 (IJK) = F_GDS(IJK) + lFORCE*WEIGHT
336 ENDDO
337 ELSE
338 IJK = PIJK(NP,4)
339 WEIGHT = ONE/VOL(IJK)
340
341
342 (IJK,1) = DRAG_BM(IJK,1) + lDRAG_BM(1)*WEIGHT
343
344 (IJK,2) = DRAG_BM(IJK,2) + lDRAG_BM(2)*WEIGHT
345
346 (IJK,3) = DRAG_BM(IJK,3) + lDRAG_BM(3)*WEIGHT
347
348
349 (IJK) = F_GDS(IJK) + lFORCE*WEIGHT
350 ENDIF
351
352 ENDDO
353
354
355
356 CALL UNLOCK_TMP_ARRAY
357
358
359 CALL SEND_RECV(F_GDS, 2)
360 CALL SEND_RECV(DRAG_BM, 2)
361
362 RETURN
363 END SUBROUTINE DRAG_GS_GAS1
364
365
366
367
368
369
370
371
372
373
374
375 SUBROUTINE CALC_CELL_CENTER_GAS_VEL(lUg, lVg, lWg)
376
377
378
379
380 use fun_avg, only: AVG_X_E, AVG_Y_N, AVG_Z_T
381
382 use cutcell, only: CUT_U_TREATMENT_AT, THETA_UE, THETA_UE_BAR
383 use cutcell, only: CUT_V_TREATMENT_AT, THETA_VN, THETA_VN_BAR
384 use cutcell, only: CUT_W_TREATMENT_AT, THETA_WT, THETA_WT_BAR
385
386 use functions, only: IM_OF, JM_OF, KM_OF
387 use indices, only: I_OF
388
389 use compar, only: IJKStart3, IJKEnd3
390
391 use geometry, only: DO_K
392
393 use functions, only: FLUID_AT
394
395 use tmp_array, only: UGC => ARRAY1
396 use tmp_array, only: VGC => ARRAY2
397 use tmp_array, only: WGC => ARRAY3
398
399
400
401
402 use param, only: DIMENSION_3
403 use param1, only: ZERO
404
405 IMPLICIT NONE
406
407
408
409 DOUBLE PRECISION, INTENT(IN) :: lUg(DIMENSION_3)
410 DOUBLE PRECISION, INTENT(IN) :: lVg(DIMENSION_3)
411 DOUBLE PRECISION, INTENT(IN) :: lWg(DIMENSION_3)
412
413
414
415
416 INTEGER :: IJK, IMJK, IJMK, IJKM
417
418
419 DO IJK=IJKSTART3, IJKEND3
420 IF(FLUID_AT(IJK)) THEN
421 IMJK = IM_OF(IJK)
422 IF(CUT_U_TREATMENT_AT(IMJK)) THEN
423 UGC(IJK) = (THETA_UE_BAR(IMJK)*lUG(IMJK) + &
424 THETA_UE(IMJK)*lUg(IJK))
425 ELSE
426 UGC(IJK) = AVG_X_E(lUG(IMJK),lUG(IJK),I_OF(IJK))
427 ENDIF
428
429 IJMK = JM_OF(IJK)
430 IF(CUT_V_TREATMENT_AT(IJMK)) THEN
431 VGC(IJK) = (THETA_VN_BAR(IJMK)*lVG(IJMK) + &
432 THETA_VN(IJMK)*lVg(IJK))
433 ELSE
434 VGC(IJK) = AVG_Y_N(lVg(IJMK),lVg(IJK))
435 ENDIF
436
437 IF(DO_K) THEN
438 IJKM = KM_OF(IJK)
439 IF(CUT_W_TREATMENT_AT(IJKM)) THEN
440 WGC(IJK) = (THETA_WT_BAR(IJKM)*lWg(IJKM) + &
441 THETA_WT(IJKM)* lWg(IJK))
442 ELSE
443 WGC(IJK) = AVG_Z_T(lWg(IJKM),lWg(IJK))
444 ENDIF
445 ELSE
446 WGC(IJK) = ZERO
447 ENDIF
448 ELSE
449 UGC(IJK) = ZERO
450 VGC(IJK) = ZERO
451 WGC(IJK) = ZERO
452 ENDIF
453 ENDDO
454
455 RETURN
456 END SUBROUTINE CALC_CELL_CENTER_GAS_VEL
457