source: LMDZ5/trunk/libf/phylmd/fisrtilp.F90 @ 2077

Last change on this file since 2077 was 2077, checked in by fhourdin, 10 years ago

Modification relative à la phase mixte des nuages :

  1. on fait tendre t_glace_min vers t_glace_max (en principe 0°C) linéairerment entre p/ps = 0.8 et p/ps=1.
  2. Passage de tableau à la routine icefrac_lsc en remplacement d'une fonction scalaire.
  3. Changement de nom pour le module (le module icefrac_lsc_mod.F90 contenant maintenant la routine icefrac_lsc).

Mofication concerning the mixte phase of clouds

  1. t_glace_min -> t_glace_max when p/ps : 0.8 -> 1
  2. passing arrays instead of scalars to icefrac_lsc (which becomes a routine rather than a function).
  3. Changing the name microphys_mod.F90 -> icerfrac_lsc_mod.F90
  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 33.6 KB
Line 
1!
2! $Id: fisrtilp.F90 2077 2014-07-03 13:38:05Z fhourdin $
3!
4!
5SUBROUTINE 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,                        &
9     prfl, psfl, rhcl, zqta, fraca,                     &
10     ztv, zpspsk, ztla, zthl, iflag_cldcon,             &
11     iflag_ice_thermo)
12
13  !
14  USE dimphy
15  USE icefrac_lsc_mod ! cloud microphysics (JBM 3/14)
16  IMPLICIT none
17  !======================================================================
18  ! Auteur(s): Z.X. Li (LMD/CNRS)
19  ! Date: le 20 mars 1995
20  ! Objet: condensation et precipitation stratiforme.
21  !        schema de nuage
22  !======================================================================
23  !======================================================================
24  !ym include "dimensions.h"
25  !ym include "dimphy.h"
26  include "YOMCST.h"
27  include "tracstoke.h"
28  include "fisrtilp.h"
29  include "nuage.h" ! JBM (3/14)
30  include "iniprint.h"
31
32  !
33  ! Arguments:
34  !
35  REAL dtime ! intervalle du temps (s)
36  REAL paprs(klon,klev+1) ! pression a inter-couche
37  REAL pplay(klon,klev) ! pression au milieu de couche
38  REAL t(klon,klev) ! temperature (K)
39  REAL q(klon,klev) ! humidite specifique (kg/kg)
40  REAL d_t(klon,klev) ! incrementation de la temperature (K)
41  REAL d_q(klon,klev) ! incrementation de la vapeur d'eau
42  REAL d_ql(klon,klev) ! incrementation de l'eau liquide
43  REAL rneb(klon,klev) ! fraction nuageuse
44  REAL radliq(klon,klev) ! eau liquide utilisee dans rayonnements
45  REAL rhcl(klon,klev) ! humidite relative en ciel clair
46  REAL rain(klon) ! pluies (mm/s)
47  REAL snow(klon) ! neige (mm/s)
48  REAL prfl(klon,klev+1) ! flux d'eau precipitante aux interfaces (kg/m2/s)
49  REAL psfl(klon,klev+1) ! flux d'eau precipitante aux interfaces (kg/m2/s)
50  REAL ztv(klon,klev)
51  REAL zqta(klon,klev),fraca(klon,klev)
52  REAL sigma1(klon,klev),sigma2(klon,klev)
53  REAL qltot(klon,klev),ctot(klon,klev)
54  REAL zpspsk(klon,klev),ztla(klon,klev)
55  REAL zthl(klon,klev)
56  REAL ztfondue, qsl, qsi
57
58  logical lognormale(klon)
59  logical ice_thermo
60
61  !AA
62  ! Coeffients de fraction lessivee : pour OFF-LINE
63  !
64  REAL pfrac_nucl(klon,klev)
65  REAL pfrac_1nucl(klon,klev)
66  REAL pfrac_impa(klon,klev)
67  !
68  ! Fraction d'aerosols lessivee par impaction et par nucleation
69  ! POur ON-LINE
70  !
71  REAL frac_impa(klon,klev)
72  REAL frac_nucl(klon,klev)
73  real zct      ,zcl
74  !AA
75  !
76  ! Options du programme:
77  !
78  REAL seuil_neb ! un nuage existe vraiment au-dela
79  PARAMETER (seuil_neb=0.001)
80
81  INTEGER ninter ! sous-intervals pour la precipitation
82  INTEGER ncoreczq 
83  INTEGER iflag_cldcon
84  INTEGER iflag_ice_thermo
85  PARAMETER (ninter=5)
86  LOGICAL evap_prec ! evaporation de la pluie
87  PARAMETER (evap_prec=.TRUE.)
88  REAL ratqs(klon,klev) ! determine la largeur de distribution de vapeur
89  logical ptconv(klon,klev) ! determine la largeur de distribution de vapeur
90
91  real zpdf_sig(klon),zpdf_k(klon),zpdf_delta(klon)
92  real Zpdf_a(klon),zpdf_b(klon),zpdf_e1(klon),zpdf_e2(klon)
93  real erf   
94  REAL qcloud(klon)
95  !
96  LOGICAL cpartiel ! condensation partielle
97  PARAMETER (cpartiel=.TRUE.)
98  REAL t_coup
99  PARAMETER (t_coup=234.0)
100  !
101  ! Variables locales:
102  !
103  INTEGER i, k, n, kk
104  REAL zqs(klon), zdqs(klon), zdelta, zcor, zcvm5 
105  REAL Tbef(klon),qlbef(klon),DT(klon),num,denom
106  LOGICAL convergence(klon)
107  REAL DDT0
108  PARAMETER (DDT0=.01)
109  INTEGER n_i, iter
110 
111  REAL zrfl(klon), zrfln(klon), zqev, zqevt
112  REAL zifl(klon), zifln(klon), zqev0,zqevi, zqevti
113  REAL zoliq(klon), zcond(klon), zq(klon), zqn(klon), zdelq
114  REAL zoliqp(klon), zoliqi(klon)
115  REAL zt(klon)
116! JBM (3/14) nexpo is replaced by exposant_glace
117! REAL nexpo ! exponentiel pour glace/eau
118! INTEGER, PARAMETER :: nexpo=6
119  INTEGER exposant_glace_old
120  REAL t_glace_min_old
121  REAL zdz(klon),zrho(klon),ztot      , zrhol(klon)
122  REAL zchau      ,zfroi      ,zfice(klon),zneb(klon)
123  REAL zmelt, zpluie, zice, zcondold
124  PARAMETER (ztfondue=278.15)
125  !
126  LOGICAL appel1er
127  SAVE appel1er
128  !$OMP THREADPRIVATE(appel1er)
129  !
130  !---------------------------------------------------------------
131  !
132  !AA Variables traceurs:
133  !AA  Provisoire !!! Parametres alpha du lessivage
134  !AA  A priori on a 4 scavenging # possibles
135  !
136  REAL a_tr_sca(4)
137  save a_tr_sca
138  !$OMP THREADPRIVATE(a_tr_sca)
139  !
140  ! Variables intermediaires
141  !
142  REAL zalpha_tr
143  REAL zfrac_lessi
144  REAL zprec_cond(klon)
145  !AA
146! RomP >>> 15 nov 2012
147  REAL   beta(klon,klev) ! taux de conversion de l'eau cond
148! RomP <<<
149  REAL zmair, zcpair, zcpeau
150  !     Pour la conversion eau-neige
151  REAL zlh_solid(klon), zm_solid
152  !IM
153  !ym      INTEGER klevm1
154  !---------------------------------------------------------------
155  !
156  ! Fonctions en ligne:
157  !
158  REAL fallvs,fallvc ! vitesse de chute pour crystaux de glace
159  REAL zzz
160  include "YOETHF.h"
161  include "FCTTRE.h"
162  fallvc (zzz) = 3.29/2.0 * ((zzz)**0.16) * ffallv_con
163  fallvs (zzz) = 3.29/2.0 * ((zzz)**0.16) * ffallv_lsc
164  !
165  DATA appel1er /.TRUE./
166  !ym
167
168  ice_thermo = iflag_ice_thermo .GE. 1
169  zdelq=0.0
170
171  if (prt_level>9)write(lunout,*)'NUAGES4 A. JAM'
172  IF (appel1er) THEN
173     !
174     WRITE(lunout,*) 'fisrtilp, ninter:', ninter
175     WRITE(lunout,*) 'fisrtilp, evap_prec:', evap_prec
176     WRITE(lunout,*) 'fisrtilp, cpartiel:', cpartiel
177     IF (ABS(dtime/REAL(ninter)-360.0).GT.0.001) THEN
178        WRITE(lunout,*) 'fisrtilp: Ce n est pas prevu, voir Z.X.Li', dtime
179        WRITE(lunout,*) 'Je prefere un sous-intervalle de 6 minutes'
180        !         CALL abort
181     ENDIF
182     appel1er = .FALSE.
183     !
184     !AA initialiation provisoire
185     a_tr_sca(1) = -0.5
186     a_tr_sca(2) = -0.5
187     a_tr_sca(3) = -0.5
188     a_tr_sca(4) = -0.5
189     !
190     !AA Initialisation a 1 des coefs des fractions lessivees
191     !
192     !cdir collapse
193     DO k = 1, klev
194        DO i = 1, klon
195           pfrac_nucl(i,k)=1.
196           pfrac_1nucl(i,k)=1.
197           pfrac_impa(i,k)=1.
198           beta(i,k)=0.  !RomP initialisation
199        ENDDO
200     ENDDO
201
202  ENDIF          !  test sur appel1er
203  !
204  !MAf Initialisation a 0 de zoliq
205  !      DO i = 1, klon
206  !         zoliq(i)=0.
207  !      ENDDO
208  ! Determiner les nuages froids par leur temperature
209  !  nexpo regle la raideur de la transition eau liquide / eau glace.
210  !
211  IF (iflag_t_glace.EQ.0) THEN
212!   ztglace = RTT - 15.0
213    t_glace_min_old = RTT - 15.0
214    !AJ<
215    IF (ice_thermo) THEN
216!     nexpo = 2
217      exposant_glace_old = 2
218    ELSE
219!     nexpo = 6
220      exposant_glace_old = 6
221    ENDIF
222  ENDIF
223 
224!!  RLVTT = 2.501e6 ! pas de redefinition des constantes physiques (jyg)
225!!  RLSTT = 2.834e6 ! pas de redefinition des constantes physiques (jyg)
226!>AJ
227  !cc      nexpo = 1
228  !
229  ! Initialiser les sorties:
230  !
231  !cdir collapse
232  DO k = 1, klev+1
233     DO i = 1, klon
234        prfl(i,k) = 0.0
235        psfl(i,k) = 0.0
236     ENDDO
237  ENDDO
238
239  !cdir collapse
240  DO k = 1, klev
241     DO i = 1, klon
242        d_t(i,k) = 0.0
243        d_q(i,k) = 0.0
244        d_ql(i,k) = 0.0
245        rneb(i,k) = 0.0
246        radliq(i,k) = 0.0
247        frac_nucl(i,k) = 1.
248        frac_impa(i,k) = 1.
249     ENDDO
250  ENDDO
251  DO i = 1, klon
252     rain(i) = 0.0
253     snow(i) = 0.0
254     zoliq(i)=0.
255     !     ENDDO
256     !
257     ! Initialiser le flux de precipitation a zero
258     !
259     !     DO i = 1, klon
260     zrfl(i) = 0.0
261     zifl(i) = 0.0
262     zneb(i) = seuil_neb
263  ENDDO
264  !
265  !
266  !AA Pour plus de securite
267
268  zalpha_tr   = 0.
269  zfrac_lessi = 0.
270
271  !AA----------------------------------------------------------
272  !
273  ncoreczq=0
274  ! Boucle verticale (du haut vers le bas)
275  !
276  !IM : klevm1
277  !ym      klevm1=klev-1
278  DO k = klev, 1, -1
279     !
280     !AA----------------------------------------------------------
281     !
282     DO i = 1, klon
283        zt(i)=t(i,k)
284        zq(i)=q(i,k)
285     ENDDO
286     !
287     ! Calculer la varition de temp. de l'air du a la chaleur sensible
288     ! transporter par la pluie.
289     ! Il resterait a rajouter cet effet de la chaleur sensible sur les
290     ! flux de surface, du a la diff. de temp. entre le 1er niveau et la
291     ! surface.
292     !
293     IF(k.LE.klevm1) THEN         
294        DO i = 1, klon
295           !IM
296           zmair=(paprs(i,k)-paprs(i,k+1))/RG
297           zcpair=RCPD*(1.0+RVTMP2*zq(i))
298           zcpeau=RCPD*RVTMP2
299           zt(i) = ( (t(i,k+1)+d_t(i,k+1))*zrfl(i)*dtime*zcpeau &
300                + zmair*zcpair*zt(i) ) &
301                / (zmair*zcpair + zrfl(i)*dtime*zcpeau)
302           !     C        WRITE (6,*) 'cppluie ', zt(i)-(t(i,k+1)+d_t(i,k+1))
303        ENDDO
304     ENDIF
305     !
306     !
307     ! Calculer l'evaporation de la precipitation
308     !
309
310
311     ! Calculer l'evaporation de la precipitation
312     !
313
314
315     IF (evap_prec) THEN
316        DO i = 1, klon
317!AJ<
318!!           IF (zrfl(i) .GT.0.) THEN
319           IF (zrfl(i)+zifl(i).GT.0.) THEN
320!>AJ
321              IF (thermcep) THEN
322                 zdelta=MAX(0.,SIGN(1.,RTT-zt(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))
326                 zqs(i)=zqs(i)*zcor
327              ELSE
328                 IF (zt(i) .LT. t_coup) THEN
329                    zqs(i) = qsats(zt(i)) / pplay(i,k)
330                 ELSE
331                    zqs(i) = qsatl(zt(i)) / pplay(i,k)
332                 ENDIF
333              ENDIF
334           ENDIF ! (zrfl(i)+zifl(i).GT.0.)
335        ENDDO
336!AJ<
337       IF (.NOT. ice_thermo) THEN
338        DO i = 1, klon
339!AJ<
340!!           IF (zrfl(i) .GT.0.) THEN
341           IF (zrfl(i)+zifl(i).GT.0.) THEN
342!>AJ
343                zqev = MAX (0.0, (zqs(i)-zq(i))*zneb(i) )
344                zqevt = coef_eva * (1.0-zq(i)/zqs(i)) * SQRT(zrfl(i)) &
345                     * (paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG
346                zqevt = MAX(0.0,MIN(zqevt,zrfl(i))) &
347                     * RG*dtime/(paprs(i,k)-paprs(i,k+1))
348                zqev = MIN (zqev, zqevt)
349                zrfln(i) = zrfl(i) - zqev*(paprs(i,k)-paprs(i,k+1)) &
350                     /RG/dtime
351       
352                ! pour la glace, on ré-évapore toute la précip dans la
353                ! couche du dessous
354                ! la glace venant de la couche du dessus est simplement
355                ! dans la couche du dessous.
356       
357                IF (zt(i) .LT. t_coup.and.reevap_ice) zrfln(i)=0.
358       
359                zq(i) = zq(i) - (zrfln(i)-zrfl(i)) &
360                     * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime
361                zt(i) = zt(i) + (zrfln(i)-zrfl(i)) &
362                     * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime &
363                     * RLVTT/RCPD/(1.0+RVTMP2*zq(i))
364                zrfl(i) = zrfln(i)
365                zifl(i) = 0.
366           ENDIF ! (zrfl(i)+zifl(i).GT.0.)
367        ENDDO
368!
369       ELSE ! (.NOT. ice_thermo)
370!
371        DO i = 1, klon
372!AJ<
373!!           IF (zrfl(i) .GT.0.) THEN
374           IF (zrfl(i)+zifl(i).GT.0.) THEN
375!>AJ
376     !JAM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
377     ! Modification de l'évaporation avec la glace
378     ! Différentiation entre précipitation liquide et solide
379     ! On suppose que coef_evai=2*coef_eva
380     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
381     
382         zqev0 = MAX (0.0, (zqs(i)-zq(i))*zneb(i) )
383     !    zqev0 = MAX (0.0, zqs(i)-zq(i) )
384
385     !JAM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
386     ! On différencie qsat pour l'eau et la glace
387     ! Si zdelta=1. --> glace
388     ! Si zdelta=0. --> eau liquide
389     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
390         
391         qsl= R2ES*FOEEW(zt(i),0.)/pplay(i,k)
392         qsl= MIN(0.5,qsl)
393         zcor= 1./(1.-RETV*qsl)
394         qsl= qsl*zcor
395         
396         zqevt = 1.*coef_eva*(1.0-zq(i)/qsl)*SQRT(zrfl(i)) &
397              *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG
398         zqevt = MAX(0.0,MIN(zqevt,zrfl(i))) &
399              *RG*dtime/(paprs(i,k)-paprs(i,k+1))
400
401         qsi= R2ES*FOEEW(zt(i),1.)/pplay(i,k)
402         qsi= MIN(0.5,qsi)
403         zcor= 1./(1.-RETV*qsi)
404         qsi= qsi*zcor
405
406         zqevti = 1.*coef_eva*(1.0-zq(i)/qsi)*SQRT(zifl(i)) &
407              *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG
408         zqevti = MAX(0.0,MIN(zqevti,zifl(i))) &
409              *RG*dtime/(paprs(i,k)-paprs(i,k+1))   
410
411             
412     !JAM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
413     ! Vérification sur l'évaporation
414     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
415     
416         IF (zqevt+zqevti.GT.zqev0) THEN
417                  zqev=zqev0*zqevt/(zqevt+zqevti)
418                  zqevi=zqev0*zqevti/(zqevt+zqevti)
419             
420         ELSE
421             IF (zqevt+zqevti.GT.0.) THEN
422                  zqev=MIN(zqev0*zqevt/(zqevt+zqevti),zqevt)
423                  zqevi=MIN(zqev0*zqevti/(zqevt+zqevti),zqevti)
424             ELSE
425             zqev=0.
426             zqevi=0.
427             ENDIF
428         ENDIF
429     
430         zrfln(i) = Max(0.,zrfl(i) - zqev*(paprs(i,k)-paprs(i,k+1)) &
431                                 /RG/dtime)
432         zifln(i) = Max(0.,zifl(i) - zqevi*(paprs(i,k)-paprs(i,k+1)) &
433                                 /RG/dtime)
434         
435     ! Pour la glace, on révapore toute la précip dans la couche du dessous
436     ! la glace venant de la couche du dessus est simplement dans la couche
437     ! du dessous.
438     
439     !    IF (zt(i) .LT. t_coup.and.reevap_ice) zrfln(i)=0.
440!         print*,zrfl(i),zrfln(i),zqevt,zqevti,RLMLT,'fluxdeprecip'
441         zq(i) = zq(i) - (zrfln(i)+zifln(i)-zrfl(i)-zifl(i)) &
442                  * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime
443         zt(i) = zt(i) + (zrfln(i)-zrfl(i)) &
444                  * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime &
445                  * RLVTT/RCPD/(1.0+RVTMP2*zq(i)) &
446                  + (zifln(i)-zifl(i)) &
447                  * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime &
448                  * RLSTT/RCPD/(1.0+RVTMP2*zq(i))
449     
450         zrfl(i) = zrfln(i)
451         zifl(i) = zifln(i)
452
453           ENDIF ! (zrfl(i)+zifl(i).GT.0.)
454        ENDDO
455
456      ENDIF ! (.NOT. ice_thermo)
457     
458     ENDIF ! (evap_prec)
459     !
460     ! Calculer Qs et L/Cp*dQs/dT:
461     !
462     IF (thermcep) THEN
463        DO i = 1, klon
464           zdelta = MAX(0.,SIGN(1.,RTT-zt(i)))
465           zcvm5 = R5LES*RLVTT*(1.-zdelta) + R5IES*RLSTT*zdelta
466           zcvm5 = zcvm5 /RCPD/(1.0+RVTMP2*zq(i))
467           zqs(i) = R2ES*FOEEW(zt(i),zdelta)/pplay(i,k)
468           zqs(i) = MIN(0.5,zqs(i))
469           zcor = 1./(1.-RETV*zqs(i))
470           zqs(i) = zqs(i)*zcor
471           zdqs(i) = FOEDE(zt(i),zdelta,zcvm5,zqs(i),zcor)
472        ENDDO
473     ELSE
474        DO i = 1, klon
475           IF (zt(i).LT.t_coup) THEN
476              zqs(i) = qsats(zt(i))/pplay(i,k)
477              zdqs(i) = dqsats(zt(i),zqs(i))
478           ELSE
479              zqs(i) = qsatl(zt(i))/pplay(i,k)
480              zdqs(i) = dqsatl(zt(i),zqs(i))
481           ENDIF
482        ENDDO
483     ENDIF
484     !
485     ! Determiner la condensation partielle et calculer la quantite
486     ! de l'eau condensee:
487     !
488!verification de la valeur de iflag_fisrtilp_qsat pour iflag_ice_thermo=1
489       if ((iflag_ice_thermo.eq.1).and.(iflag_fisrtilp_qsat.ne.0)) then
490         write(*,*) " iflag_ice_thermo==1 requires iflag_fisrtilp_qsat==0", &
491        " but iflag_fisrtilp_qsat=",iflag_fisrtilp_qsat, ". Might as well stop here."
492         stop
493       endif
494
495     IF (cpartiel) THEN
496
497        !        print*,'Dans partiel k=',k
498        !
499        !   Calcul de l'eau condensee et de la fraction nuageuse et de l'eau
500        !   nuageuse a partir des PDF de Sandrine Bony.
501        !   rneb  : fraction nuageuse
502        !   zqn   : eau totale dans le nuage
503        !   zcond : eau condensee moyenne dans la maille.
504        !  on prend en compte le réchauffement qui diminue la partie
505        ! condensee
506        !
507        !   Version avec les raqts
508
509        if (iflag_pdf.eq.0) then
510
511           do i=1,klon
512              zdelq = min(ratqs(i,k),0.99) * zq(i)
513              rneb(i,k) = (zq(i)+zdelq-zqs(i)) / (2.0*zdelq)
514              zqn(i) = (zq(i)+zdelq+zqs(i))/2.0
515           enddo
516
517        else
518           !
519           !   Version avec les nouvelles PDFs.
520           do i=1,klon
521              if(zq(i).lt.1.e-15) then
522                 ncoreczq=ncoreczq+1
523                 zq(i)=1.e-15
524              endif
525           enddo
526
527           if (iflag_cldcon>=5) then
528
529              call cloudth(klon,klev,k,ztv, &
530                   zq,zqta,fraca, &
531                   qcloud,ctot,zpspsk,paprs,ztla,zthl, &
532                   ratqs,zqs,t)
533
534              do i=1,klon
535                 rneb(i,k)=ctot(i,k)
536                 zqn(i)=qcloud(i)
537              enddo
538
539           endif
540
541           if (iflag_cldcon <= 4) then
542              lognormale = .true.
543           elseif (iflag_cldcon >= 6) then
544              ! lognormale en l'absence des thermiques
545              lognormale = fraca(:,k) < 1e-10
546           else
547              ! Dans le cas iflag_cldcon=5, on prend systématiquement la
548              ! bi-gaussienne
549              lognormale = .false.
550           end if
551
552           do i=1,klon
553              Tbef(i)=zt(i)
554              qlbef(i)=0.
555              if (lognormale(i)) then
556                 zpdf_sig(i)=ratqs(i,k)*zq(i)
557                 zpdf_k(i)=-sqrt(log(1.+(zpdf_sig(i)/zq(i))**2))
558                 zpdf_delta(i)=log(zq(i)/zqs(i))
559                 zpdf_a(i)=zpdf_delta(i)/(zpdf_k(i)*sqrt(2.))
560                 zpdf_b(i)=zpdf_k(i)/(2.*sqrt(2.))
561                 zpdf_e1(i)=zpdf_a(i)-zpdf_b(i)
562                 zpdf_e1(i)=sign(min(abs(zpdf_e1(i)),5.),zpdf_e1(i))
563                 zpdf_e1(i)=1.-erf(zpdf_e1(i))
564                 zpdf_e2(i)=zpdf_a(i)+zpdf_b(i)
565                 zpdf_e2(i)=sign(min(abs(zpdf_e2(i)),5.),zpdf_e2(i))
566                 zpdf_e2(i)=1.-erf(zpdf_e2(i))
567             
568                 if (zpdf_e1(i).lt.1.e-10) then
569                    rneb(i,k)=0.
570                    zqn(i)=zqs(i)
571                 else
572                    rneb(i,k)=0.5*zpdf_e1(i)
573                    zqn(i)=zq(i)*zpdf_e2(i)/zpdf_e1(i)
574                 endif
575
576                 qlbef(i)=max(0.,zqn(i)-zqs(i))
577                 num=-Tbef(i)+zt(i)+rneb(i,k)*RLVTT/RCPD/(1.0+RVTMP2*zq(i))*qlbef(i)
578                 denom=1.+rneb(i,k)*zdqs(i)
579                 DT(i)=num/denom
580              endif
581           enddo
582 
583           n_i=1
584!               do while ((abs(DT(i)).gt.DDT0).and.((zqn(i)-zqs(i)).gt.0.))
585! iflag_fisrtilp_qsat=0: qsat ne varie pas avec T
586! iflag_fisrtilp_qsat > 1 : nombre d iterations max pour converger sur le calcul de qsat(T)
587!               do while (n_i.le.iflag_fisrtilp_qsat)
588           if (iflag_fisrtilp_qsat.ge.1) then
589           do iter=1,iflag_fisrtilp_qsat
590              do i=1,klon
591                 convergence(i)=abs(DT(i)).gt.DDT0
592                 if (convergence(i).and.lognormale(i)) then
593                 Tbef(i)=Tbef(i)+DT(i)                 
594                 zdelta=MAX(0.,SIGN(1.,RTT-Tbef(i)))
595                 zcvm5 = R5LES*RLVTT*(1.-zdelta) + R5IES*RLSTT*zdelta
596                 zcvm5 = zcvm5 /RCPD/(1.0+RVTMP2*zq(i))
597                 zqs(i)= R2ES * FOEEW(Tbef(i),zdelta)/pplay(i,k)
598                 zqs(i)=MIN(0.5,zqs(i))
599                 zcor=1./(1.-retv*zqs(i))
600                 zqs(i)=zqs(i)*zcor
601                 zdqs(i)=FOEDE(Tbef(i),zdelta,zcvm5,zqs(i),zcor)
602
603                 zpdf_sig(i)=ratqs(i,k)*zq(i)
604                 zpdf_k(i)=-sqrt(log(1.+(zpdf_sig(i)/zq(i))**2))
605                 zpdf_delta(i)=log(zq(i)/zqs(i))
606                 zpdf_a(i)=zpdf_delta(i)/(zpdf_k(i)*sqrt(2.))
607                 zpdf_b(i)=zpdf_k(i)/(2.*sqrt(2.))
608                 zpdf_e1(i)=zpdf_a(i)-zpdf_b(i)
609                 zpdf_e1(i)=sign(min(abs(zpdf_e1(i)),5.),zpdf_e1(i))
610                 zpdf_e1(i)=1.-erf(zpdf_e1(i))
611                 zpdf_e2(i)=zpdf_a(i)+zpdf_b(i)
612                 zpdf_e2(i)=sign(min(abs(zpdf_e2(i)),5.),zpdf_e2(i))
613                 zpdf_e2(i)=1.-erf(zpdf_e2(i))
614             
615                 if (zpdf_e1(i).lt.1.e-10) then
616                    rneb(i,k)=0.
617                    zqn(i)=zqs(i)
618                 else
619                    rneb(i,k)=0.5*zpdf_e1(i)
620                    zqn(i)=zq(i)*zpdf_e2(i)/zpdf_e1(i)
621                 endif
622
623                 qlbef(i)=max(0.,zqn(i)-zqs(i))   
624                 num=-Tbef(i)+zt(i)+rneb(i,k)*RLVTT/RCPD/(1.0+RVTMP2*zq(i))*qlbef(i)
625                 denom=1.+rneb(i,k)*zdqs(i)
626                 DT(i)=num/denom
627                 n_i=n_i+1
628                 endif
629              enddo
630              enddo
631
632           endif
633
634
635        endif ! iflag_pdf
636
637        if (iflag_fisrtilp_qsat.eq.-1) then
638!CR: ATTENTION option fausse mais a existe
639        DO i=1,klon
640           IF (rneb(i,k) .LE. 0.0) THEN
641              zqn(i) = 0.0
642              rneb(i,k) = 0.0
643              zcond(i) = 0.0
644              rhcl(i,k)=zq(i)/zqs(i)
645           ELSE IF (rneb(i,k) .GE. 1.0) THEN
646              zqn(i) = zq(i)
647              rneb(i,k) = 1.0                 
648              zcond(i) = MAX(0.0,zqn(i)-zqs(i))/(1+zdqs(i))
649              rhcl(i,k)=1.0
650           ELSE
651              zcond(i) = MAX(0.0,zqn(i)-zqs(i))*rneb(i,k)/(1+zdqs(i))
652              rhcl(i,k)=(zqs(i)+zq(i)-zdelq)/2./zqs(i)
653           ENDIF
654        ENDDO
655
656        ELSE
657
658        DO i=1,klon
659           IF (rneb(i,k) .LE. 0.0) THEN
660              zqn(i) = 0.0
661              rneb(i,k) = 0.0
662              zcond(i) = 0.0
663              rhcl(i,k)=zq(i)/zqs(i)
664           ELSE IF (rneb(i,k) .GE. 1.0) THEN
665              zqn(i) = zq(i)
666              rneb(i,k) = 1.0
667              zcond(i) = MAX(0.0,zqn(i)-zqs(i))
668              rhcl(i,k)=1.0
669           ELSE
670              zcond(i) = MAX(0.0,zqn(i)-zqs(i))*rneb(i,k)
671              rhcl(i,k)=(zqs(i)+zq(i)-zdelq)/2./zqs(i)
672           ENDIF
673        ENDDO
674
675
676        ENDIF
677
678        !         do i=1,klon
679        !            IF (rneb(i,k) .LE. 0.0) zqn(i) = 0.0
680        !            IF (rneb(i,k) .GE. 1.0) zqn(i) = zq(i)
681        !            rneb(i,k) = MAX(0.0,MIN(1.0,rneb(i,k)))
682        !c           zcond(i) = MAX(0.0,zqn(i)-zqs(i))*rneb(i,k)/(1.+zdqs(i))
683        !c  On ne divise pas par 1+zdqs pour forcer a avoir l'eau predite par
684        !c  la convection.
685        !c  ATTENTION !!! Il va falloir verifier tout ca.
686        !            zcond(i) = MAX(0.0,zqn(i)-zqs(i))*rneb(i,k)
687        !c           print*,'ZDQS ',zdqs(i)
688        !c--Olivier
689        !            rhcl(i,k)=(zqs(i)+zq(i)-zdelq)/2./zqs(i)
690        !            IF (rneb(i,k) .LE. 0.0) rhcl(i,k)=zq(i)/zqs(i)
691        !            IF (rneb(i,k) .GE. 1.0) rhcl(i,k)=1.0
692        !c--fin
693        !           ENDDO
694     ELSE
695        DO i = 1, klon
696           IF (zq(i).GT.zqs(i)) THEN
697              rneb(i,k) = 1.0
698           ELSE
699              rneb(i,k) = 0.0
700           ENDIF
701           zcond(i) = MAX(0.0,zq(i)-zqs(i))/(1.+zdqs(i))
702        ENDDO
703     ENDIF
704     !
705     DO i = 1, klon
706        zq(i) = zq(i) - zcond(i)
707        !         zt(i) = zt(i) + zcond(i) * RLVTT/RCPD
708     ENDDO
709!AJ<
710     IF (.NOT. ice_thermo) THEN
711        if (iflag_fisrtilp_qsat.lt.1) then
712           DO i = 1, klon
713             zt(i) = zt(i) + zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*zq(i))
714           ENDDO
715        else if (iflag_fisrtilp_qsat.gt.0) then
716           DO i= 1, klon
717             if (lognormale(i)) then
718             zt(i)=Tbef(i)
719             else
720             zt(i) = zt(i) + zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*(zq(i)+zcond(i)))
721             endif
722           ENDDO
723        endif
724     ELSE
725       IF (iflag_t_glace.EQ.0) THEN
726         if (iflag_fisrtilp_qsat.lt.1) then
727           DO i = 1, klon
728              zfice(i) = 1.0 - (zt(i)-t_glace_min_old) / (273.15-t_glace_min_old)
729              zfice(i) = MIN(MAX(zfice(i),0.0),1.0)
730              zfice(i) = zfice(i)**exposant_glace_old
731!             zfice(i) = zfice(i)**nexpo
732              zt(i) = zt(i) + (1.-zfice(i))*zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*zq(i)) &
733                       +zfice(i)*zcond(i) * RLSTT/RCPD/(1.0+RVTMP2*zq(i))
734           ENDDO
735         else
736           DO i=1, klon
737              zfice(i) = 1.0 - (zt(i)-t_glace_min_old) / (273.15-t_glace_min_old)
738              zfice(i) = MIN(MAX(zfice(i),0.0),1.0)
739              zfice(i) = zfice(i)**exposant_glace_old
740!             zfice(i) = zfice(i)**nexpo
741!CR: ATTENTION zt different de Tbef: à corriger
742              zt(i) = zt(i) + (1.-zfice(i))*zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*(zq(i)+zcond(i))) &
743                       +zfice(i)*zcond(i) * RLSTT/RCPD/(1.0+RVTMP2*(zq(i)+zcond(i)))
744           ENDDO
745         endif
746!         print*,zt(i),zrfl(i),zifl(i),'temp1'
747       ELSE ! of IF (iflag_t_glace.EQ.0)
748         CALL icefrac_lsc(klon,zt(:),pplay(:,k)/paprs(:,1), &
749&               t_glace_min,t_glace_max,exposant_glace,zfice(:))
750         if (iflag_fisrtilp_qsat.lt.1) then
751           DO i = 1, klon
752! JBM: icefrac_lsc is now a function contained in microphys_mod
753!             zfice(i) = icefrac_lsc(zt(i), t_glace_min, &
754!                                    t_glace_max, exposant_glace)
755              zt(i) = zt(i) + (1.-zfice(i))*zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*zq(i)) &
756                       +zfice(i)*zcond(i) * RLSTT/RCPD/(1.0+RVTMP2*zq(i))
757           ENDDO
758         else
759           DO i=1, klon
760! JBM: icefrac_lsc is now a function contained in microphys_mod
761!             zfice(i) = icefrac_lsc(zt(i), t_glace_min, &
762!                                    t_glace_max, exposant_glace)
763!CR: ATTENTION zt different de Tbef: à corriger
764              zt(i) = zt(i) + (1.-zfice(i))*zcond(i) * RLVTT/RCPD/(1.0+RVTMP2*(zq(i)+zcond(i))) &
765                       +zfice(i)*zcond(i) * RLSTT/RCPD/(1.0+RVTMP2*(zq(i)+zcond(i)))
766           ENDDO
767         endif
768!         print*,zt(i),zrfl(i),zifl(i),'temp1'
769       ENDIF
770     ENDIF
771!>AJ
772     !
773     ! Partager l'eau condensee en precipitation et eau liquide nuageuse
774     !
775     DO i = 1, klon
776        IF (rneb(i,k).GT.0.0) THEN
777           zoliq(i) = zcond(i)
778           zrho(i) = pplay(i,k) / zt(i) / RD
779           zdz(i) = (paprs(i,k)-paprs(i,k+1)) / (zrho(i)*RG)
780        ENDIF
781     ENDDO
782!AJ<
783     IF (.NOT. ice_thermo) THEN
784       IF (iflag_t_glace.EQ.0) THEN
785         DO i = 1, klon
786            IF (rneb(i,k).GT.0.0) THEN
787               zfice(i) = 1.0 - (zt(i)-t_glace_min_old) / (273.13-t_glace_min_old)
788               zfice(i) = MIN(MAX(zfice(i),0.0),1.0)
789               zfice(i) = zfice(i)**exposant_glace_old
790!              zfice(i) = zfice(i)**nexpo
791         !!      zfice(i)=0.
792            ENDIF
793         ENDDO
794       ELSE ! of IF (iflag_t_glace.EQ.0)
795         CALL icefrac_lsc(klon,zt(:),pplay(:,k)/paprs(:,1), &
796&               t_glace_min,t_glace_max,exposant_glace,zfice(:))
797!        DO i = 1, klon
798!           IF (rneb(i,k).GT.0.0) THEN
799! JBM: icefrac_lsc is now a function contained in microphys_mod
800!             zfice(i) = icefrac_lsc(zt(i), t_glace_min, &
801!                                    t_glace_max, exposant_glace)
802!           ENDIF
803!        ENDDO
804       ENDIF
805     ENDIF
806     DO i = 1, klon
807        IF (rneb(i,k).GT.0.0) THEN
808           zneb(i) = MAX(rneb(i,k), seuil_neb)
809     !      zt(i) = zt(i)+zcond(i)*zfice(i)*RLMLT/RCPD/(1.0+RVTMP2*zq(i)) 
810!           print*,zt(i),'fractionglace'
811!>AJ
812           radliq(i,k) = zoliq(i)/REAL(ninter+1)
813        ENDIF
814     ENDDO
815     !
816     DO n = 1, ninter
817        DO i = 1, klon
818           IF (rneb(i,k).GT.0.0) THEN
819              zrhol(i) = zrho(i) * zoliq(i) / zneb(i)
820              ! Initialization of zpluie and zice:
821              zpluie=0
822              zice=0
823              IF (zneb(i).EQ.seuil_neb) THEN
824                 ztot = 0.0
825              ELSE
826                 !  quantite d'eau a eliminer: zchau
827                 !  meme chose pour la glace: zfroi
828                 if (ptconv(i,k)) then
829                    zcl   =cld_lc_con
830                    zct   =1./cld_tau_con
831                    zfroi    = dtime/REAL(ninter)/zdz(i)*zoliq(i) &
832                         *fallvc(zrhol(i)) * zfice(i)
833                 else
834                    zcl   =cld_lc_lsc
835                    zct   =1./cld_tau_lsc
836                    zfroi    = dtime/REAL(ninter)/zdz(i)*zoliq(i) &
837                         *fallvs(zrhol(i)) * zfice(i)
838                 endif
839                 zchau    = zct   *dtime/REAL(ninter) * zoliq(i) &
840                      *(1.0-EXP(-(zoliq(i)/zneb(i)/zcl   )**2)) *(1.-zfice(i))
841!AJ<
842                 IF (.NOT. ice_thermo) THEN
843                   ztot    = zchau + zfroi
844                 ELSE
845                   zpluie = MIN(MAX(zchau,0.0),zoliq(i)*(1.-zfice(i)))
846                   zice = MIN(MAX(zfroi,0.0),zoliq(i)*zfice(i))
847                   ztot    = zpluie    + zice
848                 ENDIF
849!>AJ
850                 ztot    = MAX(ztot   ,0.0)
851              ENDIF
852              ztot    = MIN(ztot,zoliq(i))
853!AJ<
854     !         zoliqp = MAX(zoliq(i)*(1.-zfice(i))-1.*zpluie   , 0.0)
855     !         zoliqi = MAX(zoliq(i)*zfice(i)-1.*zice   , 0.0)
856              zoliqp(i) = MAX(zoliq(i)*(1.-zfice(i))-1.*zpluie  , 0.0)
857              zoliqi(i) = MAX(zoliq(i)*zfice(i)-1.*zice  , 0.0)
858              zoliq(i) = MAX(zoliq(i)-ztot   , 0.0)
859!>AJ
860              radliq(i,k) = radliq(i,k) + zoliq(i)/REAL(ninter+1)
861           ENDIF
862        ENDDO
863     ENDDO
864     !
865         IF (.NOT. ice_thermo) THEN
866       DO i = 1, klon
867         IF (rneb(i,k).GT.0.0) THEN
868           d_ql(i,k) = zoliq(i)
869           zrfl(i) = zrfl(i)+ MAX(zcond(i)-zoliq(i),0.0) &
870                * (paprs(i,k)-paprs(i,k+1))/(RG*dtime)
871         ENDIF
872       ENDDO
873     ELSE
874       DO i = 1, klon
875         IF (rneb(i,k).GT.0.0) THEN
876           d_ql(i,k) = zoliq(i)
877!AJ<
878           zrfl(i) = zrfl(i)+ MAX(zcond(i)*(1.-zfice(i))-zoliqp(i),0.0) &
879               *(paprs(i,k)-paprs(i,k+1))/(RG*dtime)
880           zifl(i) = zifl(i)+ MAX(zcond(i)*zfice(i)-zoliqi(i),0.0) &
881                    *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 
882     !      zrfl(i) = zrfl(i)+  zpluie                         &
883     !          *(paprs(i,k)-paprs(i,k+1))/(RG*dtime)
884     !      zifl(i) = zifl(i)+  zice                    &
885     !               *(paprs(i,k)-paprs(i,k+1))/(RG*dtime)                                   
886
887         ENDIF                     
888       ENDDO
889     ENDIF
890
891     IF (ice_thermo) THEN
892       DO i = 1, klon
893           zmelt = ((zt(i)-273.15)/(ztfondue-273.15))**2
894           zmelt = MIN(MAX(zmelt,0.),1.)
895           zrfl(i)=zrfl(i)+zmelt*zifl(i)
896           zifl(i)=zifl(i)*(1.-zmelt)
897!           print*,zt(i),'octavio1'
898           zt(i)=zt(i)-zifl(i)*zmelt*(RG*dtime)/(paprs(i,k)-paprs(i,k+1)) &
899                      *RLMLT/RCPD/(1.0+RVTMP2*zq(i))
900!           print*,zt(i),zrfl(i),zifl(i),zmelt,'octavio2'
901       ENDDO
902     ENDIF
903
904       
905     IF (.NOT. ice_thermo) THEN
906       DO i = 1, klon
907         IF (zt(i).LT.RTT) THEN
908           psfl(i,k)=zrfl(i)
909         ELSE
910           prfl(i,k)=zrfl(i)
911         ENDIF
912       ENDDO
913     ELSE
914     ! JAM*************************************************
915     ! Revoir partie ci-dessous: à quoi servent psfl et prfl?
916     ! *****************************************************
917
918       DO i = 1, klon
919     !   IF (zt(i).LT.RTT) THEN
920           psfl(i,k)=zifl(i)
921     !   ELSE
922           prfl(i,k)=zrfl(i)
923     !   ENDIF
924!>AJ
925       ENDDO
926     ENDIF
927     !
928     !
929     ! Calculer les tendances de q et de t:
930     !
931     DO i = 1, klon
932        d_q(i,k) = zq(i) - q(i,k)
933        d_t(i,k) = zt(i) - t(i,k)
934     ENDDO
935     !
936     !AA--------------- Calcul du lessivage stratiforme  -------------
937
938     DO i = 1,klon
939        !
940        if(zcond(i).gt.zoliq(i)+1.e-10) then
941         beta(i,k) = (zcond(i)-zoliq(i))/zcond(i)/dtime
942        else
943         beta(i,k) = 0.
944        endif
945        zprec_cond(i) = MAX(zcond(i)-zoliq(i),0.0) &
946             * (paprs(i,k)-paprs(i,k+1))/RG
947        IF (rneb(i,k).GT.0.0.and.zprec_cond(i).gt.0.) THEN
948           !AA lessivage nucleation LMD5 dans la couche elle-meme
949          IF (iflag_t_glace.EQ.0) THEN
950           if (t(i,k) .GE. t_glace_min_old) THEN
951              zalpha_tr = a_tr_sca(3)
952           else
953              zalpha_tr = a_tr_sca(4)
954           endif
955          ELSE ! of IF (iflag_t_glace.EQ.0)
956           if (t(i,k) .GE. t_glace_min) THEN
957              zalpha_tr = a_tr_sca(3)
958           else
959              zalpha_tr = a_tr_sca(4)
960           endif
961          ENDIF
962           zfrac_lessi = 1. - EXP(zalpha_tr*zprec_cond(i)/zneb(i))
963           pfrac_nucl(i,k)=pfrac_nucl(i,k)*(1.-zneb(i)*zfrac_lessi)
964           frac_nucl(i,k)= 1.-zneb(i)*zfrac_lessi
965           !
966           ! nucleation avec un facteur -1 au lieu de -0.5
967           zfrac_lessi = 1. - EXP(-zprec_cond(i)/zneb(i))
968           pfrac_1nucl(i,k)=pfrac_1nucl(i,k)*(1.-zneb(i)*zfrac_lessi)
969        ENDIF
970        !
971     ENDDO      ! boucle sur i
972     !
973     !AA Lessivage par impaction dans les couches en-dessous
974     DO kk = k-1, 1, -1
975        DO i = 1, klon
976           IF (rneb(i,k).GT.0.0.and.zprec_cond(i).gt.0.) THEN
977             IF (iflag_t_glace.EQ.0) THEN
978              if (t(i,kk) .GE. t_glace_min_old) THEN
979                 zalpha_tr = a_tr_sca(1)
980              else
981                 zalpha_tr = a_tr_sca(2)
982              endif
983             ELSE ! of IF (iflag_t_glace.EQ.0)
984              if (t(i,kk) .GE. t_glace_min) THEN
985                 zalpha_tr = a_tr_sca(1)
986              else
987                 zalpha_tr = a_tr_sca(2)
988              endif
989             ENDIF
990              zfrac_lessi = 1. - EXP(zalpha_tr*zprec_cond(i)/zneb(i))
991              pfrac_impa(i,kk)=pfrac_impa(i,kk)*(1.-zneb(i)*zfrac_lessi)
992              frac_impa(i,kk)= 1.-zneb(i)*zfrac_lessi
993           ENDIF
994        ENDDO
995     ENDDO
996     !
997     !AA----------------------------------------------------------
998     !                     FIN DE BOUCLE SUR K   
999  end DO
1000  !
1001  !AA-----------------------------------------------------------
1002  !
1003  ! Pluie ou neige au sol selon la temperature de la 1ere couche
1004  !
1005  DO i = 1, klon
1006     IF ((t(i,1)+d_t(i,1)) .LT. RTT) THEN
1007!AJ<
1008!!        snow(i) = zrfl(i)
1009        snow(i) = zrfl(i)+zifl(i)
1010!>AJ
1011        zlh_solid(i) = RLSTT-RLVTT
1012     ELSE
1013        rain(i) = zrfl(i)
1014        zlh_solid(i) = 0.
1015     ENDIF
1016  ENDDO
1017  !
1018  ! For energy conservation : when snow is present, the solification
1019  ! latent heat is considered.
1020  DO k = 1, klev
1021     DO i = 1, klon
1022        zcpair=RCPD*(1.0+RVTMP2*(q(i,k)+d_q(i,k)))
1023        zmair=(paprs(i,k)-paprs(i,k+1))/RG
1024        zm_solid = (prfl(i,k)-prfl(i,k+1)+psfl(i,k)-psfl(i,k+1))*dtime
1025        d_t(i,k) = d_t(i,k) + zlh_solid(i) *zm_solid / (zcpair*zmair)
1026     END DO
1027  END DO
1028  !
1029
1030  if (ncoreczq>0) then
1031     WRITE(lunout,*)'WARNING : ZQ dans fisrtilp ',ncoreczq,' val < 1.e-15.'
1032  endif
1033
1034END SUBROUTINE fisrtilp
Note: See TracBrowser for help on using the repository browser.