35 USE fun_avg, only: avg_x, avg_z, avg_y
36 USE fun_avg, only: avg_x_e, avg_y_n, avg_z_t
37 USE functions, only: ip_at_n, sip_at_n, is_id_at_n
38 USE functions, only: ip_of, jp_of, kp_of, im_of, jm_of, km_of
59 USE run, only: kt_type_enum, drag_type_enum
60 USE run, only: ghd_2007, hys
83 INTEGER :: I, J, K, IJK, IJKN, &
84 IMJK, IPJK, IJMK, IJPK, IJKP, IJKM, IMJPK, IJPKM
90 DOUBLE PRECISION :: PgN
92 DOUBLE PRECISION :: EPGA, EPGAJ
94 DOUBLE PRECISION :: ROPGA, ROGA
96 DOUBLE PRECISION :: MUGA
98 DOUBLE PRECISION :: Sdp
100 DOUBLE PRECISION :: V0, Vpm, Vmt, Vbf
102 DOUBLE PRECISION :: Ghd_drag, avgRop
104 DOUBLE PRECISION :: HYS_drag, avgDrag
106 DOUBLE PRECISION :: ROP_MA, Vsn, Vss, U_se, Usw, Vse, Vsw, &
108 DOUBLE PRECISION :: F_vir
110 DOUBLE PRECISION :: VSH_n,VSH_s,VSH_e,VSH_w,VSH_p,Source_conv
111 DOUBLE PRECISION :: SRT
113 DOUBLE PRECISION :: ltau_v_g
119 IF (.NOT.momentum_y_eq(0))
RETURN 144 epga = avg_y(ep_g(ijk),ep_g(ijkn),j)
146 epgaj = avg_y(epg_jfac(ijk),epg_jfac(ijkn),j)
149 IF (ip_at_n(ijk))
THEN 169 IF (ep_g(south_of(ijk)) >
dil_ep_s)
THEN 171 ELSE IF (ep_g(north_of(ijk)) >
dil_ep_s)
THEN 174 b_m(ijk,m) = -
v_g(ijk)
178 ELSEIF (blocked_v_cell_at(ijk))
THEN 194 IF (cyclic_y_pd)
THEN 195 IF (
jmap(j_of(ijk)).EQ.jmax1)pgn = p_g(ijkn) -
delp_y 198 IF(.NOT.cut_v_treatment_at(ijk))
THEN 199 sdp = -
p_scale*(pgn - p_g(ijk))*axz(ijk)
205 IF(.NOT.cut_v_treatment_at(ijk))
THEN 206 sdp = -
p_scale*epga*(pgn - p_g(ijk))*axz(ijk)
213 IF(.NOT.cut_v_treatment_at(ijk))
THEN 215 ropga = avg_y(rop_g(ijk),rop_g(ijkn),j)
216 roga = avg_y(ro_g(ijk),ro_g(ijkn),j)
218 v0 = avg_y(rop_go(ijk),rop_go(ijkn),j)*odt
221 rop_ma = avg_y(rop_g(ijk)*ep_s(ijk,m_am),&
222 rop_g(ijkn)*ep_s(ijkn,m_am),j)
223 v0 = v0 +
cv * rop_ma * odt
227 ropga = (vol(ijk)*rop_g(ijk) + &
228 vol(ijkn)*rop_g(ijkn))/(vol(ijk) + vol(ijkn))
229 roga = (vol(ijk)*ro_g(ijk) + &
230 vol(ijkn)*ro_g(ijkn) )/(vol(ijk) + vol(ijkn))
232 v0 = (vol(ijk)*rop_go(ijk) + vol(ijkn)*rop_go(ijkn))*&
233 odt/(vol(ijk) + vol(ijkn))
236 rop_ma = (vol(ijk)*rop_g(ijk)*ep_s(ijk,m_am) + &
237 vol(ijkn)*rop_g(ijkn)*ep_s(ijkn,m_am) )/&
238 (vol(ijk) + vol(ijkn))
239 v0 = v0 +
cv * rop_ma * odt
246 IF(added_mass.AND.(.NOT.cut_v_treatment_at(ijk)))
THEN 247 f_vir = ((
v_s(ijk,m_am) -
v_so(ijk,m_am)))*&
251 vss = avg_y_n(
v_s(ijmk,m_am),
v_s(ijk,m_am))
252 vsn = avg_y_n(
v_s(ijk,m_am),
v_s(ijpk,m_am))
253 u_se = avg_y(
u_s(ijk,m_am),
u_s(ijpk,m_am),j)
254 usw = avg_y(
u_s(imjk,m_am),
u_s(imjpk,m_am),j)
255 vse = avg_x(
v_s(ijk,m_am),
v_s(ipjk,m_am),
ip1(i))
256 vsw = avg_x(
v_s(imjk,m_am),
v_s(ijk,m_am),i)
258 wst = avg_y(
w_s(ijk,m_am),
w_s(ijpk,m_am),j)
259 wsb = avg_y(
w_s(ijkm,m_am),
w_s(ijpkm,m_am),j)
260 vst = avg_z(
v_s(ijk,m_am),
v_s(ijkp,m_am),
kp1(k))
261 vsb = avg_z(
v_s(ijkm,m_am),
v_s(ijk,m_am),k)
262 f_vir = f_vir + avg_z_t(wsb,wst)*
ox(i) * &
266 f_vir = f_vir +
v_s(ijk,m_am)*(vsn - vss)*axz(ijk) + &
267 avg_x_e(usw,u_se,
ip1(i))*(vse - vsw)*ayz(ijk)
268 f_vir = f_vir *
cv * rop_ma
272 IF (sip_at_n(ijk))
THEN 273 isv = is_id_at_n(ijk)
274 muga = avg_y(
mu_g(ijk),
mu_g(ijkn),j)
275 vpm = muga/
is_pc(isv,1)
283 IF(.NOT.cut_v_treatment_at(ijk))
THEN 287 (vol(ijk) + vol(ijkn))
292 vbf = roga*
bfy_g(ijk)
294 vbf = ropga*
bfy_g(ijk)
299 IF (kt_type_enum .EQ. ghd_2007)
THEN 301 avgrop = avg_y(rop_s(ijk,l),rop_s(ijkn,l),j)
302 if(avgrop >
zero) ghd_drag = ghd_drag +&
303 avg_y(
f_gs(ijk,l),
f_gs(ijkn,l),j) *
joiy(ijk,l) / avgrop
310 IF (drag_type_enum .EQ. hys .AND. kt_type_enum .NE. ghd_2007
THEN 327 srt=(2d0*
v_sh/xlength)
333 source_conv=a_m(ijk,
north,m)*vsh_n + a_m(ijk,
south,m)*vsh_s
342 a_m(ijk,0,m) = -(a_m(ijk,
east,m)+a_m(ijk,
west,m)+&
422 INTEGER :: I, J, K, I1, I2, J1, J2, K1, K2, IJK, &
423 IM, KM, IJKS, IJMK, IJPK
427 DOUBLE PRECISION :: W_F_Slip
448 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
450 ijk = funijk(i1,j1,k1)
451 IF (ns_wall_at(ijk))
THEN 462 ELSEIF (fs_wall_at(ijk))
THEN 481 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
483 ijk = funijk(i1,j1,k1)
484 IF (ns_wall_at(ijk))
THEN 493 ELSE IF (fs_wall_at(ijk))
THEN 512 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
514 ijk = funijk(i1,j1,k1)
515 IF (ns_wall_at(ijk))
THEN 524 ELSEIF (fs_wall_at(ijk))
THEN 541 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
543 ijk = funijk(i1,j1,k1)
544 IF (ns_wall_at(ijk))
THEN 553 ELSEIF (fs_wall_at(ijk))
THEN 584 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
587 IF (.NOT.wall_at(ijk)) cycle
596 IF (fluid_at(east_of(ijk)))
THEN 598 ELSEIF (fluid_at(west_of(ijk)))
THEN 600 ELSEIF (fluid_at(top_of(ijk)))
THEN 602 ELSEIF (fluid_at(bottom_of(ijk)))
THEN 619 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
622 IF (.NOT.wall_at(ijk)) cycle
631 IF (fluid_at(east_of(ijk)))
THEN 633 ELSEIF (fluid_at(west_of(ijk)))
THEN 635 ELSEIF (fluid_at(top_of(ijk)))
THEN 637 ELSEIF (fluid_at(bottom_of(ijk)))
THEN 654 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
657 IF (.NOT.wall_at(ijk)) cycle
668 IF (fluid_at(east_of(ijk)))
THEN 678 ELSEIF (fluid_at(west_of(ijk)))
THEN 688 ELSEIF (fluid_at(top_of(ijk)))
THEN 698 ELSEIF (fluid_at(bottom_of(ijk)))
THEN 727 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
730 IF (.NOT.wall_at(ijk)) cycle
741 IF (fluid_at(east_of(ijk)))
THEN 746 ELSEIF (fluid_at(west_of(ijk)))
THEN 751 ELSEIF (fluid_at(top_of(ijk)))
THEN 756 ELSEIF (fluid_at(bottom_of(ijk)))
THEN 784 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
815 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
848 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
881 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
892 b_m(ijk,m) = -
v_g(ijk)
905 b_m(ijks,m) = -
v_g(ijks)
959 INTEGER :: IJK, I, J, K
963 DOUBLE PRECISION :: pSource
975 if(
ps_v_g(psv) < 0.0d0)
then 987 if(.NOT.is_on_mype_plus2layers(i,j,k)) cycle
991 if(.NOT.fluid_at(ijk)) cycle
995 b_m(ijk,m) = b_m(ijk,m) - psource * &
integer, dimension(:), allocatable ip1
integer, dimension(dimension_bc) bc_k_b
integer, dimension(dimension_ps) ps_i_w
logical, dimension(0:dim_m) momentum_y_eq
double precision, dimension(:,:), allocatable v_s
double precision, dimension(:,:), allocatable v_so
double precision, dimension(dimension_ps) ps_v_g
integer, dimension(:), allocatable i_of
double precision, dimension(dimension_ps) ps_vel_mag_g
double precision, dimension(:), allocatable ep_g
double precision, parameter one
double precision, dimension(:), allocatable a_vpg_s
double precision, dimension(:), allocatable axy
integer, dimension(dimension_bc) bc_i_w
double precision, dimension(:,:), allocatable w_s
integer, dimension(dimension_bc) bc_j_n
integer, dimension(:), allocatable im1
double precision, dimension(:), allocatable epg_jfac
double precision, dimension(:), allocatable sum_r_g
subroutine source_v_g(A_M, B_M)
subroutine point_source_v_g(A_M, B_M)
integer, dimension(dimension_ps) ps_j_n
double precision, dimension(:), allocatable p_g
integer, parameter dimension_bc
integer, dimension(dimension_bc) bc_type_enum
double precision, dimension(:), allocatable mms_v_g_src
double precision, parameter undefined
double precision, dimension(:), allocatable v_go
double precision, dimension(:), allocatable ayz
double precision, dimension(dimension_ps) ps_massflow_g
logical, dimension(dimension_ps) ps_defined
double precision, dimension(:,:), allocatable u_s
character, dimension(dimension_bc) bc_plane
double precision, dimension(:), allocatable vsh
double precision, dimension(dimension_ps) ps_volume
integer, dimension(:), allocatable k_of
integer, dimension(dimension_ps) ps_k_b
subroutine wall_function(IJK1, IJK2, ODX_WF, W_F_Slip)
integer, dimension(dimension_bc) bc_k_t
logical, dimension(:,:,:), allocatable dead_cell_at
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable odx_e
double precision, parameter small_number
integer, dimension(dimension_bc) bc_j_s
double precision, dimension(:), allocatable ox
double precision, dimension(dimension_bc) bc_hw_g
double precision, dimension(:), allocatable v_g
logical, dimension(dimension_bc) bc_defined
double precision, dimension(dimension_is, 2) is_pc
double precision, dimension(:,:), allocatable joiy
integer, dimension(dimension_ps) ps_k_t
integer, dimension(:), allocatable kp1
double precision, parameter half
double precision, dimension(:), allocatable axz
double precision, parameter dil_ep_s
subroutine cg_source_v_g_bc(A_M, B_M)
integer, parameter dimension_ps
double precision function bfy_g(IJK)
double precision, dimension(:), allocatable rop_go
double precision, dimension(:), allocatable tau_v_g
integer, dimension(:), allocatable km1
double precision, dimension(:), allocatable mu_g
double precision, dimension(dimension_bc) bc_vw_g
subroutine cg_source_v_g(A_M, B_M)
logical, dimension(:), allocatable cut_v_treatment_at
double precision function ep_s(IJK, xxM)
double precision, dimension(:,:), allocatable f_gs
integer, dimension(:), allocatable jmap
double precision, dimension(:,:), allocatable rop_s
logical, dimension(:), allocatable blocked_v_cell_at
double precision, dimension(:), allocatable a_vpg_n
double precision, dimension(:,:,:), allocatable beta_ij
integer, dimension(dimension_ps) ps_j_s
double precision, dimension(:), allocatable vol
double precision, dimension(:), allocatable odz_t
double precision, dimension(:), allocatable ro_g
integer, dimension(dimension_ps) ps_i_e
double precision, dimension(:), allocatable rop_g
integer, dimension(dimension_bc) bc_i_e
subroutine source_v_g_bc(A_M, B_M)
double precision, parameter zero
double precision, dimension(:), allocatable vol_v