20 USE run, only: kt_type_enum
21 USE run, only: ghd_2007
36 INTEGER,
INTENT(INOUT) :: IER
45 IF(kt_type_enum /= ghd_2007 .OR. &
46 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN 50 IF (momentum_y_eq(m))
THEN 94 USE fun_avg, only: avg_y_n, avg_y
105 INTEGER,
INTENT(IN) :: M
114 INTEGER :: IJK, J, IJPK
116 DOUBLE PRECISION :: AW, HW, VELW
124 IF(cut_v_treatment_at(ijk))
THEN 127 u(ijk) = (theta_v_se(ijk) *
u_s(ijk,m) + &
128 theta_v_ne(ijk) *
u_s(ijpk,m))
134 v(ijk) = (theta_vn_bar(ijk) *
v_s(ijk,m) + &
135 theta_vn(ijk) *
v_s(ijpk,m))
142 ww(ijk) = (theta_v_nt(ijk) *
w_s(ijk,m) + &
143 theta_v_st(ijk) *
w_s(ijpk,m))
146 ww(ijk) = ww(ijk) * aw
150 u(ijk) = avg_y(
u_s(ijk,m),
u_s(ijpk,m),j)
151 v(ijk) = avg_y_n(
v_s(ijk,m),
v_s(ijpk,m))
152 IF (
do_k) ww(ijk) = avg_y(
w_s(ijk,m),
w_s(ijpk,m),j)
170 flux_s, flux_t, flux_b, ijk, m)
180 USE functions, only: jp_of, im_of, jm_of, km_of
192 INTEGER,
INTENT(IN) :: M
194 DOUBLE PRECISION,
INTENT(OUT) :: flux_e, flux_w
195 DOUBLE PRECISION,
INTENT(OUT) :: flux_n, flux_s
196 DOUBLE PRECISION,
INTENT(OUT) :: flux_t, flux_b
198 INTEGER,
INTENT(IN) :: ijk
202 INTEGER :: imjk, ijmk, ijkm
203 INTEGER :: ijpk, imjpk, ijpkm
206 DOUBLE PRECISION :: AW, HW, VELW
216 IF(cut_v_treatment_at(ijk))
THEN 218 flux_e = (theta_v_se(ijk) *
flux_se(ijk,m) + &
219 theta_v_ne(ijk) *
flux_se(ijpk,m))
224 flux_w = (theta_v_se(imjk) *
flux_se(imjk,m) + &
225 theta_v_ne(imjk) *
flux_se(imjpk,m))
231 flux_n = (theta_vn_bar(ijk) *
flux_sn(ijk,m) + &
232 theta_vn(ijk) *
flux_sn(ijpk,m))
237 flux_s = (theta_vn_bar(ijmk) *
flux_sn(ijmk,m) + &
238 theta_vn(ijmk) *
flux_sn(ijk,m))
245 flux_t = (theta_v_nt(ijk) *
flux_st(ijk,m) + &
246 theta_v_st(ijk) *
flux_st(ijpk,m))
251 flux_b = (theta_v_nt(ijkm) *
flux_st(ijkm,m) + &
252 theta_v_st(ijkm) *
flux_st(ijpkm,m))
290 USE functions, only: east_of, north_of, top_of
294 USE fun_avg, only: avg_x_h, avg_y_h, avg_z_h
310 INTEGER,
INTENT(IN) :: M
312 DOUBLE PRECISION,
INTENT(OUT) :: d_fe, d_fw
313 DOUBLE PRECISION,
INTENT(OUT) :: d_fn, d_fs
314 DOUBLE PRECISION,
INTENT(OUT) :: d_ft, d_fb
316 INTEGER,
INTENT(IN) :: ijk
321 INTEGER :: imjk, ijmk, ijkm
322 INTEGER :: i, j, k, jp, im, km
323 INTEGER :: ijkc, ijkn, ijke, ijkne, ijkw, ijknw
324 INTEGER :: ijkt, ijktn, ijkb, ijkbn
326 DOUBLE PRECISION :: C_AE, C_AW, C_AN, C_AS, C_AT, C_AB
341 IF (wall_at(ijk))
THEN 347 ijkne = east_of(ijkn)
349 ijknw = north_of(ijkw)
351 IF(cut_v_treatment_at(ijk))
THEN 368 d_fe = avg_y_h(avg_x_h(
mu_s(ijkc,m),
mu_s(ijke,m),i),&
369 avg_x_h(
mu_s(ijkn,m),
mu_s(ijkne,m),i),j)*&
372 d_fw = avg_y_h(avg_x_h(
mu_s(ijkw,m),
mu_s(ijkc,m),im),&
373 avg_x_h(
mu_s(ijknw,m),
mu_s(ijkn,m),im),j)*&
383 ijktn = north_of(ijkt)
384 ijkb = bottom_of(ijk)
385 ijkbn = north_of(ijkb)
388 d_ft = avg_y_h(avg_z_h(
mu_s(ijkc,m),
mu_s(ijkt,m),k),&
389 avg_z_h(
mu_s(ijkn,m),
mu_s(ijktn,m),k),j)*&
390 ox(i)*c_at*
axy_v(ijk)
392 d_fb = avg_y_h(avg_z_h(
mu_s(ijkb,m),
mu_s(ijkc,m),km),&
393 avg_z_h(
mu_s(ijkbn,m),
mu_s(ijkn,m),km),j)*&
394 ox(i)*c_ab*
axy_v(ijkm)
439 INTEGER,
INTENT(IN) :: M
441 DOUBLE PRECISION,
INTENT(INOUT) :: A_V_s(
dimension_3, -3:3, m:m)
447 INTEGER :: IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
449 DOUBLE PRECISION :: flux_e, flux_w, flux_n, flux_s
450 DOUBLE PRECISION :: flux_t, flux_b
452 DOUBLE PRECISION :: D_fe, d_fw, d_fn, d_fs, d_ft, d_fb
464 IF (flow_at_n(ijk))
THEN 468 flux_s, flux_t, flux_b, ijk, m)
477 IF (flux_e >=
zero)
THEN 478 a_v_s(ijk,
east,m) = d_fe
479 a_v_s(ipjk,
west,m) = d_fe + flux_e
481 a_v_s(ijk,
east,m) = d_fe - flux_e
482 a_v_s(ipjk,
west,m) = d_fe
485 IF (.NOT.flow_at_n(imjk))
THEN 486 IF (flux_w >=
zero)
THEN 487 a_v_s(ijk,
west,m) = d_fw + flux_w
489 a_v_s(ijk,
west,m) = d_fw
495 IF (flux_n >=
zero)
THEN 496 a_v_s(ijk,
north,m) = d_fn
497 a_v_s(ijpk,
south,m) = d_fn + flux_n
499 a_v_s(ijk,
north,m) = d_fn - flux_n
500 a_v_s(ijpk,
south,m) = d_fn
503 IF (.NOT.flow_at_n(ijmk))
THEN 504 IF (flux_s >=
zero)
THEN 505 a_v_s(ijk,
south,m) = d_fs + flux_s
507 a_v_s(ijk,
south,m) = d_fs
517 IF (flux_t >=
zero)
THEN 518 a_v_s(ijk,
top,m) = d_ft
519 a_v_s(ijkp,
bottom,m) = d_ft + flux_t
521 a_v_s(ijk,
top,m) = d_ft - flux_t
522 a_v_s(ijkp,
bottom,m) = d_ft
525 IF (.NOT.flow_at_n(ijkm))
THEN 526 IF (flux_b >=
zero)
THEN 527 a_v_s(ijk,
bottom,m) = d_fb + flux_b
529 a_v_s(ijk,
bottom,m) = d_fb
589 INTEGER,
INTENT(IN) :: M
596 INTEGER :: I, J, K, IJK
597 INTEGER :: IPJK, IMJK, IJMK, IJPK, IJKM, IJKP
598 INTEGER :: IJK4, IPPP, IPPP4, JPPP, JPPP4, KPPP, KPPP4
599 INTEGER :: IMMM, IMMM4, JMMM, JMMM4, KMMM, KMMM4
603 DOUBLE PRECISION :: MOM_HO
605 DOUBLE PRECISION :: MOM_LO
607 DOUBLE PRECISION :: flux_e, flux_w, flux_n, flux_s
608 DOUBLE PRECISION :: flux_t, flux_b
610 DOUBLE PRECISION :: EAST_DC
611 DOUBLE PRECISION :: WEST_DC
612 DOUBLE PRECISION :: NORTH_DC
613 DOUBLE PRECISION :: SOUTH_DC
614 DOUBLE PRECISION :: TOP_DC
615 DOUBLE PRECISION :: BOTTOM_DC
626 DOUBLE PRECISION,
DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
637 tmp4(ijk4) =
v_s(ijk,m)
654 IF (flow_at_n(ijk))
THEN 658 flux_s, flux_t, flux_b, ijk, m)
668 ippp = ip_of(ip_of(ipjk))
670 immm = im_of(im_of(imjk))
672 jppp = jp_of(jp_of(ijpk))
674 jmmm = jm_of(jm_of(ijmk))
676 kppp = kp_of(kp_of(ijkp))
678 kmmm = km_of(km_of(ijkm))
683 IF(u(ijk) >=
zero)
THEN 686 v_s(imjk,m),
v_s(im_of(imjk),m))
690 v_s(ip_of(ipjk),m), tmp4(ippp4))
692 IF (.NOT.
fpfoi) mom_ho = xsi_e(ijk)*
v_s(ipjk,m)+ &
693 (1.0-xsi_e(ijk))*
v_s(ijk,m)
694 east_dc = flux_e*(mom_lo-mom_ho)
697 IF(u(imjk) >=
zero)
THEN 700 v_s(im_of(imjk),m), tmp4(immm4))
704 v_s(ipjk,m),
v_s(ip_of(ipjk),m))
706 IF (.NOT.
fpfoi) mom_ho = xsi_e(imjk)*
v_s(ijk,m)+ &
707 (1.0-xsi_e(imjk))*
v_s(imjk,m)
708 west_dc = flux_w*(mom_lo-mom_ho)
712 IF(v(ijk) >=
zero)
THEN 715 v_s(ijmk,m),
v_s(jm_of(ijmk),m))
719 v_s(jp_of(ijpk),m), tmp4(jppp4))
721 IF (.NOT.
fpfoi) mom_ho = xsi_n(ijk)*
v_s(ijpk,m)+ &
722 (1.0-xsi_n(ijk))*
v_s(ijk,m)
723 north_dc = flux_n*(mom_lo-mom_ho)
726 IF(v(ijmk) >=
zero)
THEN 729 v_s(jm_of(ijmk),m), tmp4(jmmm4))
733 v_s(ijpk,m),
v_s(jp_of(ijpk),m))
735 IF (.NOT.
fpfoi) mom_ho = xsi_n(ijmk)*
v_s(ijk,m)+ &
736 (1.0-xsi_n(ijmk))*
v_s(ijmk,m)
737 south_dc = flux_s*(mom_lo-mom_ho)
743 IF(ww(ijk) >=
zero)
THEN 752 IF (.NOT.
fpfoi) mom_ho = xsi_t(ijk)*
v_s(ijkp,m)+ &
753 (1.0-xsi_t(ijk))*
v_s(ijk,m)
754 top_dc = flux_t*(mom_lo-mom_ho)
757 IF(ww(ijk) >=
zero)
THEN 766 IF (.NOT.
fpfoi) mom_ho = xsi_t(ijkm)*
v_s(ijk,m)+ &
767 (1.0-xsi_t(ijkm))*
v_s(ijkm,m)
768 bottom_dc = flux_b*(mom_lo-mom_ho)
776 b_m(ijk,m) = b_m(ijk,m)+west_dc-east_dc+south_dc-north_dc+&
826 INTEGER,
INTENT(IN) :: M
828 DOUBLE PRECISION,
INTENT(INOUT) :: A_V_s(
dimension_3, -3:3, m:m)
833 INTEGER :: IJK, IPJK, IMJK, IJPK, IJMK, IJKP, IJKM
837 DOUBLE PRECISION :: d_fe, d_fw, d_fn, d_fs, d_ft, d_fb
839 DOUBLE PRECISION :: Flux_e, flux_w, flux_n, flux_s
840 DOUBLE PRECISION :: flux_t, flux_b
850 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: TMP4
851 DOUBLE PRECISION,
DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
866 IF (flow_at_n(ijk))
THEN 870 flux_s, flux_t, flux_b, ijk, m)
880 a_v_s(ijk,
east,m) = d_fe - xsi_e(ijk)*flux_e
881 a_v_s(ipjk,
west,m) = d_fe + (
one - xsi_e(ijk))*flux_e
883 IF (.NOT.flow_at_n(imjk))
THEN 884 a_v_s(ijk,
west,m) = d_fw + (
one - xsi_e(imjk))*flux_w
889 a_v_s(ijk,
north,m) = d_fn - xsi_n(ijk)*flux_n
890 a_v_s(ijpk,
south,m) = d_fn + (
one - xsi_n(ijk))*flux_n
892 IF (.NOT.flow_at_n(ijmk))
THEN 893 a_v_s(ijk,
south,m) = d_fs + (
one - xsi_n(ijmk))*flux_s
901 a_v_s(ijk,
top,m) = d_ft - xsi_t(ijk)*flux_t
902 a_v_s(ijkp,
bottom,m) = d_ft + (
one - xsi_t(ijk))*flux_t
904 IF (.NOT.flow_at_n(ijkm))
THEN 905 a_v_s(ijk,
bottom,m) = d_fb + (
one - xsi_t(ijkm))*flux_b
logical, dimension(0:dim_m) momentum_y_eq
double precision, dimension(:,:), allocatable v_s
subroutine store_a_v_s1(A_V_S, M)
double precision, dimension(:,:), allocatable mu_s
integer, dimension(:), allocatable i_of
double precision, dimension(:), allocatable alpha_vt_c
double precision, dimension(:,:), allocatable flux_st
double precision, dimension(:), allocatable oneodx_e_v
double precision, dimension(:), allocatable ody
double precision, parameter one
double precision, dimension(:,:), allocatable w_s
subroutine store_a_v_s0(A_V_S, M)
subroutine conv_dif_v_s(A_M, B_M, IER)
integer, dimension(:), allocatable im1
double precision, dimension(:), allocatable alpha_ve_c
subroutine get_vcell_scflux_terms(FLUX_E, FLUX_W, FLUX_N, FLUX_S, FLUX_T, FLUX_B, IJK, M)
subroutine calc_xsi(DISCR, PHI, U, V, W, XSI_E, XSI_N, XSI_T, incr)
double precision, dimension(:,:), allocatable u_s
double precision, dimension(:), allocatable ayz_v
subroutine store_a_v_sdc(M, B_M)
integer, dimension(:), allocatable k_of
double precision function fpfoi_of(PHI_D, PHI_C, PHI_U, PHI_UU)
double precision, dimension(:), allocatable theta_vn_bar
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable odx_e
double precision, dimension(:), allocatable theta_v_ne
double precision, dimension(:), allocatable axy_v
double precision, dimension(:), allocatable ox
integer, dimension(:), allocatable jp1
subroutine get_interpolation_terms_s(IJK, M, TYPE_OF_CELL, ALPHA_CUT, AW, HW, VELW)
double precision, dimension(:), allocatable oneody_n_v
double precision, dimension(:), allocatable theta_vn
double precision, parameter half
double precision, dimension(:), allocatable theta_v_nt
double precision, dimension(:), allocatable theta_v_se
subroutine dif_v_is(DIF, A_M, M)
integer, dimension(:), allocatable km1
logical, dimension(:), allocatable cut_v_treatment_at
subroutine get_vcell_sdiff_terms(D_FE, D_FW, D_FN, D_FS, D_FT, D_FB, IJK, M)
integer, dimension(dim_eqs) discretize
double precision, dimension(:), allocatable oneodz_t_v
double precision, dimension(:,:), allocatable flux_se
double precision, dimension(:), allocatable theta_v_st
double precision, dimension(:), allocatable odz_t
subroutine get_vcell_svterms(U, V, WW, M)
integer function funijk3(LI3, LJ3, LK3)
double precision, dimension(:,:), allocatable flux_sn
double precision, dimension(:), allocatable axz_v
double precision, parameter zero
double precision, dimension(:), allocatable alpha_vn_c