6 s d_t, d_q, d_ql, rneb, radliq, rain, snow,
7 s pfrac_impa, pfrac_nucl, pfrac_1nucl,
8 s frac_impa, frac_nucl,
25 #include "tracstoke.h"
31 REAL paprs(klon,
klev+1)
39 REAL radliq(klon,
klev)
42 REAL prfl(klon,
klev+1)
43 REAL psfl(klon,
klev+1)
51 REAL pfrac_nucl(klon,
klev)
52 REAL pfrac_1nucl(klon,
klev)
53 REAL pfrac_impa(klon,
klev)
58 REAL frac_impa(klon,
klev)
59 REAL frac_nucl(klon,
klev)
95 REAL zqs(klon), zdqs(klon), zdelta, zcor, zcvm5
96 REAL zrfl(klon), zrfln(klon), zqev, zqevt
97 REAL zoliq(klon), zcond(klon), zq(klon), zqn(klon), zdelq
98 REAL ztglace, zt(klon)
100 REAL zdz(klon),zrho(klon),
ztot(klon), zrhol(klon)
101 REAL zchau(klon),zfroi(klon),zfice(klon),zneb(klon)
121 REAL zprec_cond(klon)
131 fallv(zzz) = 3.29/2.0 * ((zzz)**0.16)
135 DATA appel1er /.true./
139 WRITE(
lunout,*)
'fisrtilp, calcrat:', calcrat
140 WRITE(
lunout,*)
'fisrtilp, ninter:', ninter
141 WRITE(
lunout,*)
'fisrtilp, evap_prec:', evap_prec
142 WRITE(
lunout,*)
'fisrtilp, cpartiel:', cpartiel
143 IF (abs(
dtime/
REAL(ninter)-360.0).GT.0.001) then
145 $
'fisrtilp: Ce n est pas prevu, voir Z.X.Li',
dtime
146 WRITE(
lunout,*)
'Je prefere un sous-intervalle de 6 minutes'
221 DO 9999
k =
klev, 1, -1
234 IF (zrfl(
i) .GT.0.)
THEN
236 zdelta=max(0.,sign(1.,rtt-zt(
i)))
237 zqs(
i)= r2es*foeew(zt(
i),zdelta)/
pplay(
i,
k)
238 zqs(
i)=min(0.5,zqs(
i))
239 zcor=1./(1.-retv*zqs(
i))
242 IF (zt(
i) .LT. t_coup)
THEN
248 zqev = max(0.0, (zqs(
i)-zq(
i))*zneb(
i) )
249 zqevt = coef_eva * (1.0-zq(
i)/zqs(
i)) * sqrt(zrfl(
i))
251 zqevt = max(0.0,min(zqevt,zrfl(
i)))
253 zqev = min(zqev, zqevt)
254 zrfln(
i) = zrfl(
i) - zqev*(paprs(
i,
k)-paprs(
i,
k+1))
256 zq(
i) = zq(
i) - (zrfln(
i)-zrfl(
i))
258 zt(
i) = zt(
i) + (zrfln(
i)-zrfl(
i))
260 . * rlvtt/rcpd/(1.0+rvtmp2*zq(
i))
270 zdelta = max(0.,sign(1.,rtt-zt(
i)))
271 zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
272 zcvm5 = zcvm5 /rcpd/(1.0+rvtmp2*zq(
i))
273 zqs(
i) = r2es*foeew(zt(
i),zdelta)/
pplay(
i,
k)
274 zqs(
i) = min(0.5,zqs(
i))
275 zcor = 1./(1.-retv*zqs(
i))
277 zdqs(
i) = foede(zt(
i),zdelta,zcvm5,zqs(
i),zcor)
281 IF (zt(
i).LT.t_coup)
THEN
283 zdqs(
i) = dqsats(zt(
i),zqs(
i))
286 zdqs(
i) = dqsatl(zt(
i),zqs(
i))
297 zdelq = ratqs(
i,
k) * zq(
i)
298 rneb(
i,
k) = (zq(
i)+zdelq-zqs(
i)) / (2.0*zdelq)
299 zqn(
i) = (zq(
i)+zdelq+zqs(
i))/2.0
300 IF (rneb(
i,
k) .LE. 0.0) zqn(
i) = 0.0
301 IF (rneb(
i,
k) .GE. 1.0) zqn(
i) = zq(
i)
302 rneb(
i,
k) = max(0.0,min(1.0,rneb(
i,
k)))
303 zcond(
i) = max(0.0,zqn(
i)-zqs(
i))*rneb(
i,
k)/(1.+zdqs(
i))
306 rhcl(
i,
k)=(zqs(
i)+zq(
i)-zdelq)/2./zqs(
i)
307 IF (rneb(
i,
k) .LE. 0.0) rhcl(
i,
k)=zq(
i)/zqs(
i)
308 IF (rneb(
i,
k) .GE. 1.0) rhcl(
i,
k)=1.0
314 IF (zq(
i).GT.zqs(
i))
THEN
319 zcond(
i) = max(0.0,zq(
i)-zqs(
i))/(1.+zdqs(
i))
324 zq(
i) = zq(
i) - zcond(
i)
325 zt(
i) = zt(
i) + zcond(
i) * rlvtt/rcpd
331 IF (rneb(
i,
k).GT.0.0)
THEN
334 zdz(
i) = (paprs(
i,
k)-paprs(
i,
k+1)) / (zrho(
i)*rg)
335 zfice(
i) = 1.0 - (zt(
i)-ztglace) / (273.13-ztglace)
336 zfice(
i) = min(max(zfice(
i),0.0),1.0)
337 zfice(
i) = zfice(
i)**nexpo
338 zneb(
i) = max(rneb(
i,
k), seuil_neb)
339 radliq(
i,
k) = zoliq(
i)/
REAL(ninter+1)
345 IF (rneb(
i,
k).GT.0.0)
THEN
346 zchau(
i) = ct*
dtime/
REAL(ninter) * zoliq(
i)
347 . * (1.0-exp(-(zoliq(
i)/zneb(
i)/
cl)**2)) *(1.-zfice(
i))
348 zrhol(
i) = zrho(
i) * zoliq(
i) / zneb(
i)
349 zfroi(
i) =
dtime/
REAL(ninter)/zdz(
i)*zoliq(
i)
350 . *fallv(zrhol(
i)) * zfice(
i)
352 IF (zneb(
i).EQ.seuil_neb)
ztot(
i) = 0.0
354 zoliq(
i) = max(zoliq(
i)-
ztot(
i), 0.0)
355 radliq(
i,
k) = radliq(
i,
k) + zoliq(
i)/
REAL(ninter+1)
361 IF (rneb(
i,
k).GT.0.0)
THEN
363 zrfl(
i) = zrfl(
i)+ max(zcond(
i)-zoliq(
i),0.0)
366 IF (zt(
i).LT.rtt)
THEN
377 d_t(
i,
k) = zt(
i) - t(
i,
k)
384 zprec_cond(
i) = max(zcond(
i)-zoliq(
i),0.0)
385 . * (paprs(
i,
k)-paprs(
i,
k+1))/rg
386 IF (rneb(
i,
k).GT.0.0.and.zprec_cond(
i).gt.0.)
THEN
388 if (t(
i,
k) .GE. ztglace)
THEN
389 zalpha_tr = a_tr_sca(3)
391 zalpha_tr = a_tr_sca(4)
393 zfrac_lessi = 1. - exp(zalpha_tr*zprec_cond(
i)/zneb(
i))
394 pfrac_nucl(
i,
k)=pfrac_nucl(
i,
k)*(1.-zneb(
i)*zfrac_lessi)
395 frac_nucl(
i,
k)= 1.-zneb(
i)*zfrac_lessi
398 zfrac_lessi = 1. - exp(-zprec_cond(
i)/zneb(
i))
399 pfrac_1nucl(
i,
k)=pfrac_1nucl(
i,
k)*(1.-zneb(
i)*zfrac_lessi)
407 IF (rneb(
i,
k).GT.0.0.and.zprec_cond(
i).gt.0.)
THEN
408 if (t(
i,kk) .GE. ztglace)
THEN
409 zalpha_tr = a_tr_sca(1)
411 zalpha_tr = a_tr_sca(2)
413 zfrac_lessi = 1. - exp(zalpha_tr*zprec_cond(
i)/zneb(
i))
414 pfrac_impa(
i,kk)=pfrac_impa(
i,kk)*(1.-zneb(
i)*zfrac_lessi)
415 frac_impa(
i,kk)= 1.-zneb(
i)*zfrac_lessi
429 IF ((t(
i,1)+d_t(
i,1)) .LT. rtt)
THEN