File: /nfs/home/0/users/jenkins/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 fldvar, only: EP_G
23
24 use fldvar, only: U_G, V_G, W_G
25
26 use discretelement, only: MAX_PIP
27
28 use particle_filter, only: DES_INTERP_ON
29
30 use particle_filter, only: FILTER_CELL, FILTER_WEIGHT
31
32 use discretelement, only: PIJK
33
34 use discretelement, only: PEA
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 run, only: MODEL_B
47
48 use tmp_array, only: UGC => ARRAY1
49 use tmp_array, only: VGC => ARRAY2
50 use tmp_array, only: WGC => ARRAY3
51
52 use mfix_pic, only: MPPIC
53
54 use mfix_pic, only: MPPIC_PDRAG_IMPLICIT
55
56 use compar, only: IJKStart3, IJKEnd3
57
58 use geometry, only: DO_K
59
60 use functions, only: FLUID_AT
61
62
63
64
65 use param1, only: ZERO
66
67
68 use tmp_array, only: LOCK_TMP_ARRAY
69 use tmp_array, only: UNLOCK_TMP_ARRAY
70
71
72 IMPLICIT NONE
73
74
75 INTEGER :: NP, IJK, LC
76
77 DOUBLE PRECISION :: WEIGHT
78
79 DOUBLE PRECISION :: lEPg, VELFP(3), lPF(3)
80
81 DOUBLE PRECISION :: D_FORCE(3)
82
83 LOGICAL :: MODEL_A
84
85 INTEGER :: LP_BND
86
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
98
99
100 DO NP=1,MAX_PIP
101 IF(.NOT.PEA(NP,1)) CYCLE
102 IF(any(PEA(NP,2:4))) CYCLE
103
104 lEPG = ZERO
105 VELFP = ZERO
106 lPF = ZERO
107
108
109
110 IF(DES_INTERP_ON) THEN
111 DO LC=1,LP_BND
112 IJK = FILTER_CELL(LC,NP)
113 WEIGHT = FILTER_WEIGHT(LC,NP)
114
115 = lEPG + EP_G(IJK)*WEIGHT
116
117 (1) = VELFP(1) + UGC(IJK)*WEIGHT
118 VELFP(2) = VELFP(2) + VGC(IJK)*WEIGHT
119 VELFP(3) = VELFP(3) + WGC(IJK)*WEIGHT
120
121 = lPF + P_FORCE(:,IJK)*WEIGHT
122 ENDDO
123 ELSE
124 IJK = PIJK(NP,4)
125 lEPG = EP_G(IJK)
126 VELFP(1) = UGC(IJK)
127 VELFP(2) = VGC(IJK)
128 VELFP(3) = WGC(IJK)
129 lPF = P_FORCE(:,IJK)
130 ENDIF
131
132 CALL DES_DRAG_GP(NP, DES_VEL_NEW(:,NP), VELFP, lEPg)
133
134
135 IF(MPPIC .AND. MPPIC_PDRAG_IMPLICIT) THEN
136
137 = F_GP(NP)*VELFP
138 ELSE
139
140 = F_GP(NP)*(VELFP - DES_VEL_NEW(:,NP))
141 ENDIF
142
143
144
145 (:,NP) = FC(:,NP) + D_FORCE(:)
146
147 IF(MODEL_A) FC(:,NP) = FC(:,NP) + lPF*PVOL(NP)
148
149 ENDDO
150
151
152 CALL UNLOCK_TMP_ARRAY
153
154 RETURN
155 END SUBROUTINE DRAG_GS_DES1
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176 SUBROUTINE DRAG_GS_GAS1
177
178
179 use fldvar, only: EP_G
180
181 use fldvar, only: U_G, V_G, W_G
182
183 use discretelement, only: MAX_PIP
184
185 use particle_filter, only: DES_INTERP_ON
186
187 use particle_filter, only: FILTER_CELL, FILTER_WEIGHT
188
189 use discretelement, only: PEA
190
191 use discretelement, only: PIJK
192
193 use discretelement, only: F_GP
194
195 use discretelement, only: DES_VEL_NEW
196
197 use discretelement, only: DRAG_BM
198
199 use discretelement, only: F_GDS
200
201 use mfix_pic, only: MPPIC
202
203 use mfix_pic, only: DES_STAT_WT
204
205 use geometry, only: VOL
206
207 use geometry, only: DO_K
208
209 use tmp_array, only: UGC => ARRAY1
210 use tmp_array, only: VGC => ARRAY2
211 use tmp_array, only: WGC => ARRAY3
212
213 use tmp_array, only: LOCK_TMP_ARRAY
214 use tmp_array, only: UNLOCK_TMP_ARRAY
215
216 use sendrecv, only: SEND_RECV
217
218
219
220
221
222 use param1, only: ZERO, ONE
223
224 IMPLICIT NONE
225
226
227 INTEGER :: NP, IJK, LC
228
229 DOUBLE PRECISION :: WEIGHT
230
231 DOUBLE PRECISION :: lEPg, VELFP(3)
232
233 INTEGER :: LP_BND
234
235 DOUBLE PRECISION :: lFORCE
236
237 DOUBLE PRECISION :: lDRAG_BM(3)
238
239
240
241 = ZERO
242 DRAG_BM = ZERO
243
244
245 = merge(27,9,DO_K)
246
247
248 CALL LOCK_TMP_ARRAY
249
250
251 CALL CALC_CELL_CENTER_GAS_VEL
252
253
254 DO NP=1,MAX_PIP
255 IF(.NOT.PEA(NP,1)) CYCLE
256
257
258
259 IF(any(PEA(NP,2:3))) CYCLE
260
261 lEPG = ZERO
262 VELFP = ZERO
263
264
265
266 IF(DES_INTERP_ON) THEN
267 DO LC=1,LP_BND
268 IJK = FILTER_CELL(LC,NP)
269 WEIGHT = FILTER_WEIGHT(LC,NP)
270
271 = lEPG + EP_G(IJK)*WEIGHT
272
273 (1) = VELFP(1) + UGC(IJK)*WEIGHT
274 VELFP(2) = VELFP(2) + VGC(IJK)*WEIGHT
275 VELFP(3) = VELFP(3) + WGC(IJK)*WEIGHT
276 ENDDO
277 ELSE
278 IJK = PIJK(NP,4)
279 lEPG = EP_G(IJK)
280 VELFP(1) = UGC(IJK)
281 VELFP(2) = VGC(IJK)
282 VELFP(3) = WGC(IJK)
283 ENDIF
284
285
286 IF(lEPg == ZERO) lEPG = EP_g(PIJK(NP,4))
287
288 CALL DES_DRAG_GP(NP, DES_VEL_NEW(:,NP), VELFP, lEPg)
289
290 lFORCE = F_GP(NP)
291 IF(MPPIC) lFORCE = lFORCE*DES_STAT_WT(NP)
292
293 lDRAG_BM = lFORCE*DES_VEL_NEW(:,NP)
294
295 IF(DES_INTERP_ON) THEN
296 DO LC=1,LP_BND
297 IJK = FILTER_CELL(LC,NP)
298 WEIGHT = FILTER_WEIGHT(LC,NP)/VOL(IJK)
299
300 DRAG_BM(IJK,:) = DRAG_BM(IJK,:) + lDRAG_BM*WEIGHT
301 F_GDS(IJK) = F_GDS(IJK) + lFORCE*WEIGHT
302 ENDDO
303 ELSE
304 IJK = PIJK(NP,4)
305 WEIGHT = ONE/VOL(IJK)
306
307 DRAG_BM(IJK,:) = DRAG_BM(IJK,:) + lDRAG_BM*WEIGHT
308 F_GDS(IJK) = F_GDS(IJK) + lFORCE*WEIGHT
309 ENDIF
310
311 ENDDO
312
313
314 CALL UNLOCK_TMP_ARRAY
315
316
317 CALL SEND_RECV(F_GDS, 2)
318 CALL SEND_RECV(DRAG_BM, 2)
319
320
321 RETURN
322 END SUBROUTINE DRAG_GS_GAS1
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341 SUBROUTINE DRAG_GS_EXPLICIT1
342
343
344 use fldvar, only: EP_G
345
346 use fldvar, only: U_G, V_G, W_G
347
348 use discretelement, only: MAX_PIP
349
350 use particle_filter, only: DES_INTERP_ON
351
352 use particle_filter, only: FILTER_CELL, FILTER_WEIGHT
353
354 use discretelement, only: PEA
355
356 use discretelement, only: PIJK
357
358 use discretelement, only: F_GP
359
360 use discretelement, only: DES_VEL_NEW
361
362 use discretelement, only: DRAG_FC
363
364 use discretelement, only: DRAG_BM
365
366 use discretelement, only: F_GDS
367
368 use mfix_pic, only: MPPIC
369
370 use mfix_pic, only: DES_STAT_WT
371
372 use geometry, only: VOL
373
374 use geometry, only: DO_K
375
376 use tmp_array, only: UGC => ARRAY1
377 use tmp_array, only: VGC => ARRAY2
378 use tmp_array, only: WGC => ARRAY3
379
380 use tmp_array, only: LOCK_TMP_ARRAY
381 use tmp_array, only: UNLOCK_TMP_ARRAY
382
383 use sendrecv, only: SEND_RECV
384
385
386
387
388
389
390 use param1, only: ZERO, ONE
391
392 IMPLICIT NONE
393
394
395 INTEGER :: NP, IJK, LC
396
397 DOUBLE PRECISION :: WEIGHT
398
399 DOUBLE PRECISION :: lEPg, VELFP(3)
400
401 INTEGER :: LP_BND
402
403 DOUBLE PRECISION :: lFORCE
404
405 DOUBLE PRECISION :: lDRAG_BM(3)
406
407
408
409 = ZERO
410 DRAG_BM = ZERO
411
412
413 = merge(27,9,DO_K)
414
415
416 CALL LOCK_TMP_ARRAY
417
418
419 CALL CALC_CELL_CENTER_GAS_VEL
420
421
422
423
424
425
426
427
428
429 DO NP=1,MAX_PIP
430 IF(.NOT.PEA(NP,1)) CYCLE
431
432
433
434 IF(any(PEA(NP,2:3))) THEN
435 DRAG_FC(:,NP) = ZERO
436 CYCLE
437 ENDIF
438
439 lEPG = ZERO
440 VELFP = ZERO
441
442
443
444 IF(DES_INTERP_ON) THEN
445 DO LC=1,LP_BND
446 IJK = FILTER_CELL(LC,NP)
447 WEIGHT = FILTER_WEIGHT(LC,NP)
448
449 = lEPG + EP_G(IJK)*WEIGHT
450
451 (1) = VELFP(1) + UGC(IJK)*WEIGHT
452 VELFP(2) = VELFP(2) + VGC(IJK)*WEIGHT
453 VELFP(3) = VELFP(3) + WGC(IJK)*WEIGHT
454 ENDDO
455 ELSE
456 IJK = PIJK(NP,4)
457 lEPG = EP_G(IJK)
458 VELFP(1) = UGC(IJK)
459 VELFP(2) = VGC(IJK)
460 VELFP(3) = WGC(IJK)
461 ENDIF
462
463
464 IF(lEPG == ZERO) lEPG = EP_G(PIJK(NP,4))
465
466 CALL DES_DRAG_GP(NP, DES_VEL_NEW(:,NP), VELFP, lEPg)
467
468
469 (:,NP) = F_GP(NP)*(VELFP - DES_VEL_NEW(:,NP))
470
471
472 = F_GP(NP)
473 IF(MPPIC) lFORCE = lFORCE*DES_STAT_WT(NP)
474
475 lDRAG_BM(:) = lFORCE*(DES_VEL_NEW(:,NP) - VELFP)
476
477 IF(DES_INTERP_ON) THEN
478 DO LC=1,LP_BND
479 IJK = FILTER_CELL(LC,NP)
480 WEIGHT = FILTER_WEIGHT(LC,NP)/VOL(IJK)
481
482 (IJK,1) = DRAG_BM(IJK,1) + lDRAG_BM(1)*WEIGHT
483
484 (IJK,2) = DRAG_BM(IJK,2) + lDRAG_BM(2)*WEIGHT
485
486 (IJK,3) = DRAG_BM(IJK,3) + lDRAG_BM(3)*WEIGHT
487
488 (IJK) = F_GDS(IJK) + lFORCE*WEIGHT
489 ENDDO
490 ELSE
491 IJK = PIJK(NP,4)
492 WEIGHT = ONE/VOL(IJK)
493
494 (IJK,1) = DRAG_BM(IJK,1) + lDRAG_BM(1)*WEIGHT
495
496 (IJK,2) = DRAG_BM(IJK,2) + lDRAG_BM(2)*WEIGHT
497
498 (IJK,3) = DRAG_BM(IJK,3) + lDRAG_BM(3)*WEIGHT
499
500 (IJK) = F_GDS(IJK) + lFORCE*WEIGHT
501 ENDIF
502 ENDDO
503
504
505
506
507 CALL UNLOCK_TMP_ARRAY
508
509
510 CALL SEND_RECV(F_GDS, 2)
511 CALL SEND_RECV(DRAG_BM, 2)
512
513
514 RETURN
515 END SUBROUTINE DRAG_GS_EXPLICIT1
516
517
518
519
520
521
522
523
524
525
526
527
528
529 SUBROUTINE CALC_CELL_CENTER_GAS_VEL
530
531
532
533
534 use fldvar, only: U_G, V_G, W_G
535
536 use fun_avg, only: AVG_X_E, AVG_Y_N, AVG_Z_T
537
538 use cutcell, only: CUT_U_TREATMENT_AT, THETA_UE, THETA_UE_BAR
539 use cutcell, only: CUT_V_TREATMENT_AT, THETA_VN, THETA_VN_BAR
540 use cutcell, only: CUT_W_TREATMENT_AT, THETA_WT, THETA_WT_BAR
541
542 use functions, only: IM_OF, JM_OF, KM_OF
543 use indices, only: I_OF
544
545 use compar, only: IJKStart3, IJKEnd3
546
547 use geometry, only: DO_K
548
549 use functions, only: FLUID_AT
550
551 use tmp_array, only: UGC => ARRAY1
552 use tmp_array, only: VGC => ARRAY2
553 use tmp_array, only: WGC => ARRAY3
554
555
556
557
558 use param1, only: ZERO
559
560 IMPLICIT NONE
561
562
563
564
565 INTEGER :: IJK, IMJK, IJMK, IJKM
566
567
568 DO IJK=IJKSTART3, IJKEND3
569 IF(FLUID_AT(IJK)) THEN
570 IMJK = IM_OF(IJK)
571 IF(CUT_U_TREATMENT_AT(IMJK)) THEN
572 UGC(IJK) = (THETA_UE_BAR(IMJK)*U_G(IMJK) + &
573 THETA_UE(IMJK)*U_G(IJK))
574 ELSE
575 UGC(IJK) = AVG_X_E(U_G(IMJK),U_G(IJK),I_OF(IJK))
576 ENDIF
577
578 IJMK = JM_OF(IJK)
579 IF(CUT_V_TREATMENT_AT(IJMK)) THEN
580 VGC(IJK) = (THETA_VN_BAR(IJMK)*V_G(IJMK) + &
581 THETA_VN(IJMK)*V_G(IJK))
582 ELSE
583 VGC(IJK) = AVG_Y_N(V_G(IJMK),V_G(IJK))
584 ENDIF
585
586 IF(DO_K) THEN
587 IJKM = KM_OF(IJK)
588 IF(CUT_W_TREATMENT_AT(IJKM)) THEN
589 WGC(IJK) = (THETA_WT_BAR(IJKM)*W_G(IJKM) + &
590 THETA_WT(IJKM)* W_G(IJK))
591 ELSE
592 WGC(IJK) = AVG_Z_T(W_G(IJKM),W_G(IJK))
593 ENDIF
594 ELSE
595 WGC(IJK) = ZERO
596 ENDIF
597 ELSE
598 UGC(IJK) = ZERO
599 VGC(IJK) = ZERO
600 WGC(IJK) = ZERO
601 ENDIF
602 ENDDO
603
604
605 RETURN
606 END SUBROUTINE CALC_CELL_CENTER_GAS_VEL
607
608