7 ptg, ptc, ptv, pvelc, plw, &
10 pustar2, pcd, pch, pri )
64 USE yomhook
,ONLY : lhook, dr_hook
65 USE parkind1
,ONLY : jprb
71 REAL,
DIMENSION(:),
INTENT(IN) :: pz0, pz0h, pz0g, ph_veg, plai
78 REAL,
DIMENSION(:),
INTENT(IN) :: ptg, ptc, ptv, pvelc
84 REAL,
DIMENSION(:),
INTENT(IN) :: plw, pdisph
88 REAL,
DIMENSION(:),
INTENT(OUT) :: pragnc, pgvnc
94 REAL,
DIMENSION(:),
INTENT(OUT) :: pustar2, pcd, pch, pri
104 REAL,
DIMENSION(SIZE(PTG)) :: zdiffh, zk, zpih, zdifft, zrif, zz0hg, zustar
106 REAL(KIND=JPRB) :: zhook_handle
110 REAL,
PARAMETER :: zny = 0.15e-04
111 REAL,
PARAMETER :: zalpha = 4.
114 REAL,
PARAMETER :: zalphaprim = 3.
115 REAL,
PARAMETER :: za = 0.01
116 REAL,
PARAMETER :: zrafa = 9.
125 IF (lhook) CALL dr_hook(
'SURFACE_AIR_MEB',0,zhook_handle)
130 zdiffh(:) = max(ph_veg(:)-pdisph(:),0.1)
132 zk(:) = (xkarman*xkarman)*pvelc(:)*zdiffh(:)/log(zdiffh(:)/pz0(:))
136 zustar(:) = zk(:)/(xkarman*zdiffh(:))
137 pcd(:) = zustar(:)/max(1.,pvelc(:))
138 pustar2(:) = zustar(:)**2
142 pragnc(:)=ph_veg(:)*exp(zalpha)/(zalpha*zk(:))*(exp(-zalpha*pz0g(:)/ph_veg(:)) &
143 -exp(-zalpha*(pdisph(:)+pz0(:))/ph_veg(:)))
164 pri(:) = -xg*ph_veg(:)*(ptg(:)-ptc(:))/(ptg(:)*pvelc(:)*pvelc(:))
170 zpih(:) = sqrt(1. - zrafa*pri(:))
172 zz0hg(:)= pz0g(:)*pz0h(:)/pz0(:)
173 zrif(:) = min(1., pri(:)/xrimax)
174 zpih(:) = (1/(1. + 15*pri(:)*sqrt(1.+5*pri(:))))* &
175 ((1.-zrif(:)) + zrif(:)*(log(zdiffh(:)/pz0g(:))/log(zdiffh(:)/zz0hg(:))) )
178 pragnc(:) = pragnc(:)/zpih(:)
182 pch(:) = 1/(pragnc(:)*max(1., pvelc(:)))
187 pgvnc(:) = (2.*za)*plai(:)/zalphaprim*sqrt(pvelc(:)/plw(:))*(1.-exp(-0.5*zalphaprim))
191 pgvnc(:) = max(1.e-06,pgvnc(:))
195 zdifft(:) = max(1.e-06,ptv(:)-ptc(:))
196 zdifft(:) = sqrt(sqrt(zdifft(:)/plw(:)))
197 pgvnc(:) = pgvnc(:)+zdifft(:)*plai(:)/890.
199 IF (lhook) CALL dr_hook(
'SURFACE_AIR_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)