5 SUBROUTINE fisrtilp_tr(dtime, paprs, pplay, t, q, ratqs, d_t, d_q, d_ql, &
6 rneb, radliq, rain, snow, pfrac_impa, pfrac_nucl, pfrac_1nucl, frac_impa, &
7 frac_nucl, prfl, psfl, rhcl)
90 REAL zqs(
klon), zdqs(
klon), zdelta, zcor, zcvm5
91 REAL zrfl(
klon), zrfln(
klon), zqev, zqevt
93 REAL ztglace, zt(
klon)
116 REAL zprec_cond(
klon)
126 fallv(zzz) = 3.29/2.0*((zzz)**0.16)
130 DATA appel1er/.
true./
134 WRITE (
lunout, *)
'fisrtilp, calcrat:', calcrat
135 WRITE (
lunout, *)
'fisrtilp, ninter:', ninter
136 WRITE (
lunout, *)
'fisrtilp, evap_prec:', evap_prec
137 WRITE (
lunout, *)
'fisrtilp, cpartiel:', cpartiel
138 IF (abs(dtime/
real(ninter)-360.0)>0.001) then
139 WRITE (
lunout, *)
'fisrtilp: Ce n est pas prevu, voir Z.X.Li', dtime
140 WRITE (
lunout, *)
'Je prefere un sous-intervalle de 6 minutes'
155 pfrac_nucl(i, k) = 1.
156 pfrac_1nucl(i, k) = 1.
157 pfrac_impa(i, k) = 1.
230 zdelta = max(0., sign(1.,rtt-zt(i)))
231 zqs(i) = r2es*foeew(zt(i), zdelta)/pplay(i, k)
232 zqs(i) = min(0.5, zqs(i))
233 zcor = 1./(1.-retv*zqs(i))
236 IF (zt(i)<t_coup)
THEN
237 zqs(i) = qsats(zt(i))/pplay(i, k)
239 zqs(i) = qsatl(zt(i))/pplay(i, k)
242 zqev = max(0.0, (zqs(i)-zq(i))*zneb(i))
243 zqevt = coef_eva*(1.0-zq(i)/zqs(i))*sqrt(zrfl(i))* &
244 (paprs(i,k)-paprs(i,k+1))/pplay(i, k)*zt(i)*rd/
rg
245 zqevt = max(0.0, min(zqevt,zrfl(i)))*
rg*dtime/ &
246 (paprs(i,k)-paprs(i,k+1))
247 zqev = min(zqev, zqevt)
248 zrfln(i) = zrfl(i) - zqev*(paprs(i,k)-paprs(i,k+1))/
rg/dtime
249 zq(i) = zq(i) - (zrfln(i)-zrfl(i))*(
rg/(paprs(i,k)-paprs(i, &
251 zt(i) = zt(i) + (zrfln(i)-zrfl(i))*(
rg/(paprs(i,k)-paprs(i, &
252 k+1)))*dtime*rlvtt/rcpd/(1.0+rvtmp2*zq(i))
262 zdelta = max(0., sign(1.,rtt-zt(i)))
263 zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
264 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*zq(i))
265 zqs(i) = r2es*foeew(zt(i), zdelta)/pplay(i, k)
266 zqs(i) = min(0.5, zqs(i))
267 zcor = 1./(1.-retv*zqs(i))
269 zdqs(i) = foede(zt(i), zdelta, zcvm5, zqs(i), zcor)
273 IF (zt(i)<t_coup)
THEN
274 zqs(i) = qsats(zt(i))/pplay(i, k)
275 zdqs(i) = dqsats(zt(i), zqs(i))
277 zqs(i) = qsatl(zt(i))/pplay(i, k)
278 zdqs(i) = dqsatl(zt(i), zqs(i))
289 zdelq = ratqs(i, k)*zq(i)
290 rneb(i, k) = (zq(i)+zdelq-zqs(i))/(2.0*zdelq)
291 zqn(i) = (zq(i)+zdelq+zqs(i))/2.0
292 IF (rneb(i,k)<=0.0) zqn(i) = 0.0
293 IF (rneb(i,k)>=1.0) zqn(i) = zq(i)
294 rneb(i, k) = max(0.0, min(1.0,rneb(i,k)))
295 zcond(i) = max(0.0, zqn(i)-zqs(i))*rneb(i, k)/(1.+zdqs(i))
298 rhcl(i, k) = (zqs(i)+zq(i)-zdelq)/2./zqs(i)
299 IF (rneb(i,k)<=0.0) rhcl(i, k) = zq(i)/zqs(i)
300 IF (rneb(i,k)>=1.0) rhcl(i, k) = 1.0
306 IF (zq(i)>zqs(i))
THEN
311 zcond(i) = max(0.0, zq(i)-zqs(i))/(1.+zdqs(i))
316 zq(i) = zq(i) - zcond(i)
317 zt(i) = zt(i) + zcond(i)*rlvtt/rcpd
323 IF (rneb(i,k)>0.0)
THEN
325 zrho(i) = pplay(i, k)/zt(i)/rd
326 zdz(i) = (paprs(i,k)-paprs(i,k+1))/(zrho(i)*
rg)
327 zfice(i) = 1.0 - (zt(i)-ztglace)/(273.13-ztglace)
328 zfice(i) = min(max(zfice(i),0.0), 1.0)
329 zfice(i) = zfice(i)**nexpo
330 zneb(i) = max(rneb(i,k), seuil_neb)
331 radliq(i, k) = zoliq(i)/
real(ninter+1)
337 IF (rneb(i,k)>0.0)
THEN
338 zchau(i) = ct*dtime/
real(ninter)*zoliq(i)* &
339 (1.0-exp(-(zoliq(i)/zneb(i)/cl)**2))*(1.-zfice(i))
340 zrhol(i) = zrho(i)*zoliq(i)/zneb(i)
341 zfroi(i) = dtime/
real(ninter)/zdz(i)*zoliq(i)*fallv(zrhol(i))* &
343 ztot(i) = zchau(i) + zfroi(i)
344 IF (zneb(i)==seuil_neb) ztot(i) = 0.0
345 ztot(i) = min(max(ztot(i),0.0), zoliq(i))
346 zoliq(i) = max(zoliq(i)-ztot(i), 0.0)
347 radliq(i, k) = radliq(i, k) + zoliq(i)/
real(ninter+1)
353 IF (rneb(i,k)>0.0)
THEN
354 d_ql(i, k) = zoliq(i)
355 zrfl(i) = zrfl(i) + max(zcond(i)-zoliq(i), 0.0)*(paprs(i,k)-paprs(i,k &
368 d_q(i, k) = zq(i) - q(i, k)
369 d_t(i, k) = zt(i) - t(i, k)
376 zprec_cond(i) = max(zcond(i)-zoliq(i), 0.0)*(paprs(i,k)-paprs(i,k+1))/ &
378 IF (rneb(i,k)>0.0 .AND. zprec_cond(i)>0.)
THEN
380 IF (t(i,k)>=ztglace)
THEN
381 zalpha_tr = a_tr_sca(3)
383 zalpha_tr = a_tr_sca(4)
385 zfrac_lessi = 1. - exp(zalpha_tr*zprec_cond(i)/zneb(i))
386 pfrac_nucl(i, k) = pfrac_nucl(i, k)*(1.-zneb(i)*zfrac_lessi)
387 frac_nucl(i, k) = 1. - zneb(i)*zfrac_lessi
390 zfrac_lessi = 1. - exp(-zprec_cond(i)/zneb(i))
391 pfrac_1nucl(i, k) = pfrac_1nucl(i, k)*(1.-zneb(i)*zfrac_lessi)
399 IF (rneb(i,k)>0.0 .AND. zprec_cond(i)>0.)
THEN
400 IF (t(i,kk)>=ztglace)
THEN
401 zalpha_tr = a_tr_sca(1)
403 zalpha_tr = a_tr_sca(2)
405 zfrac_lessi = 1. - exp(zalpha_tr*zprec_cond(i)/zneb(i))
406 pfrac_impa(i, kk) = pfrac_impa(i, kk)*(1.-zneb(i)*zfrac_lessi)
407 frac_impa(i, kk) = 1. - zneb(i)*zfrac_lessi
421 IF ((t(i,1)+d_t(i,1))<rtt)
THEN
subroutine fisrtilp_tr(dtime, paprs, pplay, t, q, ratqs, d_t, d_q, d_ql, rneb, radliq, rain, snow, pfrac_impa, pfrac_nucl, pfrac_1nucl, frac_impa, frac_nucl, prfl, psfl, rhcl)
!$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
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout