37 USE fun_avg, only: avg_x, avg_z, avg_y
38 USE fun_avg, only: avg_x_e, avg_y_n, avg_z_t
39 USE functions, only: ip_at_e, sip_at_e, is_id_at_e
40 USE functions, only: ip_of, jp_of, kp_of, im_of, jm_of, km_of
60 USE run, only: kt_type_enum, drag_type_enum
61 USE run, only: ghd_2007, hys
83 INTEGER :: I, J, K, IJK, IJKE, IPJK, IJKM, &
84 IPJKM, IMJK, IJMK, IPJMK, IJPK, IJKP
90 DOUBLE PRECISION :: PgE
92 DOUBLE PRECISION :: EPGA, EPGAJ
94 DOUBLE PRECISION :: ROPGA, ROGA
96 DOUBLE PRECISION :: MUGA, MUGTA
98 DOUBLE PRECISION :: Wge
100 DOUBLE PRECISION :: Sdp
102 DOUBLE PRECISION :: V0, Vpm, Vmt, Vbf, Vcf, Vtza
104 DOUBLE PRECISION :: Ghd_drag, avgRop
106 DOUBLE PRECISION :: HYS_drag, avgDrag
108 DOUBLE PRECISION :: ROP_MA, U_se, Usw, Vsw, Vse, Usn,&
109 Uss, Wsb, Wst, Wse, Usb, Ust
110 DOUBLE PRECISION :: F_vir
112 DOUBLE PRECISION :: ltau_u_g
118 IF (.NOT.momentum_x_eq(0))
RETURN 143 epga = avg_x(ep_g(ijk),ep_g(ijke),i)
145 epgaj = avg_x(epg_jfac(ijk),epg_jfac(ijke),i)
148 IF (ip_at_e(ijk))
THEN 170 IF (ep_g(west_of(ijk)) >
dil_ep_s)
THEN 172 ELSE IF (ep_g(east_of(ijk)) >
dil_ep_s)
THEN 175 b_m(ijk,m) = -
u_g(ijk)
179 ELSEIF (blocked_u_cell_at(ijk))
THEN 195 IF (cyclic_x_pd)
THEN 196 IF (
imap(i_of(ijk)).EQ.imax1) pge = p_g(ijke) -
delp_x 199 IF(.NOT.cut_u_treatment_at(ijk))
THEN 205 IF(.NOT.cut_u_treatment_at(ijk))
THEN 212 IF(.NOT.cut_u_treatment_at(ijk))
THEN 214 ropga =
half * (vol(ijk)*rop_g(ijk) + &
215 vol(ipjk)*rop_g(ijke))/vol_u(ijk)
216 roga =
half * (vol(ijk)*ro_g(ijk) + &
217 vol(ipjk)*ro_g(ijke))/vol_u(ijk)
219 v0 =
half * (vol(ijk)*rop_go(ijk) + &
220 vol(ipjk)*rop_go(ijke))*
odt/vol_u(ijk)
223 rop_ma = avg_x(rop_g(ijk)*ep_s(ijk,m_am),&
224 rop_g(ijke)*ep_s(ijke,m_am),i)
225 v0 = v0 +
cv * rop_ma *
odt 229 ropga = (vol(ijk)*rop_g(ijk) + &
230 vol(ipjk)*rop_g(ijke))/(vol(ijk) + vol(ipjk))
231 roga = (vol(ijk)*ro_g(ijk) + &
232 vol(ipjk)*ro_g(ijke) )/(vol(ijk) + vol(ipjk))
234 v0 = (vol(ijk)*rop_go(ijk) + vol(ipjk)*rop_go(ijke))*&
235 odt/(vol(ijk) + vol(ipjk))
238 rop_ma = (vol(ijk)*rop_g(ijk)*ep_s(ijk,m_am) + &
239 vol(ipjk)*rop_g(ijke)*ep_s(ijke,m_am) )/&
240 (vol(ijk) + vol(ipjk))
241 v0 = v0 +
cv * rop_ma *
odt 248 IF(added_mass.AND.(.NOT.cut_u_treatment_at(ijk)))
THEN 249 f_vir = ( (
u_s(ijk,m_am) -
u_so(ijk,m_am)) )*
odt*vol_u(ijk
252 usw = avg_x_e(
u_s(imjk,m_am),
u_s(ijk,m_am),i)
253 u_se = avg_x_e(
u_s(ijk,m_am),
u_s(ipjk,m_am),
ip1(i))
254 vsw = avg_y_n(
v_s(ijmk,m_am),
v_s(ijk,m_am))
255 vse = avg_y_n(
v_s(ipjmk,m_am),
v_s(ipjk,m_am))
256 uss = avg_y(
u_s(ijmk,m_am),
u_s(ijk,m_am),
jm1(j))
257 usn = avg_y(
u_s(ijk,m_am),
u_s(ijpk,m_am),j)
259 wsb = avg_z_t(
w_s(ijkm,m_am),
w_s(ijk,m_am))
260 wst = avg_z_t(
w_s(ipjkm,m_am),
w_s(ipjk,m_am))
261 wse = avg_x(wsb,wst,i)
262 usb = avg_z(
u_s(ijkm,m_am),
u_s(ijk,m_am),
km1(k))
263 ust = avg_z(
u_s(ijk,m_am),
u_s(ijkp,m_am),k)
264 f_vir = f_vir + wse*
ox_e(i) * (ust - usb) *
axy(ijk)
266 IF (cylindrical) f_vir = f_vir - wse**2*
ox_e(i)
269 f_vir = f_vir +
u_s(ijk,m_am)*(u_se - usw)*
ayz(ijk) + &
270 avg_x(vsw,vse,i) * (usn - uss)*
axz(ijk)
271 f_vir = f_vir *
cv * rop_ma
275 IF (sip_at_e(ijk))
THEN 276 isv = is_id_at_e(ijk)
277 muga = avg_x(
mu_g(ijk),
mu_g(ijke),i)
278 vpm = muga/
is_pc(isv,1)
286 IF(.NOT.cut_u_treatment_at(ijk))
THEN 288 vol(ipjk)*
sum_r_g(ijke))/vol_u(ijk)
291 (vol(ijk) + vol(ipjk))
296 vbf = roga*
bfx_g(ijk)
298 vbf = ropga*
bfx_g(ijk)
303 IF (kt_type_enum .EQ. ghd_2007)
THEN 305 avgrop = avg_x(rop_s(ijk,l),rop_s(ijke,l),i)
306 if(avgrop >
zero) ghd_drag = ghd_drag +&
307 avg_x(
f_gs(ijk,l),
f_gs(ijke,l),i) *
joix(ijk,l) / avgrop
314 IF (drag_type_enum .EQ. hys .AND. kt_type_enum .NE. ghd_2007
THEN 328 IF (cylindrical)
THEN 332 vcf = ropga*wge**2*
ox_e(i)
334 IF(added_mass) vcf = vcf +
cv*rop_ma*wge**2*
ox_e(i)
341 vtza = 2.d0*epgaj*mugta*
ox_e(i)*
ox_e(i)
349 a_m(ijk,0,m) = -(a_m(ijk,
east,m)+a_m(ijk,
west,m)+&
433 INTEGER :: I, J, K, IM, I1, I2, J1, J2, K1, K2, IJK,&
434 JM, KM, IJKW, IMJK, IP, IPJK
438 DOUBLE PRECISION :: W_F_Slip
459 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
461 ijk = funijk(i1,j1,k1)
462 IF (ns_wall_at(ijk))
THEN 473 ELSEIF (fs_wall_at(ijk))
THEN 492 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
494 ijk = funijk(i1,j1,k1)
495 IF (ns_wall_at(ijk))
THEN 504 ELSEIF (fs_wall_at(ijk))
THEN 522 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
524 ijk = funijk(i1,j1,k1)
525 IF (ns_wall_at(ijk))
THEN 534 ELSEIF (fs_wall_at(ijk))
THEN 551 IF (.NOT.is_on_mype_plus2layers(i1,j1,k1)) cycle
553 ijk = funijk(i1,j1,k1)
554 IF (ns_wall_at(ijk))
THEN 563 ELSEIF (fs_wall_at(ijk))
THEN 595 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
598 IF (.NOT.wall_at(ijk)) cycle
607 IF (fluid_at(north_of(ijk)))
THEN 609 ELSEIF (fluid_at(south_of(ijk)))
THEN 611 ELSEIF (fluid_at(top_of(ijk)))
THEN 613 ELSEIF (fluid_at(bottom_of(ijk)))
THEN 630 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
633 IF (.NOT.wall_at(ijk)) cycle
642 IF (fluid_at(north_of(ijk)))
THEN 644 ELSEIF (fluid_at(south_of(ijk)))
THEN 646 ELSEIF (fluid_at(top_of(ijk)))
THEN 648 ELSEIF (fluid_at(bottom_of(ijk)))
THEN 665 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
668 IF (.NOT.wall_at(ijk)) cycle
679 IF (fluid_at(north_of(ijk)))
THEN 689 ELSEIF (fluid_at(south_of(ijk)))
THEN 699 ELSEIF (fluid_at(top_of(ijk)))
THEN 709 ELSEIF (fluid_at(bottom_of(ijk)))
THEN 740 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
743 IF (.NOT.wall_at(ijk)) cycle
754 IF (fluid_at(north_of(ijk)))
THEN 759 ELSEIF (fluid_at(south_of(ijk)))
THEN 764 ELSEIF (fluid_at(top_of(ijk)))
THEN 769 ELSEIF (fluid_at(bottom_of(ijk)))
THEN 797 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
828 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
862 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
896 IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
907 b_m(ijk,m) = -
u_g(ijk)
920 b_m(ijkw,m) = -
u_g(ijkw)
978 INTEGER :: IJK1, IJK2
980 DOUBLE PRECISION ODX_WF, W_F_Slip
985 DOUBLE PRECISION,
PARAMETER :: C_mu = 0.09d0
987 DOUBLE PRECISION,
PARAMETER :: Kappa = 0.42d0
994 IF(dabs(odx_wf)>1.0d-5)
THEN 998 w_f_slip = (
one -
one/odx_wf*
ro_g(ijk2)*c_mu**0.25 * &
1000 kappa/log(9.81d+0/(odx_wf*2.d+0)*
ro_g(ijk2)*c_mu**0.25*&
1047 INTEGER :: IJK, I, J, K
1051 DOUBLE PRECISION :: pSource
1063 if(
ps_u_g(psv) < 0.0d0)
then 1075 if(.NOT.is_on_mype_plus2layers(i,j,k)) cycle
1079 if(.NOT. fluid_at(ijk)) cycle
1083 b_m(ijk,m) = b_m(ijk,m) - psource * &
integer, dimension(:), allocatable ip1
integer, dimension(dimension_bc) bc_k_b
integer, dimension(:), allocatable imap
integer, dimension(dimension_ps) ps_i_w
double precision, dimension(:,:), allocatable joix
double precision, dimension(:,:), allocatable v_s
integer, dimension(:), allocatable i_of
double precision, dimension(dimension_bc) bc_uw_g
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, dimension(:), allocatable mu_gt
double precision, dimension(:), allocatable axy
integer, dimension(dimension_bc) bc_i_w
double precision, dimension(:,:), allocatable w_s
double precision, dimension(:), allocatable x_e
logical, dimension(0:dim_m) momentum_x_eq
integer, dimension(dimension_bc) bc_j_n
integer, dimension(:), allocatable im1
double precision, dimension(:), allocatable epg_jfac
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 function bfx_g(IJK)
double precision, parameter undefined
double precision, dimension(:), allocatable ayz
double precision, dimension(dimension_ps) ps_massflow_g
logical, dimension(:), allocatable cut_u_treatment_at
logical, dimension(dimension_ps) ps_defined
double precision, dimension(:), allocatable u_go
double precision, dimension(:,:), allocatable u_s
subroutine point_source_u_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)
integer, dimension(dimension_bc) bc_k_t
logical, dimension(:,:,:), allocatable dead_cell_at
integer, dimension(:), allocatable j_of
integer, dimension(:), allocatable jm1
double precision, parameter small_number
subroutine source_u_g(A_M, B_M)
double precision, dimension(:), allocatable tau_u_g
integer, dimension(dimension_bc) bc_j_s
subroutine cg_source_u_g_bc(A_M, B_M)
subroutine cg_source_u_g(A_M, B_M)
double precision, dimension(:), allocatable epmu_gt
logical, dimension(:), allocatable blocked_u_cell_at
double precision, dimension(dimension_bc) bc_hw_g
logical, dimension(dimension_bc) bc_defined
double precision, dimension(dimension_is, 2) is_pc
double precision, dimension(:), allocatable mms_u_g_src
integer, dimension(dimension_ps) ps_k_t
double precision, dimension(:), allocatable w_g
double precision, dimension(:,:), allocatable u_so
double precision, parameter half
double precision, dimension(:), allocatable axz
double precision, parameter dil_ep_s
integer, parameter dimension_ps
double precision, dimension(:), allocatable rop_go
integer, dimension(:), allocatable km1
double precision, dimension(:), allocatable mu_g
double precision, dimension(:), allocatable u_g
double precision function ep_s(IJK, xxM)
double precision, dimension(:), allocatable a_upg_w
double precision, dimension(:,:), allocatable f_gs
double precision, dimension(:), allocatable vol_u
double precision, dimension(:,:), allocatable rop_s
subroutine source_u_g_bc(A_M, B_M)
double precision, dimension(:,:,:), allocatable beta_ij
double precision, dimension(dimension_ps) ps_u_g
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
double precision, parameter zero
double precision, dimension(:), allocatable a_upg_e