42 USE run, only: syam_obrien, gidaspow, gidaspow_pcf, gidaspow_blend, gidaspow_blend_pcf, wen_yu, wen_yu_pcf, koch_hill, koch_hill_pcf, bvk, user_drag, hys, drag_type, drag_type_enum, ghd_2007, igci, kt_type_enum, milioli,
model_b, subgrid_type_enum, undefined_subgrid_type
50 INTEGER,
INTENT(IN) :: M
52 INTEGER,
INTENT(INOUT) :: IER
61 INTEGER :: I, IJK, IMJK, IJMK, IJKM
63 DOUBLE PRECISION :: USCM, VSCM, WSCM
65 DOUBLE PRECISION :: USCM_HYS, VSCM_HYS, WSCM_HYS
67 DOUBLE PRECISION :: UGC, VGC, WGC
69 DOUBLE PRECISION :: VREL
72 DOUBLE PRECISION :: Mu
74 DOUBLE PRECISION :: DgA
76 DOUBLE PRECISION F_gstmp
84 DOUBLE PRECISION :: DP_loc(
dim_m)
87 DOUBLE PRECISION :: EPs_loc(
dim_m)
90 DOUBLE PRECISION :: ROs_loc(
dim_m)
93 DOUBLE PRECISION :: F_cor, tmp_sum, tmp_fac
95 DOUBLE PRECISION :: DPA
97 DOUBLE PRECISION :: Y_i
99 DOUBLE PRECISION :: phis
103 DOUBLE PRECISION :: EPG, ROg, ROPg, EP_SM, DPM, ROs
116 IF (fluidorp_flow_at(ijk))
THEN 123 DO l = 1,des_mmax+
mmax 124 IF(kt_type_enum == ghd_2007 .AND. m==
mmax)
THEN 130 dp_loc(l) =
d_p(ijk,l)
131 eps_loc(l) =
ep_s(ijk,l)
132 ros_loc(l) =
ro_s(ijk,l)
136 ugc = avg_x_e(
u_g(imjk),
u_g(ijk),i)
137 vgc = avg_y_n(
v_g(ijmk),
v_g(ijk))
138 wgc = avg_z_t(
w_g(ijkm),
w_g(ijk))
140 uscm = avg_x_e(
u_s(imjk,m),
u_s(ijk,m),i)
141 vscm = avg_y_n(
v_s(ijmk,m),
v_s(ijk,m))
142 wscm = avg_z_t(
w_s(ijkm,m),
w_s(ijk,m))
145 vrel = sqrt((ugc-uscm)**2 + (vgc-vscm)**2 + (wgc-wscm)**2)
151 IF (p_flow_at(ijk))
THEN 152 IF( fluid_at(east_of(ijk)) )
THEN 153 mu =
mu_g(east_of(ijk))
154 ELSEIF ( fluid_at(west_of(ijk)) )
THEN 155 mu =
mu_g(west_of(ijk))
156 ELSEIF ( fluid_at(north_of(ijk)) )
THEN 157 mu =
mu_g(north_of(ijk))
158 ELSEIF ( fluid_at(south_of(ijk)) )
THEN 159 mu =
mu_g(south_of(ijk))
160 ELSEIF ( fluid_at(top_of(ijk)) )
THEN 161 mu =
mu_g(top_of(ijk))
162 ELSEIF ( fluid_at(bottom_of(ijk)) )
THEN 163 mu =
mu_g(bottom_of(ijk))
171 DO l = 1, des_mmax+
mmax 173 phis = phis + eps_loc(l)
180 DO l = 1, des_mmax+
mmax 181 IF (phis .GT.
zero)
THEN 182 tmp_fac = eps_loc(l)/phis
183 tmp_sum = tmp_sum + tmp_fac/dp_loc(l)
185 tmp_sum = tmp_sum +
one/dp_loc(l)
201 IF (ep_sm <=
zero)
THEN 203 ELSEIF (epg ==
zero)
THEN 212 SELECT CASE(drag_type_enum)
223 CASE (gidaspow_blend)
226 CASE (gidaspow_blend_pcf)
242 CALL drag_bvk(dga,epg,mu,ropg,vrel,dpm,dpa,phis)
245 CALL drag_usr(ijk, m, dga, epg, mu, rog, vrel, dpm, &
257 uscm_hys = uscm_hys + eps_loc(l)*(ugc - &
258 avg_x_e(
u_s(imjk,l),
u_s(ijk,l),i))
259 vscm_hys = vscm_hys + eps_loc(l)*(vgc - &
260 avg_y_n(
v_s(ijmk,l),
v_s(ijk,l)))
261 wscm_hys = wscm_hys + eps_loc(l)*(wgc - &
262 avg_z_t(
w_s(ijkm,l),
w_s(ijk,l)))
264 uscm_hys = uscm_hys/phis
265 vscm_hys = vscm_hys/phis
266 wscm_hys = wscm_hys/phis
269 vrel = sqrt(uscm_hys**2 +vscm_hys**2 +wscm_hys**2)
271 CALL drag_hys(dga,epg,mu,ropg,vrel,&
272 dp_loc(:),dpa,y_i,eps_loc(:),phis,m,maxm,ijk)
277 IF(
dmp_log)
WRITE (*,
'(A,A)') &
278 'Unknown DRAG_TYPE: ', drag_type
279 WRITE (
unit_log,
'(A,A)')
'Unknown DRAG_TYPE: ', drag_type
286 IF (subgrid_type_enum .ne. undefined_subgrid_type)
THEN 287 IF (subgrid_type_enum .EQ. igci)
THEN 289 ELSEIF (subgrid_type_enum .EQ. milioli)
THEN 298 IF(drag_type_enum == hys)
THEN 306 IF(drag_type_enum == gidaspow_pcf .OR. &
307 drag_type_enum == gidaspow_blend_pcf .OR. &
308 drag_type_enum == wen_yu_pcf .OR. &
309 drag_type_enum == koch_hill_pcf .OR. &
310 drag_type_enum == bvk)
THEN 317 f_cor = (epg*y_i + phis*y_i**2)
319 f_cor = (epg*y_i + phis*y_i**2 + &
325 dga =
one/(y_i*y_i) * dga * f_cor
330 f_gstmp = dga * ep_sm/epg
332 f_gstmp = dga * ep_sm
340 IF(kt_type_enum == ghd_2007)
THEN 368 DOUBLE PRECISION,
INTENT(IN) :: RE
370 c_dsxre_tl = 24.d0*(1.d0 + 0.173d0*re**0.657d0) + &
371 0.413d0*re**2.09d0/(re**1.09d0 + 16300.d0)
402 DOUBLE PRECISION,
INTENT(OUT) :: ldGA
404 DOUBLE PRECISION,
INTENT(IN) :: EPg
406 DOUBLE PRECISION,
INTENT(IN) :: Mug
408 DOUBLE PRECISION,
INTENT(IN) :: ROg
410 DOUBLE PRECISION,
INTENT(IN) :: VREL
412 DOUBLE PRECISION,
INTENT(IN) :: DPM
429 DOUBLE PRECISION :: A, BB
432 DOUBLE PRECISION :: V_rm
434 DOUBLE PRECISION :: RE
438 re = dpm*vrel*rog/mug
445 IF (epg <= 0.85d0)
THEN 451 v_rm=
half*(a-0.06d0*re+&
452 sqrt((3.6d-3)*re*re+0.12d0*re*(2.d0*bb-a)+a*a) )
461 ldga = 0.75d0*mug*epg*
c_dsxre_dv(re/v_rm)/(v_rm*dpm*dpm)
492 DOUBLE PRECISION,
INTENT(OUT) :: lDgA
494 DOUBLE PRECISION,
INTENT(IN) :: EPg
496 DOUBLE PRECISION,
INTENT(IN) :: Mug
498 DOUBLE PRECISION,
INTENT(IN) :: ROg
500 DOUBLE PRECISION,
INTENT(IN) :: ROPg
502 DOUBLE PRECISION,
INTENT(IN) :: VREL
505 DOUBLE PRECISION,
INTENT(IN) :: DPM
511 DOUBLE PRECISION :: RE
513 DOUBLE PRECISION :: C_d
520 IF(epg <= 0.8d0)
THEN 521 ldga = 150d0*(
one-epg)*mug / (epg*dpm**2) + &
531 ldga = 0.75d0*c_d*vrel*ropg*epg**(-2.65d0) / dpm
570 DOUBLE PRECISION,
INTENT(OUT) :: lDgA
572 DOUBLE PRECISION,
INTENT(IN) :: EPg
574 DOUBLE PRECISION,
INTENT(IN) :: Mug
576 DOUBLE PRECISION,
INTENT(IN) :: ROg
578 DOUBLE PRECISION,
INTENT(IN) :: ROPg
580 DOUBLE PRECISION,
INTENT(IN) :: VREL
583 DOUBLE PRECISION,
INTENT(IN) :: DPM
588 DOUBLE PRECISION :: RE
590 DOUBLE PRECISION :: C_d
592 DOUBLE PRECISION :: Ergun
593 DOUBLE PRECISION :: WenYu
594 DOUBLE PRECISION :: PHI_gs
599 re = dpm*vrel*ropg/mug
605 ergun = 150d0*(
one-epg)*mug / (epg*dpm**2) + &
610 (
one + 0.15d0 * re**0.687d0)
614 wenyu = 0.75d0*c_d*vrel*ropg*epg**(-2.65d0) / dpm
617 phi_gs = atan(150.d0*1.75d0*(epg - 0.8d0))/
pi + 0.5d0
620 ldga = (1.d0-phi_gs)*ergun + phi_gs*wenyu
651 DOUBLE PRECISION,
INTENT(OUT) :: lDgA
653 DOUBLE PRECISION,
INTENT(IN) :: EPg
655 DOUBLE PRECISION,
INTENT(IN) :: Mug
657 DOUBLE PRECISION,
INTENT(IN) :: ROPg
659 DOUBLE PRECISION,
INTENT(IN) :: VREL
662 DOUBLE PRECISION,
INTENT(IN) :: DPM
667 DOUBLE PRECISION :: RE
669 DOUBLE PRECISION :: C_d
674 re = dpm*vrel*ropg/mug
679 IF(re <= 1000.0d0)
THEN 685 ldga = 0.75d0 * c_d * vrel * ropg * epg**(-2.65d0) / dpm
730 DOUBLE PRECISION,
INTENT(INOUT) :: lDgA
732 DOUBLE PRECISION,
INTENT(IN) :: EPg
734 DOUBLE PRECISION,
INTENT(IN) :: Mug
736 DOUBLE PRECISION,
INTENT(IN) :: ROg
738 DOUBLE PRECISION,
INTENT(IN) :: DPM
740 DOUBLE PRECISION,
INTENT(IN) :: ROs
742 INTEGER,
INTENT(IN) :: IJK
747 DOUBLE PRECISION :: F_Subgrid
750 DOUBLE PRECISION :: F_SubGridWall
752 DOUBLE PRECISION :: vt
754 DOUBLE PRECISION :: filtersize
756 DOUBLE PRECISION :: Inv_Froude
758 DOUBLE PRECISION :: EPs
760 DOUBLE PRECISION :: GG_phip, h_phip, h_phip2, c_function,&
769 vt =
gravity*dpm*dpm*(ros - rog) / (18.0d0*mug)
779 inv_froude = filtersize *
gravity / vt**2
787 IF (eps .LT. 0.0012d0)
THEN 788 h_phip = 2.7d0*(eps**0.234)
789 ELSEIF (eps .LT. 0.014d0)
THEN 790 h_phip = -0.019d0/(eps**0.455) + 0.963d0
791 ELSEIF (eps .LT. 0.25d0)
THEN 792 h_phip = 0.868d0*exp((-0.38*eps)) - &
793 0.176d0*exp((-119.2*eps))
794 ELSEIF (eps .LT. 0.455d0)
THEN 795 h_phip = -4.59d-5*exp((19.75*eps)) + &
796 0.852d0*exp((-0.268*eps))
797 ELSEIF (eps .LE. 0.59d0)
THEN 798 h_phip = (eps - 0.59d0) * (-1501.d0*(eps**3) + &
799 2203.d0*(eps**2) - 1054.d0*eps + 162.d0)
804 IF (eps .LT. 0.18d0)
THEN 805 gg_phip = (eps**0.24)*(1.48d0 + exp(-18.0*eps))
811 f_filter = (inv_froude**1.6) / ((inv_froude**1.6)+0.4d0)
812 h_phip2=h_phip*gg_phip
813 c_function=-h_phip2*f_filter
814 f_subgrid =(
one + c_function)
820 ldga = f_subgridwall*f_subgrid * ldga
866 DOUBLE PRECISION,
INTENT(INOUT) :: lDgA
868 DOUBLE PRECISION,
INTENT(IN) :: EPg
870 DOUBLE PRECISION,
INTENT(IN) :: Mug
872 DOUBLE PRECISION,
INTENT(IN) :: ROg
874 DOUBLE PRECISION,
INTENT(IN) :: VREL
876 DOUBLE PRECISION,
INTENT(IN) :: DPM
878 DOUBLE PRECISION,
INTENT(IN) :: ROs
880 INTEGER,
INTENT(IN) :: IJK
885 DOUBLE PRECISION :: F_Subgrid
888 DOUBLE PRECISION :: F_SubGridWall
890 DOUBLE PRECISION :: vt
892 DOUBLE PRECISION :: filtersize
894 DOUBLE PRECISION :: Inv_Froude
896 DOUBLE PRECISION :: vslip
898 DOUBLE PRECISION :: EPs
900 DOUBLE PRECISION :: h1, henv, hlin
908 vt =
gravity*dpm*dpm*(ros - rog) / (18.0d0*mug)
917 inv_froude = filtersize *
gravity / vt**2
926 IF (inv_froude .LE. 1.028d0)
THEN 927 h1 = (1.076d0 + 0.12d0*vslip - (0.02d0/(vslip+0.01d0)))*eps + &
928 (0.084d0 + 0.09d0*vslip - (0.01d0/(0.1d0*vslip+0.01d0)))
929 IF (eps .LE. 0.53d0)
THEN 930 henv = (6.8d0*(
one+eps)*(eps**0.3)) / &
931 (10.d0*(eps**1.5) + 5.d0)
932 ELSEIF (eps .GT. 0.53d0 .AND. eps .LE. 0.65d0)
THEN 933 henv = (2.23d0*((0.65d0-eps)**(0.45))) / &
935 ELSEIF (eps .GT. 0.65d0)
THEN 939 ELSEIF (inv_froude .GT. 1.028d0 .AND. &
940 inv_froude .LE. 2.056d0)
THEN 941 h1 = (1.268d0 - (0.2d0*vslip) + (0.14d0/(vslip+0.01d0)))*eps +
943 IF (eps .LE. 0.53d0)
THEN 944 henv = (8.6d0*(
one+eps)*(eps**0.2)) / (10.d0*eps + 6.3d0)
945 ELSEIF (eps .GT. 0.53d0 .AND. eps .LE. 0.65d0)
THEN 946 henv = (0.423d0*((0.65d0-eps)**0.3)) / (
one-(eps**0.4))
947 ELSEIF (eps .GT. 0.65d0)
THEN 951 ELSEIF (inv_froude .GT. 2.056d0 .AND. &
952 inv_froude .LE. 4.112d0)
THEN 953 h1 = ((0.018d0*vslip + 0.1d0)/(0.14d0*vslip + 0.01d0))*eps + &
954 (0.9454d0 - (0.09d0/(0.2d0*vslip + 0.01d0)))
955 IF (eps .LE. 0.5d0)
THEN 956 henv = (7.9d0*(
one+eps)*(eps**0.2)) / &
957 (10.d0*(eps**0.9) + 5.d0)
958 ELSEIF (eps .GT. 0.5d0 .AND. eps .LE. 0.63d0)
THEN 959 henv = (0.705d0*((0.63d0-eps)**0.3)) / (
one-(eps**0.7))
960 ELSEIF (eps .GT. 0.63d0)
THEN 964 ELSEIF (inv_froude .GT. 4.112d0 .AND. &
965 inv_froude .LE. 8.224d0)
THEN 966 h1 = ((0.05d0*vslip+0.3d0)/(0.4d0*vslip+0.06d0))*eps + &
967 (0.9466d0 - (0.05d0/(0.11d0*vslip+0.01d0)))
968 IF (eps .LE. 0.45d0)
THEN 969 henv = (7.9d0*(
one+eps)*(eps**0.2)) / &
970 ((10.d0*(eps**0.6)) + 3.6d0)
971 ELSEIF (eps .GT. 0.45d0 .AND. eps .LE. 0.57d0)
THEN 972 henv = (0.78d0*((0.57d0-eps)**0.2)) / (
one-(eps**0.9))
973 ELSEIF (eps .GT. 0.57d0)
THEN 977 ELSEIF (inv_froude .GT. 8.224d0 .AND. &
978 inv_froude .LE. 12.336d0)
THEN 979 h1 = ((1.3d0*vslip+2.2d0)/(5.2d0*vslip+0.07d0))*eps + &
980 (0.9363d0-(0.11d0/(0.3d0*vslip+0.01d0)))
981 IF (eps .LE. 0.35d0)
THEN 982 henv = (7.6d0*(
one+eps)*(eps**0.2)) / &
983 ((10.d0*(eps**0.6)) + 3.3d0)
984 ELSEIF (eps .GT. 0.35d0 .AND. eps .LE. 0.55d0)
THEN 985 henv = (0.81d0*((0.55d0-eps)**0.3)) / (
one-(eps**0.7))
986 ELSEIF (eps .GT. 0.55d0)
THEN 990 ELSEIF (inv_froude .GT. 12.336d0 .AND. &
991 inv_froude .LE. 16.448d0)
THEN 992 h1 = ((2.6d0*vslip+4.d0)/(10.d0*vslip+0.08d0))*eps + &
993 (0.926d0-(0.17d0/(0.5d0*vslip+0.01d0)))
994 IF (eps .LE. 0.25d0)
THEN 995 henv = (8.4d0*(
one+eps)*(eps**0.2)) / &
996 ((10.d0*(eps**0.5)) + 3.3d0)
997 ELSEIF (eps .GT. 0.25d0 .AND. eps .LE. 0.52d0)
THEN 998 henv = (1.01d0*((0.52d0-eps)**0.03))/(
one-(eps**0.9))
999 ELSEIF (eps .GT. 0.52d0)
THEN 1003 ELSEIF (inv_froude .GT. 16.448d0 .AND. &
1004 inv_froude .LE. 20.56d0)
THEN 1005 h1 = ((2.5d0*vslip+4.d0)/(10.d0*vslip+0.08d0))*eps + &
1006 (0.9261d0-(0.17d0/(0.5d0*vslip+0.01d0)))
1007 IF (eps .LE. 0.25d0)
THEN 1008 henv = (8.4d0*(
one+eps)*(eps**0.2)) / &
1009 ((10.d0*(eps**0.5)) + 3.3d0)
1010 ELSEIF (eps .GT. 0.25d0 .AND. eps .LE. 0.52d0)
THEN 1011 henv = (1.065d0*((0.52d0-eps)**0.3))/(
one-eps)
1012 ELSEIF (eps .GT.0.52d0)
THEN 1016 ELSEIF (inv_froude .GT. 20.56d0)
THEN 1017 h1 = ((1.6d0*vslip+4.d0)/(7.9d0*vslip+0.08d0))*eps + &
1018 (0.9394d0 - (0.22d0/(0.6d0*vslip+0.01d0)))
1019 IF (eps .LE. 0.25d0)
THEN 1020 henv = (9.d0*(
one+eps)*(eps**0.15)) / &
1021 (10.d0*(eps**0.45) + 4.2d0)
1022 ELSEIF (eps .GT. 0.25d0 .AND. eps .LE. 0.52d0)
THEN 1023 henv = (0.91d0*((0.52d0-eps)**0.4))/(
one-(eps**0.6))
1024 ELSEIF (eps .GT. 0.52d0)
THEN 1029 IF (h1 .GT.
zero)
THEN 1035 IF (inv_froude .LT. 1.028d0)
THEN 1041 f_subgrid =
one - min(henv,hlin)
1051 ldga = f_subgridwall*f_subgrid * ldga
1096 DOUBLE PRECISION,
INTENT(OUT) :: lSubGridWall
1098 DOUBLE PRECISION,
INTENT(IN) :: vt
1100 INTEGER,
INTENT(IN) :: IJK
1105 DOUBLE PRECISION,
PARAMETER :: a22=6.0d0, b22=0.295d0
1110 DOUBLE PRECISION :: x_d
1120 lsubgridwall =
one / (
one + a22 * (exp(-b22*x_d)) )
1160 DOUBLE PRECISION,
INTENT(OUT) :: lDgA
1162 DOUBLE PRECISION,
INTENT(IN) :: EPg
1164 DOUBLE PRECISION,
INTENT(IN) :: Mug
1166 DOUBLE PRECISION,
INTENT(IN) :: ROPg
1168 DOUBLE PRECISION,
INTENT(IN) :: VREL
1170 DOUBLE PRECISION,
INTENT(IN) :: DPM
1172 DOUBLE PRECISION,
INTENT(IN) :: DPA
1174 DOUBLE PRECISION,
INTENT(IN) :: PHIS
1179 DOUBLE PRECISION :: RE
1181 DOUBLE PRECISION :: Re_Trans_1, Re_Trans_2
1183 DOUBLE PRECISION :: F_STOKES
1185 DOUBLE PRECISION :: F_0
1187 DOUBLE PRECISION :: F_1
1189 DOUBLE PRECISION :: F_2
1191 DOUBLE PRECISION :: F_3
1193 DOUBLE PRECISION :: F
1195 DOUBLE PRECISION :: ww
1201 re = 0.5d0*dpa*vrel*ropg/mug
1206 f_stokes = 18.d0*mug*epg*epg/dpm**2
1207 ww = exp(-10.0d0*(0.4d0-phis)/phis)
1209 IF(phis > 0.01d0 .AND. phis < 0.4d0)
THEN 1210 f_0 = (1.0d0-ww) * (1.0d0 + 3.0d0*dsqrt(phis/2.0d0) + &
1211 135.0d0/64.0d0*phis*log(phis) + 17.14d0*phis) / &
1212 (1.0d0 + 0.681d0*phis - 8.48d0*phis*phis + &
1213 8.16d0*phis**3) + ww*10.0d0*phis/(1.0d0-phis)**3
1214 ELSEIF(phis >= 0.4d0)
THEN 1215 f_0 = 10.0d0*phis/(1.0d0-phis)**3
1218 IF(phis > 0.01d0 .AND. phis <= 0.1d0)
THEN 1219 f_1 = dsqrt(2.0d0/phis) / 40.0d0
1220 ELSE IF(phis > 0.1d0)
THEN 1221 f_1 = 0.11d0 + 5.1d-04 * exp(11.6d0*phis)
1224 IF(phis < 0.4d0)
THEN 1225 f_2 = (1.0d0-ww) * (1.0d0 + 3.0d0*dsqrt(phis/2.0d0) + &
1226 135.0d0/64.0d0*phis*log(phis) + 17.89d0*phis) / &
1227 (1.0d0 + 0.681d0*phis - 11.03d0*phis*phis + &
1228 15.41d0*phis**3)+ ww*10.0d0*phis/(1.0d0-phis)**3
1230 f_2 = 10.0d0*phis/(1.0d0-phis)**3
1233 IF(phis < 0.0953d0)
THEN 1234 f_3 = 0.9351d0*phis + 0.03667d0
1236 f_3 = 0.0673d0 + 0.212d0*phis +0.0232d0/(1.0-phis)**5
1239 re_trans_1 = (f_2 - 1.0d0)/(3.0d0/8.0d0 - f_3)
1240 re_trans_2 = (f_3 + dsqrt(f_3*f_3 - 4.0d0*f_1 &
1241 *(f_0-f_2))) / (2.0d0*f_1)
1243 IF(phis <= 0.01d0 .AND. re <= re_trans_1)
THEN 1244 f = 1.0d0 + 3.0d0/8.0d0*re
1245 ELSEIF(phis > 0.01d0 .AND. re <= re_trans_2)
THEN 1247 ELSEIF(phis <= 0.01d0 .AND. re > re_trans_1 .OR. &
1248 phis > 0.01d0 .AND. re > re_trans_2)
THEN 1273 SUBROUTINE drag_bvk(lDgA,EPg,Mug,ROPg,VREL,&
1286 DOUBLE PRECISION,
INTENT(OUT) :: lDgA
1288 DOUBLE PRECISION,
INTENT(IN) :: EPg
1290 DOUBLE PRECISION,
INTENT(IN) :: Mug
1292 DOUBLE PRECISION,
INTENT(IN) :: ROPg
1294 DOUBLE PRECISION,
INTENT(IN) :: VREL
1296 DOUBLE PRECISION,
INTENT(IN) :: DPM
1298 DOUBLE PRECISION,
INTENT(IN) :: DPA
1300 DOUBLE PRECISION,
INTENT(IN) :: PHIS
1305 DOUBLE PRECISION :: RE
1307 DOUBLE PRECISION :: F_STOKES
1309 DOUBLE PRECISION :: F
1314 re = dpa*vrel*ropg/mug
1321 f_stokes = 18d0*mug*epg/dpm**2
1323 f = 10d0*phis/epg**2 + epg**2*(
one+1.5d0*dsqrt(phis))
1324 f = f + 0.413d0*re/(24.d0*epg**2) * &
1325 (
one/epg + 3d0*epg*phis + 8.4d0/re**0.343) / &
1326 (
one+10.d0**(3d0*phis)/re**(0.5+2.d0*phis))
1347 SUBROUTINE drag_hys(lDgA,EPg,Mug,ROPg,VREL,&
1348 dpm,dpa,y_i,ep_sm,phis,m,maxm,ijk)
1362 DOUBLE PRECISION,
INTENT(OUT) :: lDgA
1364 DOUBLE PRECISION,
INTENT(IN) :: EPg
1366 DOUBLE PRECISION,
INTENT(IN) :: Mug
1368 DOUBLE PRECISION,
INTENT(IN) :: ROPg
1370 DOUBLE PRECISION,
INTENT(IN) :: VREL
1372 DOUBLE PRECISION :: DPM(
dim_m)
1374 DOUBLE PRECISION,
INTENT(IN) :: DPA
1376 DOUBLE PRECISION,
INTENT(IN) :: Y_i
1378 DOUBLE PRECISION :: EP_sM(
dim_m)
1380 DOUBLE PRECISION,
INTENT(IN) :: PHIS
1382 INTEGER,
INTENT(IN) :: M, IJK
1384 INTEGER,
INTENT(IN) :: MAXM
1389 DOUBLE PRECISION :: DPmin
1393 DOUBLE PRECISION :: RE
1395 DOUBLE PRECISION :: F_STOKES
1397 DOUBLE PRECISION :: F
1399 DOUBLE PRECISION :: a_YS
1401 DOUBLE PRECISION :: alpha_YS
1403 DOUBLE PRECISION :: beta_i_HYS
1405 DOUBLE PRECISION :: beta_j_HYS
1407 DOUBLE PRECISION :: FSTOKES_j
1409 DOUBLE PRECISION :: Y_i_J
1411 DOUBLE PRECISION :: F_D_BVK
1413 DOUBLE PRECISION :: F_YS
1416 IF (mug >
zero)
THEN 1418 re = dpa*vrel*ropg/mug
1425 f_stokes = 18d0*mug*epg*ep_sm(m)/dpm(m)**2
1431 dpmin = min(dpmin,dpm(l))
1435 a_ys = 1d0 - 2.66d0*phis + 9.096d0*phis**2 - 11.338d0*phis**3
1439 alpha_ys = 1.313d0*log10(dpmin/
lam_hys) - 1.249d0
1444 f = 10.d0*phis/epg**2 + epg**2*(
one+1.5d0*dsqrt(phis))
1446 IF(re >
zero) f_d_bvk = f + 0.413d0*re/(24.d0*epg**2)*&
1447 (
one/epg + 3.d0*epg*phis + 8.4d0/re**0.343d0) / &
1448 (
one+10**(3.d0*phis)/re**(0.5d0+2.d0*phis))
1451 f_ys = 1d0/epg + (f_d_bvk - 1d0/epg)*&
1452 (a_ys*y_i+(1d0-a_ys)*y_i**2)
1453 f_ys = f_ys*f_stokes
1459 beta_j_hys = 1.d0/epg + (f_d_bvk - 1.d0/epg) * &
1460 (a_ys*y_i_j + (1d0-a_ys)*y_i_j**2)
1461 fstokes_j = 18.d0*mug*ep_sm(l)*epg/&
1464 beta_j_hys = beta_j_hys*fstokes_j
1470 IF (ep_sm(m) >
zero .AND. ep_sm(l) >
zero) &
1471 beta_ij(ijk,m,l) = (2.d0*alpha_ys*ep_sm(m)*ep_sm(l))/ &
1472 (ep_sm(m)/beta_i_hys + ep_sm(l)/beta_j_hys)
1473 f_ys = f_ys +
beta_ij(ijk,m,l)
double precision function c_ds_sn(RE)
double precision, dimension(:,:), allocatable v_s
integer, dimension(:), allocatable i_of
subroutine subgrid_drag_igci(lDgA, EPg, Mug, ROg, DPM, ROs, IJK)
double precision, dimension(:), allocatable ep_g
double precision, parameter one
subroutine drag_usr(IJK, M_NP, lDgA, EPg, Mug, ROg, VREL, DPM, ROs, lUg, lVg, lWg)
double precision, dimension(:), allocatable axy
double precision, dimension(:,:), allocatable w_s
subroutine drag_bvk(lDgA, EPg, Mug, ROPg, VREL, DPM, DPA, PHIS)
double precision, dimension(:,:), allocatable u_s
subroutine drag_gidaspow(lDgA, EPg, Mug, ROg, ROPg, VREL, DPM)
double precision, dimension(:,:), allocatable d_p
double precision, parameter small_number
subroutine subgrid_drag_wall(lSubgridWall, vt, IJK)
double precision function c_dsxre_dv(RE)
double precision filter_size_ratio
double precision, dimension(:), allocatable v_g
double precision, dimension(:), allocatable w_g
double precision, parameter half
integer, parameter unit_log
double precision, parameter large_number
double precision, dimension(:,:), allocatable ro_s
subroutine subgrid_drag_milioli(lDgA, EPg, Mug, ROg, VREL, DPM, ROs, IJK)
subroutine drag_gidaspow_blend(lDgA, EPg, Mug, ROg, ROPg, VREL, DPM)
subroutine drag_koch_hill(lDgA, EPg, Mug, ROPg, VREL, DPM, DPA, PHIS)
double precision, dimension(:), allocatable mu_g
subroutine drag_hys(lDgA, EPg, Mug, ROPg, VREL, DPM, DPA, Y_I, EP_sM, PHIS, M, MAXM, IJK)
double precision, dimension(:), allocatable u_g
double precision function ep_s(IJK, xxM)
double precision, dimension(:,:), allocatable f_gs
double precision, dimension(:), allocatable dwall
double precision function c_dsxre_tl(RE)
subroutine drag_wen_yu(lDgA, EPg, Mug, ROPg, VREL, DPM)
double precision, dimension(:,:,:), allocatable beta_ij
double precision, parameter pi
subroutine drag_syam_obrien(lDgA, EPg, Mug, ROg, VREL, DPM)
double precision, dimension(:), allocatable vol
subroutine drag_gs(M, IER)
subroutine open_pe_log(IER)
double precision, dimension(:), allocatable ro_g
double precision, dimension(:), allocatable rop_g
double precision, parameter zero