19 USE run, only: kt_type_enum
20 USE run, only: ghd_2007
42 IF(kt_type_enum /= ghd_2007 .OR. &
43 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN 46 IF (momentum_x_eq(m))
THEN 90 USE fun_avg, only: avg_x_e, avg_x
101 INTEGER,
INTENT(IN) :: M
110 INTEGER :: IJK, I, IP, IPJK
112 DOUBLE PRECISION :: AW, HW, VELW
121 IF(cut_u_treatment_at(ijk))
THEN 124 u(ijk) = (theta_ue_bar(ijk) *
u_s(ijk,m) + &
125 theta_ue(ijk) *
u_s(ipjk,m))
131 v(ijk) = (theta_u_nw(ijk) *
v_s(ijk,m) + &
132 theta_u_ne(ijk) *
v_s(ipjk,m))
139 ww(ijk) = (theta_u_tw(ijk) *
w_s(ijk,m) + &
140 theta_u_te(ijk) *
w_s(ipjk,m))
143 ww(ijk) = ww(ijk) * aw
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)
166 flux_s, flux_t, flux_b, ijk, m)
175 USE functions, only: ip_of, im_of, jm_of, km_of
185 INTEGER,
INTENT(IN) :: M
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
191 INTEGER,
INTENT(IN) :: ijk
196 INTEGER :: imjk, ijmk, ijkm
197 INTEGER :: ipjk, ipjmk, ipjkm
200 DOUBLE PRECISION :: AW, HW, VELW
212 IF(cut_u_treatment_at(ijk))
THEN 214 flux_e = (theta_ue_bar(ijk) *
flux_se(ijk,m) + &
215 theta_ue(ijk) *
flux_se(ipjk,m))
220 flux_w = (theta_ue_bar(imjk) *
flux_se(imjk,m) + &
221 theta_ue(imjk) *
flux_se(ijk,m))
228 flux_n = (theta_u_nw(ijk) *
flux_sn(ijk,m) + &
229 theta_u_ne(ijk) *
flux_sn(ipjk,m))
234 flux_s = (theta_u_nw(ijmk) *
flux_sn(ijmk,m) + &
235 theta_u_ne(ijmk) *
flux_sn(ipjmk,m))
242 flux_t = (theta_u_tw(ijk) *
flux_st(ijk,m) + &
243 theta_u_te(ijk) *
flux_st(ipjk,m))
248 flux_b = (theta_u_tw(ijkm) *
flux_st(ijkm,m) + &
249 theta_u_te(ijkm) *
flux_st(ipjkm,m))
286 USE functions, only: east_of, north_of, top_of
290 USE fun_avg, only: avg_x_h, avg_y_h, avg_z_h
306 INTEGER,
INTENT(IN) :: M
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
312 INTEGER,
INTENT(IN) :: ijk
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
323 DOUBLE PRECISION :: C_AE, C_AW, C_AN, C_AS, C_AT, C_AB
338 IF (wall_at(ijk))
THEN 344 ijkne = east_of(ijkn)
346 ijkse = east_of(ijks)
348 IF(cut_u_treatment_at(ijk))
THEN 371 d_fn = 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)*&
375 d_fs = 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)*&
381 ijkte = east_of(ijkt)
382 ijkb = bottom_of(ijk)
383 ijkbe = east_of(ijkb)
386 d_ft = 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)
390 d_fb = 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)
434 INTEGER,
INTENT(IN) :: M
436 DOUBLE PRECISION,
INTENT(INOUT) :: A_U_s(
dimension_3, -3:3, m:m)
442 INTEGER :: IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
444 DOUBLE PRECISION :: flux_e, flux_w, flux_n, flux_s
445 DOUBLE PRECISION :: flux_t, flux_b
447 DOUBLE PRECISION :: D_fe, d_fw, d_fn, d_fs, d_ft, d_fb
459 IF (flow_at_e(ijk))
THEN 463 flux_s, flux_t, flux_b, ijk, m)
473 IF (flux_e >=
zero)
THEN 474 a_u_s(ijk,
east,m) = d_fe
475 a_u_s(ipjk,
west,m) = d_fe + flux_e
477 a_u_s(ijk,
east,m) = d_fe - flux_e
478 a_u_s(ipjk,
west,m) = d_fe
481 IF (.NOT.flow_at_e(imjk))
THEN 482 IF (flux_w >=
zero)
THEN 483 a_u_s(ijk,
west,m) = d_fw + flux_w
485 a_u_s(ijk,
west,m) = d_fw
491 IF (flux_n >=
zero)
THEN 492 a_u_s(ijk,
north,m) = d_fn
493 a_u_s(ijpk,
south,m) = d_fn + flux_n
495 a_u_s(ijk,
north,m) = d_fn - flux_n
496 a_u_s(ijpk,
south,m) = d_fn
499 IF (.NOT.flow_at_e(ijmk))
THEN 500 IF (flux_s >=
zero)
THEN 501 a_u_s(ijk,
south,m) = d_fs + flux_s
503 a_u_s(ijk,
south,m) = d_fs
513 IF (flux_t >=
zero)
THEN 514 a_u_s(ijk,
top,m) = d_ft
515 a_u_s(ijkp,
bottom,m) = d_ft + flux_t
517 a_u_s(ijk,
top,m) = d_ft - flux_t
518 a_u_s(ijkp,
bottom,m) = d_ft
521 IF (.NOT.flow_at_e(ijkm))
THEN 522 IF (flux_b >=
zero)
THEN 523 a_u_s(ijk,
bottom,m) = d_fb + flux_b
525 a_u_s(ijk,
bottom,m) = d_fb
587 INTEGER,
INTENT(IN) :: M
594 INTEGER :: I, J, K, IJK
595 INTEGER :: IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
596 INTEGER :: IJK4, IPPP, IPPP4, JPPP, JPPP4, KPPP, KPPP4
597 INTEGER :: IMMM, IMMM4, JMMM, JMMM4, KMMM, KMMM4
601 DOUBLE PRECISION :: MOM_HO
603 DOUBLE PRECISION :: MOM_LO
605 DOUBLE PRECISION :: flux_e, flux_w, flux_n, flux_s
606 DOUBLE PRECISION :: flux_t, flux_b
608 DOUBLE PRECISION :: EAST_DC
609 DOUBLE PRECISION :: WEST_DC
610 DOUBLE PRECISION :: NORTH_DC
611 DOUBLE PRECISION :: SOUTH_DC
612 DOUBLE PRECISION :: TOP_DC
613 DOUBLE PRECISION :: BOTTOM_DC
624 DOUBLE PRECISION,
DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
635 tmp4(ijk4) =
u_s(ijk,m)
652 IF (flow_at_e(ijk))
THEN 656 flux_s, flux_t, flux_b, ijk, m)
666 ippp = ip_of(ip_of(ipjk))
668 immm = im_of(im_of(imjk))
670 jppp = jp_of(jp_of(ijpk))
672 jmmm = jm_of(jm_of(ijmk))
674 kppp = kp_of(kp_of(ijkp))
676 kmmm = km_of(km_of(ijkm))
681 IF(u(ijk) >=
zero)
THEN 684 u_s(imjk,m),
u_s(im_of(imjk),m))
688 u_s(ip_of(ipjk),m), tmp4(ippp4))
691 IF (.NOT.
fpfoi) mom_ho = xsi_e(ijk)*
u_s(ipjk,m)+ &
692 (1.0-xsi_e(ijk))*
u_s(ijk,m)
693 east_dc = flux_e *(mom_lo - mom_ho)
695 IF(u(imjk) >=
zero)
THEN 698 u_s(im_of(imjk),m), tmp4(immm4))
702 u_s(ipjk,m),
u_s(ip_of(ipjk),m))
704 IF (.NOT.
fpfoi) mom_ho = xsi_e(imjk)*
u_s(ijk,m)+ &
705 (1.0-xsi_e(imjk))*
u_s(imjk,m)
706 west_dc = flux_w * (mom_lo - mom_ho)
710 IF(v(ijk) >=
zero)
THEN 713 u_s(ijmk,m),
u_s(jm_of(ijmk),m))
717 u_s(jp_of(ijpk),m), tmp4(jppp4))
719 IF (.NOT.
fpfoi) mom_ho = xsi_n(ijk)*
u_s(ijpk,m)+ &
720 (1.0-xsi_n(ijk))*
u_s(ijk,m)
721 north_dc = flux_n * (mom_lo - mom_ho)
724 IF(v(ijmk) >=
zero)
THEN 727 u_s(jm_of(ijmk),m), tmp4(jmmm4))
731 u_s(ijpk,m),
u_s(jp_of(ijpk),m))
733 IF (.NOT.
fpfoi) mom_ho = xsi_n(ijmk)*
u_s(ijk,m)+ &
734 (1.0-xsi_n(ijmk))*
u_s(ijmk,m)
735 south_dc = flux_s * (mom_lo - mom_ho)
740 IF(ww(ijk) >=
zero)
THEN 749 IF (.NOT.
fpfoi) mom_ho = xsi_t(ijk)*
u_s(ijkp,m)+ &
750 (1.0-xsi_t(ijk))*
u_s(ijk,m)
751 top_dc = flux_t *(mom_lo - mom_ho)
754 IF(ww(ijk) >=
zero)
THEN 763 IF (.NOT.
fpfoi) mom_ho = xsi_t(ijkm)*
u_s(ijk,m)+ &
764 (1.0-xsi_t(ijkm))*
u_s(ijkm,m)
765 bottom_dc = flux_b * (mom_lo - mom_ho)
773 b_m(ijk,m) = b_m(ijk,m)+west_dc-east_dc+south_dc-north_dc+&
821 INTEGER,
INTENT(IN) :: M
823 DOUBLE PRECISION,
INTENT(INOUT) :: A_U_s(
dimension_3, -3:3, m:m)
828 INTEGER :: IJK, IPJK, IMJK, IJPK, IJMK, IJKP, IJKM
832 DOUBLE PRECISION :: d_fe, d_fw, d_fn, d_fs, d_ft, d_fb
834 DOUBLE PRECISION :: Flux_e, flux_w, flux_n, flux_s
835 DOUBLE PRECISION :: flux_t, flux_b
845 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: TMP4
846 DOUBLE PRECISION,
DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
862 IF (flow_at_e(ijk))
THEN 866 flux_s, flux_t, flux_b, ijk, m)
876 a_u_s(ijk,
east,m) = d_fe - xsi_e(ijk) * flux_e
877 a_u_s(ipjk,
west,m) = d_fe + (
one - xsi_e(ijk)) * flux_e
879 IF (.NOT.flow_at_e(imjk))
THEN 880 a_u_s(ijk,
west,m) = d_fw + (
one - xsi_e(imjk)) * flux_w
885 a_u_s(ijk,
north,m) = d_fn - xsi_n(ijk) * flux_n
886 a_u_s(ijpk,
south,m) = d_fn + (
one - xsi_n(ijk)) * flux_n
888 IF (.NOT.flow_at_e(ijmk))
THEN 889 a_u_s(ijk,
south,m) = d_fs + (
one - xsi_n(ijmk)) * flux_s
897 a_u_s(ijk,
top,m) = d_ft - xsi_t(ijk) * flux_t
898 a_u_s(ijkp,
bottom,m) = d_ft + (
one - xsi_t(ijk)) * flux_t
900 IF (.NOT.flow_at_e(ijkm))
THEN 901 a_u_s(ijk,
bottom,m) = d_fb + (
one - xsi_t(ijkm)) * flux_b
integer, dimension(:), allocatable ip1
double precision, dimension(:,:), allocatable v_s
double precision, dimension(:), allocatable alpha_ut_c
double precision, dimension(:,:), allocatable mu_s
integer, dimension(:), allocatable i_of
subroutine get_ucell_svterms(U, V, WW, M)
double precision, dimension(:), allocatable theta_u_ne
double precision, dimension(:,:), allocatable flux_st
double precision, dimension(:), allocatable ox_e
double precision, dimension(:), allocatable odx
double precision, parameter one
subroutine get_ucell_scflux_terms(FLUX_E, FLUX_W, FLUX_N, FLUX_S, FLUX_T, FLUX_B, IJK, M)
double precision, dimension(:,:), allocatable w_s
double precision, dimension(:), allocatable theta_u_nw
logical, dimension(0:dim_m) momentum_x_eq
subroutine dif_u_is(DIF, A_M, M)
subroutine get_ucell_sdiff_terms(D_FE, D_FW, D_FN, D_FS, D_FT, D_FB, IJK, M)
subroutine calc_xsi(DISCR, PHI, U, V, W, XSI_E, XSI_N, XSI_T, incr)
double precision, dimension(:), allocatable ayz_u
logical, dimension(:), allocatable cut_u_treatment_at
double precision, dimension(:), allocatable oneody_n_u
double precision, dimension(:), allocatable alpha_ue_c
double precision, dimension(:,:), allocatable u_s
double precision, dimension(:), allocatable axz_u
double precision, dimension(:), allocatable oneodx_e_u
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 theta_u_tw
integer, dimension(:), allocatable j_of
subroutine store_a_u_s0(A_U_S, M)
integer, dimension(:), allocatable jm1
double precision, dimension(:), allocatable alpha_un_c
subroutine get_interpolation_terms_s(IJK, M, TYPE_OF_CELL, ALPHA_CUT, AW, HW, VELW)
double precision, dimension(:), allocatable theta_ue
double precision, parameter half
double precision, dimension(:), allocatable oneodz_t_u
subroutine store_a_u_sdc(M, B_M)
integer, dimension(:), allocatable km1
double precision, dimension(:), allocatable theta_ue_bar
subroutine conv_dif_u_s(A_M, B_M)
integer, dimension(dim_eqs) discretize
subroutine store_a_u_s1(A_U_S, M)
double precision, dimension(:,:), allocatable flux_se
double precision, dimension(:), allocatable axy_u
double precision, dimension(:), allocatable theta_u_te
double precision, dimension(:), allocatable odz_t
integer function funijk3(LI3, LJ3, LK3)
double precision, dimension(:,:), allocatable flux_sn
double precision, parameter zero