File: RELATIVE:/../../../mfix.git/model/conv_dif_u_s.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SUBROUTINE CONV_DIF_U_S(A_M, B_M)
15
16
17
18 USE param, only: dimension_3, dimension_m
19 USE run, only: kt_type_enum
20 USE run, only: ghd_2007
21 USE run, only: def_cor
22 USE run, only: momentum_x_eq
23 USE run, only: discretize
24 USE physprop, only: mmax
25 USE visc_s, only: mu_s
26 IMPLICIT NONE
27
28
29
30
31 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
32
33 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
34
35
36
37
38 INTEGER :: M
39
40
41 DO M = 1, MMAX
42 IF(KT_TYPE_ENUM /= GHD_2007 .OR. &
43 (KT_TYPE_ENUM == GHD_2007 .AND. M==MMAX)) THEN
44
45
46 IF (MOMENTUM_X_EQ(M)) THEN
47
48 IF(DEF_COR)THEN
49
50 CALL STORE_A_U_S0 (A_M(1,-3,M), M)
51 IF (DISCRETIZE(3) > 1) CALL STORE_A_U_SDC (M, B_M)
52
53 ELSE
54
55 IF (DISCRETIZE(3) == 0) THEN
56 CALL STORE_A_U_S0 (A_M(1,-3,M), M)
57 ELSE
58 CALL STORE_A_U_S1 (A_M(1,-3,M), M)
59 ENDIF
60 ENDIF
61
62 CALL DIF_U_IS (MU_S(1,M), A_M, M)
63 ENDIF
64 ENDIF
65 ENDDO
66
67 RETURN
68 END SUBROUTINE CONV_DIF_U_S
69
70
71
72
73
74
75
76 SUBROUTINE GET_UCELL_SVTERMS(U, V, WW, M)
77
78
79
80 USE compar, only: ijkstart3, ijkend3
81
82 USE cutcell, only: cut_u_treatment_at
83 USE cutcell, only: theta_ue, theta_ue_bar
84 USE cutcell, only: theta_u_ne, theta_u_nw
85 USE cutcell, only: theta_u_te, theta_u_tw
86 USE cutcell, only: alpha_ue_c, alpha_un_c, alpha_ut_c
87
88 USE fldvar, only: u_s, v_s, w_s
89
90 USE fun_avg, only: avg_x_e, avg_x
91 USE functions, only: ip_of
92 USE geometry, only: do_k
93 USE indices, only: i_of, ip1
94
95 USE param, only: dimension_3
96 IMPLICIT NONE
97
98
99
100
101 INTEGER, INTENT(IN) :: M
102
103 DOUBLE PRECISION, INTENT(OUT) :: U(DIMENSION_3)
104 DOUBLE PRECISION, INTENT(OUT) :: V(DIMENSION_3)
105 DOUBLE PRECISION, INTENT(OUT) :: WW(DIMENSION_3)
106
107
108
109
110 INTEGER :: IJK, I, IP, IPJK
111
112 DOUBLE PRECISION :: AW, HW, VELW
113
114
115
116 DO IJK = ijkstart3, ijkend3
117 I = I_OF(IJK)
118 IP = IP1(I)
119 IPJK = IP_OF(IJK)
120
121 IF(CUT_U_TREATMENT_AT(IJK)) THEN
122
123
124 (IJK) = (Theta_Ue_bar(IJK) * U_s(IJK,M) + &
125 Theta_Ue(IJK) * U_s(IPJK,M))
126 CALL GET_INTERPOLATION_TERMS_S(IJK, M, 'U_MOMENTUM',&
127 alpha_Ue_c(IJK), AW, HW, VELW)
128 U(IJK) = U(IJK) * AW
129
130
131 (IJK) = (Theta_U_nw(IJK) * V_s(IJK,M) + &
132 Theta_U_ne(IJK) * V_s(IPJK,M))
133 CALL GET_INTERPOLATION_TERMS_S(IJK, M, 'U_MOMENTUM',&
134 ALPHA_Un_c(IJK), AW, HW, VELW)
135 V(IJK) = V(IJK) * AW
136
137
138 IF (DO_K) THEN
139 WW(IJK) = (Theta_U_tw(IJK) * W_s(IJK,M) + &
140 Theta_U_te(IJK) * W_s(IPJK,M))
141 CALL GET_INTERPOLATION_TERMS_S(IJK, M, 'U_MOMENTUM',&
142 ALPHA_Ut_c(IJK), AW, HW, VELW)
143 WW(IJK) = WW(IJK) * AW
144 ENDIF
145
146 ELSE
147 U(IJK) = AVG_X_E(U_S(IJK,M),U_S(IPJK,M),IP)
148 V(IJK) = AVG_X(V_S(IJK,M),V_S(IPJK,M),I)
149 IF (DO_K) WW(IJK) = AVG_X(W_S(IJK,M),W_S(IPJK,M),I)
150 ENDIF
151 ENDDO
152
153 RETURN
154 END SUBROUTINE GET_UCELL_SVTERMS
155
156
157
158
159
160
161
162
163
164
165 SUBROUTINE GET_UCELL_SCFLUX_TERMS(FLUX_E, FLUX_W, FLUX_N, &
166 FLUX_S, FLUX_T, FLUX_B, IJK, M)
167
168
169
170 USE cutcell, only: cut_u_treatment_at
171 USE cutcell, only: theta_ue, theta_ue_bar
172 USE cutcell, only: theta_u_ne, theta_u_nw
173 USE cutcell, only: theta_u_te, theta_u_tw
174 USE cutcell, only: alpha_ue_c, alpha_un_c, alpha_ut_c
175 USE functions, only: ip_of, im_of, jm_of, km_of
176 USE geometry, only: do_k
177 USE mflux, only: flux_se, flux_sn, flux_st
178
179 USE param1, only: half
180 IMPLICIT NONE
181
182
183
184
185 INTEGER, INTENT(IN) :: M
186
187 DOUBLE PRECISION, INTENT(OUT) :: flux_e, flux_w
188 DOUBLE PRECISION, INTENT(OUT) :: flux_n, flux_s
189 DOUBLE PRECISION, INTENT(OUT) :: flux_t, flux_b
190
191 INTEGER, INTENT(IN) :: ijk
192
193
194
195
196 INTEGER :: imjk, ijmk, ijkm
197 INTEGER :: ipjk, ipjmk, ipjkm
198
199
200 DOUBLE PRECISION :: AW, HW, VELW
201
202
203
204 = IP_OF(IJK)
205 IMJK = IM_OF(IJK)
206 IJMK = JM_OF(IJK)
207 IJKM = KM_OF(IJK)
208 IPJMK = IP_OF(IJMK)
209 IPJKM = IP_OF(IJKM)
210
211
212 IF(CUT_U_TREATMENT_AT(IJK)) THEN
213
214 = (Theta_Ue_bar(IJK) * Flux_sE(IJK,M) + &
215 Theta_Ue(IJK) * Flux_sE(IPJK,M))
216 CALL GET_INTERPOLATION_TERMS_S(IJK, M, 'U_MOMENTUM',&
217 alpha_Ue_c(IJK), AW, HW, VELW)
218 Flux_e = Flux_e * AW
219
220 = (Theta_Ue_bar(IMJK) * Flux_sE(IMJK,M) + &
221 Theta_Ue(IMJK) * Flux_sE(IJK,M))
222 CALL GET_INTERPOLATION_TERMS_S(IJK, M, 'U_MOMENTUM',&
223 alpha_Ue_c(IMJK), AW, HW, VELW)
224 Flux_w = Flux_w * AW
225
226
227
228 = (Theta_U_nw(IJK) * Flux_sN(IJK,M) + &
229 Theta_U_ne(IJK) * Flux_sN(IPJK,M))
230 CALL GET_INTERPOLATION_TERMS_S(IJK, M, 'U_MOMENTUM', &
231 ALPHA_Un_c(IJK), AW, HW, VELW)
232 Flux_n = Flux_n * AW
233
234 = (Theta_U_nw(IJMK) * Flux_sN(IJMK,M) + &
235 Theta_U_ne(IJMK) * Flux_sN(IPJMK,M))
236 CALL GET_INTERPOLATION_TERMS_S(IJK, M, 'U_MOMENTUM',&
237 ALPHA_Un_c(IJMK), AW, HW, VELW)
238 Flux_s = Flux_s * AW
239
240 IF (DO_K) THEN
241
242 = (Theta_U_tw(IJK) * Flux_sT(IJK,M) + &
243 Theta_U_te(IJK) * Flux_sT(IPJK,M))
244 CALL GET_INTERPOLATION_TERMS_S(IJK, M, 'U_MOMENTUM', &
245 ALPHA_Ut_c(IJK), AW, HW, VELW)
246 Flux_t = Flux_t * AW
247
248 = (Theta_U_tw(IJKM) * Flux_sT(IJKM,M) + &
249 Theta_U_te(IJKM) * Flux_sT(IPJKM,M))
250 CALL GET_INTERPOLATION_TERMS_S(IJK, M, 'U_MOMENTUM',&
251 ALPHA_Ut_c(IJKM), AW, HW, VELW)
252 Flux_b = Flux_b * AW
253 ENDIF
254 ELSE
255 Flux_e = HALF * (Flux_sE(IJK,M) + Flux_sE(IPJK,M))
256 Flux_w = HALF * (Flux_sE(IMJK,M) + Flux_sE(IJK,M))
257 Flux_n = HALF * (Flux_sN(IJK,M) + Flux_sN(IPJK,M))
258 Flux_s = HALF * (Flux_sN(IJMK,M) + Flux_sN(IPJMK,M))
259
260 IF (DO_K) THEN
261 Flux_t = HALF * (Flux_sT(IJK,M) + Flux_sT(IPJK,M))
262 Flux_b = HALF * (Flux_sT(IJKM,M) + Flux_sT(IPJKM,M))
263 ENDIF
264 ENDIF
265 RETURN
266 END SUBROUTINE GET_UCELL_SCFLUX_TERMS
267
268
269
270
271
272
273
274
275
276
277 SUBROUTINE GET_UCELL_SDIFF_TERMS(D_FE, D_FW, D_FN, D_FS, &
278 D_FT, D_FB, IJK, M)
279
280
281
282 USE cutcell, only: cut_u_treatment_at
283 USE cutcell, only: oneodx_e_u, oneody_n_u, oneodz_t_u
284
285 USE functions, only: wall_at
286 USE functions, only: east_of, north_of, top_of
287 USE functions, only: south_of, bottom_of
288 USE functions, only: im_of, jm_of, km_of
289
290 USE fun_avg, only: avg_x_h, avg_y_h, avg_z_h
291
292 USE geometry, only: odx, ody_n, odz_t
293 USE geometry, only: do_k
294 USE geometry, only: ox_e
295 USE geometry, only: ayz_u, axz_u, axy_u
296
297 USE indices, only: i_of, j_of, k_of
298 USE indices, only: ip1, jm1, km1
299
300 USE visc_s, only: mu_s
301 IMPLICIT NONE
302
303
304
305
306 INTEGER, INTENT(IN) :: M
307
308 DOUBLE PRECISION, INTENT(OUT) :: d_fe, d_fw
309 DOUBLE PRECISION, INTENT(OUT) :: d_fn, d_fs
310 DOUBLE PRECISION, INTENT(OUT) :: d_ft, d_fb
311
312 INTEGER, INTENT(IN) :: ijk
313
314
315
316
317 INTEGER :: imjk, ijmk, ijkm
318 INTEGER :: i, j, k, ip, jm, km
319 INTEGER :: ijkc, ijke, ijkn, ijkne, ijks, ijkse
320 INTEGER :: ijkt, ijkte, ijkb, ijkbe
321
322
323 DOUBLE PRECISION :: C_AE, C_AW, C_AN, C_AS, C_AT, C_AB
324
325
326 = IM_OF(IJK)
327 IJMK = JM_OF(IJK)
328 IJKM = KM_OF(IJK)
329
330 I = I_OF(IJK)
331 J = J_OF(IJK)
332 K = K_OF(IJK)
333 IP = IP1(I)
334 JM = JM1(J)
335 KM = KM1(K)
336
337 IJKE = EAST_OF(IJK)
338 IF (WALL_AT(IJK)) THEN
339 IJKC = IJKE
340 ELSE
341 IJKC = IJK
342 ENDIF
343 IJKN = NORTH_OF(IJK)
344 IJKNE = EAST_OF(IJKN)
345 IJKS = SOUTH_OF(IJK)
346 IJKSE = EAST_OF(IJKS)
347
348 IF(CUT_U_TREATMENT_AT(IJK)) THEN
349 C_AE = ONEoDX_E_U(IJK)
350 C_AW = ONEoDX_E_U(IMJK)
351 C_AN = ONEoDY_N_U(IJK)
352 C_AS = ONEoDY_N_U(IJMK)
353 C_AT = ONEoDZ_T_U(IJK)
354 C_AB = ONEoDZ_T_U(IJKM)
355 ELSE
356 C_AE = ODX(IP)
357 C_AW = ODX(I)
358 C_AN = ODY_N(J)
359 C_AS = ODY_N(JM)
360 C_AT = ODZ_T(K)
361 C_AB = ODZ_T(KM)
362 ENDIF
363
364
365 = MU_S(IJKE,M)*C_AE*AYZ_U(IJK)
366
367 = MU_S(IJKC,M)*C_AW*AYZ_U(IMJK)
368
369
370
371 = AVG_X_H(AVG_Y_H(MU_S(IJKC,M),MU_S(IJKN,M),J),&
372 AVG_Y_H(MU_S(IJKE,M),MU_S(IJKNE,M),J),I)*&
373 C_AN*AXZ_U(IJK)
374
375 = AVG_X_H(AVG_Y_H(MU_S(IJKS,M),MU_S(IJKC,M),JM),&
376 AVG_Y_H(MU_S(IJKSE,M),MU_S(IJKE,M),JM),I)*&
377 C_AS*AXZ_U(IJMK)
378
379 IF (DO_K) THEN
380 IJKT = TOP_OF(IJK)
381 IJKTE = EAST_OF(IJKT)
382 IJKB = BOTTOM_OF(IJK)
383 IJKBE = EAST_OF(IJKB)
384
385
386 = AVG_X_H(AVG_Z_H(MU_S(IJKC,M),MU_S(IJKT,M),K),&
387 AVG_Z_H(MU_S(IJKE,M),MU_S(IJKTE,M),K),I)*&
388 OX_E(I)*C_AT*AXY_U(IJK)
389
390 = AVG_X_H(AVG_Z_H(MU_S(IJKB,M),MU_S(IJKC,M),KM),&
391 AVG_Z_H(MU_S(IJKBE,M),MU_S(IJKE,M),KM),I)*&
392 OX_E(I)*C_AB*AXY_U(IJKM)
393 ENDIF
394 RETURN
395 END SUBROUTINE GET_UCELL_SDIFF_TERMS
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415 SUBROUTINE STORE_A_U_S0(A_U_S, M)
416
417
418
419 USE compar, only: ijkstart3, ijkend3
420
421 USE functions, only: flow_at_e
422 USE functions, only: ip_of, jp_of, kp_of
423 USE functions, only: im_of, jm_of, km_of
424
425 USE geometry, only: do_k
426
427 USE param, only: dimension_3
428 USE param1, only: zero
429 USE matrix, only: e, w, n, s, t, b
430 IMPLICIT NONE
431
432
433
434
435 INTEGER, INTENT(IN) :: M
436
437 DOUBLE PRECISION, INTENT(INOUT) :: A_U_s(DIMENSION_3, -3:3, M:M)
438
439
440
441
442 INTEGER :: IJK
443 INTEGER :: IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
444
445 DOUBLE PRECISION :: flux_e, flux_w, flux_n, flux_s
446 DOUBLE PRECISION :: flux_t, flux_b
447
448 DOUBLE PRECISION :: D_fe, d_fw, d_fn, d_fs, d_ft, d_fb
449
450
451
452
453
454
455
456
457
458 DO IJK = ijkstart3, ijkend3
459
460 IF (FLOW_AT_E(IJK)) THEN
461
462
463 CALL GET_UCELL_SCFLUX_TERMS(flux_e, flux_w, flux_n, &
464 flux_s, flux_t, flux_b, ijk, M)
465 CALL GET_UCELL_SDIFF_TERMS(d_fe, d_fw, d_fn, d_fs, &
466 d_ft, d_fb, ijk, M)
467
468 IPJK = IP_OF(IJK)
469 IJPK = JP_OF(IJK)
470 IMJK = IM_OF(IJK)
471 IJMK = JM_OF(IJK)
472
473
474 IF (Flux_e >= ZERO) THEN
475 A_U_S(IJK,E,M) = D_Fe
476 A_U_S(IPJK,W,M) = D_Fe + Flux_e
477 ELSE
478 A_U_S(IJK,E,M) = D_Fe - Flux_e
479 A_U_S(IPJK,W,M) = D_Fe
480 ENDIF
481
482 IF (.NOT.FLOW_AT_E(IMJK)) THEN
483 IF (Flux_w >= ZERO) THEN
484 A_U_S(IJK,W,M) = D_Fw + Flux_w
485 ELSE
486 A_U_S(IJK,W,M) = D_Fw
487 ENDIF
488 ENDIF
489
490
491
492 IF (Flux_n >= ZERO) THEN
493 A_U_S(IJK,N,M) = D_Fn
494 A_U_S(IJPK,S,M) = D_Fn + Flux_n
495 ELSE
496 A_U_S(IJK,N,M) = D_Fn - Flux_n
497 A_U_S(IJPK,S,M) = D_Fn
498 ENDIF
499
500 IF (.NOT.FLOW_AT_E(IJMK)) THEN
501 IF (Flux_s >= ZERO) THEN
502 A_U_S(IJK,S,M) = D_Fs + Flux_s
503 ELSE
504 A_U_S(IJK,S,M) = D_Fs
505 ENDIF
506 ENDIF
507
508
509 IF (DO_K) THEN
510 IJKP = KP_OF(IJK)
511 IJKM = KM_OF(IJK)
512
513
514 IF (Flux_t >= ZERO) THEN
515 A_U_S(IJK,T,M) = D_Ft
516 A_U_S(IJKP,B,M) = D_Ft + Flux_t
517 ELSE
518 A_U_S(IJK,T,M) = D_Ft - Flux_t
519 A_U_S(IJKP,B,M) = D_Ft
520 ENDIF
521
522 IF (.NOT.FLOW_AT_E(IJKM)) THEN
523 IF (Flux_b >= ZERO) THEN
524 A_U_S(IJK,B,M) = D_Fb + Flux_b
525 ELSE
526 A_U_S(IJK,B,M) = D_Fb
527 ENDIF
528 ENDIF
529 ENDIF
530
531 ENDIF
532 ENDDO
533
534
535
536 RETURN
537 END SUBROUTINE STORE_A_U_S0
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556 SUBROUTINE STORE_A_U_SDC(M, B_M)
557
558
559
560 USE compar, only: ijkstart3, ijkend3
561
562 USE discretization, only: fpfoi_of
563
564 USE fldvar, only: u_s
565
566 USE function3, only: funijk3
567 USE functions, only: flow_at_e
568 USE functions, only: ip_of, jp_of, kp_of
569 USE functions, only: im_of, jm_of, km_of
570
571 USE geometry, only: do_k
572
573 USE indices, only: i_of, j_of, k_of
574
575 USE param, only: dimension_3, dimension_m
576 USE param1, only: zero
577
578 USE run, only: discretize, fpfoi
579 USE sendrecv3, only: send_recv3
580
581 USE tmp_array, only: U => Array1, V => Array2, WW => Array3
582 USE tmp_array, only: tmp4
583 USE tmp_array, only: lock_tmp_array, unlock_tmp_array
584 USE tmp_array, only: lock_tmp4_array, unlock_tmp4_array
585
586 USE xsi, only: calc_xsi
587 USE xsi_array, only: xsi_e, xsi_n, xsi_t
588 USE xsi_array, only: lock_xsi_array, unlock_xsi_array
589
590 IMPLICIT NONE
591
592
593
594
595 INTEGER, INTENT(IN) :: M
596
597 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
598
599
600
601
602 INTEGER :: I, J, K, IJK
603 INTEGER :: IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
604 INTEGER :: IJK4, IPPP, IPPP4, JPPP, JPPP4, KPPP, KPPP4
605 INTEGER :: IMMM, IMMM4, JMMM, JMMM4, KMMM, KMMM4
606
607 INTEGER :: incr
608
609 DOUBLE PRECISION :: MOM_HO
610
611 DOUBLE PRECISION :: MOM_LO
612
613 DOUBLE PRECISION :: flux_e, flux_w, flux_n, flux_s
614 DOUBLE PRECISION :: flux_t, flux_b
615
616 DOUBLE PRECISION :: EAST_DC
617 DOUBLE PRECISION :: WEST_DC
618 DOUBLE PRECISION :: NORTH_DC
619 DOUBLE PRECISION :: SOUTH_DC
620 DOUBLE PRECISION :: TOP_DC
621 DOUBLE PRECISION :: BOTTOM_DC
622
623
624
625
626
627
628
629
630
631
632 call lock_tmp4_array
633 call lock_tmp_array
634 call lock_xsi_array
635
636 CALL GET_UCELL_SVTERMS(U, V, WW, M)
637
638
639 IF (FPFOI) THEN
640 Do IJK = ijkstart3, ijkend3
641 I = I_OF(IJK)
642 J = J_OF(IJK)
643 K = K_OF(IJK)
644 IJK4 = funijk3(I,J,K)
645 TMP4(IJK4) = U_S(IJK,M)
646 ENDDO
647 CALL send_recv3(tmp4)
648 ENDIF
649
650
651 =1
652 CALL CALC_XSI (DISCRETIZE(3), U_S(1,M), U, V, WW, XSI_E, XSI_N,&
653 XSI_T, incr)
654
655
656
657
658
659
660 DO IJK = ijkstart3, ijkend3
661
662 IF (FLOW_AT_E(IJK)) THEN
663
664
665 CALL GET_UCELL_SCFLUX_TERMS(flux_e, flux_w, flux_n, &
666 flux_s, flux_t, flux_b, ijk, M)
667
668 IPJK = IP_OF(IJK)
669 IMJK = IM_OF(IJK)
670 IJMK = JM_OF(IJK)
671 IJKM = KM_OF(IJK)
672 IJPK = JP_OF(IJK)
673 IJKP = KP_OF(IJK)
674
675
676 = IP_OF(IP_OF(IPJK))
677 IPPP4 = funijk3(I_OF(IPPP), J_OF(IPPP), K_OF(IPPP))
678 IMMM = IM_OF(IM_OF(IMJK))
679 IMMM4 = funijk3(I_OF(IMMM), J_OF(IMMM), K_OF(IMMM))
680 JPPP = JP_OF(JP_OF(IJPK))
681 JPPP4 = funijk3(I_OF(JPPP), J_OF(JPPP), K_OF(JPPP))
682 JMMM = JM_OF(JM_OF(IJMK))
683 JMMM4 = funijk3(I_OF(JMMM), J_OF(JMMM), K_OF(JMMM))
684 KPPP = KP_OF(KP_OF(IJKP))
685 KPPP4 = funijk3(I_OF(KPPP), J_OF(KPPP), K_OF(KPPP))
686 KMMM = KM_OF(KM_OF(IJKM))
687 KMMM4 = funijk3(I_OF(KMMM), J_OF(KMMM), K_OF(KMMM))
688
689
690
691 IF(U(IJK) >= ZERO)THEN
692 MOM_LO = U_S(IJK,M)
693 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IPJK,M), U_S(IJK,M), &
694 U_S(IMJK,M), U_S(IM_OF(IMJK),M))
695 ELSE
696 MOM_LO = U_S(IPJK,M)
697 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IJK,M), U_S(IPJK,M), &
698 U_S(IP_OF(IPJK),M), TMP4(IPPP4))
699 ENDIF
700
701 IF (.NOT. FPFOI) MOM_HO = XSI_E(IJK)*U_S(IPJK,M)+ &
702 (1.0-XSI_E(IJK))*U_S(IJK,M)
703 EAST_DC = Flux_e *(MOM_LO - MOM_HO)
704
705 IF(U(IMJK) >= ZERO)THEN
706 MOM_LO = U_S(IMJK,M)
707 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IJK,M), U_S(IMJK,M), &
708 U_S(IM_OF(IMJK),M), TMP4(IMMM4))
709 ELSE
710 MOM_LO = U_S(IJK,M)
711 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IMJK,M), U_S(IJK,M), &
712 U_S(IPJK,M), U_S(IP_OF(IPJK),M))
713 ENDIF
714 IF (.NOT. FPFOI) MOM_HO = XSI_E(IMJK)*U_S(IJK,M)+ &
715 (1.0-XSI_E(IMJK))*U_S(IMJK,M)
716 WEST_DC = Flux_w * (MOM_LO - MOM_HO)
717
718
719
720 IF(V(IJK) >= ZERO)THEN
721 MOM_LO = U_S(IJK,M)
722 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IJPK,M), U_S(IJK,M), &
723 U_S(IJMK,M), U_S(JM_OF(IJMK),M))
724 ELSE
725 MOM_LO = U_S(IJPK,M)
726 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IJK,M), U_S(IJPK,M), &
727 U_S(JP_OF(IJPK),M), TMP4(JPPP4))
728 ENDIF
729 IF (.NOT. FPFOI) MOM_HO = XSI_N(IJK)*U_S(IJPK,M)+ &
730 (1.0-XSI_N(IJK))*U_S(IJK,M)
731 NORTH_DC = Flux_n * (MOM_LO - MOM_HO)
732
733
734 IF(V(IJMK) >= ZERO)THEN
735 MOM_LO = U_S(IJMK,M)
736 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IJK,M), U_S(IJMK,M), &
737 U_S(JM_OF(IJMK),M), TMP4(JMMM4))
738 ELSE
739 MOM_LO = U_S(IJK,M)
740 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IJMK,M), U_S(IJK,M), &
741 U_S(IJPK,M), U_S(JP_OF(IJPK),M))
742 ENDIF
743 IF (.NOT. FPFOI) MOM_HO = XSI_N(IJMK)*U_S(IJK,M)+ &
744 (1.0-XSI_N(IJMK))*U_S(IJMK,M)
745 SOUTH_DC = Flux_s * (MOM_LO - MOM_HO)
746
747
748 IF (DO_K) THEN
749
750 IF(WW(IJK) >= ZERO)THEN
751 MOM_LO = U_S(IJK,M)
752 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IJKP,M), U_S(IJK,M), &
753 U_S(IJKM,M), U_S(KM_OF(IJKM),M))
754 ELSE
755 MOM_LO = U_S(IJKP,M)
756 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IJK,M), U_S(IJKP,M), &
757 U_S(KP_OF(IJKP),M), TMP4(KPPP4))
758 ENDIF
759 IF (.NOT. FPFOI) MOM_HO = XSI_T(IJK)*U_S(IJKP,M)+ &
760 (1.0-XSI_T(IJK))*U_S(IJK,M)
761 TOP_DC = Flux_t *(MOM_LO - MOM_HO)
762
763
764 IF(WW(IJK) >= ZERO)THEN
765 MOM_LO = U_S(IJKM,M)
766 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IJK,M), U_S(IJKM,M), &
767 U_S(KM_OF(IJKM),M), TMP4(KMMM4))
768 ELSE
769 MOM_LO = U_S(IJK,M)
770 IF (FPFOI) MOM_HO = FPFOI_OF(U_S(IJKM,M), U_S(IJK,M), &
771 U_S(IJKP,M), U_S(KP_OF(IJKP),M))
772 ENDIF
773 IF (.NOT. FPFOI) MOM_HO = XSI_T(IJKM)*U_S(IJK,M)+ &
774 (1.0-XSI_T(IJKM))*U_S(IJKM,M)
775 BOTTOM_DC = Flux_b * (MOM_LO - MOM_HO)
776 ELSE
777 TOP_DC = ZERO
778 BOTTOM_DC = ZERO
779 ENDIF
780
781
782
783 (IJK,M) = B_M(IJK,M)+WEST_DC-EAST_DC+SOUTH_DC-NORTH_DC+&
784 BOTTOM_DC-TOP_DC
785
786 ENDIF
787 ENDDO
788
789 call unlock_tmp4_array
790 call unlock_tmp_array
791 call unlock_xsi_array
792
793 RETURN
794 END SUBROUTINE STORE_A_U_SDC
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814 SUBROUTINE STORE_A_U_S1(A_U_S, M)
815
816
817 USE compar, only: ijkstart3, ijkend3
818 USE fldvar, only: u_s
819
820 USE functions, only: flow_at_e
821 USE functions, only: ip_of, jp_of, kp_of
822 USE functions, only: im_of, jm_of, km_of
823
824 USE geometry, only: do_k
825
826 USE param, only: dimension_3
827 USE param1, only: one
828
829 USE matrix, only: e, w, n, s, t, b
830
831 USE run, only: discretize
832
833 USE tmp_array, only: U => Array1, V => Array2, WW => Array3
834 USE tmp_array, only: lock_tmp_array, unlock_tmp_array
835
836 USE xsi, only: calc_xsi
837 USE xsi_array, only: xsi_e, xsi_n, xsi_t
838 USE xsi_array, only: lock_xsi_array, unlock_xsi_array
839 IMPLICIT NONE
840
841
842
843
844 INTEGER, INTENT(IN) :: M
845
846 DOUBLE PRECISION, INTENT(INOUT) :: A_U_s(DIMENSION_3, -3:3, M:M)
847
848
849
850
851 INTEGER :: IJK, IPJK, IMJK, IJPK, IJMK, IJKP, IJKM
852
853 INTEGER :: incr
854
855 DOUBLE PRECISION :: d_fe, d_fw, d_fn, d_fs, d_ft, d_fb
856
857 DOUBLE PRECISION :: Flux_e, flux_w, flux_n, flux_s
858 DOUBLE PRECISION :: flux_t, flux_b
859
860
861
862
863
864
865
866
867
868
869 call lock_tmp_array
870 call lock_xsi_array
871
872 CALL GET_UCELL_SVTERMS(U, V, WW, M)
873
874
875 =1
876 CALL CALC_XSI (DISCRETIZE(3), U_S(1,M), U, V, WW, XSI_E, XSI_N, &
877 XSI_T, incr)
878
879
880
881
882
883
884 DO IJK = ijkstart3, ijkend3
885
886 IF (FLOW_AT_E(IJK)) THEN
887
888
889 CALL GET_UCELL_SCFLUX_TERMS(flux_e, flux_w, flux_n, &
890 flux_s, flux_t, flux_b, ijk, M)
891 CALL GET_UCELL_SDIFF_TERMS(d_fe, d_fw, d_fn, d_fs, &
892 d_ft, d_fb, ijk, M)
893
894 IPJK = IP_OF(IJK)
895 IMJK = IM_OF(IJK)
896 IJPK = JP_OF(IJK)
897 IJMK = JM_OF(IJK)
898
899
900 (IJK,E,M) = D_Fe - XSI_E(IJK) * Flux_e
901 A_U_S(IPJK,W,M) = D_Fe + (ONE - XSI_E(IJK)) * Flux_e
902
903 IF (.NOT.FLOW_AT_E(IMJK)) THEN
904 A_U_S(IJK,W,M) = D_Fw + (ONE - XSI_E(IMJK)) * Flux_w
905 ENDIF
906
907
908
909 (IJK,N,M) = D_Fn - XSI_N(IJK) * Flux_n
910 A_U_S(IJPK,S,M) = D_Fn + (ONE - XSI_N(IJK)) * Flux_n
911
912 IF (.NOT.FLOW_AT_E(IJMK)) THEN
913 A_U_S(IJK,S,M) = D_Fs + (ONE - XSI_N(IJMK)) * Flux_s
914 ENDIF
915
916
917
918 IF (DO_K) THEN
919 IJKP = KP_OF(IJK)
920 IJKM = KM_OF(IJK)
921 A_U_S(IJK,T,M) = D_Ft - XSI_T(IJK) * Flux_t
922 A_U_S(IJKP,B,M) = D_Ft + (ONE - XSI_T(IJK)) * Flux_t
923
924 IF (.NOT.FLOW_AT_E(IJKM)) THEN
925 A_U_S(IJK,B,M) = D_Fb + (ONE - XSI_T(IJKM)) * Flux_b
926 ENDIF
927 ENDIF
928
929 ENDIF
930 ENDDO
931
932 call unlock_tmp_array
933 call unlock_xsi_array
934
935 RETURN
936 END SUBROUTINE STORE_A_U_S1
937