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
Line 
1!
2! $Id: fisrtilp.F 1479 2011-01-28 14:32:46Z fairhead $
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,
9     s                   prfl, psfl, rhcl, zqta, fraca,
10     s                   ztv, zpspsk, ztla, zthl, iflag_cldcon)
11
12c
13      USE dimphy
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======================================================================
22cym#include "dimensions.h"
23cym#include "dimphy.h"
24#include "YOMCST.h"
25#include "tracstoke.h"
26#include "fisrtilp.h"
27#include "iniprint.h"
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)
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
53      logical lognormale(klon)
54
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)
67      real zct      ,zcl
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
76      INTEGER ncoreczq 
77      INTEGER iflag_cldcon
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)
86      real erf   
87      REAL qcloud(klon)
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
97      REAL zqs(klon), zdqs(klon), zdelta, zcor, zcvm5   
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
102      REAL zdz(klon),zrho(klon),ztot      , zrhol(klon)
103      REAL zchau      ,zfroi      ,zfice(klon),zneb(klon)
104c
105      LOGICAL appel1er
106      SAVE appel1er
107c$OMP THREADPRIVATE(appel1er)
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
117c$OMP THREADPRIVATE(a_tr_sca)
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
129cym      INTEGER klevm1
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./
142cym
143      zdelq=0.0
144     
145      if (prt_level>9)write(lunout,*)'NUAGES4 A. JAM'
146      IF (appel1er) THEN
147c
148         PRINT*, 'fisrtilp, ninter:', ninter
149         PRINT*, 'fisrtilp, evap_prec:', evap_prec
150         PRINT*, 'fisrtilp, cpartiel:', cpartiel
151         IF (ABS(dtime/REAL(ninter)-360.0).GT.0.001) THEN
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
166!cdir collapse
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
178c      DO i = 1, klon
179c         zoliq(i)=0.
180c      ENDDO
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
190!cdir collapse
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
198!cdir collapse
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
213         zoliq(i)=0.
214c     ENDDO
215c
216c Initialiser le flux de precipitation a zero
217c
218c     DO i = 1, klon
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
231      ncoreczq=0
232c Boucle verticale (du haut vers le bas)
233c
234cIM : klevm1
235cym      klevm1=klev-1
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
251      IF(k.LE.klevm1) THEN         
252         DO i = 1, klon
253cIM
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
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
294c pour la glace, on r�vapore toute la pr�ip dans la couche du dessous
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
338
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.
348c           on prend en compte le r�hauffement qui diminue la partie condensee
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
365                ncoreczq=ncoreczq+1
366                zq(i)=1.e-15
367              endif
368           enddo
369
370              if (iflag_cldcon>=5) then
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
382              endif
383
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)
390            do i=1,klon
391            if (lognormale(i)) then
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))
403            endif
404            enddo
405
406            do i=1,klon
407            if (lognormale(i)) then
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
415            endif
416           
417           enddo
418
419
420        endif ! iflag_pdf
421
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
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)
482         radliq(i,k) = zoliq(i)/REAL(ninter+1)
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
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
499                zfroi    = dtime/REAL(ninter)/zdz(i)*zoliq(i)
500     .              *fallvc(zrhol(i)) * zfice(i)
501             else
502                zcl   =cld_lc_lsc
503                zct   =1./cld_tau_lsc
504                zfroi    = dtime/REAL(ninter)/zdz(i)*zoliq(i)
505     .              *fallvs(zrhol(i)) * zfice(i)
506             endif
507             zchau    = zct   *dtime/REAL(ninter) * zoliq(i)
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)
514         radliq(i,k) = radliq(i,k) + zoliq(i)/REAL(ninter+1)
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
608
609      if (ncoreczq>0) then
610         print*,'WARNING : ZQ dans fisrtilp ',ncoreczq,' val < 1.e-15.'
611      endif
612      RETURN
613      END
Note: See TracBrowser for help on using the repository browser.