source: LMDZ4/trunk/libf/phylmd/fisrtilp.F @ 1407

Last change on this file since 1407 was 1407, checked in by Laurent Fairhead, 14 years ago

Some extraneous prints deleted for optimisation purposes


Des prints supprimés pour optimisation

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