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
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)
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)
320 zlnds = (0.328*1.0d-4) + (0.125d0*1.0d-4*log(
xdmt_slt_opt*1.0e+3))
321 zbeta = zlnds * zexpdd
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)
338 SUBROUTINE distribution(KMODE, PDLNDP, KTEXT, PDP, PDSRLV, PZS0)
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 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 abor1_sfx(YTEXT)
subroutine vwc2gwc(OFLG_MBL, PVWC_SAT, PVWC_SFC, PGWC_SFC)
real, parameter xdmt_ero_opt
subroutine distribution(KMODE, PDLNDP, KTEXT, PDP, PDSRLV, PZS0)
subroutine frc_thr_ncr_wtr_get(OFLG_MBL, PGWC_THR, PGWC_SFC, PFRC_THR_NCR_WTR)
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)
real, parameter xdmt_slt_opt
subroutine wnd_frc_slt_get(OFLG_MBL, PWND_FRC, PWND_RFR, PWND_RFR_THR_SLT, PWND_FRC_SLT)
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)
subroutine wnd_frc_thr_slt_get(PDNS_MDP, PDP, PWND_FRC_THR_SLT)