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