44 USE modd_isba_par
, ONLY : xcdz0eff
59 TYPE(
sso_t),
INTENT(INOUT) :: ISSK
60 REAL,
DIMENSION(:),
INTENT(IN) :: PZ0VEG
62 LOGICAL,
INTENT(IN) :: OZ0REL
63 LOGICAL,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: OMASK
69 REAL,
DIMENSION(SIZE(ISSK%XAOSIP)) :: ZLOC
70 LOGICAL,
DIMENSION(SIZE(ISSK%XZ0EFFIM)) :: GMASK
73 REAL(KIND=JPRB) :: ZHOOK_HANDLE
78 IF (.NOT.
PRESENT(omask))
THEN 87 IF (
PRESENT(omask))
THEN 89 ELSEIF (all(pz0veg(:)==0.))
THEN 90 gmask = (issk%XAOSIP/=
xundef)
98 CALL get_z0eff(gmask(:),pz0veg(:),issk%XHO2JP(:),issk%XAOSJP(:),issk%XZ0EFFJP
99 CALL get_z0eff(gmask(:),pz0veg(:),issk%XHO2JM(:),issk%XAOSJM(:),issk%XZ0EFFJM
100 CALL get_z0eff(gmask(:),pz0veg(:),issk%XHO2IM(:),issk%XAOSIM(:),issk%XZ0EFFIM
101 CALL get_z0eff(gmask(:),pz0veg(:),issk%XHO2IP(:),issk%XAOSIP(:),issk%XZ0EFFIP
105 IF (
lhook)
CALL dr_hook(
'SUBSCALE_Z0EFF',1,zhook_handle)
110 SUBROUTINE get_z0eff(OCOMPUT,PZ0,PHO,PAO,PZ0EFF)
112 USE modd_isba_par
, ONLY : xcdz0eff
120 LOGICAL,
DIMENSION(:),
INTENT(IN) :: OCOMPUT
121 REAL,
DIMENSION(:),
INTENT(IN) :: PZ0
122 REAL,
DIMENSION(:),
INTENT(IN) :: PHO
123 REAL,
DIMENSION(:),
INTENT(IN) :: PAO
124 REAL,
DIMENSION(:),
INTENT(INOUT):: PZ0EFF
126 LOGICAL,
DIMENSION(SIZE(PZ0)) :: LWORK1
128 REAL :: ZLOC1,ZLOC2,ZLOC3
131 REAL(KIND=JPRB) :: ZHOOK_HANDLE
133 IF (
lhook)
CALL dr_hook(
'SUBSCALE_Z0EFF:GET_ZOEFF',0,zhook_handle)
137 lwork1(:)=(pho(:)>pz0(:).AND.(pz0(:)/=0.0.OR.pao(:)/=0.0))
140 IF (ocomput(jj))
THEN 142 zloc1 = (xcdz0eff/(2.*
xkarman**2))*pao(jj)
143 IF ( pz0(jj) > 0. )
THEN 144 zloc2 = 1./(alog(pho(jj)/pz0(jj)))**2
148 zloc3 = sqrt(1./(zloc1+zloc2))
149 pz0eff(jj) = pho(jj) * exp(-zloc3)
156 IF (
lhook)
CALL dr_hook(
'SUBSCALE_Z0EFF:GET_ZOEFF',1,zhook_handle)
subroutine subscale_z0eff(ISSK, PZ0VEG, OZ0REL, OMASK)
subroutine get_z0eff(OCOMPUT, PZ0, PHO, PAO, PZ0EFF)
subroutine get_z0rel(ISS, OMASK)