5 SUBROUTINE nonlocal(knon, paprs, pplay, tsol, beta, u, v, t, q, cd_h, cd_m, &
72 REAL zxt, zxq, zxu, zxv, zxmod, taux, tauy
106 REAL zcor, zdelta, zcvm5, zxqs
107 REAL fac, pblmin, zmzp, term
133 z(i, 1) = rd*t(i, 1)/(0.5*(paprs(i,1)+pplay(i,1)))*(paprs(i,1)-pplay(i,1) &
138 z(i, k) = z(i, k-1) + rd*0.5*(t(i,k-1)+t(i,k))/paprs(i, k)*(pplay(i,k-1 &
145 zdelta = max(0., sign(1.,rtt-tsol(i)))
146 zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
147 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*q(i,1))
148 zxqs = r2es*foeew(tsol(i), zdelta)/paprs(i, 1)
149 zxqs = min(0.5, zxqs)
150 zcor = 1./(1.-retv*zxqs)
153 IF (tsol(i)<t_coup)
THEN
154 zxqs = qsats(tsol(i))/paprs(i, 1)
156 zxqs = qsatl(tsol(i))/paprs(i, 1)
160 zx_alf2 = 1.0 - zx_alf1
161 zxt = (t(i,1)+z(i,1)*
rg/rcpd/(1.+rvtmp2*q(i,1)))*(1.+retv*q(i,1))*zx_alf1 &
162 + (t(i,2)+z(i,2)*
rg/rcpd/(1.+rvtmp2*q(i,2)))*(1.+retv*q(i,2))*zx_alf2
163 zxu = u(i, 1)*zx_alf1 + u(i, 2)*zx_alf2
164 zxv = v(i, 1)*zx_alf1 + v(i, 2)*zx_alf2
165 zxq = q(i, 1)*zx_alf1 + q(i, 2)*zx_alf2
166 zxmod = 1.0 + sqrt(zxu**2+zxv**2)
167 khfs(i) = (tsol(i)*(1.+retv*q(i,1))-zxt)*zxmod*cd_h(i)
168 kqfs(i) = (zxqs-zxq)*zxmod*cd_h(i)*beta(i)
169 heatv(i) = khfs(i) + 0.61*zxt*kqfs(i)
170 taux = zxu*zxmod*cd_m(i)
171 tauy = zxv*zxmod*cd_m(i)
172 ustar(i) = sqrt(taux**2+tauy**2)
173 ustar(i) = max(sqrt(ustar(i)), 0.01)
180 obklen(i) = -t(i, 1)*ustar(i)**3/(
rg*vk*heatv(i))
192 zdu2 = (u(i,k)-u(i,1))**2 + (v(i,k)-v(i,1))**2 + fac*ustar(i)**2
193 zdu2 = max(zdu2, 1.0e-20)
194 ztvd = (t(i,k)+z(i,k)*0.5*
rg/rcpd/(1.+rvtmp2*q(i, &
195 k)))*(1.+retv*q(i,k))
196 ztvu = (t(i,1)-z(i,k)*0.5*
rg/rcpd/(1.+rvtmp2*q(i, &
197 1)))*(1.+retv*q(i,1))
198 rino(i, k) = (z(i,k)-z(i,1))*
rg*(ztvd-ztvu)/(zdu2*0.5*(ztvd+ztvu))
199 IF (rino(i,k)>=ricr)
THEN
200 pblh(i) = z(i, k-1) + (z(i,k-1)-z(i,k))*(ricr-rino(i,k-1))/(rino(i, &
213 IF (check(i)) pblh(i) = z(i, isommet)
220 IF (heatv(i)>0.)
THEN
234 phiminv(i) = (1.-binm*pblh(i)/obklen(i))**onet
235 wm(i) = ustar(i)*phiminv(i)
236 therm(i) = heatv(i)*fak/wm(i)
247 zdu2 = (u(i,k)-u(i,1))**2 + (v(i,k)-v(i,1))**2 + fac*ustar(i)**2
248 zdu2 = max(zdu2, 1.0e-20)
249 ztvd = (t(i,k)+z(i,k)*0.5*
rg/rcpd/(1.+rvtmp2*q(i, &
250 k)))*(1.+retv*q(i,k))
251 ztvu = (t(i,1)+therm(i)-z(i,k)*0.5*
rg/rcpd/(1.+rvtmp2*q(i, &
252 1)))*(1.+retv*q(i,1))
253 rino(i, k) = (z(i,k)-z(i,1))*
rg*(ztvd-ztvu)/(zdu2*0.5*(ztvd+ztvu))
254 IF (rino(i,k)>=ricr)
THEN
255 pblh(i) = z(i, k-1) + (z(i,k-1)-z(i,k))*(ricr-rino(i,k-1))/(rino(i, &
267 IF (check(i)) pblh(i) = z(i, isommet)
274 IF (check(i)) pblh(i) = z(i, isommet)
289 pblmin = 700.0*ustar(i)
290 pblh(i) = max(pblh(i), pblmin)
297 fak1(i) = ustar(i)*pblh(i)*vk
303 zxt = (t(i,1)-z(i,1)*0.5*
rg/rcpd/(1.+rvtmp2*q(i,1)))*(1.+retv*q(i,1))
304 phiminv(i) = (1.-binm*pblh(i)/obklen(i))**onet
305 phihinv(i) = sqrt(1.-binh*pblh(i)/obklen(i))
306 wm(i) = ustar(i)*phiminv(i)
307 fak2(i) = wm(i)*pblh(i)*vk
308 wstr(i) = (heatv(i)*
rg*pblh(i)/zxt)**onet
309 fak3(i) = fakn*wstr(i)/wm(i)
325 IF (zkmin==0.0 .AND. zp(i)>pblh(i)) zp(i) = pblh(i)
326 IF (zm(i)<pblh(i))
THEN
327 zmzp = 0.5*(zm(i)+zp(i))
329 zl(i) = zmzp/obklen(i)
331 IF (zh(i)<=1.0) zzh(i) = (1.-zh(i))**2
350 pblk(i) = fak1(i)*zh(i)*zzh(i)/(1.+betas*zl(i))
352 pblk(i) = fak1(i)*zh(i)*zzh(i)/(betas+zl(i))
355 pcfh(i, k) = pcfm(i, k)
366 IF (zh(i)<sffrac)
THEN
378 term = (1.-betam*zl(i))**onet
379 pblk(i) = fak1(i)*zh(i)*zzh(i)*term
380 pr(i) = term/sqrt(1.-betah*zl(i))
388 pblk(i) = fak2(i)*zh(i)*zzh(i)
389 cgs(i, k) = fak3(i)/(pblh(i)*wm(i))
390 cgh(i, k) = khfs(i)*cgs(i, k)
391 pr(i) = phiminv(i)/phihinv(i) + ccon*fak3(i)/fak
392 cgq(i, k) = kqfs(i)*cgs(i, k)
401 pcfh(i, k) = pblk(i)/pr(i)
subroutine nonlocal(knon, paprs, pplay, tsol, beta, u, v, t, q, cd_h, cd_m, pcfh, pcfm, cgh, cgq)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true