source: LMDZ5/trunk/libf/phylmd/fisrtilp.F @ 1479

Last change on this file since 1479 was 1479, checked in by Laurent Fairhead, 13 years ago

Un peu de ménage sur les prints


A little cleanup on the prints

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 18.2 KB
RevLine 
[524]1!
[1403]2! $Id: fisrtilp.F 1479 2011-01-28 14:32:46Z fairhead $
[524]3!
4c
5      SUBROUTINE fisrtilp(dtime,paprs,pplay,t,q,ptconv,ratqs,
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,
[1403]9     s                   prfl, psfl, rhcl, zqta, fraca,
10     s                   ztv, zpspsk, ztla, zthl, iflag_cldcon)
[524]11
12c
[766]13      USE dimphy
[524]14      IMPLICIT none
15c======================================================================
16c Auteur(s): Z.X. Li (LMD/CNRS)
17c Date: le 20 mars 1995
18c Objet: condensation et precipitation stratiforme.
19c        schema de nuage
20c======================================================================
21c======================================================================
[766]22cym#include "dimensions.h"
23cym#include "dimphy.h"
[524]24#include "YOMCST.h"
25#include "tracstoke.h"
26#include "fisrtilp.h"
[1479]27#include "iniprint.h"
[524]28c
29c Arguments:
30c
31      REAL dtime ! intervalle du temps (s)
32      REAL paprs(klon,klev+1) ! pression a inter-couche
33      REAL pplay(klon,klev) ! pression au milieu de couche
34      REAL t(klon,klev) ! temperature (K)
35      REAL q(klon,klev) ! humidite specifique (kg/kg)
36      REAL d_t(klon,klev) ! incrementation de la temperature (K)
37      REAL d_q(klon,klev) ! incrementation de la vapeur d'eau
38      REAL d_ql(klon,klev) ! incrementation de l'eau liquide
39      REAL rneb(klon,klev) ! fraction nuageuse
40      REAL radliq(klon,klev) ! eau liquide utilisee dans rayonnements
41      REAL rhcl(klon,klev) ! humidite relative en ciel clair
42      REAL rain(klon) ! pluies (mm/s)
43      REAL snow(klon) ! neige (mm/s)
44      REAL prfl(klon,klev+1) ! flux d'eau precipitante aux interfaces (kg/m2/s)
[1403]45      REAL psfl(klon,klev+1) ! flux d'eau precipitante aux interfaces (kg/m2/s)
46      REAL ztv(klon,klev)
47      REAL zqta(klon,klev),fraca(klon,klev)
48      REAL sigma1(klon,klev),sigma2(klon,klev)
49      REAL qltot(klon,klev),ctot(klon,klev)
50      REAL zpspsk(klon,klev),ztla(klon,klev)
51      REAL zthl(klon,klev)
52
[1411]53      logical lognormale(klon)
54
[524]55cAA
56c Coeffients de fraction lessivee : pour OFF-LINE
57c
58      REAL pfrac_nucl(klon,klev)
59      REAL pfrac_1nucl(klon,klev)
60      REAL pfrac_impa(klon,klev)
61c
62c Fraction d'aerosols lessivee par impaction et par nucleation
63c POur ON-LINE
64c
65      REAL frac_impa(klon,klev)
66      REAL frac_nucl(klon,klev)
[1279]67      real zct      ,zcl
[524]68cAA
69c
70c Options du programme:
71c
72      REAL seuil_neb ! un nuage existe vraiment au-dela
73      PARAMETER (seuil_neb=0.001)
74
75      INTEGER ninter ! sous-intervals pour la precipitation
[1403]76      INTEGER ncoreczq 
77      INTEGER iflag_cldcon
[524]78      PARAMETER (ninter=5)
79      LOGICAL evap_prec ! evaporation de la pluie
80      PARAMETER (evap_prec=.TRUE.)
81      REAL ratqs(klon,klev) ! determine la largeur de distribution de vapeur
82      logical ptconv(klon,klev) ! determine la largeur de distribution de vapeur
83
84      real zpdf_sig(klon),zpdf_k(klon),zpdf_delta(klon)
85      real Zpdf_a(klon),zpdf_b(klon),zpdf_e1(klon),zpdf_e2(klon)
[1403]86      real erf   
87      REAL qcloud(klon)
[524]88c
89      LOGICAL cpartiel ! condensation partielle
90      PARAMETER (cpartiel=.TRUE.)
91      REAL t_coup
92      PARAMETER (t_coup=234.0)
93c
94c Variables locales:
95c
96      INTEGER i, k, n, kk
[1403]97      REAL zqs(klon), zdqs(klon), zdelta, zcor, zcvm5   
[524]98      REAL zrfl(klon), zrfln(klon), zqev, zqevt
99      REAL zoliq(klon), zcond(klon), zq(klon), zqn(klon), zdelq
100      REAL ztglace, zt(klon)
101      INTEGER nexpo ! exponentiel pour glace/eau
[1279]102      REAL zdz(klon),zrho(klon),ztot      , zrhol(klon)
103      REAL zchau      ,zfroi      ,zfice(klon),zneb(klon)
[524]104c
105      LOGICAL appel1er
106      SAVE appel1er
[766]107c$OMP THREADPRIVATE(appel1er)
[524]108c
109c---------------------------------------------------------------
110c
111cAA Variables traceurs:
112cAA  Provisoire !!! Parametres alpha du lessivage
113cAA  A priori on a 4 scavenging # possibles
114c
115      REAL a_tr_sca(4)
116      save a_tr_sca
[766]117c$OMP THREADPRIVATE(a_tr_sca)
[524]118c
119c Variables intermediaires
120c
121      REAL zalpha_tr
122      REAL zfrac_lessi
123      REAL zprec_cond(klon)
124cAA
125      REAL zmair, zcpair, zcpeau
126C     Pour la conversion eau-neige
127      REAL zlh_solid(klon), zm_solid
128cIM
[766]129cym      INTEGER klevm1
[524]130c---------------------------------------------------------------
131c
132c Fonctions en ligne:
133c
134      REAL fallvs,fallvc ! vitesse de chute pour crystaux de glace
135      REAL zzz
136#include "YOETHF.h"
137#include "FCTTRE.h"
138      fallvc (zzz) = 3.29/2.0 * ((zzz)**0.16) * ffallv_con
139      fallvs (zzz) = 3.29/2.0 * ((zzz)**0.16) * ffallv_lsc
140c
141      DATA appel1er /.TRUE./
[559]142cym
143      zdelq=0.0
144     
[1479]145      if (prt_level>9)write(lunout,*)'NUAGES4 A. JAM'
[524]146      IF (appel1er) THEN
147c
148         PRINT*, 'fisrtilp, ninter:', ninter
149         PRINT*, 'fisrtilp, evap_prec:', evap_prec
150         PRINT*, 'fisrtilp, cpartiel:', cpartiel
[1403]151         IF (ABS(dtime/REAL(ninter)-360.0).GT.0.001) THEN
[524]152          PRINT*, 'fisrtilp: Ce n est pas prevu, voir Z.X.Li', dtime
153          PRINT*, 'Je prefere un sous-intervalle de 6 minutes'
154c         CALL abort
155         ENDIF
156         appel1er = .FALSE.
157c
158cAA initialiation provisoire
159       a_tr_sca(1) = -0.5
160       a_tr_sca(2) = -0.5
161       a_tr_sca(3) = -0.5
162       a_tr_sca(4) = -0.5
163c
164cAA Initialisation a 1 des coefs des fractions lessivees
165c
[1279]166!cdir collapse
[524]167      DO k = 1, klev
168       DO i = 1, klon
169          pfrac_nucl(i,k)=1.
170          pfrac_1nucl(i,k)=1.
171          pfrac_impa(i,k)=1.
172       ENDDO
173      ENDDO
174
175      ENDIF          !  test sur appel1er
176c
177cMAf Initialisation a 0 de zoliq
[1279]178c      DO i = 1, klon
179c         zoliq(i)=0.
180c      ENDDO
[524]181c Determiner les nuages froids par leur temperature
182c  nexpo regle la raideur de la transition eau liquide / eau glace.
183c
184      ztglace = RTT - 15.0
185      nexpo = 6
186ccc      nexpo = 1
187c
188c Initialiser les sorties:
189c
[1279]190!cdir collapse
[524]191      DO k = 1, klev+1
192      DO i = 1, klon
193         prfl(i,k) = 0.0
194         psfl(i,k) = 0.0
195      ENDDO
196      ENDDO
197
[1279]198!cdir collapse
[524]199      DO k = 1, klev
200      DO i = 1, klon
201         d_t(i,k) = 0.0
202         d_q(i,k) = 0.0
203         d_ql(i,k) = 0.0
204         rneb(i,k) = 0.0
205         radliq(i,k) = 0.0
206         frac_nucl(i,k) = 1.
207         frac_impa(i,k) = 1.
208      ENDDO
209      ENDDO
210      DO i = 1, klon
211         rain(i) = 0.0
212         snow(i) = 0.0
[1279]213         zoliq(i)=0.
214c     ENDDO
[524]215c
216c Initialiser le flux de precipitation a zero
217c
[1279]218c     DO i = 1, klon
[524]219         zrfl(i) = 0.0
220         zneb(i) = seuil_neb
221      ENDDO
222c
223c
224cAA Pour plus de securite
225
226      zalpha_tr   = 0.
227      zfrac_lessi = 0.
228
229cAA----------------------------------------------------------
230c
[883]231      ncoreczq=0
[524]232c Boucle verticale (du haut vers le bas)
233c
234cIM : klevm1
[766]235cym      klevm1=klev-1
[524]236      DO 9999 k = klev, 1, -1
237c
238cAA----------------------------------------------------------
239c
240      DO i = 1, klon
241         zt(i)=t(i,k)
242         zq(i)=q(i,k)
243      ENDDO
244c
245c Calculer la varition de temp. de l'air du a la chaleur sensible
246C transporter par la pluie.
247C Il resterait a rajouter cet effet de la chaleur sensible sur les
248C flux de surface, du a la diff. de temp. entre le 1er niveau et la
249C surface.
250C
[1146]251      IF(k.LE.klevm1) THEN         
252         DO i = 1, klon
[524]253cIM
[1146]254            zmair=(paprs(i,k)-paprs(i,k+1))/RG
255            zcpair=RCPD*(1.0+RVTMP2*zq(i))
256            zcpeau=RCPD*RVTMP2
257            zt(i) = ( (t(i,k+1)+d_t(i,k+1))*zrfl(i)*dtime*zcpeau
258     $           + zmair*zcpair*zt(i) )
259     $           / (zmair*zcpair + zrfl(i)*dtime*zcpeau)
260C     C        WRITE (6,*) 'cppluie ', zt(i)-(t(i,k+1)+d_t(i,k+1))
261         ENDDO
262      ENDIF
[524]263c
264c
265c Calculer l'evaporation de la precipitation
266c
267
268
269      IF (evap_prec) THEN
270      DO i = 1, klon
271      IF (zrfl(i) .GT.0.) THEN
272         IF (thermcep) THEN
273           zdelta=MAX(0.,SIGN(1.,RTT-zt(i)))
274           zqs(i)= R2ES*FOEEW(zt(i),zdelta)/pplay(i,k)
275           zqs(i)=MIN(0.5,zqs(i))
276           zcor=1./(1.-RETV*zqs(i))
277           zqs(i)=zqs(i)*zcor
278         ELSE
279           IF (zt(i) .LT. t_coup) THEN
280              zqs(i) = qsats(zt(i)) / pplay(i,k)
281           ELSE
282              zqs(i) = qsatl(zt(i)) / pplay(i,k)
283           ENDIF
284         ENDIF
285         zqev = MAX (0.0, (zqs(i)-zq(i))*zneb(i) )
286         zqevt = coef_eva * (1.0-zq(i)/zqs(i)) * SQRT(zrfl(i))
287     .         * (paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG
288         zqevt = MAX(0.0,MIN(zqevt,zrfl(i)))
289     .         * RG*dtime/(paprs(i,k)-paprs(i,k+1))
290         zqev = MIN (zqev, zqevt)
291         zrfln(i) = zrfl(i) - zqev*(paprs(i,k)-paprs(i,k+1))
292     .                            /RG/dtime
293
[766]294c pour la glace, on r�vapore toute la pr�ip dans la couche du dessous
[524]295c la glace venant de la couche du dessus est simplement dans la couche
296c du dessous.
297
298         IF (zt(i) .LT. t_coup.and.reevap_ice) zrfln(i)=0.
299
300         zq(i) = zq(i) - (zrfln(i)-zrfl(i))
301     .             * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime
302         zt(i) = zt(i) + (zrfln(i)-zrfl(i))
303     .             * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime
304     .             * RLVTT/RCPD/(1.0+RVTMP2*zq(i))
305         zrfl(i) = zrfln(i)
306      ENDIF
307      ENDDO
308      ENDIF
309c
310c Calculer Qs et L/Cp*dQs/dT:
311c
312      IF (thermcep) THEN
313         DO i = 1, klon
314           zdelta = MAX(0.,SIGN(1.,RTT-zt(i)))
315           zcvm5 = R5LES*RLVTT*(1.-zdelta) + R5IES*RLSTT*zdelta
316           zcvm5 = zcvm5 /RCPD/(1.0+RVTMP2*zq(i))
317           zqs(i) = R2ES*FOEEW(zt(i),zdelta)/pplay(i,k)
318           zqs(i) = MIN(0.5,zqs(i))
319           zcor = 1./(1.-RETV*zqs(i))
320           zqs(i) = zqs(i)*zcor
321           zdqs(i) = FOEDE(zt(i),zdelta,zcvm5,zqs(i),zcor)
322         ENDDO
323      ELSE
324         DO i = 1, klon
325            IF (zt(i).LT.t_coup) THEN
326               zqs(i) = qsats(zt(i))/pplay(i,k)
327               zdqs(i) = dqsats(zt(i),zqs(i))
328            ELSE
329               zqs(i) = qsatl(zt(i))/pplay(i,k)
330               zdqs(i) = dqsatl(zt(i),zqs(i))
331            ENDIF
332         ENDDO
333      ENDIF
334c
335c Determiner la condensation partielle et calculer la quantite
336c de l'eau condensee:
337c
[1403]338
[524]339      IF (cpartiel) THEN
340
341c        print*,'Dans partiel k=',k
342c
343c   Calcul de l'eau condensee et de la fraction nuageuse et de l'eau
344c   nuageuse a partir des PDF de Sandrine Bony.
345c   rneb  : fraction nuageuse
346c   zqn   : eau totale dans le nuage
347c   zcond : eau condensee moyenne dans la maille.
[766]348c           on prend en compte le r�hauffement qui diminue la partie condensee
[524]349c
350c   Version avec les raqts
351
352         if (iflag_pdf.eq.0) then
353
354           do i=1,klon
355            zdelq = min(ratqs(i,k),0.99) * zq(i)
356            rneb(i,k) = (zq(i)+zdelq-zqs(i)) / (2.0*zdelq)
357            zqn(i) = (zq(i)+zdelq+zqs(i))/2.0
358           enddo
359
360         else
361c
362c   Version avec les nouvelles PDFs.
363           do i=1,klon
364              if(zq(i).lt.1.e-15) then
[883]365                ncoreczq=ncoreczq+1
[524]366                zq(i)=1.e-15
367              endif
[1403]368           enddo
369
[1411]370              if (iflag_cldcon>=5) then
[1403]371
372                 call cloudth(klon,klev,k,ztv,
373     .           zq,zqta,fraca,
374     .           qcloud,ctot,zpspsk,paprs,ztla,zthl,
375     .           ratqs,zqs,t)
376
377                 do i=1,klon
378                 rneb(i,k)=ctot(i,k)
379                 zqn(i)=qcloud(i)
380                 enddo
381
[1411]382              endif
[1403]383
[1411]384! Pour iflag_cldcon<=4, on prend toujours la lognormale
385! Dans le cas iflag_cldcon=5, on prend systématiquement la bi-gaussienne
386! Dans le cas iflagÃ_cldcon=6, on prend la lognormale en absence des thermiques
387
388            lognormale(:)=
389     .      iflag_cldcon<=4.or.(iflag_cldcon==6.and.fraca(:,k)<1.e-10)
[1403]390            do i=1,klon
[1411]391            if (lognormale(i)) then
[524]392            zpdf_sig(i)=ratqs(i,k)*zq(i)
393            zpdf_k(i)=-sqrt(log(1.+(zpdf_sig(i)/zq(i))**2))
394            zpdf_delta(i)=log(zq(i)/zqs(i))
395            zpdf_a(i)=zpdf_delta(i)/(zpdf_k(i)*sqrt(2.))
396            zpdf_b(i)=zpdf_k(i)/(2.*sqrt(2.))
397            zpdf_e1(i)=zpdf_a(i)-zpdf_b(i)
398            zpdf_e1(i)=sign(min(abs(zpdf_e1(i)),5.),zpdf_e1(i))
399            zpdf_e1(i)=1.-erf(zpdf_e1(i))
400            zpdf_e2(i)=zpdf_a(i)+zpdf_b(i)
401            zpdf_e2(i)=sign(min(abs(zpdf_e2(i)),5.),zpdf_e2(i))
402            zpdf_e2(i)=1.-erf(zpdf_e2(i))
[1411]403            endif
404            enddo
405
406            do i=1,klon
407            if (lognormale(i)) then
[524]408            if (zpdf_e1(i).lt.1.e-10) then
409               rneb(i,k)=0.
410               zqn(i)=zqs(i)
411            else
412               rneb(i,k)=0.5*zpdf_e1(i)
413               zqn(i)=zq(i)*zpdf_e2(i)/zpdf_e1(i)
414            endif
[1411]415            endif
[524]416           
[1403]417           enddo
[524]418
[1403]419
[524]420        endif ! iflag_pdf
421
[1146]422        DO i=1,klon
423           IF (rneb(i,k) .LE. 0.0) THEN
424              zqn(i) = 0.0
425              rneb(i,k) = 0.0
426              zcond(i) = 0.0
427              rhcl(i,k)=zq(i)/zqs(i)
428           ELSE IF (rneb(i,k) .GE. 1.0) THEN
429              zqn(i) = zq(i)
430              rneb(i,k) = 1.0                 
431              zcond(i) = MAX(0.0,zqn(i)-zqs(i))
432              rhcl(i,k)=1.0
433           ELSE
434              zcond(i) = MAX(0.0,zqn(i)-zqs(i))*rneb(i,k)
435              rhcl(i,k)=(zqs(i)+zq(i)-zdelq)/2./zqs(i)
436           ENDIF
437        ENDDO
438!         do i=1,klon
439!            IF (rneb(i,k) .LE. 0.0) zqn(i) = 0.0
440!            IF (rneb(i,k) .GE. 1.0) zqn(i) = zq(i)
441!            rneb(i,k) = MAX(0.0,MIN(1.0,rneb(i,k)))
442!c           zcond(i) = MAX(0.0,zqn(i)-zqs(i))*rneb(i,k)/(1.+zdqs(i))
443!c  On ne divise pas par 1+zdqs pour forcer a avoir l'eau predite par
444!c  la convection.
445!c  ATTENTION !!! Il va falloir verifier tout ca.
446!            zcond(i) = MAX(0.0,zqn(i)-zqs(i))*rneb(i,k)
447!c           print*,'ZDQS ',zdqs(i)
448!c--Olivier
449!            rhcl(i,k)=(zqs(i)+zq(i)-zdelq)/2./zqs(i)
450!            IF (rneb(i,k) .LE. 0.0) rhcl(i,k)=zq(i)/zqs(i)
451!            IF (rneb(i,k) .GE. 1.0) rhcl(i,k)=1.0
452!c--fin
453!           ENDDO
[524]454      ELSE
455         DO i = 1, klon
456            IF (zq(i).GT.zqs(i)) THEN
457               rneb(i,k) = 1.0
458            ELSE
459               rneb(i,k) = 0.0
460            ENDIF
461            zcond(i) = MAX(0.0,zq(i)-zqs(i))/(1.+zdqs(i))
462         ENDDO
463      ENDIF
464c
465      DO i = 1, klon
466         zq(i) = zq(i) - zcond(i)
467c         zt(i) = zt(i) + zcond(i) * RLVTT/RCPD
468         zt(i) = zt(i) + zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*zq(i))
469      ENDDO
470c
471c Partager l'eau condensee en precipitation et eau liquide nuageuse
472c
473      DO i = 1, klon
474      IF (rneb(i,k).GT.0.0) THEN
475         zoliq(i) = zcond(i)
476         zrho(i) = pplay(i,k) / zt(i) / RD
477         zdz(i) = (paprs(i,k)-paprs(i,k+1)) / (zrho(i)*RG)
478         zfice(i) = 1.0 - (zt(i)-ztglace) / (273.13-ztglace)
479         zfice(i) = MIN(MAX(zfice(i),0.0),1.0)
480         zfice(i) = zfice(i)**nexpo
481         zneb(i) = MAX(rneb(i,k), seuil_neb)
[1403]482         radliq(i,k) = zoliq(i)/REAL(ninter+1)
[524]483      ENDIF
484      ENDDO
485c
486      DO n = 1, ninter
487      DO i = 1, klon
488      IF (rneb(i,k).GT.0.0) THEN
489         zrhol(i) = zrho(i) * zoliq(i) / zneb(i)
490
[1279]491         IF (zneb(i).EQ.seuil_neb) THEN
492             ztot = 0.0
493         ELSE
494c  quantite d'eau a eliminer: zchau
495c  meme chose pour la glace: zfroi
496             if (ptconv(i,k)) then
497                zcl   =cld_lc_con
498                zct   =1./cld_tau_con
[1403]499                zfroi    = dtime/REAL(ninter)/zdz(i)*zoliq(i)
[524]500     .              *fallvc(zrhol(i)) * zfice(i)
[1279]501             else
502                zcl   =cld_lc_lsc
503                zct   =1./cld_tau_lsc
[1403]504                zfroi    = dtime/REAL(ninter)/zdz(i)*zoliq(i)
[524]505     .              *fallvs(zrhol(i)) * zfice(i)
[1279]506             endif
[1403]507             zchau    = zct   *dtime/REAL(ninter) * zoliq(i)
[1279]508     .         *(1.0-EXP(-(zoliq(i)/zneb(i)/zcl   )**2)) *(1.-zfice(i))
509             ztot    = zchau    + zfroi
510             ztot    = MAX(ztot   ,0.0)
511         ENDIF
512         ztot    = MIN(ztot,zoliq(i))
513         zoliq(i) = MAX(zoliq(i)-ztot   , 0.0)
[1403]514         radliq(i,k) = radliq(i,k) + zoliq(i)/REAL(ninter+1)
[524]515      ENDIF
516      ENDDO
517      ENDDO
518c
519      DO i = 1, klon
520      IF (rneb(i,k).GT.0.0) THEN
521         d_ql(i,k) = zoliq(i)
522         zrfl(i) = zrfl(i)+ MAX(zcond(i)-zoliq(i),0.0)
523     .                    * (paprs(i,k)-paprs(i,k+1))/(RG*dtime)
524      ENDIF
525      IF (zt(i).LT.RTT) THEN
526        psfl(i,k)=zrfl(i)
527      ELSE
528        prfl(i,k)=zrfl(i)
529      ENDIF
530      ENDDO
531c
532c Calculer les tendances de q et de t:
533c
534      DO i = 1, klon
535         d_q(i,k) = zq(i) - q(i,k)
536         d_t(i,k) = zt(i) - t(i,k)
537      ENDDO
538c
539cAA--------------- Calcul du lessivage stratiforme  -------------
540
541      DO i = 1,klon
542c
543         zprec_cond(i) = MAX(zcond(i)-zoliq(i),0.0)
544     .                * (paprs(i,k)-paprs(i,k+1))/RG
545         IF (rneb(i,k).GT.0.0.and.zprec_cond(i).gt.0.) THEN
546cAA lessivage nucleation LMD5 dans la couche elle-meme
547            if (t(i,k) .GE. ztglace) THEN
548               zalpha_tr = a_tr_sca(3)
549            else
550               zalpha_tr = a_tr_sca(4)
551            endif
552            zfrac_lessi = 1. - EXP(zalpha_tr*zprec_cond(i)/zneb(i))
553            pfrac_nucl(i,k)=pfrac_nucl(i,k)*(1.-zneb(i)*zfrac_lessi)
554            frac_nucl(i,k)= 1.-zneb(i)*zfrac_lessi
555c
556c nucleation avec un facteur -1 au lieu de -0.5
557            zfrac_lessi = 1. - EXP(-zprec_cond(i)/zneb(i))
558            pfrac_1nucl(i,k)=pfrac_1nucl(i,k)*(1.-zneb(i)*zfrac_lessi)
559         ENDIF
560c
561      ENDDO      ! boucle sur i
562c
563cAA Lessivage par impaction dans les couches en-dessous
564      DO kk = k-1, 1, -1
565        DO i = 1, klon
566          IF (rneb(i,k).GT.0.0.and.zprec_cond(i).gt.0.) THEN
567            if (t(i,kk) .GE. ztglace) THEN
568              zalpha_tr = a_tr_sca(1)
569            else
570              zalpha_tr = a_tr_sca(2)
571            endif
572            zfrac_lessi = 1. - EXP(zalpha_tr*zprec_cond(i)/zneb(i))
573            pfrac_impa(i,kk)=pfrac_impa(i,kk)*(1.-zneb(i)*zfrac_lessi)
574            frac_impa(i,kk)= 1.-zneb(i)*zfrac_lessi
575          ENDIF
576        ENDDO
577      ENDDO
578c
579cAA----------------------------------------------------------
580c                     FIN DE BOUCLE SUR K   
581 9999 CONTINUE
582c
583cAA-----------------------------------------------------------
584c
585c Pluie ou neige au sol selon la temperature de la 1ere couche
586c
587      DO i = 1, klon
588      IF ((t(i,1)+d_t(i,1)) .LT. RTT) THEN
589         snow(i) = zrfl(i)
590         zlh_solid(i) = RLSTT-RLVTT
591      ELSE
592         rain(i) = zrfl(i)
593         zlh_solid(i) = 0.
594      ENDIF
595      ENDDO
596C
597C For energy conservation : when snow is present, the solification
598c latent heat is considered.
599      DO k = 1, klev
600        DO i = 1, klon
601          zcpair=RCPD*(1.0+RVTMP2*(q(i,k)+d_q(i,k)))
602          zmair=(paprs(i,k)-paprs(i,k+1))/RG
603          zm_solid = (prfl(i,k)-prfl(i,k+1)+psfl(i,k)-psfl(i,k+1))*dtime
604          d_t(i,k) = d_t(i,k) + zlh_solid(i) *zm_solid / (zcpair*zmair)
605        END DO
606      END DO
607c
[883]608
609      if (ncoreczq>0) then
610         print*,'WARNING : ZQ dans fisrtilp ',ncoreczq,' val < 1.e-15.'
611      endif
[524]612      RETURN
613      END
Note: See TracBrowser for help on using the repository browser.