File: N:\mfix\model\conv_dif_w_g.f
1
2
3
4
5
6
7
8
9
10
11
12
13 SUBROUTINE CONV_DIF_W_G(A_M, B_M)
14
15
16
17 USE param, only: dimension_3, dimension_m
18 USE run, only: momentum_z_eq
19 USE run, only: discretize
20 USE run, only: def_cor
21 USE visc_g, only: epmu_gt
22 IMPLICIT NONE
23
24
25
26
27 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
28
29 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
30
31
32 IF (.NOT.MOMENTUM_Z_EQ(0)) RETURN
33
34 IF (DEF_COR) THEN
35
36 CALL STORE_A_W_G0 (A_M)
37 IF (DISCRETIZE(5) > 1) CALL STORE_A_W_GDC(B_M(1,0))
38
39 ELSE
40
41 IF (DISCRETIZE(5) == 0) THEN
42 CALL STORE_A_W_G0 (A_M)
43 ELSE
44 CALL STORE_A_W_G1 (A_M)
45 ENDIF
46 ENDIF
47
48 CALL DIF_W_IS(EPMU_GT, A_M, 0)
49
50 RETURN
51 END SUBROUTINE CONV_DIF_W_G
52
53
54
55
56
57
58
59
60 SUBROUTINE GET_WCELL_GVTERMS(U, V, WW)
61
62
63
64 USE compar, only: ijkstart3, ijkend3
65
66 USE cutcell, only: cut_w_treatment_at
67 USE cutcell, only: theta_wt, theta_wt_bar
68 USE cutcell, only: theta_w_be, theta_w_te
69 USE cutcell, only: theta_w_bn, theta_w_tn
70 USE cutcell, only: alpha_we_c, alpha_wn_c, alpha_wt_c
71
72 USE fldvar, only: u_g, v_g, w_g
73
74 USE fun_avg, only: avg_z_t, avg_z
75 USE functions, only: kp_of
76 USE indices, only: k_of
77
78 USE param, only: dimension_3
79 IMPLICIT NONE
80
81
82
83 DOUBLE PRECISION, INTENT(OUT) :: U(DIMENSION_3)
84 DOUBLE PRECISION, INTENT(OUT) :: V(DIMENSION_3)
85 DOUBLE PRECISION, INTENT(OUT) :: WW(DIMENSION_3)
86
87
88
89
90 INTEGER :: IJK, K, IJKP
91
92 DOUBLE PRECISION :: AW, HW, VELW
93
94
95
96
97 DO IJK = ijkstart3, ijkend3
98 K = K_OF(IJK)
99 IJKP = KP_OF(IJK)
100
101 IF(CUT_W_TREATMENT_AT(IJK)) THEN
102
103
104 (IJK) = (Theta_W_be(IJK) * U_G(IJK) + &
105 Theta_W_te(IJK) * U_G(IJKP))
106 CALL GET_INTERPOLATION_TERMS_G(IJK,'W_MOMENTUM', &
107 ALPHA_We_c(IJK), AW, HW, VELW)
108 U(IJK) = U(IJK) * AW
109
110
111 (IJK) = (Theta_W_bn(IJK) * V_G(IJK) + &
112 Theta_W_tn(IJK) * V_G(IJKP))
113 CALL GET_INTERPOLATION_TERMS_G(IJK,'W_MOMENTUM', &
114 ALPHA_Wn_c(IJK), AW, HW, VELW)
115 V(IJK) = V(IJK) * AW
116
117
118 (IJK) = (Theta_Wt_bar(IJK) * W_G(IJK) + &
119 Theta_Wt(IJK) * W_G(IJKP))
120 CALL GET_INTERPOLATION_TERMS_G(IJK,'W_MOMENTUM', &
121 alpha_Wt_c(IJK), AW, HW, VELW)
122 WW(IJK) = WW(IJK) * AW
123
124 ELSE
125 U(IJK) = AVG_Z(U_G(IJK),U_G(IJKP),K)
126 V(IJK) = AVG_Z(V_G(IJK),V_G(IJKP),K)
127 WW(IJK) = AVG_Z_T(W_G(IJK),W_G(IJKP))
128 ENDIF
129 ENDDO
130
131 RETURN
132 END SUBROUTINE GET_WCELL_GVTERMS
133
134
135
136
137
138
139
140
141
142
143 SUBROUTINE GET_WCELL_GCFLUX_TERMS(FLUX_E, FLUX_W, FLUX_N, &
144 FLUX_S, FLUX_T, FLUX_B, IJK)
145
146
147
148 USE cutcell, only: cut_w_treatment_at
149 USE cutcell, only: theta_wt, theta_wt_bar
150 USE cutcell, only: theta_w_be, theta_w_te
151 USE cutcell, only: theta_w_bn, theta_w_tn
152 USE cutcell, only: alpha_we_c, alpha_wn_c, alpha_wt_c
153
154 USE functions, only: kp_of, im_of, jm_of, km_of
155
156 USE mflux, only: flux_ge, flux_gn, flux_gt
157
158 USE param1, only: half
159 IMPLICIT NONE
160
161
162
163
164 DOUBLE PRECISION, INTENT(OUT) :: flux_e, flux_w
165 DOUBLE PRECISION, INTENT(OUT) :: flux_n, flux_s
166 DOUBLE PRECISION, INTENT(OUT) :: flux_t, flux_b
167
168 INTEGER, INTENT(IN) :: ijk
169
170
171
172
173 INTEGER :: imjk, ijmk, ijkm
174 INTEGER :: ijkp, imjkp, ijmkp
175
176
177 DOUBLE PRECISION :: AW, HW, VELW
178
179
180 = KP_OF(IJK)
181 IMJK = IM_OF(IJK)
182 IJMK = JM_OF(IJK)
183 IJKM = KM_OF(IJK)
184 IMJKP = KP_OF(IMJK)
185 IJMKP = KP_OF(IJMK)
186
187 IF(CUT_W_TREATMENT_AT(IJK)) THEN
188
189 = (Theta_W_be(IJK) * Flux_gE(IJK) + &
190 Theta_W_te(IJK) * Flux_gE(IJKP))
191 CALL GET_INTERPOLATION_TERMS_G(IJK,'W_MOMENTUM',&
192 ALPHA_We_c(IJK), AW, HW, VELW)
193 Flux_e = Flux_e * AW
194
195 = (Theta_W_be(IMJK) * Flux_gE(IMJK) + &
196 Theta_W_te(IMJK) * Flux_gE(IMJKP))
197 CALL GET_INTERPOLATION_TERMS_G(IJK,'W_MOMENTUM',&
198 ALPHA_We_c(IMJK), AW, HW, VELW)
199 Flux_w = Flux_w * AW
200
201
202
203 = (Theta_W_bn(IJK) * Flux_gN(IJK) + &
204 Theta_W_tn(IJK) * Flux_gN(IJKP))
205 CALL GET_INTERPOLATION_TERMS_G(IJK,'W_MOMENTUM',&
206 ALPHA_Wn_c(IJK), AW, HW, VELW)
207 Flux_n = Flux_n * AW
208
209 = (Theta_W_bn(IJMK) * Flux_gN(IJMK) + &
210 Theta_W_tn(IJMK) * Flux_gN(IJMKP))
211 CALL GET_INTERPOLATION_TERMS_G(IJK,'W_MOMENTUM',&
212 ALPHA_Wn_c(IJMK), AW, HW, VELW)
213 Flux_s = Flux_s * AW
214
215
216
217 = (Theta_Wt_bar(IJK) * Flux_gT(IJK) + &
218 Theta_Wt(IJK) * Flux_gT(IJKP))
219 CALL GET_INTERPOLATION_TERMS_G(IJK,'W_MOMENTUM',&
220 alpha_Wt_c(IJK),AW,HW,VELW)
221 Flux_t = Flux_t * AW
222
223 = (Theta_Wt_bar(IJKM) * Flux_gT(IJKM) + &
224 Theta_Wt(IJKM) * Flux_gT(IJK))
225 CALL GET_INTERPOLATION_TERMS_G(IJK,'W_MOMENTUM',&
226 alpha_Wt_c(IJKM), AW, HW, VELW)
227 Flux_b = Flux_b * AW
228 ELSE
229 Flux_e = HALF * (Flux_gE(IJK) + Flux_gE(IJKP))
230 Flux_w = HALF * (Flux_gE(IMJK) + Flux_gE(IMJKP))
231 Flux_n = HALF * (Flux_gN(IJK) + Flux_gN(IJKP))
232 Flux_s = HALF * (Flux_gN(IJMK) + Flux_gN(IJMKP))
233 Flux_t = HALF * (Flux_gT(IJK) + Flux_gT(IJKP))
234 Flux_b = HALF * (Flux_gT(IJKM) + Flux_gT(IJK))
235 ENDIF
236
237 RETURN
238 END SUBROUTINE GET_WCELL_GCFLUX_TERMS
239
240
241
242
243
244
245
246
247
248
249 SUBROUTINE GET_WCELL_GDIFF_TERMS(D_FE, D_FW, D_FN, D_FS, &
250 D_FT, D_FB, IJK)
251
252
253
254 USE cutcell, only: cut_w_treatment_at
255 USE cutcell, only: oneodx_e_w, oneody_n_w, oneodz_t_w
256
257 USE fldvar, only: epg_jfac
258
259 USE functions, only: wall_at
260 USE functions, only: east_of, north_of, top_of
261 USE functions, only: west_of, south_of
262 USE functions, only: im_of, jm_of, km_of
263
264 USE geometry, only: odx_e, ody_n, odz
265 USE geometry, only: ox
266 USE geometry, only: ayz_w, axz_w, axy_w
267
268 USE indices, only: i_of, j_of, k_of
269 USE indices, only: kp1, im1, jm1
270
271 USE visc_g, only: epmu_gt, df_gw
272 USE param
273 IMPLICIT NONE
274
275
276
277
278 DOUBLE PRECISION, INTENT(OUT) :: d_fe, d_fw
279 DOUBLE PRECISION, INTENT(OUT) :: d_fn, d_fs
280 DOUBLE PRECISION, INTENT(OUT) :: d_ft, d_fb
281
282 INTEGER, INTENT(IN) :: ijk
283
284
285
286
287 INTEGER :: imjk, ijmk, ijkm
288 INTEGER :: i, j, k, kp, im, jm
289 INTEGER :: ijkc, ijkt, ijke, ijkte, ijkw, ijkwt
290 INTEGER :: ijkn, ijktn, ijks, ijkst
291
292 DOUBLE PRECISION :: C_AE, C_AW, C_AN, C_AS, C_AT, C_AB
293
294 DOUBLE PRECISION :: EPGA
295
296
297 = IM_OF(IJK)
298 IJMK = JM_OF(IJK)
299 IJKM = KM_OF(IJK)
300
301 I = I_OF(IJK)
302 J = J_OF(IJK)
303 K = K_OF(IJK)
304 KP = KP1(K)
305 IM = IM1(I)
306 JM = JM1(J)
307
308 IJKT = TOP_OF(IJK)
309 IF (WALL_AT(IJK)) THEN
310 IJKC = IJKT
311 ELSE
312 IJKC = IJK
313 ENDIF
314 IJKE = EAST_OF(IJK)
315 IJKTE = EAST_OF(IJKT)
316 IJKN = NORTH_OF(IJK)
317 IJKTN = NORTH_OF(IJKT)
318 IJKW = WEST_OF(IJK)
319 IJKWT = TOP_OF(IJKW)
320 IJKS = SOUTH_OF(IJK)
321 IJKST = TOP_OF(IJKS)
322
323 IF(CUT_W_TREATMENT_AT(IJK)) THEN
324 C_AE = ONEoDX_E_W(IJK)
325 C_AW = ONEoDX_E_W(IMJK)
326 C_AN = ONEoDY_N_W(IJK)
327 C_AS = ONEoDY_N_W(IJMK)
328 C_AT = ONEoDZ_T_W(IJK)
329 C_AB = ONEoDZ_T_W(IJKM)
330 ELSE
331 C_AE = ODX_E(I)
332 C_AW = ODX_E(IM)
333 C_AN = ODY_N(J)
334 C_AS = ODY_N(JM)
335 C_AT = ODZ(KP)
336 C_AB = ODZ(K)
337 ENDIF
338
339
340 = AVG_Z_H(AVG_X_H(EPMU_GT(IJKC),EPMU_GT(IJKE),I),&
341 AVG_X_H(EPMU_GT(IJKT),EPMU_GT(IJKTE),I),K)*&
342 C_AE*AYZ_W(IJK)
343
344 = AVG_Z_H(AVG_X_H(EPMU_GT(IJKW),EPMU_GT(IJKC),IM),&
345 AVG_X_H(EPMU_GT(IJKWT),EPMU_GT(IJKT),IM),K)*&
346 C_AW*AYZ_W(IMJK)
347
348
349 = AVG_Z_H(AVG_Y_H(EPMU_GT(IJKC),EPMU_GT(IJKN),J),&
350 AVG_Y_H(EPMU_GT(IJKT),EPMU_GT(IJKTN),J),K)*&
351 C_AN*AXZ_W(IJK)
352
353 = AVG_Z_H(AVG_Y_H(EPMU_GT(IJKS),EPMU_GT(IJKC),JM),&
354 AVG_Y_H(EPMU_GT(IJKST),EPMU_GT(IJKT),JM),K)*&
355 C_AS*AXZ_W(IJMK)
356
357
358 = EPMU_GT(IJKT)*OX(I)*C_AT*AXY_W(IJK)
359
360 = EPMU_GT(IJK)*OX(I)*C_AB*AXY_W(IJKM)
361
362 DF_GW(IJK,east) = D_FE
363 DF_GW(IJK,west) = D_FW
364 DF_GW(IJK,north) = D_FN
365 DF_GW(IJK,south) = D_FS
366 DF_GW(IJK,top) = D_FT
367 DF_GW(IJK,bottom) = D_FB
368
369
370
371 = AVG_Z(EPG_JFAC(IJKC), EPG_JFAC(IJKT), K)
372 D_FE = EPGA*D_FE
373 D_FW = EPGA*D_FW
374 D_FN = EPGA*D_FN
375 D_FS = EPGA*D_FS
376 D_FT = EPGA*D_FT
377 D_FB = EPGA*D_FB
378
379 RETURN
380
381 CONTAINS
382
383 INCLUDE 'fun_avg.inc'
384
385 END SUBROUTINE GET_WCELL_GDIFF_TERMS
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404 SUBROUTINE STORE_A_W_G0(A_W_G)
405
406
407
408 USE compar, only: ijkstart3, ijkend3
409
410 USE functions, only: flow_at_t
411 USE functions, only: ip_of, jp_of, kp_of
412 USE functions, only: im_of, jm_of, km_of
413
414 USE param
415 USE param1, only: zero
416
417 IMPLICIT NONE
418
419
420
421
422 DOUBLE PRECISION, INTENT(INOUT) :: A_W_g(DIMENSION_3, -3:3, 0:DIMENSION_M)
423
424
425
426 INTEGER :: IJK
427 INTEGER :: IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
428
429 DOUBLE PRECISION :: flux_e, flux_w, flux_n, flux_s
430 DOUBLE PRECISION :: flux_t, flux_b
431
432 DOUBLE PRECISION :: D_fe, d_fw, d_fn, d_fs, d_ft, d_fb
433
434
435
436
437
438
439
440
441
442 DO IJK = ijkstart3, ijkend3
443
444 IF (FLOW_AT_T(IJK)) THEN
445
446
447 CALL GET_WCELL_GCFLUX_TERMS(flux_e, flux_w, flux_n, &
448 flux_s, flux_t, flux_b, ijk)
449
450 CALL GET_WCELL_GDIFF_TERMS(d_fe, d_fw, d_fn, d_fs, &
451 d_ft, d_fb, ijk)
452
453 IPJK = IP_OF(IJK)
454 IJPK = JP_OF(IJK)
455 IJKP = KP_OF(IJK)
456 IMJK = IM_OF(IJK)
457 IJMK = JM_OF(IJK)
458 IJKM = KM_OF(IJK)
459
460
461 IF (Flux_e >= ZERO) THEN
462 A_W_G(IJK,east,0) = D_Fe
463 A_W_G(IPJK,west,0) = D_Fe + Flux_e
464 ELSE
465 A_W_G(IJK,east,0) = D_Fe - Flux_e
466 A_W_G(IPJK,west,0) = D_Fe
467 ENDIF
468
469 IF (.NOT.FLOW_AT_T(IMJK)) THEN
470 IF (Flux_w >= ZERO) THEN
471 A_W_G(IJK,west,0) = D_Fw + Flux_w
472 ELSE
473 A_W_G(IJK,west,0) = D_Fw
474 ENDIF
475 ENDIF
476
477
478
479 IF (Flux_n >= ZERO) THEN
480 A_W_G(IJK,north,0) = D_Fn
481 A_W_G(IJPK,south,0) = D_Fn + Flux_n
482 ELSE
483 A_W_G(IJK,north,0) = D_Fn - Flux_n
484 A_W_G(IJPK,south,0) = D_Fn
485 ENDIF
486
487 IF (.NOT.FLOW_AT_T(IJMK)) THEN
488 IF (Flux_s >= ZERO) THEN
489 A_W_G(IJK,south,0) = D_Fs + Flux_s
490 ELSE
491 A_W_G(IJK,south,0) = D_Fs
492 ENDIF
493 ENDIF
494
495
496
497 IF (Flux_T >= ZERO) THEN
498 A_W_G(IJK,top,0) = D_Ft
499 A_W_G(IJKP,bottom,0) = D_Ft + Flux_t
500 ELSE
501 A_W_G(IJK,top,0) = D_Ft - Flux_t
502 A_W_G(IJKP,bottom,0) = D_Ft
503 ENDIF
504
505 IF (.NOT.FLOW_AT_T(IJKM)) THEN
506 IF (Flux_b >= ZERO) THEN
507 A_W_G(IJK,bottom,0) = D_Fb + Flux_b
508 ELSE
509 A_W_G(IJK,bottom,0) = D_Fb
510 ENDIF
511 ENDIF
512 ENDIF
513 ENDDO
514
515
516 RETURN
517 END SUBROUTINE STORE_A_W_G0
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535 SUBROUTINE STORE_A_W_GDC(B_M)
536
537
538
539 USE compar, only: ijkstart3, ijkend3
540
541 USE discretization, only: fpfoi_of
542
543 USE fldvar, only: w_g
544
545 USE function3, only: funijk3
546 USE functions, only: flow_at_t
547 USE functions, only: ip_of, jp_of, kp_of
548 USE functions, only: im_of, jm_of, km_of
549
550 USE indices, only: i_of, j_of, k_of
551
552 USE param, only: dimension_3, dimension_4
553 USE param1, only: zero
554
555 USE run, only: discretize, fpfoi
556 USE sendrecv3, only: send_recv3
557 USE xsi, only: calc_xsi
558
559 IMPLICIT NONE
560
561
562
563
564 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3)
565
566
567
568
569 INTEGER :: I, J, K, IJK
570 INTEGER :: IPJK, IMJK, IJMK, IJPK, IJKM, IJKP
571 INTEGER :: IJK4, IPPP, IPPP4, JPPP, JPPP4, KPPP, KPPP4
572 INTEGER :: IMMM, IMMM4, JMMM, JMMM4, KMMM, KMMM4
573
574 INTEGER :: incr
575
576 DOUBLE PRECISION :: MOM_HO
577
578 DOUBLE PRECISION :: MOM_LO
579
580 DOUBLE PRECISION :: flux_e, flux_w, flux_n, flux_s
581 DOUBLE PRECISION :: flux_t, flux_b
582
583 DOUBLE PRECISION :: EAST_DC
584 DOUBLE PRECISION :: WEST_DC
585 DOUBLE PRECISION :: NORTH_DC
586 DOUBLE PRECISION :: SOUTH_DC
587 DOUBLE PRECISION :: TOP_DC
588 DOUBLE PRECISION :: BOTTOM_DC
589
590
591
592 DOUBLE PRECISION :: U(DIMENSION_3)
593
594 DOUBLE PRECISION :: V(DIMENSION_3)
595
596 DOUBLE PRECISION :: WW(DIMENSION_3)
597
598 DOUBLE PRECISION :: TMP4(DIMENSION_4)
599 DOUBLE PRECISION, DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
600
601 CALL GET_WCELL_GVTERMS(U, V, WW)
602
603
604 IF (FPFOI) THEN
605 Do IJK = ijkstart3, ijkend3
606 I = I_OF(IJK)
607 J = J_OF(IJK)
608 K = K_OF(IJK)
609 IJK4 = funijk3(I,J,K)
610 TMP4(IJK4) = W_G(IJK)
611 ENDDO
612 CALL send_recv3(tmp4)
613 ENDIF
614
615
616 =0
617 CALL CALC_XSI (DISCRETIZE(5), W_G, U, V, WW, XSI_E, XSI_N,&
618 XSI_T, incr)
619
620
621
622
623
624
625
626 DO IJK = ijkstart3, ijkend3
627
628 IF (FLOW_AT_T(IJK)) THEN
629
630
631 CALL GET_WCELL_GCFLUX_TERMS(flux_e, flux_w, flux_n, &
632 flux_s, flux_t, flux_b, ijk)
633
634 IPJK = IP_OF(IJK)
635 IMJK = IM_OF(IJK)
636 IJPK = JP_OF(IJK)
637 IJMK = JM_OF(IJK)
638 IJKP = KP_OF(IJK)
639 IJKM = KM_OF(IJK)
640
641
642 = IP_OF(IP_OF(IPJK))
643 IPPP4 = funijk3(I_OF(IPPP), J_OF(IPPP), K_OF(IPPP))
644 IMMM = IM_OF(IM_OF(IMJK))
645 IMMM4 = funijk3(I_OF(IMMM), J_OF(IMMM), K_OF(IMMM))
646 JPPP = JP_OF(JP_OF(IJPK))
647 JPPP4 = funijk3(I_OF(JPPP), J_OF(JPPP), K_OF(JPPP))
648 JMMM = JM_OF(JM_OF(IJMK))
649 JMMM4 = funijk3(I_OF(JMMM), J_OF(JMMM), K_OF(JMMM))
650 KPPP = KP_OF(KP_OF(IJKP))
651 KPPP4 = funijk3(I_OF(KPPP), J_OF(KPPP), K_OF(KPPP))
652 KMMM = KM_OF(KM_OF(IJKM))
653 KMMM4 = funijk3(I_OF(KMMM), J_OF(KMMM), K_OF(KMMM))
654
655
656
657 IF(U(IJK) >= ZERO)THEN
658 MOM_LO = W_G(IJK)
659 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IPJK), W_G(IJK), &
660 W_G(IMJK), W_G(IM_OF(IMJK)))
661 ELSE
662 MOM_LO = W_G(IPJK)
663 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IJK), W_G(IPJK), &
664 W_G(IP_OF(IPJK)), TMP4(IPPP4))
665 ENDIF
666 IF (.NOT. FPFOI) MOM_HO = XSI_E(IJK)*W_G(IPJK)+ &
667 (1.0-XSI_E(IJK))*W_G(IJK)
668 EAST_DC = Flux_e*(MOM_LO-MOM_HO)
669
670
671
672 IF(V(IJK) >= ZERO)THEN
673 MOM_LO = W_G(IJK)
674 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IJPK), W_G(IJK), &
675 W_G(IJMK), W_G(JM_OF(IJMK)))
676 ELSE
677 MOM_LO = W_G(IJPK)
678 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IJK), W_G(IJPK), &
679 W_G(JP_OF(IJPK)), TMP4(JPPP4))
680 ENDIF
681 IF (.NOT. FPFOI) MOM_HO = XSI_N(IJK)*W_G(IJPK)+ &
682 (1.0-XSI_N(IJK))*W_G(IJK)
683 NORTH_DC = Flux_n*(MOM_LO-MOM_HO)
684
685
686
687 IF(WW(IJK) >= ZERO)THEN
688 MOM_LO = W_G(IJK)
689 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IJKP), W_G(IJK), &
690 W_G(IJKM), W_G(KM_OF(IJKM)))
691 ELSE
692 MOM_LO = W_G(IJKP)
693 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IJK), W_G(IJKP), &
694 W_G(KP_OF(IJKP)), TMP4(KPPP4))
695 ENDIF
696 IF (.NOT. FPFOI) MOM_HO = XSI_T(IJK)*W_G(IJKP)+ &
697 (1.0-XSI_T(IJK))*W_G(IJK)
698 TOP_DC = Flux_t*(MOM_LO-MOM_HO)
699
700
701
702 IF(U(IMJK) >= ZERO)THEN
703 MOM_LO = W_G(IMJK)
704 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IJK), W_G(IMJK), &
705 W_G(IM_OF(IMJK)), TMP4(IMMM4))
706 ELSE
707 MOM_LO = W_G(IJK)
708 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IMJK), W_G(IJK), &
709 W_G(IPJK), W_G(IP_OF(IPJK)))
710 ENDIF
711 IF (.NOT. FPFOI) MOM_HO = XSI_E(IMJK)*W_G(IJK)+ &
712 (1.0-XSI_E(IMJK))*W_G(IMJK)
713 WEST_DC = Flux_w*(MOM_LO-MOM_HO)
714
715
716
717 IF(V(IJMK) >= ZERO)THEN
718 MOM_LO = W_G(IJMK)
719 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IJK), W_G(IJMK), &
720 W_G(JM_OF(IJMK)), TMP4(JMMM4))
721 ELSE
722 MOM_LO = W_G(IJK)
723 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IJMK), W_G(IJK), &
724 W_G(IJPK), W_G(JP_OF(IJPK)))
725 ENDIF
726 IF (.NOT. FPFOI) MOM_HO = XSI_N(IJMK)*W_G(IJK)+ &
727 (1.0-XSI_N(IJMK))*W_G(IJMK)
728 SOUTH_DC = Flux_s*(MOM_LO-MOM_HO)
729
730
731
732 IF(WW(IJK) >= ZERO)THEN
733 MOM_LO = W_G(IJKM)
734 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IJK), W_G(IJKM), &
735 W_G(KM_OF(IJKM)), TMP4(KMMM4))
736 ELSE
737 MOM_LO = W_G(IJK)
738 IF (FPFOI) MOM_HO = FPFOI_OF(W_G(IJKM), W_G(IJK), &
739 W_G(IJKP), W_G(KP_OF(IJKP)))
740 ENDIF
741 IF (.NOT. FPFOI) MOM_HO = XSI_T(IJKM)*W_G(IJK)+ &
742 (1.0-XSI_T(IJKM))*W_G(IJKM)
743 BOTTOM_DC = Flux_b*(MOM_LO-MOM_HO)
744
745
746
747 (IJK) = B_M(IJK)+WEST_DC-EAST_DC+SOUTH_DC-NORTH_DC&
748 +BOTTOM_DC-TOP_DC
749
750 ENDIF
751 ENDDO
752
753 RETURN
754 END SUBROUTINE STORE_A_W_GDC
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773 SUBROUTINE STORE_A_W_G1(A_W_G)
774
775
776
777 USE compar, only: ijkstart3, ijkend3
778 USE fldvar, only: w_g
779
780 USE functions, only: flow_at_t
781 USE functions, only: ip_of, jp_of, kp_of
782 USE functions, only: im_of, jm_of, km_of
783
784 USE param
785 USE param1, only: one
786
787 USE run, only: discretize
788 USE xsi, only: calc_xsi
789
790 IMPLICIT NONE
791
792
793
794
795 DOUBLE PRECISION, INTENT(INOUT) :: A_W_g(DIMENSION_3, -3:3, 0:DIMENSION_M)
796
797
798
799
800 INTEGER :: IJK, IPJK, IMJK, IJPK, IJMK, IJKP, IJKM
801
802 INTEGER :: incr
803
804 DOUBLE PRECISION :: d_fe, d_fw, d_fn, d_fs, d_ft, d_fb
805
806 DOUBLE PRECISION :: Flux_e, flux_w, flux_n, flux_s
807 DOUBLE PRECISION :: flux_t, flux_b
808
809
810
811 DOUBLE PRECISION :: U(DIMENSION_3)
812
813 DOUBLE PRECISION :: V(DIMENSION_3)
814
815 DOUBLE PRECISION :: WW(DIMENSION_3)
816
817 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: TMP4
818 DOUBLE PRECISION, DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
819
820 CALL GET_WCELL_GVTERMS(U, V, WW)
821
822
823 =0
824 CALL CALC_XSI (DISCRETIZE(5), W_G, U, V, WW, XSI_E, XSI_N,&
825 XSI_T, incr)
826
827
828
829
830
831 DO IJK = ijkstart3, ijkend3
832
833 IF (FLOW_AT_T(IJK)) THEN
834
835
836 CALL GET_WCELL_GCFLUX_TERMS(flux_e, flux_w, flux_n, &
837 flux_s, flux_t, flux_b, ijk)
838 CALL GET_WCELL_GDIFF_TERMS(d_fe, d_fw, d_fn, d_fs, &
839 d_ft, d_fb, ijk)
840
841 IPJK = IP_OF(IJK)
842 IJPK = JP_OF(IJK)
843 IJKP = KP_OF(IJK)
844 IMJK = IM_OF(IJK)
845 IJMK = JM_OF(IJK)
846 IJKM = KM_OF(IJK)
847
848
849 (IJK,east,0) = D_Fe - XSI_E(IJK)*Flux_e
850 A_W_G(IPJK,west,0) = D_Fe + (ONE - XSI_E(IJK))*Flux_e
851
852 IF (.NOT.FLOW_AT_T(IMJK)) THEN
853 A_W_G(IJK,west,0) = D_Fw + (ONE - XSI_E(IMJK))*Flux_w
854 ENDIF
855
856
857
858 (IJK,north,0) = D_Fn - XSI_N(IJK)*Flux_n
859 A_W_G(IJPK,south,0) = D_Fn + (ONE - XSI_N(IJK))*Flux_n
860
861 IF (.NOT.FLOW_AT_T(IJMK)) THEN
862 A_W_G(IJK,south,0) = D_Fs + (ONE - XSI_N(IJMK))*Flux_s
863 ENDIF
864
865
866
867 (IJK,top,0) = D_Ft - XSI_T(IJK)*Flux_t
868 A_W_G(IJKP,bottom,0) = D_Ft + (ONE - XSI_T(IJK))*Flux_t
869
870 IF (.NOT.FLOW_AT_T(IJKM)) THEN
871 A_W_G(IJK,bottom,0) = D_Fb + (ONE - XSI_T(IJKM))*Flux_b
872 ENDIF
873
874 ENDIF
875 ENDDO
876
877 RETURN
878 END SUBROUTINE STORE_A_W_G1
879