/[lmdze]/trunk/phylmd/fisrtilp.f
ViewVC logotype

Annotation of /trunk/phylmd/fisrtilp.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 108 - (hide annotations)
Tue Sep 16 14:00:41 2014 UTC (9 years, 8 months ago) by guez
File size: 16995 byte(s)
Imported writefield from LMDZ. Close at the end of gcm the files which
were created by writefiled (not done in LMDZ).

Removed procedures for the output of Grads files. Removed calls to
dump2d. In guide, replaced calls to wrgrads by calls to writefield.

In vlspltqs, removed redundant programming of saturation
pressure. Call foeew from module FCTTRE instead.

Bug fix in interpre: size of w exceeding size of correponding actual
argument wg in advtrac.

In leapfrog, call guide until the end of the run, instead of six hours
before the end.

Bug fix in readsulfate_preind: type of arguments.

1 guez 68 module fisrtilp_m
2 guez 3
3 guez 68 IMPLICIT NONE
4 guez 3
5 guez 68 contains
6 guez 3
7 guez 68 SUBROUTINE fisrtilp(dtime, paprs, pplay, t, q, ptconv, ratqs, d_t, d_q, &
8     d_ql, rneb, radliq, rain, snow, pfrac_impa, pfrac_nucl, pfrac_1nucl, &
9     frac_impa, frac_nucl, prfl, psfl, rhcl)
10 guez 3
11 guez 68 ! From phylmd/fisrtilp.F, version 1.2 2004/11/09 16:55:40
12 guez 78 ! First author: Z. X. Li (LMD/CNRS), 20 mars 1995
13     ! Other authors: Olivier, AA, IM, YM, MAF
14 guez 3
15 guez 73 ! Objet : condensation et précipitation stratiforme, schéma de
16 guez 68 ! nuage, schéma de condensation à grande échelle (pluie).
17 guez 3
18 guez 78 USE comfisrtilp, ONLY: cld_lc_con, cld_lc_lsc, cld_tau_con, &
19     cld_tau_lsc, coef_eva, ffallv_con, ffallv_lsc, iflag_pdf, reevap_ice
20 guez 68 USE dimphy, ONLY: klev, klon
21 guez 78 USE fcttre, ONLY: dqsatl, dqsats, foede, foeew, qsatl, qsats, thermcep
22     USE numer_rec_95, ONLY: nr_erf
23 guez 68 USE suphec_m, ONLY: rcpd, rd, retv, rg, rlstt, rlvtt, rtt
24     USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2
25 guez 3
26 guez 68 ! Arguments:
27 guez 3
28 guez 78 REAL, INTENT (IN):: dtime ! intervalle du temps (s)
29     REAL, INTENT (IN):: paprs(klon, klev+1) ! pression a inter-couche
30 guez 68 REAL, INTENT (IN):: pplay(klon, klev) ! pression au milieu de couche
31     REAL, INTENT (IN):: t(klon, klev) ! temperature (K)
32 guez 73 REAL, INTENT (IN):: q(klon, klev) ! humidite specifique (kg/kg)
33 guez 78 LOGICAL, INTENT (IN):: ptconv(klon, klev)
34 guez 73
35 guez 78 REAL, INTENT (IN):: ratqs(klon, klev)
36     ! determine la largeur de distribution de vapeur
37 guez 3
38 guez 78 REAL, INTENT (out):: d_t(klon, klev) ! incrementation de la temperature (K)
39     REAL, INTENT (out):: d_q(klon, klev) ! incrementation de la vapeur d'eau
40     REAL, INTENT (out):: d_ql(klon, klev) ! incrementation de l'eau liquide
41     REAL, INTENT (out):: rneb(klon, klev) ! fraction nuageuse
42 guez 3
43 guez 78 REAL, INTENT (out):: radliq(klon, klev)
44     ! eau liquide utilisee dans rayonnement
45 guez 73
46 guez 78 REAL, INTENT (out):: rain(klon) ! pluies (mm/s)
47     REAL, INTENT (out):: snow(klon) ! neige (mm/s)
48    
49     ! Coeffients de fraction lessivee :
50     REAL, INTENT (inout):: pfrac_impa(klon, klev)
51     REAL, INTENT (inout):: pfrac_nucl(klon, klev)
52     REAL, INTENT (inout):: pfrac_1nucl(klon, klev)
53    
54     ! Fraction d'aerosols lessivee par impaction
55     REAL, INTENT (out):: frac_impa(klon, klev)
56    
57     ! Fraction d'aerosols lessivee par nucleation
58     REAL, INTENT (out):: frac_nucl(klon, klev)
59    
60     REAL, INTENT (out):: prfl(klon, klev+1)
61     ! flux d'eau precipitante aux interfaces (kg/m2/s)
62    
63     REAL, INTENT (out):: psfl(klon, klev+1)
64     ! flux d'eau precipitante aux interfaces (kg/m2/s)
65    
66     REAL, INTENT (out):: rhcl(klon, klev) ! humidite relative en ciel clair
67    
68 guez 73 ! Local:
69    
70 guez 68 REAL zct(klon), zcl(klon)
71 guez 3
72 guez 68 ! Options du programme:
73 guez 22
74 guez 68 REAL seuil_neb ! un nuage existe vraiment au-dela
75     PARAMETER (seuil_neb=0.001)
76 guez 22
77 guez 68 INTEGER ninter ! sous-intervals pour la precipitation
78     PARAMETER (ninter=5)
79 guez 78 LOGICAL evap_prec ! evaporation de la pluie
80 guez 68 PARAMETER (evap_prec=.TRUE.)
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)
83 guez 22
84 guez 78 LOGICAL cpartiel ! condensation partielle
85 guez 68 PARAMETER (cpartiel=.TRUE.)
86     REAL t_coup
87     PARAMETER (t_coup=234.0)
88 guez 22
89 guez 68 INTEGER i, k, n, kk
90 guez 103 REAL zqs(klon), zdqs(klon), zcor, zcvm5
91     logical zdelta
92 guez 68 REAL zrfl(klon), zrfln(klon), zqev, zqevt
93     REAL zoliq(klon), zcond(klon), zq(klon), zqn(klon), zdelq
94     REAL ztglace, zt(klon)
95 guez 78 INTEGER nexpo ! exponentiel pour glace/eau
96 guez 68 REAL zdz(klon), zrho(klon), ztot(klon), zrhol(klon)
97     REAL zchau(klon), zfroi(klon), zfice(klon), zneb(klon)
98 guez 22
99 guez 78 LOGICAL:: appel1er = .TRUE.
100 guez 22
101 guez 78 ! Variables traceurs:
102     ! Provisoire !!! Parametres alpha du lessivage
103     ! A priori on a 4 scavenging numbers possibles
104 guez 22
105 guez 78 REAL, save:: a_tr_sca(4)
106 guez 22
107 guez 68 ! Variables intermediaires
108 guez 22
109 guez 68 REAL zalpha_tr
110     REAL zfrac_lessi
111     REAL zprec_cond(klon)
112     REAL zmair, zcpair, zcpeau
113 guez 78 ! Pour la conversion eau-neige
114 guez 68 REAL zlh_solid(klon), zm_solid
115 guez 22
116 guez 78 !---------------------------------------------------------------
117    
118 guez 68 zdelq = 0.0
119 guez 22
120 guez 68 IF (appel1er) THEN
121     PRINT *, 'fisrtilp, ninter:', ninter
122     PRINT *, 'fisrtilp, evap_prec:', evap_prec
123     PRINT *, 'fisrtilp, cpartiel:', cpartiel
124     IF (abs(dtime / real(ninter) - 360.) > 0.001) THEN
125     PRINT *, "fisrtilp : ce n'est pas prévu, voir Z. X. Li", dtime
126     PRINT *, 'Je préfère un sous-intervalle de 6 minutes.'
127     END IF
128     appel1er = .FALSE.
129 guez 22
130 guez 78 ! initialiation provisoire
131 guez 68 a_tr_sca(1) = -0.5
132     a_tr_sca(2) = -0.5
133     a_tr_sca(3) = -0.5
134     a_tr_sca(4) = -0.5
135 guez 22
136 guez 78 ! Initialisation a 1 des coefs des fractions lessivees
137 guez 68 DO k = 1, klev
138     DO i = 1, klon
139     pfrac_nucl(i, k) = 1.
140     pfrac_1nucl(i, k) = 1.
141     pfrac_impa(i, k) = 1.
142     END DO
143     END DO
144 guez 78 END IF
145 guez 22
146 guez 78 ! Initialisation a 0 de zoliq
147 guez 68 DO i = 1, klon
148     zoliq(i) = 0.
149     END DO
150     ! Determiner les nuages froids par leur temperature
151 guez 78 ! nexpo regle la raideur de la transition eau liquide / eau glace.
152 guez 22
153 guez 68 ztglace = rtt - 15.0
154     nexpo = 6
155 guez 22
156 guez 68 ! Initialiser les sorties:
157 guez 22
158 guez 68 DO k = 1, klev + 1
159     DO i = 1, klon
160     prfl(i, k) = 0.0
161     psfl(i, k) = 0.0
162     END DO
163     END DO
164 guez 22
165 guez 68 DO k = 1, klev
166     DO i = 1, klon
167     d_t(i, k) = 0.0
168     d_q(i, k) = 0.0
169     d_ql(i, k) = 0.0
170     rneb(i, k) = 0.0
171     radliq(i, k) = 0.0
172     frac_nucl(i, k) = 1.
173     frac_impa(i, k) = 1.
174     END DO
175     END DO
176     DO i = 1, klon
177     rain(i) = 0.0
178     snow(i) = 0.0
179     END DO
180 guez 22
181 guez 68 ! Initialiser le flux de precipitation a zero
182 guez 22
183 guez 68 DO i = 1, klon
184     zrfl(i) = 0.0
185     zneb(i) = seuil_neb
186     END DO
187 guez 22
188 guez 78 ! Pour plus de securite
189 guez 22
190 guez 68 zalpha_tr = 0.
191     zfrac_lessi = 0.
192 guez 22
193 guez 78 loop_vertical: DO k = klev, 1, -1
194 guez 68 DO i = 1, klon
195     zt(i) = t(i, k)
196     zq(i) = q(i, k)
197     END DO
198 guez 22
199 guez 68 ! Calculer la varition de temp. de l'air du a la chaleur sensible
200     ! transporter par la pluie.
201     ! Il resterait a rajouter cet effet de la chaleur sensible sur les
202     ! flux de surface, du a la diff. de temp. entre le 1er niveau et la
203     ! surface.
204 guez 22
205 guez 68 DO i = 1, klon
206 guez 78 IF (k <= klev - 1) THEN
207 guez 68 zmair = (paprs(i, k)-paprs(i, k+1))/rg
208     zcpair = rcpd*(1.0+rvtmp2*zq(i))
209     zcpeau = rcpd*rvtmp2
210     zt(i) = ((t(i, k + 1) + d_t(i, k + 1)) * zrfl(i) * dtime &
211     * zcpeau + zmair * zcpair* zt(i)) &
212     / (zmair * zcpair + zrfl(i) * dtime * zcpeau)
213     END IF
214     END DO
215 guez 22
216 guez 68 IF (evap_prec) THEN
217 guez 78 ! Calculer l'evaporation de la precipitation
218 guez 68 DO i = 1, klon
219     IF (zrfl(i)>0.) THEN
220     IF (thermcep) THEN
221 guez 103 zqs(i) = r2es*foeew(zt(i), rtt >= zt(i))/pplay(i, k)
222 guez 68 zqs(i) = min(0.5, zqs(i))
223     zcor = 1./(1.-retv*zqs(i))
224     zqs(i) = zqs(i)*zcor
225     ELSE
226     IF (zt(i)<t_coup) THEN
227     zqs(i) = qsats(zt(i))/pplay(i, k)
228     ELSE
229     zqs(i) = qsatl(zt(i))/pplay(i, k)
230     END IF
231     END IF
232     zqev = max(0.0, (zqs(i)-zq(i))*zneb(i))
233     zqevt = coef_eva*(1.0-zq(i)/zqs(i))*sqrt(zrfl(i))* &
234     (paprs(i, k)-paprs(i, k+1))/pplay(i, k)*zt(i)*rd/rg
235     zqevt = max(0.0, min(zqevt, zrfl(i)))*rg*dtime/ &
236     (paprs(i, k)-paprs(i, k+1))
237     zqev = min(zqev, zqevt)
238     zrfln(i) = zrfl(i) - zqev*(paprs(i, k)-paprs(i, k+1))/rg/dtime
239 guez 22
240 guez 68 ! pour la glace, on réévapore toute la précip dans la
241     ! couche du dessous la glace venant de la couche du
242     ! dessus est simplement dans la couche du dessous.
243 guez 22
244 guez 68 IF (zt(i)<t_coup .AND. reevap_ice) zrfln(i) = 0.
245 guez 3
246 guez 68 zq(i) = zq(i) - (zrfln(i)-zrfl(i))*(rg/(paprs(i, k)-paprs(i, &
247     k+1)))*dtime
248     zt(i) = zt(i) + (zrfln(i)-zrfl(i))*(rg/(paprs(i, k)-paprs(i, &
249     k+1)))*dtime*rlvtt/rcpd/(1.0+rvtmp2*zq(i))
250     zrfl(i) = zrfln(i)
251     END IF
252     END DO
253     END IF
254 guez 3
255 guez 68 ! Calculer Qs et L/Cp*dQs/dT:
256 guez 3
257 guez 68 IF (thermcep) THEN
258     DO i = 1, klon
259 guez 103 zdelta = rtt >= zt(i)
260     zcvm5 = merge(r5ies*rlstt, r5les*rlvtt, zdelta)
261 guez 68 zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*zq(i))
262     zqs(i) = r2es*foeew(zt(i), zdelta)/pplay(i, k)
263     zqs(i) = min(0.5, zqs(i))
264     zcor = 1./(1.-retv*zqs(i))
265     zqs(i) = zqs(i)*zcor
266     zdqs(i) = foede(zt(i), zdelta, zcvm5, zqs(i), zcor)
267     END DO
268     ELSE
269     DO i = 1, klon
270     IF (zt(i)<t_coup) THEN
271     zqs(i) = qsats(zt(i))/pplay(i, k)
272     zdqs(i) = dqsats(zt(i), zqs(i))
273     ELSE
274     zqs(i) = qsatl(zt(i))/pplay(i, k)
275     zdqs(i) = dqsatl(zt(i), zqs(i))
276     END IF
277     END DO
278     END IF
279 guez 3
280 guez 68 ! Determiner la condensation partielle et calculer la quantite
281     ! de l'eau condensee:
282 guez 3
283 guez 68 IF (cpartiel) THEN
284 guez 78 ! Calcul de l'eau condensee et de la fraction nuageuse et de l'eau
285     ! nuageuse a partir des PDF de Sandrine Bony.
286     ! rneb : fraction nuageuse
287     ! zqn : eau totale dans le nuage
288     ! zcond : eau condensee moyenne dans la maille.
289 guez 3
290 guez 78 ! on prend en compte le réchauffement qui diminue
291     ! la partie condensée
292 guez 3
293 guez 78 ! Version avec les ratqs
294 guez 3
295 guez 68 IF (iflag_pdf==0) THEN
296     DO i = 1, klon
297     zdelq = min(ratqs(i, k), 0.99)*zq(i)
298     rneb(i, k) = (zq(i)+zdelq-zqs(i))/(2.0*zdelq)
299     zqn(i) = (zq(i)+zdelq+zqs(i))/2.0
300     END DO
301     ELSE
302 guez 78 ! Version avec les nouvelles PDFs.
303 guez 68 DO i = 1, klon
304 guez 78 IF (zq(i) < 1E-15) THEN
305     zq(i) = 1E-15
306 guez 68 END IF
307     END DO
308     DO i = 1, klon
309     zpdf_sig(i) = ratqs(i, k)*zq(i)
310     zpdf_k(i) = -sqrt(log(1.+(zpdf_sig(i)/zq(i))**2))
311     zpdf_delta(i) = log(zq(i)/zqs(i))
312     zpdf_a(i) = zpdf_delta(i)/(zpdf_k(i)*sqrt(2.))
313     zpdf_b(i) = zpdf_k(i)/(2.*sqrt(2.))
314     zpdf_e1(i) = zpdf_a(i) - zpdf_b(i)
315     zpdf_e1(i) = sign(min(abs(zpdf_e1(i)), 5.), zpdf_e1(i))
316     zpdf_e1(i) = 1. - nr_erf(zpdf_e1(i))
317     zpdf_e2(i) = zpdf_a(i) + zpdf_b(i)
318     zpdf_e2(i) = sign(min(abs(zpdf_e2(i)), 5.), zpdf_e2(i))
319     zpdf_e2(i) = 1. - nr_erf(zpdf_e2(i))
320     IF (zpdf_e1(i)<1.E-10) THEN
321     rneb(i, k) = 0.
322     zqn(i) = zqs(i)
323     ELSE
324     rneb(i, k) = 0.5*zpdf_e1(i)
325     zqn(i) = zq(i)*zpdf_e2(i)/zpdf_e1(i)
326     END IF
327     END DO
328 guez 78 END IF
329 guez 22
330 guez 68 DO i = 1, klon
331     IF (rneb(i, k)<=0.0) zqn(i) = 0.0
332     IF (rneb(i, k)>=1.0) zqn(i) = zq(i)
333 guez 78 rneb(i, k) = max(0., min(1., rneb(i, k)))
334     ! On ne divise pas par 1 + zdqs pour forcer à avoir l'eau
335     ! prédite par la convection. Attention : il va falloir
336     ! verifier tout ca.
337     zcond(i) = max(0., zqn(i)-zqs(i))*rneb(i, k)
338 guez 68 rhcl(i, k) = (zqs(i)+zq(i)-zdelq)/2./zqs(i)
339 guez 78 IF (rneb(i, k) <= 0.) rhcl(i, k) = zq(i) / zqs(i)
340     IF (rneb(i, k) >= 1.) rhcl(i, k) = 1.
341 guez 68 END DO
342     ELSE
343     DO i = 1, klon
344     IF (zq(i)>zqs(i)) THEN
345     rneb(i, k) = 1.0
346     ELSE
347     rneb(i, k) = 0.0
348     END IF
349     zcond(i) = max(0.0, zq(i)-zqs(i))/(1.+zdqs(i))
350     END DO
351     END IF
352 guez 22
353 guez 68 DO i = 1, klon
354     zq(i) = zq(i) - zcond(i)
355     zt(i) = zt(i) + zcond(i)*rlvtt/rcpd/(1.0+rvtmp2*zq(i))
356     END DO
357 guez 22
358 guez 68 ! Partager l'eau condensee en precipitation et eau liquide nuageuse
359 guez 22
360 guez 68 DO i = 1, klon
361     IF (rneb(i, k)>0.0) THEN
362     zoliq(i) = zcond(i)
363     zrho(i) = pplay(i, k)/zt(i)/rd
364     zdz(i) = (paprs(i, k)-paprs(i, k+1))/(zrho(i)*rg)
365     zfice(i) = 1.0 - (zt(i)-ztglace)/(273.13-ztglace)
366     zfice(i) = min(max(zfice(i), 0.0), 1.0)
367     zfice(i) = zfice(i)**nexpo
368     zneb(i) = max(rneb(i, k), seuil_neb)
369     radliq(i, k) = zoliq(i)/real(ninter+1)
370     END IF
371     END DO
372 guez 22
373 guez 68 DO n = 1, ninter
374     DO i = 1, klon
375     IF (rneb(i, k)>0.0) THEN
376     zrhol(i) = zrho(i)*zoliq(i)/zneb(i)
377 guez 22
378 guez 68 IF (ptconv(i, k)) THEN
379     zcl(i) = cld_lc_con
380     zct(i) = 1./cld_tau_con
381     ELSE
382     zcl(i) = cld_lc_lsc
383     zct(i) = 1./cld_tau_lsc
384     END IF
385 guez 78 ! quantité d'eau à élminier.
386 guez 68 zchau(i) = zct(i)*dtime/real(ninter)*zoliq(i)* &
387     (1.0-exp(-(zoliq(i)/zneb(i)/zcl(i))**2))*(1.-zfice(i))
388 guez 78 ! meme chose pour la glace.
389 guez 68 IF (ptconv(i, k)) THEN
390     zfroi(i) = dtime/real(ninter)/zdz(i)*zoliq(i)* &
391     fallvc(zrhol(i))*zfice(i)
392     ELSE
393     zfroi(i) = dtime/real(ninter)/zdz(i)*zoliq(i)* &
394     fallvs(zrhol(i))*zfice(i)
395     END IF
396     ztot(i) = zchau(i) + zfroi(i)
397     IF (zneb(i)==seuil_neb) ztot(i) = 0.0
398     ztot(i) = min(max(ztot(i), 0.0), zoliq(i))
399     zoliq(i) = max(zoliq(i)-ztot(i), 0.0)
400     radliq(i, k) = radliq(i, k) + zoliq(i)/real(ninter+1)
401     END IF
402     END DO
403     END DO
404 guez 22
405 guez 68 DO i = 1, klon
406     IF (rneb(i, k)>0.0) THEN
407     d_ql(i, k) = zoliq(i)
408     zrfl(i) = zrfl(i) + max(zcond(i) - zoliq(i), 0.) &
409     * (paprs(i, k) - paprs(i, k + 1)) / (rg * dtime)
410     END IF
411     IF (zt(i)<rtt) THEN
412     psfl(i, k) = zrfl(i)
413     ELSE
414     prfl(i, k) = zrfl(i)
415     END IF
416     END DO
417 guez 22
418 guez 68 ! Calculer les tendances de q et de t:
419     DO i = 1, klon
420     d_q(i, k) = zq(i) - q(i, k)
421     d_t(i, k) = zt(i) - t(i, k)
422     END DO
423 guez 22
424 guez 78 ! Calcul du lessivage stratiforme
425 guez 68 DO i = 1, klon
426     zprec_cond(i) = max(zcond(i)-zoliq(i), 0.0)* &
427     (paprs(i, k)-paprs(i, k+1))/rg
428     IF (rneb(i, k)>0.0 .AND. zprec_cond(i)>0.) THEN
429 guez 78 ! lessivage nucleation LMD5 dans la couche elle-meme
430 guez 68 IF (t(i, k)>=ztglace) THEN
431     zalpha_tr = a_tr_sca(3)
432     ELSE
433     zalpha_tr = a_tr_sca(4)
434     END IF
435     zfrac_lessi = 1. - exp(zalpha_tr*zprec_cond(i)/zneb(i))
436     pfrac_nucl(i, k) = pfrac_nucl(i, k)*(1.-zneb(i)*zfrac_lessi)
437     frac_nucl(i, k) = 1. - zneb(i)*zfrac_lessi
438 guez 22
439 guez 68 ! nucleation avec un facteur -1 au lieu de -0.5
440     zfrac_lessi = 1. - exp(-zprec_cond(i)/zneb(i))
441     pfrac_1nucl(i, k) = pfrac_1nucl(i, k)*(1.-zneb(i)*zfrac_lessi)
442     END IF
443 guez 78 END DO
444 guez 22
445 guez 78 ! Lessivage par impaction dans les couches en-dessous
446     ! boucle sur i
447 guez 68 DO kk = k - 1, 1, -1
448     DO i = 1, klon
449 guez 78 IF (rneb(i, k)>0. .AND. zprec_cond(i)>0.) THEN
450 guez 68 IF (t(i, kk)>=ztglace) THEN
451     zalpha_tr = a_tr_sca(1)
452     ELSE
453     zalpha_tr = a_tr_sca(2)
454     END IF
455     zfrac_lessi = 1. - exp(zalpha_tr*zprec_cond(i)/zneb(i))
456     pfrac_impa(i, kk) = pfrac_impa(i, kk)*(1.-zneb(i)*zfrac_lessi)
457     frac_impa(i, kk) = 1. - zneb(i)*zfrac_lessi
458     END IF
459     END DO
460     END DO
461 guez 78 end DO loop_vertical
462 guez 22
463 guez 68 ! Pluie ou neige au sol selon la temperature de la 1ere couche
464    
465     DO i = 1, klon
466     IF ((t(i, 1)+d_t(i, 1))<rtt) THEN
467     snow(i) = zrfl(i)
468     zlh_solid(i) = rlstt - rlvtt
469     ELSE
470     rain(i) = zrfl(i)
471     zlh_solid(i) = 0.
472     END IF
473     END DO
474    
475     ! For energy conservation: when snow is present, the solification
476     ! latent heat is considered.
477     DO k = 1, klev
478     DO i = 1, klon
479     zcpair = rcpd*(1.0+rvtmp2*(q(i, k)+d_q(i, k)))
480     zmair = (paprs(i, k)-paprs(i, k+1))/rg
481     zm_solid = (prfl(i, k)-prfl(i, k+1)+psfl(i, k)-psfl(i, k+1))*dtime
482     d_t(i, k) = d_t(i, k) + zlh_solid(i)*zm_solid/(zcpair*zmair)
483     END DO
484     END DO
485    
486 guez 108 contains
487    
488     ! vitesse de chute pour crystaux de glace
489    
490     REAL function fallvs(zzz)
491     REAL zzz
492     fallvs = 3.29/2.0*((zzz)**0.16)*ffallv_lsc
493     end function fallvs
494    
495     real function fallvc(zzz)
496     REAL zzz
497     fallvc = 3.29/2.0*((zzz)**0.16)*ffallv_con
498     end function fallvc
499    
500 guez 68 END SUBROUTINE fisrtilp
501    
502     end module fisrtilp_m

  ViewVC Help
Powered by ViewVC 1.1.21