8 USE yomhook
,ONLY : lhook, dr_hook
9 USE parkind1
,ONLY : jprb
30 REAL,
DIMENSION(:),
INTENT(IN) :: pdns_mdp
31 REAL,
INTENT(IN) :: pdp
33 REAL,
DIMENSION(:),
INTENT(OUT) :: pwnd_frc_thr_slt
42 REAL(KIND=JPRB) :: zhook_handle
44 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:WND_FRC_THR_SLT_GET',0,zhook_handle)
48 zryn = 0.38d0 + 1331.0d0*(100.0d0*pdp)**1.56d0
50 zdns_fct = xdns_slt * xg * pdp
51 zicf_fct = 1.0d0 + 6.0d-07/(xdns_slt*xg*(pdp**2.5d0))
53 IF (zryn < 0.03d0)
THEN
54 CALL
abor1_sfx(
'MODE_DSTMBLUTL:WND_FRC_THR_SLT_GET: RYN < 0.03')
55 ELSEIF (zryn < 10.0d0)
THEN
56 zryn1 = -1.0d0 + 1.928d0 * (zryn**0.0922d0)
57 zryn1 = 0.1291d0 * 0.1291d0 / zryn1
59 zryn1 = 1.0d0 - 0.0858d0 * exp(-0.0617d0*(zryn-10.0d0))
60 zryn1 = 0.120d0 **2 * zryn1**2
65 ztmp = sqrt(zicf_fct*zdns_fct*zryn1)
66 DO i = 1,
SIZE(pdns_mdp)
67 pwnd_frc_thr_slt(i) = ztmp / sqrt(pdns_mdp(i))
70 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:WND_FRC_THR_SLT_GET',1,zhook_handle)
75 SUBROUTINE vwc2gwc (OFLG_MBL, PVWC_SAT, PVWC_SFC, PGWC_SFC)
84 LOGICAL,
DIMENSION(:),
INTENT(IN) :: oflg_mbl
85 REAL,
DIMENSION(:),
INTENT(IN) :: pvwc_sat
86 REAL,
DIMENSION(:),
INTENT(IN) :: pvwc_sfc
87 REAL,
DIMENSION(:),
INTENT(OUT):: pgwc_sfc
89 REAL,
DIMENSION(SIZE(PVWC_SAT)) :: zdns_blk_dry
91 REAL(KIND=JPRB) :: zhook_handle
93 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:VWC2GWC',0,zhook_handle)
100 zdns_blk_dry(i) = xdns_slt * (1.0 - pvwc_sat(i))
101 pgwc_sfc(i) = pvwc_sfc(i) * xrholi / zdns_blk_dry(i)
105 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:VWC2GWC',1,zhook_handle)
116 LOGICAL,
DIMENSION(:),
INTENT(IN) :: oflg_mbl
117 REAL,
DIMENSION(:),
INTENT(IN) :: pgwc_thr
118 REAL,
DIMENSION(:),
INTENT(IN) :: pgwc_sfc
119 REAL,
DIMENSION(:),
INTENT(OUT):: pfrc_thr_ncr_wtr
122 REAL(KIND=JPRB) :: zhook_handle
124 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:FRC_THR_NCR_WTR_GET',0,zhook_handle)
127 pfrc_thr_ncr_wtr(:) = 1.0d0
129 DO i = 1,
SIZE(pgwc_sfc)
130 IF (oflg_mbl(i))
THEN
134 IF (pgwc_sfc(i) > pgwc_thr(i)) &
135 pfrc_thr_ncr_wtr(i) = sqrt(1.0d0 + 1.21d0 * (100.0d0*(pgwc_sfc(i)-pgwc_thr(i)))**0.68d0)
140 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:FRC_THR_NCR_WTR_GET',1,zhook_handle)
153 REAL,
INTENT(IN) :: prgh_mmn_mbl
154 REAL,
INTENT(IN) :: prgh_mmn_smt
156 REAL,
INTENT(OUT):: pfrc_thr_ncr_drg
158 REAL :: zwnd_frc_fsh_frc
159 REAL(KIND=JPRB) :: zhook_handle
161 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:FRC_THR_NCR_DRG_GET',0,zhook_handle)
166 1.0d0 - log(prgh_mmn_mbl/prgh_mmn_smt) / log(0.35d0 * ((0.1d0/prgh_mmn_smt)**0.8d0))
167 zwnd_frc_fsh_frc = max(1.e-6, min(1., zwnd_frc_fsh_frc))
168 IF (zwnd_frc_fsh_frc <= 0.0d0 .OR. zwnd_frc_fsh_frc > 1.0d0) &
169 CALL
abor1_sfx(
"MODE_DSTMBLUTL:FRC_THR_NCR_DRG_GET0: WND_FRC_FSH_FRC OUT OF RANGE")
170 pfrc_thr_ncr_drg = 1.0d0 / zwnd_frc_fsh_frc
174 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:FRC_THR_NCR_DRG_GET',1,zhook_handle)
178 SUBROUTINE wnd_frc_slt_get(OFLG_MBL, PWND_FRC, PWND_RFR, PWND_RFR_THR_SLT, PWND_FRC_SLT)
186 LOGICAL,
DIMENSION(:),
INTENT(IN) :: oflg_mbl
187 REAL,
DIMENSION(:),
INTENT(IN) :: pwnd_frc
188 REAL,
DIMENSION(:),
INTENT(IN) :: pwnd_rfr
189 REAL,
DIMENSION(:),
INTENT(IN) :: pwnd_rfr_thr_slt
190 REAL,
DIMENSION(:),
INTENT(OUT):: pwnd_frc_slt
193 REAL :: zwnd_frc_slt_dlt
195 REAL(KIND=JPRB) :: zhook_handle
197 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:WND_FRC_SLT_GET',0,zhook_handle)
200 pwnd_frc_slt(:) = pwnd_frc(:)
202 DO i = 1,
SIZE(pwnd_frc)
203 IF (oflg_mbl(i) .AND. pwnd_rfr(i) >= pwnd_rfr_thr_slt(i))
THEN
210 zwnd_rfr_dlt = pwnd_rfr(i) - pwnd_rfr_thr_slt(i)
211 zwnd_frc_slt_dlt = 0.003d0 * zwnd_rfr_dlt**2
212 pwnd_frc_slt(i) = pwnd_frc_slt(i) + zwnd_frc_slt_dlt
215 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:WND_FRC_SLT_GET',1,zhook_handle)
220 pwnd_frc_thr_slt, pflx_mss_hrz_slt_ttl)
230 REAL,
DIMENSION(:),
INTENT(IN) :: pcoeff
231 LOGICAL,
DIMENSION(:),
INTENT(IN) :: oflg_mbl
232 REAL,
DIMENSION(:),
INTENT(IN) :: pdns_mdp
233 REAL,
DIMENSION(:),
INTENT(IN) :: pwnd_frc
234 REAL,
DIMENSION(:),
INTENT(IN) :: pwnd_frc_thr_slt
235 REAL,
DIMENSION(:),
INTENT(OUT):: pflx_mss_hrz_slt_ttl
239 REAL(KIND=JPRB) :: zhook_handle
241 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:FLX_MSS_HRZ_SLT_TTL_WHI79_GET',0,zhook_handle)
244 pflx_mss_hrz_slt_ttl(:) = 0.0d0
246 DO i = 1,
SIZE(pdns_mdp)
247 IF (oflg_mbl(i) .AND. pwnd_frc(i) > pwnd_frc_thr_slt(i))
THEN
248 zwnd_frc_rat = pwnd_frc_thr_slt(i) / pwnd_frc(i)
249 pflx_mss_hrz_slt_ttl(i) = &
250 pcoeff(i) * pdns_mdp(i) * (pwnd_frc(i)**3.0d0) * &
251 (1.0d0 - zwnd_frc_rat) * (1.0d0 + zwnd_frc_rat)**2 / xg
255 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:FLX_MSS_HRZ_SLT_TTL_WHI79_GET',1,zhook_handle)
260 pdst_slt_flx_rat_ttl, pflx_mss_vrt_dst_ttl)
270 LOGICAL,
DIMENSION(:),
INTENT(IN) :: oflg_mbl
271 REAL,
DIMENSION(:),
INTENT(IN) :: pmss_frc_cly
272 REAL,
DIMENSION(:),
INTENT(IN) :: pflx_mss_hrz_slt_ttl
273 REAL,
DIMENSION(:),
INTENT(OUT):: pdst_slt_flx_rat_ttl
274 REAL,
DIMENSION(:),
INTENT(OUT):: pflx_mss_vrt_dst_ttl
276 REAL :: zmss_frc_cly_vld
278 REAL(KIND=JPRB) :: zhook_handle
280 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:FLX_MSS_VRT_DST_TTL_MAB95_GET',0,zhook_handle)
282 DO i = 1,
SIZE(pmss_frc_cly)
283 IF (oflg_mbl(i))
THEN
285 zmss_frc_cly_vld = min(pmss_frc_cly(i), 0.2)
286 pdst_slt_flx_rat_ttl(i) = &
287 100.0d0 * exp(log(10.0d0)*(13.4d0*zmss_frc_cly_vld - 6.0d0))
288 pflx_mss_vrt_dst_ttl(i) = pflx_mss_hrz_slt_ttl(i) * pdst_slt_flx_rat_ttl(i)
292 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:FLX_MSS_VRT_DST_TTL_MAB95_GET',1,zhook_handle)
297 pflx_mss_hrz_slt_ttl, pdst_slt_flx_rat_ttl, pflx_mss_vrt_dst_ttl)
300 USE modd_dstmbl, ONLY : xdmt_slt_opt, xdmt_ero_opt, xdns_slt, xgama
304 LOGICAL,
DIMENSION(:),
INTENT(IN) :: oflg_mbl
305 REAL,
DIMENSION(:),
INTENT(IN) :: pdns_mdp
306 REAL,
DIMENSION(:),
INTENT(IN) :: pwnd_frc_thr_slt
307 REAL,
DIMENSION(:),
INTENT(IN) :: pflx_mss_hrz_slt_ttl
308 REAL,
DIMENSION(:),
INTENT(OUT):: pdst_slt_flx_rat_ttl
309 REAL,
DIMENSION(:),
INTENT(OUT):: pflx_mss_vrt_dst_ttl
311 REAL,
DIMENSION(SIZE(PDNS_MDP)) :: zrop_roa
312 REAL :: zexpdd, zlnds, zbeta, zbgxg
314 REAL(KIND=JPRB) :: zhook_handle
316 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:FLX_MSS_VRT_DST_AUST_GET',0,zhook_handle)
319 zexpdd = exp(-140.7d0 * xdmt_ero_opt + 0.37d0)
320 zlnds = (0.328*1.0d-4) + (0.125d0*1.0d-4*log(xdmt_slt_opt*1.0e+3))
321 zbeta = zlnds * zexpdd
322 zbgxg = zbeta * xgama * xg
324 DO i = 1,
SIZE(pdns_mdp)
325 IF (oflg_mbl(i))
THEN
326 zrop_roa(i) = xdns_slt / pdns_mdp(i)
327 pdst_slt_flx_rat_ttl(i) = &
328 (2.0d0/3.0d0) * zbgxg * zrop_roa(i) / (pwnd_frc_thr_slt(i)**2.0d0)
329 pflx_mss_vrt_dst_ttl(i) = 1.0d-3 * &
330 pflx_mss_hrz_slt_ttl(i) * pdst_slt_flx_rat_ttl(i)
334 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:FLX_MSS_VRT_DST_AUST_GET',1,zhook_handle)
346 INTEGER,
INTENT(IN) :: kmode
347 REAL,
INTENT(IN) :: pdlndp
348 INTEGER,
DIMENSION(:),
INTENT(IN) :: ktext
349 REAL,
DIMENSION(:),
INTENT(OUT) :: pdp
350 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pdsrlv
351 REAL,
DIMENSION(:),
INTENT(OUT) :: pzs0
353 REAL,
DIMENSION(KMODE,12) :: zsigma
354 REAL,
DIMENSION(KMODE,12) :: zmfrac
355 REAL,
DIMENSION(KMODE,12) :: zdmed
356 REAL,
DIMENSION(SIZE(PDSRLV,1),SIZE(PDSRLV,2)) :: zds
357 REAL,
DIMENSION(SIZE(PDSRLV,2)) :: zdpln, zsp, zdmln
362 REAL(KIND=JPRB) :: zhook_handle
364 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:DISTRIBUTION',0,zhook_handle)
378 zmfrac(1,:) = (/0.0, 0.1, 0.1, 0.15, 0.15, 0.2, 0.2, 0.3, 0.35, 0.4, 0.5, 0.15/)
379 zmfrac(2,:) = (/0.1, 0.3, 0.3, 0.35, 0.50, 0.5, 0.5, 0.5, 0.00, 0.0, 0.0, 0.40/)
380 zmfrac(3,:) = (/0.9, 0.6, 0.6, 0.50, 0.35, 0.3, 0.3, 0.2, 0.65, 0.6, 0.5, 0.45/)
382 zsigma(1,:) = (/1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8, 1.8/)
383 zsigma(2,:) = (/1.7, 1.7, 1.7, 1.7, 1.7, 1.7, 1.7, 1.7, 1.8, 1.8, 1.8, 1.7/)
384 zsigma(3,:) = (/1.6, 1.6, 1.6, 1.6, 1.6, 1.7, 1.7, 1.7, 1.8, 1.8, 1.8, 1.6/)
386 zdmed(1,:) = (/ 10., 10., 5., 5., 2.5, 2.5, 2.5, 1., 1., 0.5, 0.5, 2.5/)
387 zdmed(2,:) = (/ 100.,100.,100.,100., 75., 75., 50., 50., 10., 10., 10., 75./)
388 zdmed(3,:) = (/1000.,690.,520.,520.,520.,210.,210.,125.,100.,100.,100.,520./)
390 DO itex = 1,
SIZE(pzs0)
391 pzs0(itex) =1e-6*zdmed(3,itex)/30.0
396 zdpln(1) = log(pdp(1))
398 DO idp = 2,
SIZE(pdsrlv,2)
399 zdpln(idp) = zdpln(idp-1) + pdlndp
400 pdp(idp) = exp(zdpln(idp))
409 DO itex = 1,
SIZE(pdsrlv,1)
410 DO idp = 1,
SIZE(pdsrlv,2)
413 zdm1 = zmfrac(imod,itex) / (sqrt(2.d0*xpi) * log(zsigma(imod,itex)))
414 zdm2 = exp((log(pdp(idp)) - log(zdmed(imod,itex)))**2. / (-2.d0 * (log(zsigma(imod,itex)))**2.d0))
415 zdmln(idp) = zdmln(idp) + zdm1*zdm2
418 zds(itex,idp) = 3.d0 * zdmln(idp) * pdlndp / (2.* xdns_slt * pdp(idp))
420 zsp(itex) = zsp(itex) + zds(itex,idp)
425 DO itex = 1,
SIZE(pzs0)
426 DO idp = 1,
SIZE(pdsrlv,2)
427 pdsrlv(itex,idp) = zds(itex,idp) / zsp(itex)
431 IF (lhook) CALL dr_hook(
'MODE_DSTMBLUTL:DISTRIBUTION',1,zhook_handle)
subroutine wnd_frc_slt_get(OFLG_MBL, PWND_FRC, PWND_RFR, PWND_RFR_THR_SLT, PWND_FRC_SLT)
subroutine distribution(KMODE, PDLNDP, KTEXT, PDP, PDSRLV, PZS0)
subroutine abor1_sfx(YTEXT)
subroutine wnd_frc_thr_slt_get(PDNS_MDP, PDP, PWND_FRC_THR_SLT)
subroutine frc_thr_ncr_wtr_get(OFLG_MBL, PGWC_THR, PGWC_SFC, PFRC_THR_NCR_WTR)
subroutine vwc2gwc(OFLG_MBL, PVWC_SAT, PVWC_SFC, PGWC_SFC)
subroutine flx_mss_vrt_dst_aust_get(OFLG_MBL, PDNS_MDP, PWND_FRC_THR_SLT, PFLX_MSS_HRZ_SLT_TTL, PDST_SLT_FLX_RAT_TTL, PFLX_MSS_VRT_DST_TTL)
subroutine flx_mss_vrt_dst_ttl_mab95_get(OFLG_MBL, PMSS_FRC_CLY, PFLX_MSS_HRZ_SLT_TTL, PDST_SLT_FLX_RAT_TTL, PFLX_MSS_VRT_DST_TTL)
subroutine frc_thr_ncr_drg_get(PRGH_MMN_MBL, PRGH_MMN_SMT, PFRC_THR_NCR_DRG)
subroutine flx_mss_hrz_slt_ttl_whi79_get(PCOEFF, OFLG_MBL, PDNS_MDP, PWND_FRC, PWND_FRC_THR_SLT, PFLX_MSS_HRZ_SLT_TTL)