5 SUBROUTINE fisrtilp(dtime,paprs,pplay,t,q,ptconv,ratqs, &
6 d_t, d_q, d_ql, rneb, radliq, rain, snow, &
7 pfrac_impa, pfrac_nucl, pfrac_1nucl, &
8 frac_impa, frac_nucl,
beta, &
10 ztv, zpspsk, ztla, zthl, iflag_cldcon)
33 REAL paprs(klon,
klev+1)
41 REAL radliq(klon,
klev)
45 REAL prfl(klon,
klev+1)
46 REAL psfl(klon,
klev+1)
49 REAL sigma1(klon,
klev),sigma2(klon,
klev)
50 REAL qltot(klon,
klev),ctot(klon,
klev)
51 REAL zpspsk(klon,
klev),ztla(klon,
klev)
54 logical lognormale(klon)
59 REAL pfrac_nucl(klon,
klev)
60 REAL pfrac_1nucl(klon,
klev)
61 REAL pfrac_impa(klon,
klev)
66 REAL frac_impa(klon,
klev)
67 REAL frac_nucl(klon,
klev)
83 logical ptconv(klon,
klev)
85 real zpdf_sig(klon),zpdf_k(klon),zpdf_delta(klon)
86 real zpdf_a(klon),zpdf_b(klon),zpdf_e1(klon),zpdf_e2(klon)
98 REAL zqs(klon), zdqs(klon), zdelta, zcor, zcvm5
99 REAL zrfl(klon), zrfln(klon), zqev, zqevt
100 REAL zoliq(klon), zcond(klon), zq(klon), zqn(klon), zdelq
101 REAL ztglace, zt(klon)
103 REAL zdz(klon),zrho(klon),
ztot , zrhol(klon)
104 REAL zchau ,zfroi ,zfice(klon),zneb(klon)
124 REAL zprec_cond(klon)
129 REAL zmair, zcpair, zcpeau
131 REAL zlh_solid(klon), zm_solid
142 fallvc(zzz) = 3.29/2.0 * ((zzz)**0.16) * ffallv_con
143 fallvs(zzz) = 3.29/2.0 * ((zzz)**0.16) *
ffallv_lsc
145 DATA appel1er /.true./
152 WRITE(
lunout,*)
'fisrtilp, ninter:', ninter
153 WRITE(
lunout,*)
'fisrtilp, evap_prec:', evap_prec
154 WRITE(
lunout,*)
'fisrtilp, cpartiel:', cpartiel
155 IF (abs(
dtime/
REAL(ninter)-360.0).GT.0.001) then
156 WRITE(
lunout,*)
'fisrtilp: Ce n est pas prevu, voir Z.X.Li',
dtime
157 WRITE(
lunout,*)
'Je prefere un sous-intervalle de 6 minutes'
259 zmair=(paprs(
i,
k)-paprs(
i,
k+1))/rg
260 zcpair=rcpd*(1.0+rvtmp2*zq(
i))
262 zt(
i) = ( (t(
i,
k+1)+d_t(
i,
k+1))*zrfl(
i)*
dtime*zcpeau &
263 + zmair*zcpair*zt(
i) ) &
264 / (zmair*zcpair + zrfl(
i)*
dtime*zcpeau)
276 IF (zrfl(
i) .GT.0.)
THEN
278 zdelta=max(0.,sign(1.,rtt-zt(
i)))
279 zqs(
i)= r2es*foeew(zt(
i),zdelta)/
pplay(
i,
k)
280 zqs(
i)=min(0.5,zqs(
i))
281 zcor=1./(1.-retv*zqs(
i))
284 IF (zt(
i) .LT. t_coup)
THEN
290 zqev = max(0.0, (zqs(
i)-zq(
i))*zneb(
i) )
291 zqevt = coef_eva * (1.0-zq(
i)/zqs(
i)) * sqrt(zrfl(
i)) &
293 zqevt = max(0.0,min(zqevt,zrfl(
i))) &
295 zqev = min(zqev, zqevt)
296 zrfln(
i) = zrfl(
i) - zqev*(paprs(
i,
k)-paprs(
i,
k+1)) &
304 IF (zt(
i) .LT. t_coup.and.reevap_ice) zrfln(
i)=0.
306 zq(
i) = zq(
i) - (zrfln(
i)-zrfl(
i)) &
308 zt(
i) = zt(
i) + (zrfln(
i)-zrfl(
i)) &
310 * rlvtt/rcpd/(1.0+rvtmp2*zq(
i))
320 zdelta = max(0.,sign(1.,rtt-zt(
i)))
321 zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
322 zcvm5 = zcvm5 /rcpd/(1.0+rvtmp2*zq(
i))
323 zqs(
i) = r2es*foeew(zt(
i),zdelta)/
pplay(
i,
k)
324 zqs(
i) = min(0.5,zqs(
i))
325 zcor = 1./(1.-retv*zqs(
i))
327 zdqs(
i) = foede(zt(
i),zdelta,zcvm5,zqs(
i),zcor)
331 IF (zt(
i).LT.t_coup)
THEN
333 zdqs(
i) = dqsats(zt(
i),zqs(
i))
336 zdqs(
i) = dqsatl(zt(
i),zqs(
i))
359 if (iflag_pdf.eq.0)
then
362 zdelq = min(ratqs(
i,
k),0.99) * zq(
i)
363 rneb(
i,
k) = (zq(
i)+zdelq-zqs(
i)) / (2.0*zdelq)
364 zqn(
i) = (zq(
i)+zdelq+zqs(
i))/2.0
371 if(zq(
i).lt.1.e-15)
then
377 if (iflag_cldcon>=5)
then
381 qcloud,ctot,zpspsk,paprs,ztla,zthl, &
391 if (iflag_cldcon <= 4)
then
393 elseif (iflag_cldcon >= 6)
then
395 lognormale =
fraca(:,
k) < 1e-10
403 if (lognormale(
i))
then
404 zpdf_sig(
i)=ratqs(
i,
k)*zq(
i)
405 zpdf_k(
i)=-sqrt(log(1.+(zpdf_sig(
i)/zq(
i))**2))
406 zpdf_delta(
i)=log(zq(
i)/zqs(
i))
407 zpdf_a(
i)=zpdf_delta(
i)/(zpdf_k(
i)*sqrt(2.))
408 zpdf_b(
i)=zpdf_k(
i)/(2.*sqrt(2.))
409 zpdf_e1(
i)=zpdf_a(
i)-zpdf_b(
i)
410 zpdf_e1(
i)=sign(min(abs(zpdf_e1(
i)),5.),zpdf_e1(
i))
411 zpdf_e1(
i)=1.-erf(zpdf_e1(
i))
412 zpdf_e2(
i)=zpdf_a(
i)+zpdf_b(
i)
413 zpdf_e2(
i)=sign(min(abs(zpdf_e2(
i)),5.),zpdf_e2(
i))
414 zpdf_e2(
i)=1.-erf(zpdf_e2(
i))
419 if (lognormale(
i))
then
420 if (zpdf_e1(
i).lt.1.e-10)
then
424 rneb(
i,
k)=0.5*zpdf_e1(
i)
425 zqn(
i)=zq(
i)*zpdf_e2(
i)/zpdf_e1(
i)
435 IF (rneb(
i,
k) .LE. 0.0)
THEN
439 rhcl(
i,
k)=zq(
i)/zqs(
i)
440 ELSE IF (rneb(
i,
k) .GE. 1.0)
THEN
443 zcond(
i) = max(0.0,zqn(
i)-zqs(
i))/(1+zdqs(
i))
446 zcond(
i) = max(0.0,zqn(
i)-zqs(
i))*rneb(
i,
k)/(1+zdqs(
i))
447 rhcl(
i,
k)=(zqs(
i)+zq(
i)-zdelq)/2./zqs(
i)
468 IF (zq(
i).GT.zqs(
i))
THEN
473 zcond(
i) = max(0.0,zq(
i)-zqs(
i))/(1.+zdqs(
i))
478 zq(
i) = zq(
i) - zcond(
i)
480 zt(
i) = zt(
i) + zcond(
i) * rlvtt/rcpd/(1.0+rvtmp2*zq(
i))
486 IF (rneb(
i,
k).GT.0.0)
THEN
489 zdz(
i) = (paprs(
i,
k)-paprs(
i,
k+1)) / (zrho(
i)*rg)
490 zfice(
i) = 1.0 - (zt(
i)-ztglace) / (273.13-ztglace)
491 zfice(
i) = min(max(zfice(
i),0.0),1.0)
492 zfice(
i) = zfice(
i)**nexpo
493 zneb(
i) = max(rneb(
i,
k), seuil_neb)
494 radliq(
i,
k) = zoliq(
i)/
REAL(ninter+1)
500 IF (rneb(
i,
k).GT.0.0)
THEN
501 zrhol(
i) = zrho(
i) * zoliq(
i) / zneb(
i)
503 IF (zneb(
i).EQ.seuil_neb)
THEN
508 if (ptconv(
i,
k))
then
511 zfroi =
dtime/
REAL(ninter)/zdz(
i)*zoliq(
i) &
512 *fallvc(zrhol(
i)) * zfice(
i)
516 zfroi =
dtime/
REAL(ninter)/zdz(
i)*zoliq(
i) &
517 *fallvs(zrhol(
i)) * zfice(
i)
519 zchau = zct *
dtime/
REAL(ninter) * zoliq(
i) &
520 *(1.0-exp(-(zoliq(
i)/zneb(
i)/zcl )**2)) *(1.-zfice(
i))
525 zoliq(
i) = max(zoliq(
i)-
ztot , 0.0)
526 radliq(
i,
k) = radliq(
i,
k) + zoliq(
i)/
REAL(ninter+1)
532 IF (rneb(
i,
k).GT.0.0)
THEN
534 zrfl(
i) = zrfl(
i)+ max(zcond(
i)-zoliq(
i),0.0) &
537 IF (zt(
i).LT.rtt)
THEN
548 d_t(
i,
k) = zt(
i) - t(
i,
k)
555 if(zcond(
i).gt.zoliq(
i)+1.e-10)
then
560 zprec_cond(
i) = max(zcond(
i)-zoliq(
i),0.0) &
561 * (paprs(
i,
k)-paprs(
i,
k+1))/rg
562 IF (rneb(
i,
k).GT.0.0.and.zprec_cond(
i).gt.0.)
THEN
564 if (t(
i,
k) .GE. ztglace)
THEN
565 zalpha_tr = a_tr_sca(3)
567 zalpha_tr = a_tr_sca(4)
569 zfrac_lessi = 1. - exp(zalpha_tr*zprec_cond(
i)/zneb(
i))
570 pfrac_nucl(
i,
k)=pfrac_nucl(
i,
k)*(1.-zneb(
i)*zfrac_lessi)
571 frac_nucl(
i,
k)= 1.-zneb(
i)*zfrac_lessi
574 zfrac_lessi = 1. - exp(-zprec_cond(
i)/zneb(
i))
575 pfrac_1nucl(
i,
k)=pfrac_1nucl(
i,
k)*(1.-zneb(
i)*zfrac_lessi)
583 IF (rneb(
i,
k).GT.0.0.and.zprec_cond(
i).gt.0.)
THEN
584 if (t(
i,kk) .GE. ztglace)
THEN
585 zalpha_tr = a_tr_sca(1)
587 zalpha_tr = a_tr_sca(2)
589 zfrac_lessi = 1. - exp(zalpha_tr*zprec_cond(
i)/zneb(
i))
590 pfrac_impa(
i,kk)=pfrac_impa(
i,kk)*(1.-zneb(
i)*zfrac_lessi)
591 frac_impa(
i,kk)= 1.-zneb(
i)*zfrac_lessi
605 IF ((t(
i,1)+d_t(
i,1)) .LT. rtt)
THEN
607 zlh_solid(
i) = rlstt-rlvtt
618 zcpair=rcpd*(1.0+rvtmp2*(
q(
i,
k)+d_q(
i,
k)))
619 zmair=(paprs(
i,
k)-paprs(
i,
k+1))/rg
620 zm_solid = (prfl(
i,
k)-prfl(
i,
k+1)+psfl(
i,
k)-psfl(
i,
k+1))*
dtime
621 d_t(
i,
k) = d_t(
i,
k) + zlh_solid(
i) *zm_solid / (zcpair*zmair)
627 WRITE(
lunout,*)
'WARNING : ZQ dans fisrtilp ',ncoreczq,
' val < 1.e-15.'