7 hrough, omeb, palfa, pzref, puref, pz0, pz0rel, ppsn, &
8 ppalphan,pz0litter, pwsnow, &
9 pz0effip,pz0effim,pz0effjp,pz0effjm,pff,pz0_flood, &
10 paosip,paosim,paosjp,paosjm,pho2ip,pho2im,pho2jp,pho2jm, &
11 pz0_o_z0h, pz0_with_snow, pz0h_with_snow,pz0eff, &
13 pz0_mebv,pz0h_mebv,pz0eff_mebv, &
14 pz0_mebn,pz0h_mebn,pz0eff_mebn )
78 USE yomhook
,ONLY : lhook, dr_hook
79 USE parkind1
,ONLY : jprb
87 TYPE(isba_t
),
INTENT(INOUT) :: i
89 CHARACTER(LEN=*),
INTENT(IN) :: hrough
90 LOGICAL,
INTENT(IN) :: omeb
92 REAL,
DIMENSION(:),
INTENT(IN) :: palfa
93 REAL,
DIMENSION(:),
INTENT(IN) :: pzref
94 REAL,
DIMENSION(:),
INTENT(IN) :: puref
95 REAL,
DIMENSION(:),
INTENT(IN) :: pz0
96 REAL,
DIMENSION(:),
INTENT(IN) :: pz0rel
97 REAL,
DIMENSION(:),
INTENT(IN) :: ppsn
98 REAL,
DIMENSION(:),
INTENT(IN) :: ppalphan
99 REAL,
DIMENSION(:),
INTENT(IN) :: pz0effip
100 REAL,
DIMENSION(:),
INTENT(IN) :: pz0effim
101 REAL,
DIMENSION(:),
INTENT(IN) :: pz0effjp
102 REAL,
DIMENSION(:),
INTENT(IN) :: pz0effjm
103 REAL,
DIMENSION(:),
INTENT(IN) :: paosip
104 REAL,
DIMENSION(:),
INTENT(IN) :: paosim
105 REAL,
DIMENSION(:),
INTENT(IN) :: paosjp
106 REAL,
DIMENSION(:),
INTENT(IN) :: paosjm
107 REAL,
DIMENSION(:),
INTENT(IN) :: pho2ip
108 REAL,
DIMENSION(:),
INTENT(IN) :: pho2im
109 REAL,
DIMENSION(:),
INTENT(IN) :: pho2jp
110 REAL,
DIMENSION(:),
INTENT(IN) :: pho2jm
111 REAL,
DIMENSION(:),
INTENT(IN) :: pz0_o_z0h
113 REAL,
DIMENSION(:),
INTENT(IN) :: pff
114 REAL,
DIMENSION(:),
INTENT(IN) :: pz0_flood
117 REAL,
DIMENSION(:),
INTENT(IN) :: pz0litter
119 REAL,
DIMENSION(:),
INTENT(IN) :: pwsnow
121 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0_with_snow
122 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0h_with_snow
123 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0eff
126 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0g_without_snow
128 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0_mebv
129 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0h_mebv
130 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0eff_mebv
132 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0_mebn
133 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0h_mebn
134 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0eff_mebn
142 REAL,
DIMENSION(SIZE(PZ0EFF)) :: zwork, zalfa, &
143 zz0effip, zz0effim, &
144 zz0effjp, zz0effjm, &
148 REAL :: z0cr, zuz0cn, zalrcn1, zalrcn2
149 REAL(KIND=JPRB) :: zhook_handle
152 IF (lhook) CALL dr_hook(
'Z0EFF',0,zhook_handle)
158 WHERE(zalfa(:)<=-xpi) zalfa = zalfa + 2.*xpi
159 WHERE(zalfa(:)> xpi) zalfa = zalfa - 2.*xpi
177 pz0_with_snow(:) = pz0(:)
178 pz0h_with_snow(:) = pz0(:) / pz0_o_z0h(:)
180 IF(i%TSNOW%SCHEME==
'EBA')
THEN
185 pz0_with_snow(:) = pz0_with_snow(:) + ( z0cr - pz0(:))* &
186 pwsnow(:)/(pwsnow(:) + xwcrn*(1.0+zuz0cn*pz0(:)))
193 pz0h_with_snow(:) = pz0h_with_snow(:) + ( z0cr - pz0h_with_snow(:))* &
194 pwsnow(:)/(pwsnow(:) + xwcrn*(1.0+zuz0cn*pz0h_with_snow(:)))
201 WHERE (ppsn(:)>0..OR.pff(:)>0.)
203 zwork(:) = ( ppsn(:) /(log(puref(:)/xz0sn ))**2 ) &
204 + ( pff(:) /(log(puref(:)/pz0_flood(:)))**2 ) &
205 + ((1.-ppsn(:)-pff(:))/(log(puref(:)/pz0(:) ))**2 )
207 pz0_with_snow(:) = puref(:) /exp( sqrt( 1./zwork(:) ) )
209 zwork(:) = ( ppsn(:) /(log(pzref(:)/xz0hsn ))**2 ) &
210 + ( pff(:) /(log(pzref(:)/(pz0_flood(:)/ pz0_o_z0h(:))))**2 ) &
211 + ((1.-ppsn(:)-pff(:))/(log(pzref(:)/(pz0(:)/pz0_o_z0h(:)) ))**2 )
213 pz0h_with_snow(:) = pzref(:) /exp( sqrt( 1./zwork(:) ) )
223 pz0g_without_snow(:) = pz0litter
225 zpff(:)=pff(:)/(1-ppsn(:)+1.e-6)
226 zwork(:) = ( zpff(:) * log(pz0_flood(:)) ) &
227 + ( (1.-zpff(:)) * log(pz0litter(:)) )
228 pz0g_without_snow(:) = exp( zwork(:) )
235 zwork(:) = ( ppalphan(:) /(log(puref(:)/xz0sn ))**2 ) &
236 + ((1.-ppalphan(:))/(log(puref(:)/pz0_mebv(:) ))**2 )
237 pz0_mebn(:) = puref(:) /exp( sqrt( 1./zwork(:) ) )
241 zwork(:) = ( ppsn(:) /(log(puref(:)/pz0_mebn(:) ))**2 ) &
242 + ((1.-ppsn(:))/(log(puref(:)/pz0_mebv(:) ))**2 )
243 pz0_with_snow(:) = puref(:) /exp( sqrt( 1./zwork(:) ) )
246 pz0h_mebv(:) = pz0_mebv(:)/pz0_o_z0h(:)
252 zwork(:) = ( ppalphan(:) /(log(pzref(:)/xz0hsn ))**2 ) &
253 + ( (1.-ppalphan(:))/(log(pzref(:)/pz0h_mebv(:) ))**2 )
254 pz0h_mebn(:) = pzref(:) /exp( sqrt( 1./zwork(:) ) )
258 zwork(:) = ( ppsn(:) /(log(pzref(:)/pz0h_mebn(:) ))**2 ) &
259 + ( (1.-ppsn(:))/(log(pzref(:)/pz0h_mebv(:) ))**2 )
260 pz0h_with_snow(:) = pzref(:) /exp( sqrt( 1./zwork(:) ) )
274 IF (hrough==
'Z04D')
THEN
278 zz0effip(:) = pz0effip(:)
279 zz0effim(:) = pz0effim(:)
280 zz0effjp(:) = pz0effjp(:)
281 zz0effjm(:) = pz0effjm(:)
284 pho2ip,pho2im,pho2jp,pho2jm,pz0_with_snow, &
285 zz0effip,zz0effim,zz0effjp,zz0effjm, &
286 omask=(ppsn>0..OR.pff(:)>0.) )
288 WHERE(zalfa(:)>=0. .AND. zalfa(:)<xpi/2.)
289 pz0eff(:)=zz0effip(:)*sin(zalfa(:))**2 + zz0effjp(:)*cos(zalfa(:))**2
291 WHERE(zalfa(:)>=xpi/2. .AND. zalfa(:)<=xpi)
292 pz0eff(:)=zz0effip(:)*sin(zalfa(:))**2 + zz0effjm(:)*cos(zalfa(:))**2
294 WHERE (zalfa(:)>=-xpi/2 .AND. zalfa(:)<0.)
295 pz0eff(:)=zz0effim(:)*sin(zalfa(:))**2 + zz0effjp(:)*cos(zalfa(:))**2
297 WHERE (zalfa(:)>=-xpi .AND. zalfa(:)<-xpi/2.)
298 pz0eff(:)=zz0effim(:)*sin(zalfa(:))**2 + zz0effjm(:)*cos(zalfa(:))**2
301 ELSE IF (hrough==
'Z01D')
THEN
302 pz0eff(:) = pz0_with_snow(:) + pz0rel(:)
304 pz0eff_mebv(:) = pz0_mebv(:) + pz0rel(:)
305 pz0eff_mebn(:) = pz0_mebn(:) + pz0rel(:)
309 pz0eff(:) = pz0eff(:) - pz0rel(:)
311 pz0eff_mebv(:) = pz0eff_mebv(:) - pz0rel(:)
312 pz0eff_mebn(:) = pz0eff_mebn(:) - pz0rel(:)
317 pz0eff(:) = pz0_with_snow(:)
319 pz0eff_mebv(:) = pz0_mebv(:)
320 pz0eff_mebn(:) = pz0_mebn(:)
323 IF (lhook) CALL dr_hook(
'Z0EFF',1,zhook_handle)
subroutine z0eff(I, HROUGH, OMEB, PALFA, PZREF, PUREF, PZ0, PZ0REL, PPSN, PPALPHAN, PZ0LITTER, PWSNOW, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, PFF, PZ0_FLOOD, PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PZ0_O_Z0H, PZ0_WITH_SNOW, PZ0H_WITH_SNOW, PZ0EFF, PZ0G_WITHOUT_SNOW, PZ0_MEBV, PZ0H_MEBV, PZ0EFF_MEBV, PZ0_MEBN, PZ0H_MEBN, PZ0EFF_MEBN)