37 USE fun_avg, only: avg_x, avg_z, avg_y
38 USE fun_avg, only: avg_x_h, avg_z_h
39 USE fun_avg, only: avg_x_e, avg_y_n, avg_z_t
40 USE functions, only: ip_at_t, sip_at_t, is_id_at_t
41 USE functions, only: ip_of, jp_of, kp_of, im_of, jm_of, km_of
42 USE functions, only: east_of, west_of, top_of, bottom_of
62 USE run, only: kt_type_enum, drag_type_enum
63 USE run, only: ghd_2007, hys
85 INTEGER :: I, J, K, IJK, IJKT, IMJK, IJKP, IMJKP,&
86 IJKE, IJKW, IJKTE, IJKTW, IM, IPJK, &
87 IJKM, IJMK, IJMKP, IJPK
93 DOUBLE PRECISION :: PgT
95 DOUBLE PRECISION :: EPGA, EPGAJ
97 DOUBLE PRECISION :: ROPGA, ROGA
99 DOUBLE PRECISION :: MUGA
101 DOUBLE PRECISION :: Cte, Ctw, MUoX, cpe, cpw
107 DOUBLE PRECISION V0, Vpm, Vmt, Vbf, Vcoa, Vcob, Vxza
109 DOUBLE PRECISION Ghd_drag, avgRop
111 DOUBLE PRECISION HYS_drag, avgDrag
113 DOUBLE PRECISION :: ROP_MA, U_se, Usw, Ust, Vsb, Vst, &
114 Wse, Wsw, Wsn, Wss, Wst, Wsb
115 DOUBLE PRECISION F_vir
117 DOUBLE PRECISION :: ltau_w_g
123 IF (.NOT.momentum_z_eq(0))
RETURN 146 epga = avg_z(ep_g(ijk),ep_g(ijkt),k)
148 epgaj = avg_z(epg_jfac(ijk),epg_jfac(ijkt),k)
151 IF (ip_at_t(ijk))
THEN 173 IF (ep_g(bottom_of(ijk)) >
dil_ep_s)
THEN 175 ELSE IF (ep_g(top_of(ijk)) >
dil_ep_s)
THEN 178 b_m(ijk,m) = -
w_g(ijk)
182 ELSEIF (blocked_w_cell_at(ijk))
THEN 199 IF (cyclic_z_pd)
THEN 200 IF (
kmap(k_of(ijk)).EQ.kmax1) pgt = p_g(ijkt) -
delp_z 203 IF(.NOT.cut_w_treatment_at(ijk))
THEN 204 sdp = -
p_scale*(pgt - p_g(ijk))*axy(ijk)
209 IF(.NOT.cut_w_treatment_at(ijk))
THEN 210 sdp = -
p_scale*epga*(pgt - p_g(ijk))*axy(ijk)
216 IF(.NOT.cut_w_treatment_at(ijk))
THEN 218 ropga = avg_z(rop_g(ijk),rop_g(ijkt),k)
219 roga = avg_z(ro_g(ijk),ro_g(ijkt),k)
222 v0 = avg_z(rop_go(ijk),rop_go(ijkt),k)*
odt 226 rop_ma = avg_z(rop_g(ijk)*ep_s(ijk,m_am),&
227 rop_g(ijkt)*ep_s(ijkt,m_am),k)
228 v0 = v0 +
cv * rop_ma *
odt 232 ropga = (vol(ijk)*rop_g(ijk) + vol(ijkt)*rop_g(ijkt))/&
233 (vol(ijk) + vol(ijkt))
234 roga = (vol(ijk)*ro_g(ijk) + vol(ijkt)*ro_g(ijkt))/&
235 (vol(ijk) + vol(ijkt))
237 v0 = (vol(ijk)*rop_go(ijk) + vol(ijkt)*rop_go(ijkt))*&
238 odt/(vol(ijk) + vol(ijkt))
241 rop_ma = (vol(ijk)*rop_g(ijk)*ep_s(ijk,m_am) + &
242 vol(ijkt)*rop_g(ijkt)*ep_s(ijkt,m_am))/&
243 (vol(ijk) + vol(ijkt))
244 v0 = v0 +
cv * rop_ma *
odt 251 IF(added_mass.AND.(.NOT.cut_w_treatment_at(ijk)))
THEN 252 f_vir = ( (
w_s(ijk,m_am) -
w_so(ijk,m_am)) )*
odt*vol_w(ijk
255 wsb = avg_z_t(
w_s(ijkm,m_am),
w_s(ijk,m_am))
256 wst = avg_z_t(
w_s(ijk,m_am),
w_s(ijkp,m_am))
257 u_se = avg_z(
u_s(ijk,m_am),
u_s(ijkp,m_am),k)
258 usw = avg_z(
u_s(imjk,m_am),
u_s(imjkp,m_am),k)
259 ust = avg_x_e(usw,u_se,
ip1(i))
260 wse = avg_x(
w_s(ijk,m_am),
w_s(ipjk,m_am),
ip1(i))
261 wsw = avg_x(
w_s(imjk,m_am),
w_s(ijk,m_am),i)
262 vsb = avg_y_n(
v_s(ijmk,m_am),
v_s(ijk,m_am))
263 vst = avg_y_n(
v_s(ijmkp,m_am),
v_s(ijkp,m_am))
264 wss = avg_y(
w_s(ijmk,m_am),
w_s(ijk,m_am),
jm1(j))
265 wsn = avg_y(
w_s(ijk,m_am),
w_s(ijpk,m_am),j)
268 f_vir = f_vir +
w_s(ijk,m_am)*
ox(i)* &
269 (wst - wsb)*axy(ijk) + ust*(wse - wsw)*ayz(ijk) + &
270 avg_z(vsb,vst,k)*(wsn - wss)*axz(ijk)
273 IF (cylindrical) f_vir = f_vir + &
274 ust*
w_s(ijk,m_am)*
ox(i)
275 f_vir = f_vir *
cv * rop_ma
279 IF (sip_at_t(ijk))
THEN 280 isv = is_id_at_t(ijk)
281 muga = avg_z(
mu_g(ijk),
mu_g(ijkt),k)
282 vpm = muga/
is_pc(isv,1)
290 IF(.NOT.cut_w_treatment_at(ijk))
THEN 294 (vol(ijk) + vol(ijkt))
299 vbf = roga*
bfz_g(ijk)
301 vbf = ropga*
bfz_g(ijk)
306 IF (kt_type_enum .EQ. ghd_2007)
THEN 308 avgrop = avg_z(rop_s(ijk,l),rop_s(ijkt,l),k)
309 if(avgrop >
zero) ghd_drag = ghd_drag +&
310 avg_z(
f_gs(ijk,l),
f_gs(ijkt,l),k) *
joiz(ijk,l) / avgrop
317 IF (drag_type_enum .EQ. hys .AND. kt_type_enum .NE. ghd_2007
THEN 336 IF (cylindrical)
THEN 344 vcoa = ropga*ugt*
ox(i)
346 IF(added_mass) vcoa = vcoa +
cv*rop_ma*ugt*
ox(i)
349 vcob = -ropga*ugt*
w_g(ijk)*
ox(i)
350 IF(added_mass) vcob = vcob -
cv*rop_ma*ugt*
w_g(ijk)*
ox 398 a_m(ijk,
east,m) = a_m(ijk,
east,m) + cpe
399 a_m(ijk,
west,m) = a_m(ijk,
west,m) - cpw
401 a_m(ijk,0,m) = -(a_m(ijk,
east,m)+a_m(ijk,
west,m)+&
484 DOUBLE PRECISION,
PARAMETER :: C_mu = 0.09d0
486 DOUBLE PRECISION,
PARAMETER :: Kappa = 0.42d0
493 INTEGER :: I, J, K, I1, I2, J1, J2, K1, K2, IJK,&
494 IM, JM, IJKB, IJKM, IJKP
498 DOUBLE PRECISION W_F_Slip
520 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
522 ijk = funijk(i1,j1,k1)
523 IF (ns_wall_at(ijk))
THEN 532 ELSEIF (fs_wall_at(ijk))
THEN 549 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
551 ijk = funijk(i1,j1,k1)
552 IF (ns_wall_at(ijk))
THEN 563 ELSEIF (fs_wall_at(ijk))
THEN 582 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
584 ijk = funijk(i1,j1,k1)
585 IF (ns_wall_at(ijk))
THEN 594 ELSEIF (fs_wall_at(ijk))
THEN 611 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
613 ijk = funijk(i1,j1,k1)
614 IF (ns_wall_at(ijk))
THEN 623 ELSEIF (fs_wall_at(ijk))
THEN 655 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
658 IF (.NOT.wall_at(ijk)) cycle
667 IF (fluid_at(east_of(ijk)))
THEN 669 ELSEIF (fluid_at(west_of(ijk)))
THEN 671 ELSEIF (fluid_at(north_of(ijk)))
THEN 673 ELSEIF (fluid_at(south_of(ijk)))
THEN 690 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
693 IF (.NOT.wall_at(ijk)) cycle
702 IF (fluid_at(east_of(ijk)))
THEN 704 ELSEIF (fluid_at(west_of(ijk)))
THEN 706 ELSEIF (fluid_at(north_of(ijk)))
THEN 708 ELSEIF (fluid_at(south_of(ijk)))
THEN 725 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
728 IF (.NOT.wall_at(ijk)) cycle
739 IF (fluid_at(east_of(ijk)))
THEN 757 ELSEIF (fluid_at(west_of(ijk)))
THEN 775 ELSEIF (fluid_at(north_of(ijk)))
THEN 785 ELSEIF (fluid_at(south_of(ijk)))
THEN 815 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
818 IF (.NOT.wall_at(ijk)) cycle
829 IF (fluid_at(east_of(ijk)))
THEN 834 ro_g(east_of(ijk))*c_mu**0.25* &
836 mu_gt(east_of(ijk))*kappa/ &
837 log(9.81d0/
odx_e(i)/(2.d0)* &
838 ro_g(east_of(ijk))*c_mu**0.25* &
840 mu_g(east_of(ijk))) )
845 a_m(ijk,
east,m) = w_f_slip
848 ELSEIF (fluid_at(west_of(ijk)))
THEN 853 ro_g(west_of(ijk))*c_mu**0.25* &
855 mu_gt(west_of(ijk))*kappa/ &
856 log(9.81d0/
odx_e(im)/(2.d0)* &
857 ro_g(west_of(ijk))*c_mu**0.25* &
859 mu_g(west_of(ijk))) )
864 a_m(ijk,
west,m) = w_f_slip
867 ELSEIF (fluid_at(north_of(ijk)))
THEN 872 ELSEIF (fluid_at(south_of(ijk)))
THEN 901 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
932 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
965 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
998 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
1009 b_m(ijk,m) = -
w_g(ijk)
1014 ijkb = bottom_of(ijk)
1021 a_m(ijkb,0,m) = -
one 1022 b_m(ijkb,m) = -
w_g(ijkb)
1077 INTEGER :: IJK, I, J, K
1081 DOUBLE PRECISION :: pSource
1105 if(.NOT.is_on_mype_plus2layers(i,j,k)) cycle
1109 if(.NOT.fluid_at(ijk)) cycle
1113 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
double precision, dimension(:,:), allocatable v_s
double precision, dimension(:), allocatable vol_w
integer, dimension(:), allocatable i_of
subroutine cg_source_w_g_bc(A_M, B_M)
double precision, dimension(dimension_ps) ps_vel_mag_g
double precision, dimension(:), allocatable ep_g
double precision, dimension(:), allocatable k_turb_g
double precision, dimension(:), allocatable ox_e
double precision, parameter one
double precision function bfz_g(IJK)
double precision, dimension(:), allocatable mu_gt
double precision, dimension(:), allocatable a_wpg_t
double precision, dimension(:), allocatable axy
double precision, dimension(:), allocatable mms_w_g_src
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
subroutine cg_source_w_g(A_M, B_M)
subroutine point_source_w_g(A_M, B_M)
logical, dimension(0:dim_m) momentum_z_eq
double precision, dimension(0:dim_j) dy
double precision, dimension(:), allocatable sum_r_g
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, parameter undefined
double precision, dimension(0:dim_k) dz
double precision, dimension(:), allocatable ayz
double precision, dimension(dimension_ps) ps_massflow_g
logical, dimension(dimension_ps) ps_defined
double precision, dimension(dimension_ps) ps_w_g
double precision, dimension(:,:), allocatable u_s
subroutine source_w_g(A_M, B_M)
character, dimension(dimension_bc) bc_plane
double precision, dimension(dimension_ps) ps_volume
integer, dimension(:), allocatable k_of
integer, dimension(dimension_ps) ps_k_b
double precision, dimension(:), allocatable ody_n
subroutine wall_function(IJK1, IJK2, ODX_WF, W_F_Slip)
logical, dimension(:), allocatable blocked_w_cell_at
integer, dimension(dimension_bc) bc_k_t
logical, dimension(:,:,:), allocatable dead_cell_at
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable odx_e
integer, dimension(:), allocatable jm1
double precision, parameter small_number
integer, dimension(dimension_bc) bc_j_s
double precision, dimension(:), allocatable ox
double precision, dimension(:), allocatable epmu_gt
double precision, dimension(dimension_bc) bc_hw_g
logical, dimension(dimension_bc) bc_defined
double precision, dimension(dimension_is, 2) is_pc
integer, dimension(dimension_ps) ps_k_t
integer, dimension(:), allocatable kp1
double precision, dimension(:), allocatable w_g
double precision, parameter half
double precision, dimension(:), allocatable axz
double precision, dimension(:), allocatable ayz_w
double precision, dimension(:,:), allocatable w_so
double precision, dimension(:), allocatable w_go
double precision, parameter dil_ep_s
integer, parameter dimension_ps
logical, dimension(:), allocatable cut_w_treatment_at
double precision, dimension(:), allocatable rop_go
double precision, dimension(:), allocatable mu_g
double precision, dimension(:), allocatable u_g
double precision function ep_s(IJK, xxM)
double precision, dimension(:,:), allocatable f_gs
double precision, dimension(:), allocatable tau_w_g
double precision, dimension(:,:), allocatable rop_s
double precision, dimension(:,:,:), allocatable beta_ij
subroutine source_w_g_bc(A_M, B_M)
integer, dimension(dimension_ps) ps_j_s
double precision, dimension(:), allocatable vol
double precision, dimension(:), allocatable a_wpg_b
double precision, dimension(dimension_bc) bc_ww_g
double precision, dimension(:), allocatable ro_g
integer, dimension(dimension_ps) ps_i_e
double precision, dimension(:), allocatable rop_g
integer, dimension(:), allocatable kmap
integer, dimension(dimension_bc) bc_i_e
double precision, parameter zero
double precision, dimension(:,:), allocatable joiz