6 SUBROUTINE mr98 (PZ0SEA, &
7 pta, pexna, prhoa, psst, pexns, pqa, &
11 psfth, psftq, pustar, &
12 pcd, pcdn, pch, pri, presa, pz0hsea )
50 USE modd_csts, ONLY : xpi, xcpd, xg, xkarman
57 USE yomhook
,ONLY : lhook, dr_hook
58 USE parkind1
,ONLY : jprb
65 REAL,
DIMENSION(:),
INTENT(IN) :: pta
66 REAL,
DIMENSION(:),
INTENT(IN) :: pqa
67 REAL,
DIMENSION(:),
INTENT(IN) :: pexna
68 REAL,
DIMENSION(:),
INTENT(IN) :: prhoa
69 REAL,
DIMENSION(:),
INTENT(IN) :: pvmod
70 REAL,
DIMENSION(:),
INTENT(IN) :: pzref
71 REAL,
DIMENSION(:),
INTENT(IN) :: puref
72 REAL,
DIMENSION(:),
INTENT(IN) :: psst
73 REAL,
DIMENSION(:),
INTENT(IN) :: pexns
74 REAL,
DIMENSION(:),
INTENT(IN) :: pps
75 REAL,
INTENT(IN) :: ptt
77 REAL,
DIMENSION(:),
INTENT(INOUT) :: pz0sea
81 REAL,
DIMENSION(:),
INTENT(OUT) :: psfth
82 REAL,
DIMENSION(:),
INTENT(OUT) :: psftq
83 REAL,
DIMENSION(:),
INTENT(OUT) :: pustar
86 REAL,
DIMENSION(:),
INTENT(OUT) :: pqsat
87 REAL,
DIMENSION(:),
INTENT(OUT) :: pcd
88 REAL,
DIMENSION(:),
INTENT(OUT) :: pcdn
89 REAL,
DIMENSION(:),
INTENT(OUT) :: pch
90 REAL,
DIMENSION(:),
INTENT(OUT) :: pri
91 REAL,
DIMENSION(:),
INTENT(OUT) :: presa
92 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0hsea
99 REAL,
DIMENSION(SIZE(PTA)) :: zz0seah, &
103 REAL,
DIMENSION(SIZE(PTA)) :: zqsa, ztha, zdu, zdt, zdq, znu, zwg
114 REAL,
DIMENSION(SIZE(PTA)) :: ztstar, zqstar, ztvstar, &
119 REAL,
DIMENSION(SIZE(PTA)) :: zlmon, zzeta, zpsim, zpsih, zpsiq, &
120 zkhi, zkhic, zpsic, zf, &
121 zpsihstand,zpsimstand,zzetast
154 INTEGER,
PARAMETER :: iitermax = 10
155 REAL(KIND=JPRB) :: zhook_handle
160 IF (lhook) CALL dr_hook(
'MR98',0,zhook_handle)
188 pqsat(:) =
qsat(psst(:),pps(:))
206 zqsa(:) = 0.98 * pqsat(:)
207 ztha(:) = pta(:) / pexna(:)
208 zthvi(:) = ( 1 + 0.61 * pqa(:) ) * ztha(:)
211 zdt(:) = ztha(:) - psst(:) /pexns(:)
212 zdq(:) = pqa(:) - zqsa(:)
214 pustar(:) = max( 0.04 * zdu(:) , 5e-3)
215 ztstar(:) = 0.04 * zdt(:)
216 zqstar(:) = 0.04 * zdq(:)
217 ztvstar(:) = ztstar(:)*(1+0.61*pqa(:)) + 0.61*zqstar(:)*ztha(:)
219 znu(:) = 1.318e-5 + 9.282e-8 * (pta(:) - ptt)
226 DO jiter = 1 , iitermax
231 WHERE (abs(ztvstar(:)) < 1e-6)
235 zlmon(:) = zthvi(:)*pustar(:)*pustar(:)/(ztvstar(:)*xg*xkarman)
236 zzeta(:) = max( pzref(:) / zlmon(:) , -20000.)
237 zzetast(:) = max( zstand / zlmon(:) , -20000.)
241 WHERE(zzeta(:) >= 0.0)
242 zpsim(:) = -4.7*zzeta(:)
245 zpsihstand(:) = -4.7*zzetast(:)
246 zpsimstand(:) = zpsihstand(:)
248 zkhi(:) = (1 - 16 * zzeta(:))**0.25
249 zpsim(:) = 2*log((1+zkhi(:))/2) &
250 + log((1+zkhi(:)*zkhi(:))/2) &
253 zpsih(:) = 2 * log((1+zkhi(:)*zkhi(:))/2)
255 zkhi(:) = (1 - 16 * zzetast(:))**0.25
256 zpsihstand(:) = 2 * log((1+zkhi(:)*zkhi(:))/2)
257 zpsimstand(:) = 2*log((1+zkhi(:))/2) &
258 + log((1+zkhi(:)*zkhi(:))/2) &
264 zkhic(:) = (1 - 12.87 * zzeta(:))**0.33
265 zpsic(:) = 1.5 * log((1+zkhic(:)+zkhic(:)*zkhic(:))/3) &
266 - (3**0.5)*atan((2*zkhic(:)+1)/(3**0.5)) &
269 zf(:) = 1 / (1+ zzeta(:)*zzeta(:))
270 zpsim(:) = zpsim(:)*zf(:) + zpsic(:)*(1-zf(:))
271 zpsih(:) = zpsih(:)*zf(:) + zpsic(:)*(1-zf(:))
274 zkhic(:) = (1 - 12.87 * zzetast(:))**0.33
275 zpsic(:) = 1.5 * log((1+zkhic(:)+zkhic(:)*zkhic(:))/3) &
276 - (3**0.5)*atan((2*zkhic(:)+1)/(3**0.5)) &
279 zf(:) = 1 / (1+ zzetast(:)*zzetast(:))
280 zpsimstand(:) = zpsimstand(:)*zf(:) + zpsic(:)*(1-zf(:))
281 zpsihstand(:) = zpsihstand(:)*zf(:) + zpsic(:)*(1-zf(:))
288 pz0sea(:) = 0.011*pustar(:)*pustar(:)/xg &
289 +0.11*znu(:)/(pustar(:))
292 WHERE(pustar(:) > 0.23)
293 zz0seah(:) = 0.14*znu(:)/(pustar(:)-0.2) + 7e-6
294 zz0seaq(:) = 0.20*znu(:)/(pustar(:)-0.2) + 9e-6
296 zz0seah(:) = 0.015*pustar(:)*pustar(:)/xg &
297 + 0.18*znu(:)/(pustar(:))
298 zz0seaq(:) = 0.0205*pustar(:)*pustar(:)/xg &
299 + 0.294*znu(:)/(pustar(:))
307 zdu(:)*xkarman / (log(pzref(:)/pz0sea(:)) - zpsim(:)) &
310 ztstar(:) = zdt(:)*xkarman / (log(pzref(:)/zz0seah(:)) - zpsih(:))
312 zqstar(:) = zdq(:)*xkarman / (log(pzref(:)/zz0seaq(:)) - zpsiq(:))
314 ztvstar(:) = ztstar(:)*(1+0.61*pqa(:))+0.61*zqstar(:)*ztha(:)
320 zbuflx(:) = -xg*ztvstar(:)*pustar(:)/zthvi(:)
322 WHERE(zbuflx(:) > 0.)
323 zwg(:) = zbeta*(zbuflx(:)*zzbl)**0.333
328 zdu(:) = (pvmod(:)*pvmod(:)+zwg(:)*zwg(:))**0.5
338 psfth(:) = - prhoa(:) * xcpd * pustar(:) * ztstar(:)
339 psftq(:) = - prhoa(:) * pustar(:) * zqstar(:)
340 IF (lhook) CALL dr_hook(
'MR98',1,zhook_handle)
subroutine mr98(PZ0SEA, PTA, PEXNA, PRHOA, PSST, PEXNS, PQA, PTT, PVMOD, PZREF, PUREF, PPS, PQSAT, PSFTH, PSFTQ, PUSTAR, PCD, PCDN, PCH, PRI, PRESA, PZ0HSEA)