85 USE yomhook
,ONLY : lhook, dr_hook
86 USE parkind1
,ONLY : jprb
92 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: psnowdepth,ph_veg
94 REAL,
DIMENSION(SIZE(PSNOWDEPTH,1),SIZE(PSNOWDEPTH,2),SIZE(PSNOWDEPTH,3)) :: ppalphan
98 REAL(KIND=JPRB) :: zhook_handle
100 REAL,
DIMENSION(SIZE(PSNOWDEPTH,1),SIZE(PSNOWDEPTH,2),SIZE(PSNOWDEPTH,3)) :: zh_baseveg
103 IF (lhook) CALL dr_hook(
'MODE_MEB:MEBPALPHAN_3D',0,zhook_handle)
111 zh_baseveg(:,:,:)=max(0.2*(ph_veg(:,:,:)-2.0),0.0);
113 ppalphan(:,:,:)=min(1.,max(0., (psnowdepth(:,:,:)-zh_baseveg(:,:,:))/(ph_veg(:,:,:)-zh_baseveg(:,:,:)) ))
115 IF (lhook) CALL dr_hook(
'MODE_MEB:MEBPALPHAN_3D',1,zhook_handle)
130 USE yomhook
,ONLY : lhook, dr_hook
131 USE parkind1
,ONLY : jprb
137 REAL,
DIMENSION(:,:),
INTENT(IN) :: psnowdepth,ph_veg
139 REAL,
DIMENSION(SIZE(PSNOWDEPTH,1),SIZE(PSNOWDEPTH,2)) :: ppalphan
143 REAL(KIND=JPRB) :: zhook_handle
145 REAL,
DIMENSION(SIZE(PSNOWDEPTH,1),SIZE(PSNOWDEPTH,2)) :: zh_baseveg
148 IF (lhook) CALL dr_hook(
'MODE_MEB:MEBPALPHAN_2D',0,zhook_handle)
155 zh_baseveg(:,:)=max(0.2*(ph_veg(:,:)-2.0),0.0);
157 ppalphan(:,:)=min(1.,max(0., (psnowdepth(:,:)-zh_baseveg(:,:))/(ph_veg(:,:)-zh_baseveg(:,:)) ))
159 IF (lhook) CALL dr_hook(
'MODE_MEB:MEBPALPHAN_2D',1,zhook_handle)
174 USE yomhook
,ONLY : lhook, dr_hook
175 USE parkind1
,ONLY : jprb
181 REAL,
DIMENSION(:),
INTENT(IN) :: psnowdepth,ph_veg
183 REAL,
DIMENSION(SIZE(PSNOWDEPTH,1)) :: ppalphan
187 REAL(KIND=JPRB) :: zhook_handle
189 REAL,
DIMENSION(SIZE(PSNOWDEPTH,1)) :: zh_baseveg
192 IF (lhook) CALL dr_hook(
'MODE_MEB:MEBPALPHAN_1D',0,zhook_handle)
199 zh_baseveg(:)=max(0.2*(ph_veg(:)-2.0),0.0);
202 ppalphan(:)=min(1.,max(0., (psnowdepth(:)-zh_baseveg(:))/(ph_veg(:)-zh_baseveg(:)) ))
204 IF (lhook) CALL dr_hook(
'MODE_MEB:MEBPALPHAN_1D',1,zhook_handle)
219 USE yomhook
,ONLY : lhook, dr_hook
220 USE parkind1
,ONLY : jprb
226 REAL,
INTENT(IN) :: psnowdepth,ph_veg
232 REAL(KIND=JPRB) :: zhook_handle
237 IF (lhook) CALL dr_hook(
'MODE_MEB:MEBPALPHAN_0D',0,zhook_handle)
244 zh_baseveg=max(0.2*(ph_veg-2.0),0.0);
246 ppalphan=min(1.,max(0., (psnowdepth-zh_baseveg)/(ph_veg-zh_baseveg) ))
248 IF (lhook) CALL dr_hook(
'MODE_MEB:MEBPALPHAN_0D',1,zhook_handle)
262 USE yomhook
,ONLY : lhook, dr_hook
263 USE parkind1
,ONLY : jprb
269 REAL,
INTENT(IN) :: pwrn, pwr, pcv
276 REAL(KIND=JPRB) :: zhook_handle
283 REAL,
PARAMETER :: zcheatvmin = 1.e+4
286 IF (lhook) CALL dr_hook(
'MODE_MEB:SFC_HEATCAP_VEG_0D',0,zhook_handle)
296 zcheatv = max(zcheatvmin,xcvheatf/pcv) + &
300 IF (lhook) CALL dr_hook(
'MODE_MEB:SFC_HEATCAP_VEG_0D',1,zhook_handle)
313 USE yomhook
,ONLY : lhook, dr_hook
314 USE parkind1
,ONLY : jprb
320 REAL,
DIMENSION(:),
INTENT(IN) :: pwrn, pwr, pcv
327 REAL(KIND=JPRB) :: zhook_handle
329 REAL,
DIMENSION(SIZE(PCV)) :: zcheatv
334 REAL,
PARAMETER :: zcheatvmin = 1.e+4
337 IF (lhook) CALL dr_hook(
'MODE_MEB:SFC_HEATCAP_VEG_1D',0,zhook_handle)
347 zcheatv(:) = max(zcheatvmin,xcvheatf/pcv(:)) + &
351 IF (lhook) CALL dr_hook(
'MODE_MEB:SFC_HEATCAP_VEG_1D',1,zhook_handle)
364 USE yomhook
,ONLY : lhook, dr_hook
365 USE parkind1
,ONLY : jprb
371 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwrn, pwr, pcv
378 REAL(KIND=JPRB) :: zhook_handle
380 REAL,
DIMENSION(SIZE(PCV),SIZE(PCV,2)) :: zcheatv
385 REAL,
PARAMETER :: zcheatvmin = 1.e+4
388 IF (lhook) CALL dr_hook(
'MODE_MEB:SFC_HEATCAP_VEG_2D',0,zhook_handle)
398 zcheatv(:,:) = max(zcheatvmin,xcvheatf/pcv(:,:)) + &
402 IF (lhook) CALL dr_hook(
'MODE_MEB:SFC_HEATCAP_VEG_2D',1,zhook_handle)
423 USE yomhook
,ONLY : lhook, dr_hook
424 USE parkind1
,ONLY : jprb
430 REAL,
DIMENSION(:,:),
INTENT(IN) :: psw_rad
432 REAL,
DIMENSION(:,:),
INTENT(IN) :: pcoszenith
437 REAL(KIND=JPRB) :: zhook_handle
439 REAL,
DIMENSION(SIZE(PSW_RAD,1),SIZE(PSW_RAD,2)) :: zswdown_diff, zratio
443 REAL,
PARAMETER :: zswcnt = 1.0
446 IF (lhook) CALL dr_hook(
'MODE_MEB:SWDOWN_DIFF_2D',0,zhook_handle)
448 zratio(:,:) = psw_rad(:,:)*(zswcnt/xi0)/max(0.01,pcoszenith(:,:))
452 zratio(:,:) = min(1.0, zratio(:,:))
454 zswdown_diff(:,:) = 0.165
456 WHERE(zratio(:,:) < 0.22 ) &
457 zswdown_diff(:,:) = 1.0 - 0.09*zratio(:,:)
459 WHERE(zratio(:,:) >= 0.22 .AND. zratio(:,:) < 0.80) &
460 zswdown_diff(:,:) = 0.9511 + (-0.1604 + (4.388 + (-16.64 + &
461 12.34*zratio(:,:))*zratio(:,:))*zratio(:,:))*zratio(:,:)
463 IF (lhook) CALL dr_hook(
'MODE_MEB:SWDOWN_DIFF_2D',1,zhook_handle)
481 USE yomhook
,ONLY : lhook, dr_hook
482 USE parkind1
,ONLY : jprb
488 REAL,
DIMENSION(:),
INTENT(IN) :: psw_rad
490 REAL,
DIMENSION(:),
INTENT(IN) :: pcoszenith
495 REAL(KIND=JPRB) :: zhook_handle
497 REAL,
DIMENSION(SIZE(PSW_RAD)) :: zswdown_diff, zratio
501 REAL,
PARAMETER :: zswcnt = 1.0
505 IF (lhook) CALL dr_hook(
'MODE_MEB:SWDOWN_DIFF_1D',0,zhook_handle)
507 zratio(:) = psw_rad(:)*(zswcnt/xi0)/max(0.01,pcoszenith(:))
511 zratio(:) = min(1.0, zratio(:))
513 zswdown_diff(:) = 0.165
515 WHERE(zratio(:) < 0.22 ) &
516 zswdown_diff(:) = 1.0 - 0.09*zratio(:)
518 WHERE(zratio(:) >= 0.22 .AND. zratio(:) < 0.80) &
519 zswdown_diff(:) = 0.9511 + (-0.1604 + (4.388 + (-16.64 + &
520 12.34*zratio(:))*zratio(:))*zratio(:))*zratio(:)
522 IF (lhook) CALL dr_hook(
'MODE_MEB:SWDOWN_DIFF_1D',1,zhook_handle)
540 USE yomhook
,ONLY : lhook, dr_hook
541 USE parkind1
,ONLY : jprb
547 REAL,
INTENT(IN) :: psw_rad
549 REAL,
INTENT(IN) :: pcoszenith
554 REAL(KIND=JPRB) :: zhook_handle
556 REAL :: zswdown_diff, zratio
560 REAL,
PARAMETER :: zswcnt = 1.0
563 IF (lhook) CALL dr_hook(
'MODE_MEB:SWDOWN_DIFF_0D',0,zhook_handle)
565 zratio = psw_rad*(zswcnt/xi0)/max(0.01,pcoszenith)
569 zratio = min(1.0, zratio)
573 IF (zratio < 0.22 )
THEN
574 zswdown_diff = 1.0 - 0.09*zratio
575 ELSEIF(zratio >= 0.22 .AND. zratio < 0.80)
THEN
576 zswdown_diff = 0.9511 + (-0.1604 + (4.388 + (-16.64 + &
577 12.34*zratio)*zratio)*zratio)*zratio
580 IF (lhook) CALL dr_hook(
'MODE_MEB:SWDOWN_DIFF_0D',1,zhook_handle)
609 USE yomhook
,ONLY : lhook, dr_hook
610 USE parkind1
,ONLY : jprb
616 REAL,
INTENT(IN) :: pchip, pvelc
620 REAL,
INTENT(IN) :: pwrvnmax
636 REAL(KIND=JPRB) :: zhook_handle
640 REAL,
PARAMETER :: zwsnow = 0.8
643 IF (lhook) CALL dr_hook(
'MODE_MEB:SNOW_INTERCEPT_EFF_0D',0,zhook_handle)
652 IF(pwrvnmax > 0.0)
THEN
653 zfcp = min(1.,max(0., pvelc/((2*zwsnow)*pchip) ) )
654 zkvn = (1.-pchip+zfcp*pchip)/pwrvnmax
657 IF (lhook) CALL dr_hook(
'MODE_MEB:SNOW_INTERCEPT_EFF_0D',1,zhook_handle)
685 USE yomhook
,ONLY : lhook, dr_hook
686 USE parkind1
,ONLY : jprb
692 REAL,
DIMENSION(:),
INTENT(IN) :: pchip, pvelc
696 REAL,
DIMENSION(:),
INTENT(IN) :: pwrvnmax
703 REAL,
DIMENSION(SIZE(PVELC)) :: zkvn
710 REAL,
DIMENSION(SIZE(PVELC)) :: zfcp
712 REAL(KIND=JPRB) :: zhook_handle
716 REAL,
PARAMETER :: zwsnow = 0.8
719 IF (lhook) CALL dr_hook(
'MODE_MEB:SNOW_INTERCEPT_EFF_1D',0,zhook_handle)
728 WHERE(pwrvnmax(:) > 0.0)
729 zfcp(:) = min(1.,max(0., pvelc(:)/((2*zwsnow)*pchip(:)) ) )
730 zkvn(:) = (1.-pchip(:)+zfcp(:)*pchip(:))/pwrvnmax(:)
733 IF (lhook) CALL dr_hook(
'MODE_MEB:SNOW_INTERCEPT_EFF_1D',1,zhook_handle)
761 USE yomhook
,ONLY : lhook, dr_hook
762 USE parkind1
,ONLY : jprb
768 REAL,
DIMENSION(:,:),
INTENT(IN) :: pchip, pvelc
772 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwrvnmax
779 REAL,
DIMENSION(SIZE(PVELC,1),SIZE(PVELC,2)) :: zkvn
786 REAL,
DIMENSION(SIZE(PVELC,1),SIZE(PVELC,2)) :: zfcp
788 REAL(KIND=JPRB) :: zhook_handle
792 REAL,
PARAMETER :: zwsnow = 0.8
795 IF (lhook) CALL dr_hook(
'MODE_MEB:SNOW_INTERCEPT_EFF_2D',0,zhook_handle)
804 WHERE(pwrvnmax(:,:) > 0.0)
805 zfcp(:,:) = min(1.,max(0., pvelc(:,:)/((2*zwsnow)*pchip(:,:)) ) )
806 zkvn(:,:) = (1.-pchip(:,:)+zfcp(:,:)*pchip(:,:))/pwrvnmax(:,:)
809 IF (lhook) CALL dr_hook(
'MODE_MEB:SNOW_INTERCEPT_EFF_2D',1,zhook_handle)
839 USE yomhook
, ONLY : lhook, dr_hook
840 USE parkind1
, ONLY : jprb
846 REAL,
INTENT(IN) :: plai, ppalphan
855 REAL(KIND=JPRB) :: zhook_handle
858 IF (lhook) CALL dr_hook(
'MODE_MEB:MEB_SHIELD_FACTOR_0D',0,zhook_handle)
860 pchip = exp(-xtau_lw*plai*(1.-ppalphan))
862 IF (lhook) CALL dr_hook(
'MODE_MEB:MEB_SHIELD_FACTOR_0D',1,zhook_handle)
892 USE yomhook
, ONLY : lhook, dr_hook
893 USE parkind1
, ONLY : jprb
899 REAL,
DIMENSION(:),
INTENT(IN) :: plai, ppalphan
903 REAL,
DIMENSION(SIZE(PLAI,1)) :: pchip
908 REAL(KIND=JPRB) :: zhook_handle
911 IF (lhook) CALL dr_hook(
'MODE_MEB:MEB_SHIELD_FACTOR_1D',0,zhook_handle)
913 pchip(:) = exp(-xtau_lw*plai(:)*(1.-ppalphan(:)))
915 IF (lhook) CALL dr_hook(
'MODE_MEB:MEB_SHIELD_FACTOR_1D',1,zhook_handle)
945 USE yomhook
, ONLY : lhook, dr_hook
946 USE parkind1
, ONLY : jprb
952 REAL,
DIMENSION(:,:),
INTENT(IN) :: plai, ppalphan
956 REAL,
DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2)) :: pchip
961 REAL(KIND=JPRB) :: zhook_handle
964 IF (lhook) CALL dr_hook(
'MODE_MEB:MEB_SHIELD_FACTOR_2D',0,zhook_handle)
966 pchip(:,:) = exp(-xtau_lw*plai(:,:)*(1.-ppalphan(:,:)))
968 IF (lhook) CALL dr_hook(
'MODE_MEB:MEB_SHIELD_FACTOR_2D',1,zhook_handle)
real function mebpalphan_0d(PSNOWDEPTH, PH_VEG)
real function sfc_heatcap_veg_0d(PWRN, PWR, PCV)
real function, dimension(size(psnowdepth, 1), size(psnowdepth, 2), size(psnowdepth, 3)) mebpalphan_3d(PSNOWDEPTH, PH_VEG)
real function, dimension(size(psnowdepth, 1), size(psnowdepth, 2)) mebpalphan_2d(PSNOWDEPTH, PH_VEG)
real function, dimension(size(plai, 1), size(plai, 2)) meb_shield_factor_2d(PLAI, PPALPHAN)
real function, dimension(size(psw_rad)) swdown_diff_1d(PSW_RAD, PCOSZENITH)
real function swdown_diff_0d(PSW_RAD, PCOSZENITH)
real function, dimension(size(pcv), size(pcv, 2)) sfc_heatcap_veg_2d(PWRN, PWR, PCV)
real function, dimension(size(psw_rad, 1), size(psw_rad, 2)) swdown_diff_2d(PSW_RAD, PCOSZENITH)
real function, dimension(size(psnowdepth, 1)) mebpalphan_1d(PSNOWDEPTH, PH_VEG)
real function meb_shield_factor_0d(PLAI, PPALPHAN)
real function, dimension(size(plai, 1)) meb_shield_factor_1d(PLAI, PPALPHAN)
real function snow_intercept_eff_0d(PCHIP, PVELC, PWRVNMAX)
real function, dimension(size(pvelc, 1), size(pvelc, 2)) snow_intercept_eff_2d(PCHIP, PVELC, PWRVNMAX)
real function, dimension(size(pcv)) sfc_heatcap_veg_1d(PWRN, PWR, PCV)
real function, dimension(size(pvelc)) snow_intercept_eff_1d(PCHIP, PVELC, PWRVNMAX)