8 ptg, ptc, ptv, psnowtemp, pta, pqc, pqa, pvmod, &
9 pwg, pwgi, pwsat, pwfc, &
11 prr, psr, prhoa, pz0g_without_snow, &
12 pz0_mebv, pz0h_mebv, pz0eff_mebv, &
13 pz0_mebn, pz0h_mebn, pz0eff_mebn, &
14 pz0_with_snow, pz0h_with_snow, pz0eff, &
16 pwr, pchip, ptstep, prs_vg, prs_vn, &
17 ppsn, ppalphan, pzref, puref, ph_veg, pdircoszw, &
18 ppsncv, pdelta, plai, omeb_gndres, &
19 pch, pcd, pcdn, pri, pra, pvelc, &
20 pcdsnow, pchsnow, prisnow, pustar2snow, &
21 phug, phugi, phv, phvg, phvn, phu, pqs, prs, &
22 pleg_delta, plegi_delta, phsgl, phsgf, &
23 pflxc_c_a, pflxc_n_a, pflxc_g_c, pflxc_n_c, &
24 pflxc_vg_c, pflxc_vn_c, pflxc_mom, &
25 pqsatg, pqsatv, pqsatc, pqsatn, pdeltavk )
75 USE modd_surf_atm, ONLY : ldrag_coef_arp, xrimax, lrrgust_arp, xrrscale, &
76 xrrgamma, xutilgust, lcpl_arp
79 USE modi_surface_cdch_1darp
80 USE modi_wind_threshold
81 USE modi_disph_for_meb
82 USE modi_preps_for_meb_drag
83 USE modi_surface_air_meb
87 USE yomhook
,ONLY : lhook, dr_hook
88 USE parkind1
,ONLY : jprb
94 LOGICAL,
INTENT(IN) :: lforc_measure
97 REAL,
INTENT(IN) :: ptstep
100 REAL,
DIMENSION(:),
INTENT(IN) :: ptg, ptc, ptv, psnowtemp, pta, pqc, pqa, pvmod, &
101 pwg, pwgi, pwsat, pwfc, pexns, pexna, pps, &
121 REAL,
DIMENSION(:),
INTENT(IN) :: prr, psr, prhoa
126 REAL,
DIMENSION(:),
INTENT(IN) :: pz0g_without_snow, &
127 pz0_mebv, pz0h_mebv, pz0eff_mebv, &
128 pz0_mebn, pz0h_mebn, pz0eff_mebn, &
129 pz0_with_snow, pz0h_with_snow, pz0eff
145 REAL,
DIMENSION(:),
INTENT(IN) :: pwr,pchip
149 REAL,
DIMENSION(:),
INTENT(IN) :: prs_vg, prs_vn, ppsn, ppsncv, &
150 ppalphan, pzref, puref, ph_veg, pdircoszw
168 REAL,
DIMENSION(:),
INTENT(IN) :: pdelta, plai
173 LOGICAL,
INTENT(IN) :: omeb_gndres
174 REAL,
DIMENSION(:),
INTENT(OUT) :: pdeltavk
180 REAL,
DIMENSION(:),
INTENT(OUT) :: pch, pcd, pcdn, pri, pra, pvelc
190 REAL,
DIMENSION(:),
INTENT(OUT) :: phug, phugi, phvg, phvn, phv, &
191 phu, pqs, pleg_delta, plegi_delta, phsgl, phsgf, prs
207 REAL,
DIMENSION(:),
INTENT(OUT) :: pflxc_c_a, pflxc_n_a, pflxc_g_c, pflxc_n_c, pflxc_vg_c, pflxc_vn_c
218 REAL,
DIMENSION(:),
INTENT(OUT) :: pflxc_mom, pqsatg, pqsatv, pqsatc, pqsatn
225 REAL,
DIMENSION(:),
INTENT(OUT) :: pcdsnow, pchsnow, prisnow, pustar2snow
237 REAL,
DIMENSION(SIZE(PTG)) :: zac,zwfc,zwsat,zfp,zrrcor
246 REAL,
DIMENSION(SIZE(PTG)) :: zchil, zlaisn, zlw, zdisph, zvelc, zricn, zra_c_a, &
247 zra_g_c, zg_vg_c, zra_n_c, zg_vn_c
259 REAL,
DIMENSION(SIZE(PTG)) :: zchcn,zcdncn,zcdcn
262 REAL,
DIMENSION(SIZE(PTG)) :: zrinn,zrann,zchnn,zcdnnn,zcdnn,zteff,zdeltamax,zdeltav,zvmod
264 REAL,
DIMENSION(SIZE(PTG)) :: zrsgl,zrsgf,zz0sn
269 REAL,
DIMENSION(SIZE(PTG)) :: zrsnfrac, zdenom
273 REAL,
DIMENSION(SIZE(PTG)) :: zustar2g, zcdg, zchg, zrig, zpsna
282 REAL,
PARAMETER :: zraeps = 1.e-3
284 REAL,
PARAMETER :: zsnowswesmin = 1.e-4
286 REAL,
PARAMETER :: zrg_coef1 = 8.206
287 REAL,
PARAMETER :: zrg_coef2 = 4.255
290 REAL(KIND=JPRB) :: zhook_handle
296 IF (lhook) CALL dr_hook(
'DRAG_MEB',0,zhook_handle)
332 zwsat(:) = pwsat(:)-pwgi(:)
333 zwfc(:) = pwfc(:)*zwsat(:)/pwsat(:)
334 phug(:) = 0.5 * ( 1.-cos(xpi*min((pwg(:)-xwgmin) /zwfc(:),1.)) )
335 zwsat(:) = max(xwgmin, zwsat(:))
336 zwfc(:) = pwfc(:)*zwsat(:)/pwsat(:)
337 phugi(:) = 0.5 * ( 1.-cos(xpi*min(pwgi(:)/zwfc(:),1.)) )
342 pqsatg(:) =
qsat(ptg(:),pps(:))
343 pqsatv(:) =
qsat(ptv(:),pps(:))
344 pqsatc(:) =
qsat(ptc(:),pps(:))
345 pqsatn(:) =
qsati(psnowtemp(:),pps(:))
354 pqs(:) =(1.-ppsn(:)*ppalphan(:))*pqc(:)+ ppsn(:)*ppalphan(:)*pqsatn(:)
355 phu(:) =(1.-ppsn(:)*ppalphan(:))*pqc(:)/pqsatc(:)+ ppsn(:)*ppalphan(:)
380 CALL
disph_for_meb(zchil,plai,zlw,ph_veg,pzref,pz0_mebv,zdisph)
385 pz0_mebv, pz0h_mebv, pz0eff_mebv, &
387 ptc, pta, pqc, pqa, puref, pvmod, &
388 pexna, pexns, pdircoszw, zdisph, &
389 pvelc, zvmod, zricn, zra_c_a, &
392 IF (lrrgust_arp)
THEN
394 zfp(:)=max(0.0,prr(:)+psr(:))
395 zrrcor(:)=sqrt(1.0+((((zfp(:)/(zfp(:)+xrrscale))**xrrgamma)*xutilgust)**2) &
396 & /(zcdcn(:)*zvmod(:)**2))
398 zcdcn(:) = zcdcn(:) * zrrcor(:)
399 zchcn(:) = zchcn(:) * zrrcor(:)
400 zcdncn(:) = zcdncn(:) * zrrcor(:)
404 pflxc_c_a(:)=zchcn(:)*zvmod(:)*prhoa(:)
409 pflxc_mom(:)=zcdcn(:)*zvmod(:)*prhoa(:)
414 CALL
surface_air_meb(pz0_mebv, pz0h_mebv, pz0g_without_snow, ph_veg, plai, &
415 ptg, ptc, ptv, pvelc, zlw, &
418 zustar2g, zcdg, zchg, zrig )
422 zlaisn(:)=plai(:)*(1.-ppalphan(:))
429 psnowtemp, ptc, ptv, pvelc, zlw, &
432 zustar2g, zcdg, zchg, zrig )
436 pustar2snow(:) = zustar2g(:)
446 pz0_mebn, pz0h_mebn, pz0eff_mebn, &
448 psnowtemp, pta, pqsatn, pqa, puref, pvmod, &
449 pexna, pexns, pdircoszw, zdisph, &
450 zvelc, zvmod, zrinn, zrann, &
453 IF (lrrgust_arp)
THEN
455 zrrcor(:)=sqrt(1.0+((((zfp(:)/(zfp(:)+xrrscale))**xrrgamma)*xutilgust)**2) &
456 & /(zcdnn(:)*zvmod(:)**2))
458 zcdnn(:) = zcdnn(:) * zrrcor(:)
459 zchnn(:) = zchnn(:) * zrrcor(:)
460 zcdnnn(:) = zcdnnn(:) * zrrcor(:)
464 pflxc_n_a(:)=zchnn(:)*zvmod(:)*prhoa(:)
468 pflxc_mom(:)=(1.-ppsn(:)*ppalphan(:))*pflxc_mom(:) + &
469 ppsn(:)*ppalphan(:)*zcdnn(:)*zvmod(:)*prhoa(:)
475 zpsna(:) = ppsn(:)*ppalphan(:)
477 zteff(:) = (1.-zpsna(:))*ptc(:)+ zpsna(:)*psnowtemp(:)
481 pustar2snow(:) = (1.-zpsna(:))*pustar2snow(:) + zpsna(:)*zcdnn(:)*zvmod(:)**2
482 pcdsnow(:) = (1.-zpsna(:))*pcdsnow(:) + zpsna(:)*zcdnn(:)
483 pchsnow(:) = (1.-zpsna(:))*pchsnow(:) + zpsna(:)*zchnn(:)
484 prisnow(:) = (1.-zpsna(:))*prisnow(:) + zpsna(:)*zrinn(:)
489 pz0_with_snow, pz0h_with_snow, pz0eff, &
491 zteff, pta, pqs, pqa, puref, pvmod, &
492 pexna, pexns, pdircoszw, zdisph, &
493 zvelc, zvmod, pri, pra, &
496 IF (lrrgust_arp)
THEN
498 zrrcor(:)=sqrt(1.0+((((zfp(:)/(zfp(:)+xrrscale))**xrrgamma)*xutilgust)**2) &
499 & /(pcd(:)*zvmod(:)**2))
501 pcd(:) = pcd(:) * zrrcor(:)
502 pch(:) = pch(:) * zrrcor(:)
503 pcdn(:) = pcdn(:) * zrrcor(:)
525 WHERE(zra_g_c(:) > zraeps)
526 pflxc_g_c(:) = prhoa(:) / zra_g_c(:)
527 phsgl(:) = zra_g_c(:)/(zra_g_c(:)+zrsgl(:))
528 phsgf(:) = zra_g_c(:)/(zra_g_c(:)+zrsgf(:))
530 pflxc_g_c(:) = xflxmax
535 WHERE(zra_n_c>zraeps)
536 pflxc_n_c(:) = prhoa(:)/zra_n_c(:)
538 pflxc_n_c(:) = xflxmax
547 pflxc_n_c(:) = pflxc_n_c(:)*min(1., (psnowswe(:) + psr(:)*ptstep)/zsnowswesmin)
551 pflxc_vg_c(:) = prhoa(:)*zg_vg_c(:)
552 pflxc_vn_c(:) = prhoa(:)*zg_vn_c(:)
559 zdeltamax(:) = (1.-pchip(:))*(1.-ppsn(:)*ppalphan(:))*prr(:)+ pwr(:)/ptstep
560 zdenom(:) = (1.-ppsncv(:))*xkdelta_wr* &
561 ( ppsn(:)*(1.-ppalphan(:))*pflxc_vn_c(:) + (1.-ppsn(:))*pflxc_vg_c(:) )* &
563 zdeltamax(:) = max(0., min(1.0, zdeltamax(:)/max(1.e-10,zdenom(:))))
565 zdeltav(:) = xkdelta_wr*min(zdeltamax(:),pdelta(:))
566 pdeltavk(:) = xkdelta_wr*pdelta(:)
568 phvg(:) = 1. - max(0.,sign(1.,pqsatv(:)-pqc(:))) &
569 *(1.-zdeltav(:))*prs_vg(:)*zg_vg_c(:) / (1.+prs_vg(:)*zg_vg_c(:))
571 phvn(:) = 1. - max(0.,sign(1.,pqsatv(:)-pqc(:))) &
572 *(1.-zdeltav(:))*prs_vn(:)*zg_vn_c(:) / (1.+prs_vn(:)*zg_vn_c(:))
577 prs(:) = ppalphan(:)*prs_vn(:) + (1.0-ppalphan(:))*prs_vg(:)
578 phv(:) = ppalphan(:)*phvn(:) + (1.0-ppalphan(:))*phvg(:)
589 IF (omeb_gndres)
THEN
590 pleg_delta(:) = zra_g_c(:) / &
591 ( zra_g_c(:) + exp(zrg_coef1 - zrg_coef2 * pwg(:) / zwsat(:) ) )
592 plegi_delta(:) =zra_g_c(:) / &
593 ( zra_g_c(:) + exp(zrg_coef1 - zrg_coef2 * pwgi(:)/ zwsat(:) ) )
610 WHERE ( phug(:)*pqsatg(:) < pqc(:) .AND. pqsatg(:) > pqc(:) )
611 phug(:) = pqc(:) / pqsatg(:)
614 WHERE ( phugi(:)*pqsatg(:) < pqc(:) .AND. pqsatg(:) > pqc(:) )
615 phugi(:) = pqc(:) / pqsatg(:)
621 WHERE ( phug*pqsatg < pqc .AND. pqsatg <= pqc )phug(:) = 1.0
622 WHERE ( phugi*pqsatg < pqc .AND. pqsatg <= pqc )phugi(:) = 1.0
625 IF (lhook) CALL dr_hook(
'DRAG_MEB',1,zhook_handle)
subroutine surface_air_meb(PZ0, PZ0H, PZ0G, PH_VEG, PLAI, PTG, PTC, PTV, PVELC, PLW, PDISPH, PRAGNC, PGVNC, PUSTAR2, PCD, PCH, PRI)
subroutine preps_for_meb_drag(LCVEL, LFORC_MEASURE, PZ0, PZ0H, PZ0EFF, PH_VEG, PZREF, PTC, PTA, PQC, PQA, PUREF, PVMOD, PEXNA, PEXNS, PDIRCOSZW, PDISPH, PVELC, PZVMOD, PRI, PRA, PCH, PCDN, PCD)
subroutine drag_meb(LFORC_MEASURE, PTG, PTC, PTV, PSNOWTEMP, PTA, PQC, PQA, PVMOD, PWG, PWGI, PWSAT, PWFC, PEXNS, PEXNA, PPS, PRR, PSR, PRHOA, PZ0G_WITHOUT_SNOW, PZ0_MEBV, PZ0H_MEBV, PZ0EFF_MEBV, PZ0_MEBN, PZ0H_MEBN, PZ0EFF_MEBN, PZ0_WITH_SNOW, PZ0H_WITH_SNOW, PZ0EFF, PSNOWSWE, PWR, PCHIP, PTSTEP, PRS_VG, PRS_VN, PPSN, PPALPHAN, PZREF, PUREF, PH_VEG, PDIRCOSZW, PPSNCV, PDELTA, PLAI, OMEB_GNDRES, PCH, PCD, PCDN, PRI, PRA, PVELC, PCDSNOW, PCHSNOW, PRISNOW, PUSTAR2SNOW, PHUG, PHUGI, PHV, PHVG, PHVN, PHU, PQS, PRS, PLEG_DELTA, PLEGI_DELTA, PHSGL, PHSGF, PFLXC_C_A, PFLXC_N_A, PFLXC_G_C, PFLXC_N_C, PFLXC_VG_C, PFLXC_VN_C, PFLXC_MOM, PQSATG, PQSATV, PQSATC, PQSATN, PDELTAVK)
subroutine disph_for_meb(PCHIL, PLAIV, PLW, PH_VEG, PZREF, PZ0_MEBV, PDISPH)