20 USE run, only: kt_type_enum
21 USE run, only: ghd_2007
43 IF(kt_type_enum /= ghd_2007 .OR. &
44 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN 46 IF (momentum_z_eq(m))
THEN 90 USE fun_avg, only: avg_z_t, avg_z
100 INTEGER,
INTENT(IN) :: M
109 INTEGER :: IJK, K, IJKP
111 DOUBLE PRECISION :: AW, HW, VELW
120 IF(cut_w_treatment_at(ijk))
THEN 123 u(ijk) = (theta_w_be(ijk) *
u_s(ijk,m) + &
124 theta_w_te(ijk) *
u_s(ijkp,m))
130 v(ijk) = (theta_w_bn(ijk) *
v_s(ijk,m) + &
131 theta_w_tn(ijk) *
v_s(ijkp,m))
137 ww(ijk) = (theta_wt_bar(ijk) *
w_s(ijk,m) + &
138 theta_wt(ijk) *
w_s(ijkp,m))
141 ww(ijk) = ww(ijk) * aw
144 u(ijk) = avg_z(
u_s(ijk,m),
u_s(ijkp,m),k)
145 v(ijk) = avg_z(
v_s(ijk,m),
v_s(ijkp,m),k)
146 ww(ijk) = avg_z_t(
w_s(ijk,m),
w_s(ijkp,m))
163 flux_s, flux_t, flux_b, ijk, m)
173 USE functions, only: kp_of, im_of, jm_of, km_of
183 INTEGER,
INTENT(IN) :: M
185 DOUBLE PRECISION,
INTENT(OUT) :: flux_e, flux_w
186 DOUBLE PRECISION,
INTENT(OUT) :: flux_n, flux_s
187 DOUBLE PRECISION,
INTENT(OUT) :: flux_t, flux_b
189 INTEGER,
INTENT(IN) :: ijk
194 INTEGER :: imjk, ijmk, ijkm
195 INTEGER :: ijkp, imjkp, ijmkp
198 DOUBLE PRECISION :: AW, HW, VELW
208 IF(cut_w_treatment_at(ijk))
THEN 210 flux_e = (theta_w_be(ijk) *
flux_se(ijk,m) + &
211 theta_w_te(ijk) *
flux_se(ijkp,m))
216 flux_w = (theta_w_be(imjk) *
flux_se(imjk,m) + &
217 theta_w_te(imjk) *
flux_se(imjkp,m))
224 flux_n = (theta_w_bn(ijk) *
flux_sn(ijk,m) + &
225 theta_w_tn(ijk) *
flux_sn(ijkp,m))
230 flux_s = (theta_w_bn(ijmk) *
flux_sn(ijmk,m) + &
231 theta_w_tn(ijmk) *
flux_sn(ijmkp,m))
238 flux_t = (theta_wt_bar(ijk) *
flux_st(ijk,m) + &
239 theta_wt(ijk) *
flux_st(ijkp,m))
244 flux_b = (theta_wt_bar(ijkm) *
flux_st(ijkm,m) + &
245 theta_wt(ijkm) *
flux_st(ijk,m))
279 USE functions, only: east_of, north_of, top_of
283 USE fun_avg, only: avg_x_h, avg_y_h, avg_z_h
298 INTEGER,
INTENT(IN) :: M
300 DOUBLE PRECISION,
INTENT(OUT) :: d_fe, d_fw
301 DOUBLE PRECISION,
INTENT(OUT) :: d_fn, d_fs
302 DOUBLE PRECISION,
INTENT(OUT) :: d_ft, d_fb
304 INTEGER,
INTENT(IN) :: ijk
309 INTEGER :: imjk, ijmk, ijkm
310 INTEGER :: i, j, k, kp, im, jm
311 INTEGER :: ijkc, ijkt, ijke, ijkte, ijkw, ijkwt
312 INTEGER :: ijkn, ijktn, ijks, ijkst
315 DOUBLE PRECISION :: C_AE, C_AW, C_AN, C_AS, C_AT, C_AB
330 IF (wall_at(ijk))
THEN 336 ijkte = east_of(ijkt)
338 ijktn = north_of(ijkt)
344 IF(cut_w_treatment_at(ijk))
THEN 361 d_fe = avg_z_h(avg_x_h(
mu_s(ijkc,m),
mu_s(ijke,m),i),&
362 avg_x_h(
mu_s(ijkt,m),
mu_s(ijkte,m),i),k)*&
365 d_fw = avg_z_h(avg_x_h(
mu_s(ijkw,m),
mu_s(ijkc,m),im),&
366 avg_x_h(
mu_s(ijkwt,m),
mu_s(ijkt,m),im),k)*&
370 d_fn = avg_z_h(avg_y_h(
mu_s(ijkc,m),
mu_s(ijkn,m),j),&
371 avg_y_h(
mu_s(ijkt,m),
mu_s(ijktn,m),j),k)*&
374 d_fs = avg_z_h(avg_y_h(
mu_s(ijks,m),
mu_s(ijkc,m),jm),&
375 avg_y_h(
mu_s(ijkst,m),
mu_s(ijkt,m),jm),k)*&
380 d_ft =
mu_s(ijkt,m)*ox(i)*c_at*
axy_w(ijk)
382 d_fb =
mu_s(ijk,m)*ox(i)*c_ab*
axy_w(ijkm)
424 INTEGER,
INTENT(IN) :: M
426 DOUBLE PRECISION,
INTENT(INOUT) :: A_W_s(
dimension_3, -3:3, m:m)
432 INTEGER :: IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
434 DOUBLE PRECISION :: flux_e, flux_w, flux_n, flux_s
435 DOUBLE PRECISION :: flux_t, flux_b
437 DOUBLE PRECISION :: D_fe, d_fw, d_fn, d_fs, d_ft, d_fb
449 IF (flow_at_t(ijk))
THEN 453 flux_s, flux_t, flux_b, ijk, m)
466 IF (flux_e >=
zero)
THEN 467 a_w_s(ijk,
east,m) = d_fe
468 a_w_s(ipjk,
west,m) = d_fe + flux_e
470 a_w_s(ijk,
east,m) = d_fe - flux_e
471 a_w_s(ipjk,
west,m) = d_fe
474 IF (.NOT.flow_at_t(imjk))
THEN 475 IF (flux_w >=
zero)
THEN 476 a_w_s(ijk,
west,m) = d_fw + flux_w
478 a_w_s(ijk,
west,m) = d_fw
484 IF (flux_n >=
zero)
THEN 485 a_w_s(ijk,
north,m) = d_fn
486 a_w_s(ijpk,
south,m) = d_fn + flux_n
488 a_w_s(ijk,
north,m) = d_fn - flux_n
489 a_w_s(ijpk,
south,m) = d_fn
492 IF (.NOT.flow_at_t(ijmk))
THEN 493 IF (flux_s >=
zero)
THEN 494 a_w_s(ijk,
south,m) = d_fs + flux_s
496 a_w_s(ijk,
south,m) = d_fs
502 IF (flux_t >=
zero)
THEN 503 a_w_s(ijk,
top,m) = d_ft
504 a_w_s(ijkp,
bottom,m) = d_ft + flux_t
506 a_w_s(ijk,
top,m) = d_ft - flux_t
507 a_w_s(ijkp,
bottom,m) = d_ft
510 IF (.NOT.flow_at_t(ijkm))
THEN 511 IF (flux_b >=
zero)
THEN 512 a_w_s(ijk,
bottom,m) = d_fb + flux_b
514 a_w_s(ijk,
bottom,m) = d_fb
571 INTEGER,
INTENT(IN) :: M
578 INTEGER :: I, J, K, IJK
579 INTEGER :: IPJK, IMJK, IJMK, IJPK, IJKM, IJKP
580 INTEGER :: IJK4, IPPP, IPPP4, JPPP, JPPP4, KPPP, KPPP4
581 INTEGER :: IMMM, IMMM4, JMMM, JMMM4, KMMM, KMMM4
585 DOUBLE PRECISION :: MOM_HO
587 DOUBLE PRECISION :: MOM_LO
589 DOUBLE PRECISION :: flux_e, flux_w, flux_n, flux_s
590 DOUBLE PRECISION :: flux_t, flux_b
592 DOUBLE PRECISION :: EAST_DC
593 DOUBLE PRECISION :: WEST_DC
594 DOUBLE PRECISION :: NORTH_DC
595 DOUBLE PRECISION :: SOUTH_DC
596 DOUBLE PRECISION :: TOP_DC
597 DOUBLE PRECISION :: BOTTOM_DC
608 DOUBLE PRECISION,
DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
619 tmp4(ijk4) =
w_s(ijk,m)
636 IF (flow_at_t(ijk))
THEN 640 flux_s, flux_t, flux_b, ijk, m)
650 ippp = ip_of(ip_of(ipjk))
652 immm = im_of(im_of(imjk))
654 jppp = jp_of(jp_of(ijpk))
656 jmmm = jm_of(jm_of(ijmk))
658 kppp = kp_of(kp_of(ijkp))
660 kmmm = km_of(km_of(ijkm))
665 IF(u(ijk) >=
zero)
THEN 668 w_s(imjk,m),
w_s(im_of(imjk),m))
672 w_s(ip_of(ipjk),m), tmp4(ippp4))
674 IF (.NOT.
fpfoi) mom_ho = xsi_e(ijk)*
w_s(ipjk,m)+ &
675 (1.0-xsi_e(ijk))*
w_s(ijk,m)
676 east_dc = flux_e*(mom_lo-mom_ho)
679 IF(u(imjk) >=
zero)
THEN 682 w_s(im_of(imjk),m), tmp4(immm4))
686 w_s(ipjk,m),
w_s(ip_of(ipjk),m))
688 IF (.NOT.
fpfoi) mom_ho = xsi_e(imjk)*
w_s(ijk,m)+ &
689 (1.0-xsi_e(imjk))*
w_s(imjk,m)
690 west_dc = flux_w*(mom_lo-mom_ho)
694 IF(v(ijk) >=
zero)
THEN 697 w_s(ijmk,m),
w_s(jm_of(ijmk),m))
701 w_s(jp_of(ijpk),m), tmp4(jppp4))
703 IF (.NOT.
fpfoi) mom_ho = xsi_n(ijk)*
w_s(ijpk,m)+ &
704 (1.0-xsi_n(ijk))*
w_s(ijk,m)
705 north_dc = flux_n*(mom_lo-mom_ho)
708 IF(v(ijmk) >=
zero)
THEN 711 w_s(jm_of(ijmk),m), tmp4(jmmm4))
715 w_s(ijpk,m),
w_s(jp_of(ijpk),m))
717 IF (.NOT.
fpfoi) mom_ho = xsi_n(ijmk)*
w_s(ijk,m)+ &
718 (1.0-xsi_n(ijmk))*
w_s(ijmk,m)
719 south_dc = flux_s*(mom_lo-mom_ho)
723 IF(ww(ijk) >=
zero)
THEN 726 w_s(ijkm,m),
w_s(km_of(ijkm),m))
730 w_s(kp_of(ijkp),m), tmp4(kppp4))
732 IF (.NOT.
fpfoi) mom_ho = xsi_t(ijk)*
w_s(ijkp,m)+ &
733 (1.0-xsi_t(ijk))*
w_s(ijk,m)
734 top_dc = flux_t*(mom_lo-mom_ho)
737 IF(ww(ijk) >=
zero)
THEN 740 w_s(km_of(ijkm),m), tmp4(kmmm4))
744 w_s(ijkp,m),
w_s(kp_of(ijkp),m))
746 IF (.NOT.
fpfoi) mom_ho = xsi_t(ijkm)*
w_s(ijk,m)+ &
747 (1.0-xsi_t(ijkm))*
w_s(ijkm,m)
748 bottom_dc = flux_b*(mom_lo-mom_ho)
752 b_m(ijk,m) = b_m(ijk,m)+west_dc-east_dc+south_dc-north_dc+&
801 INTEGER,
INTENT(IN) :: M
803 DOUBLE PRECISION,
INTENT(INOUT) :: A_W_s(
dimension_3, -3:3, m:m)
808 INTEGER :: IJK, IPJK, IMJK, IJPK, IJMK, IJKP, IJKM
812 DOUBLE PRECISION :: d_fe, d_fw, d_fn, d_fs, d_ft, d_fb
814 DOUBLE PRECISION :: Flux_e, flux_w, flux_n, flux_s
815 DOUBLE PRECISION :: flux_t, flux_b
825 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: TMP4
826 DOUBLE PRECISION,
DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
842 IF (flow_at_t(ijk))
THEN 846 flux_s, flux_t, flux_b, ijk, m)
858 a_w_s(ijk,
east,m) = d_fe - xsi_e(ijk)*flux_e
859 a_w_s(ipjk,
west,m) = d_fe + (
one - xsi_e(ijk))*flux_e
861 IF (.NOT.flow_at_t(imjk))
THEN 862 a_w_s(ijk,
west,m) = d_fw + (
one - xsi_e(imjk))*flux_w
867 a_w_s(ijk,
north,m) = d_fn - xsi_n(ijk)*flux_n
868 a_w_s(ijpk,
south,m) = d_fn + (
one - xsi_n(ijk))*flux_n
870 IF (.NOT.flow_at_t(ijmk))
THEN 871 a_w_s(ijk,
south,m) = d_fs + (
one - xsi_n(ijmk))*flux_s
876 a_w_s(ijk,
top,m) = d_ft - xsi_t(ijk)*flux_t
877 a_w_s(ijkp,
bottom,m) = d_ft + (
one - xsi_t(ijk))*flux_t
879 IF (.NOT.flow_at_t(ijkm))
THEN 880 a_w_s(ijk,
bottom,m) = d_fb + (
one - xsi_t(ijkm))*flux_b
double precision, dimension(:,:), allocatable v_s
double precision, dimension(:), allocatable theta_w_tn
double precision, dimension(:,:), allocatable mu_s
integer, dimension(:), allocatable i_of
double precision, dimension(:), allocatable oneodx_e_w
double precision, dimension(:,:), allocatable flux_st
double precision, parameter one
subroutine get_wcell_scflux_terms(FLUX_E, FLUX_W, FLUX_N, FLUX_S, FLUX_T, FLUX_B, IJK, M)
double precision, dimension(:), allocatable oneodz_t_w
double precision, dimension(:,:), allocatable w_s
integer, dimension(:), allocatable im1
double precision, dimension(:), allocatable theta_w_bn
logical, dimension(0:dim_m) momentum_z_eq
double precision, dimension(:), allocatable theta_wt
subroutine calc_xsi(DISCR, PHI, U, V, W, XSI_E, XSI_N, XSI_T, incr)
subroutine get_wcell_sdiff_terms(D_FE, D_FW, D_FN, D_FS, D_FT, D_FB, IJK, M)
double precision, dimension(:,:), allocatable u_s
subroutine conv_dif_w_s(A_M, B_M)
double precision, dimension(:), allocatable alpha_wt_c
double precision, dimension(:), allocatable theta_wt_bar
integer, dimension(:), allocatable k_of
double precision function fpfoi_of(PHI_D, PHI_C, PHI_U, PHI_UU)
double precision, dimension(:), allocatable ody_n
double precision, dimension(:), allocatable alpha_wn_c
subroutine store_a_w_sdc(M, B_M)
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable odx_e
integer, dimension(:), allocatable jm1
double precision, dimension(:), allocatable ox
subroutine get_interpolation_terms_s(IJK, M, TYPE_OF_CELL, ALPHA_CUT, AW, HW, VELW)
double precision, dimension(:), allocatable alpha_we_c
subroutine dif_w_is(DIF, A_M, M)
integer, dimension(:), allocatable kp1
double precision, parameter half
double precision, dimension(:), allocatable ayz_w
logical, dimension(:), allocatable cut_w_treatment_at
subroutine store_a_w_s0(A_W_S, M)
double precision, dimension(:), allocatable axz_w
double precision, dimension(:), allocatable odz
double precision, dimension(:), allocatable axy_w
double precision, dimension(:), allocatable theta_w_te
subroutine get_wcell_svterms(U, V, WW, M)
integer, dimension(dim_eqs) discretize
double precision, dimension(:), allocatable theta_w_be
double precision, dimension(:,:), allocatable flux_se
double precision, dimension(:), allocatable oneody_n_w
subroutine store_a_w_s1(A_W_S, M)
integer function funijk3(LI3, LJ3, LK3)
double precision, dimension(:,:), allocatable flux_sn
double precision, parameter zero