/[lmdze]/trunk/Sources/phylmd/Thermcell/thermcell.f
ViewVC logotype

Annotation of /trunk/Sources/phylmd/Thermcell/thermcell.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 178 - (hide annotations)
Fri Mar 11 18:47:26 2016 UTC (8 years, 3 months ago) by guez
File size: 17442 byte(s)
Moved variables date0, deltat, datasz_max, ncvar_ids, point, buff_pos,
buffer, regular from module histcom_var to modules where they are
defined.

Removed procedure ioipslmpp, useless for a sequential program.

Added argument datasz_max to histwrite_real (to avoid circular
dependency with histwrite).

Removed useless variables and computations everywhere.

Changed real litteral constants from default kind to double precision
in lwb, lwu, lwvn, sw1s, swtt, swtt1, swu.

Removed unused arguments: paer of sw, sw1s, sw2s, swclr; pcldsw of
sw1s, sw2s; pdsig, prayl of swr; co2_ppm of clmain, clqh; tsol of
transp_lay; nsrf of screenp; kcrit and kknu of gwstress; pstd of
orosetup.

Added output of relative humidity.

1 guez 54 module thermcell_m
2 guez 3
3 guez 47 IMPLICIT NONE
4 guez 3
5 guez 54 contains
6 guez 3
7 guez 54 SUBROUTINE thermcell(ngrid, nlay, ptimestep, pplay, pplev, pphi, pu, pv, pt, &
8     po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0, r_aspect, l_mix, w2di, &
9     tho)
10 guez 3
11 guez 150 ! Calcul du transport vertical dans la couche limite en pr\'esence
12     ! de "thermiques" explicitement repr\'esent\'es. R\'ecriture \`a partir
13     ! d'un listing papier \`a Habas, le 14/02/00. Le thermique est
14     ! suppos\'e homog\`ene et dissip\'e par m\'elange avec son
15 guez 157 ! environnement. La longueur "l_mix" contr\^ole l'efficacit\'e du
16 guez 150 ! m\'elange. Le calcul du transport des diff\'erentes esp\`eces se fait
17 guez 54 ! en prenant en compte :
18     ! 1. un flux de masse montant
19     ! 2. un flux de masse descendant
20 guez 150 ! 3. un entra\^inement
21     ! 4. un d\'etra\^inement
22 guez 3
23 guez 71 USE dimphy, ONLY : klev, klon
24 guez 54 USE suphec_m, ONLY : rd, rg, rkappa
25 guez 3
26 guez 54 ! arguments:
27 guez 3
28 guez 54 INTEGER ngrid, nlay, w2di
29     real tho
30     real ptimestep, l_mix, r_aspect
31     REAL, intent(in):: pt(ngrid, nlay)
32     real pdtadj(ngrid, nlay)
33 guez 91 REAL, intent(in):: pu(ngrid, nlay)
34     real pduadj(ngrid, nlay)
35     REAL, intent(in):: pv(ngrid, nlay)
36     real pdvadj(ngrid, nlay)
37 guez 54 REAL po(ngrid, nlay), pdoadj(ngrid, nlay)
38     REAL, intent(in):: pplay(ngrid, nlay)
39     real, intent(in):: pplev(ngrid, nlay+1)
40     real, intent(in):: pphi(ngrid, nlay)
41 guez 3
42 guez 54 integer idetr
43     save idetr
44     data idetr/3/
45 guez 3
46 guez 54 ! local:
47 guez 3
48 guez 54 INTEGER ig, k, l, lmaxa(klon), lmix(klon)
49     ! CR: on remplace lmax(klon, klev+1)
50     INTEGER lmax(klon), lmin(klon), lentr(klon)
51     real linter(klon)
52     real zmix(klon), fracazmix(klon)
53 guez 3
54 guez 150 real zmax(klon), zw, zw2(klon, klev+1), ztva(klon, klev)
55 guez 3
56 guez 178 real zlev(klon, klev+1)
57 guez 54 REAL zh(klon, klev), zdhadj(klon, klev)
58     REAL ztv(klon, klev)
59     real zu(klon, klev), zv(klon, klev), zo(klon, klev)
60     real zva(klon, klev)
61     real zua(klon, klev)
62     real zoa(klon, klev)
63 guez 3
64 guez 54 real zha(klon, klev)
65     real wa_moy(klon, klev+1)
66     real fraca(klon, klev+1)
67     real fracc(klon, klev+1)
68     real zf, zf2
69     real thetath2(klon, klev), wth2(klon, klev)
70     common/comtherm/thetath2, wth2
71 guez 3
72 guez 178 integer nsplit
73 guez 54 parameter (nsplit=10)
74 guez 3
75 guez 54 real rho(klon, klev), rhobarz(klon, klev+1), masse(klon, klev)
76     real zpspsk(klon, klev)
77 guez 3
78 guez 54 real wmax(klon), wmaxa(klon)
79     real fracd(klon, klev+1)
80     real xxx(klon, klev+1)
81     real larg_cons(klon, klev+1)
82     real larg_detr(klon, klev+1)
83     real fm0(klon, klev+1), entr0(klon, klev), detr(klon, klev)
84     real fm(klon, klev+1), entr(klon, klev)
85     real fmc(klon, klev+1)
86 guez 3
87 guez 54 !CR:nouvelles variables
88     real f_star(klon, klev+1), entr_star(klon, klev)
89     real entr_star_tot(klon), entr_star2(klon)
90 guez 105 real f(klon)
91 guez 54 real zlevinter(klon)
92 guez 3
93 guez 54 EXTERNAL SCOPY
94 guez 3
95 guez 54 !-----------------------------------------------------------------------
96 guez 3
97 guez 54 ! initialisation:
98 guez 3
99 guez 54 IF(ngrid.NE.klon) THEN
100     PRINT *
101     PRINT *, 'STOP dans convadj'
102     PRINT *, 'ngrid =', ngrid
103     PRINT *, 'klon =', klon
104     ENDIF
105 guez 3
106 guez 54 ! incrementation eventuelle de tendances precedentes:
107 guez 3
108 guez 54 print *, '0 OK convect8'
109 guez 3
110 guez 54 DO l=1, nlay
111     DO ig=1, ngrid
112     zpspsk(ig, l)=(pplay(ig, l)/pplev(ig, 1))**RKAPPA
113     zh(ig, l)=pt(ig, l)/zpspsk(ig, l)
114     zu(ig, l)=pu(ig, l)
115     zv(ig, l)=pv(ig, l)
116     zo(ig, l)=po(ig, l)
117     ztv(ig, l)=zh(ig, l)*(1.+0.61*zo(ig, l))
118     end DO
119     end DO
120 guez 3
121 guez 54 print *, '1 OK convect8'
122 guez 3
123 guez 54 ! See notes, "thermcell.txt"
124     ! Calcul des altitudes des couches
125 guez 3
126 guez 54 do l=2, nlay
127     do ig=1, ngrid
128     zlev(ig, l)=0.5*(pphi(ig, l)+pphi(ig, l-1))/RG
129     enddo
130     enddo
131     do ig=1, ngrid
132     zlev(ig, 1)=0.
133     zlev(ig, nlay+1)=(2.*pphi(ig, klev)-pphi(ig, klev-1))/RG
134     enddo
135 guez 3
136 guez 54 ! Calcul des densites
137 guez 3
138 guez 54 do l=1, nlay
139     do ig=1, ngrid
140     rho(ig, l)=pplay(ig, l)/(zpspsk(ig, l)*RD*zh(ig, l))
141     enddo
142     enddo
143 guez 3
144 guez 54 do l=2, nlay
145     do ig=1, ngrid
146     rhobarz(ig, l)=0.5*(rho(ig, l)+rho(ig, l-1))
147     enddo
148     enddo
149 guez 3
150 guez 54 ! Calcul de w2, quarre de w a partir de la cape
151     ! a partir de w2, on calcule wa, vitesse de l'ascendance
152 guez 3
153 guez 54 ! ATTENTION: Dans cette version, pour cause d'economie de memoire,
154     ! w2 est stoke dans wa
155 guez 3
156 guez 54 ! ATTENTION: dans convect8, on n'utilise le calcule des wa
157     ! independants par couches que pour calculer l'entrainement
158     ! a la base et la hauteur max de l'ascendance.
159 guez 3
160 guez 54 ! Indicages:
161     ! l'ascendance provenant du niveau k traverse l'interface l avec
162     ! une vitesse wa(k, l).
163     ! See notes, "thermcell.txt".
164 guez 3
165 guez 54 !CR: ponderation entrainement des couches instables
166     !def des entr_star tels que entr=f*entr_star
167     do l=1, klev
168     do ig=1, ngrid
169     entr_star(ig, l)=0.
170     enddo
171     enddo
172     ! determination de la longueur de la couche d entrainement
173     do ig=1, ngrid
174     lentr(ig)=1
175     enddo
176 guez 3
177 guez 54 !on ne considere que les premieres couches instables
178     do k=nlay-2, 1, -1
179     do ig=1, ngrid
180     if (ztv(ig, k).gt.ztv(ig, k+1).and. &
181     ztv(ig, k+1).le.ztv(ig, k+2)) then
182     lentr(ig)=k
183     endif
184     enddo
185     enddo
186 guez 3
187 guez 54 ! determination du lmin: couche d ou provient le thermique
188     do ig=1, ngrid
189     lmin(ig)=1
190     enddo
191     do ig=1, ngrid
192     do l=nlay, 2, -1
193     if (ztv(ig, l-1).gt.ztv(ig, l)) then
194     lmin(ig)=l-1
195     endif
196     enddo
197     enddo
198 guez 3
199 guez 54 ! definition de l'entrainement des couches
200     do l=1, klev-1
201     do ig=1, ngrid
202     if (ztv(ig, l).gt.ztv(ig, l+1).and. &
203     l.ge.lmin(ig).and.l.le.lentr(ig)) then
204     entr_star(ig, l)=(ztv(ig, l)-ztv(ig, l+1))* &
205     (zlev(ig, l+1)-zlev(ig, l))
206     endif
207     enddo
208     enddo
209     ! pas de thermique si couches 1->5 stables
210     do ig=1, ngrid
211     if (lmin(ig).gt.5) then
212     do l=1, klev
213     entr_star(ig, l)=0.
214     enddo
215     endif
216     enddo
217     ! calcul de l entrainement total
218     do ig=1, ngrid
219     entr_star_tot(ig)=0.
220     enddo
221     do ig=1, ngrid
222     do k=1, klev
223     entr_star_tot(ig)=entr_star_tot(ig)+entr_star(ig, k)
224     enddo
225     enddo
226 guez 3
227 guez 54 print *, 'fin calcul entr_star'
228     do k=1, klev
229     do ig=1, ngrid
230     ztva(ig, k)=ztv(ig, k)
231     enddo
232     enddo
233 guez 3
234 guez 54 do k=1, klev+1
235     do ig=1, ngrid
236     zw2(ig, k)=0.
237     fmc(ig, k)=0.
238 guez 3
239 guez 54 f_star(ig, k)=0.
240 guez 3
241 guez 54 larg_cons(ig, k)=0.
242     larg_detr(ig, k)=0.
243     wa_moy(ig, k)=0.
244     enddo
245     enddo
246 guez 3
247 guez 54 do ig=1, ngrid
248     linter(ig)=1.
249     lmaxa(ig)=1
250     lmix(ig)=1
251     wmaxa(ig)=0.
252     enddo
253 guez 3
254 guez 54 do l=1, nlay-2
255     do ig=1, ngrid
256     if (ztv(ig, l).gt.ztv(ig, l+1) &
257     .and.entr_star(ig, l).gt.1.e-10 &
258     .and.zw2(ig, l).lt.1e-10) then
259     f_star(ig, l+1)=entr_star(ig, l)
260     !test:calcul de dteta
261     zw2(ig, l+1)=2.*RG*(ztv(ig, l)-ztv(ig, l+1))/ztv(ig, l+1) &
262     *(zlev(ig, l+1)-zlev(ig, l)) &
263     *0.4*pphi(ig, l)/(pphi(ig, l+1)-pphi(ig, l))
264     larg_detr(ig, l)=0.
265     else if ((zw2(ig, l).ge.1e-10).and. &
266     (f_star(ig, l)+entr_star(ig, l).gt.1.e-10)) then
267     f_star(ig, l+1)=f_star(ig, l)+entr_star(ig, l)
268     ztva(ig, l)=(f_star(ig, l)*ztva(ig, l-1)+entr_star(ig, l) &
269     *ztv(ig, l))/f_star(ig, l+1)
270     zw2(ig, l+1)=zw2(ig, l)*(f_star(ig, l)/f_star(ig, l+1))**2+ &
271     2.*RG*(ztva(ig, l)-ztv(ig, l))/ztv(ig, l) &
272     *(zlev(ig, l+1)-zlev(ig, l))
273     endif
274     ! determination de zmax continu par interpolation lineaire
275     if (zw2(ig, l+1).lt.0.) then
276     if (abs(zw2(ig, l+1)-zw2(ig, l)).lt.1e-10) then
277     print *, 'pb linter'
278     endif
279     linter(ig)=(l*(zw2(ig, l+1)-zw2(ig, l)) &
280     -zw2(ig, l))/(zw2(ig, l+1)-zw2(ig, l))
281     zw2(ig, l+1)=0.
282     lmaxa(ig)=l
283     else
284     if (zw2(ig, l+1).lt.0.) then
285     print *, 'pb1 zw2<0'
286     endif
287     wa_moy(ig, l+1)=sqrt(zw2(ig, l+1))
288     endif
289     if (wa_moy(ig, l+1).gt.wmaxa(ig)) then
290     ! lmix est le niveau de la couche ou w (wa_moy) est maximum
291     lmix(ig)=l+1
292     wmaxa(ig)=wa_moy(ig, l+1)
293     endif
294     enddo
295     enddo
296     print *, 'fin calcul zw2'
297 guez 3
298 guez 54 ! Calcul de la couche correspondant a la hauteur du thermique
299     do ig=1, ngrid
300     lmax(ig)=lentr(ig)
301     enddo
302     do ig=1, ngrid
303     do l=nlay, lentr(ig)+1, -1
304     if (zw2(ig, l).le.1.e-10) then
305     lmax(ig)=l-1
306     endif
307     enddo
308     enddo
309     ! pas de thermique si couches 1->5 stables
310     do ig=1, ngrid
311     if (lmin(ig).gt.5) then
312     lmax(ig)=1
313     lmin(ig)=1
314     endif
315     enddo
316 guez 3
317 guez 54 ! Determination de zw2 max
318     do ig=1, ngrid
319     wmax(ig)=0.
320     enddo
321 guez 3
322 guez 54 do l=1, nlay
323     do ig=1, ngrid
324     if (l.le.lmax(ig)) then
325     if (zw2(ig, l).lt.0.)then
326     print *, 'pb2 zw2<0'
327     endif
328     zw2(ig, l)=sqrt(zw2(ig, l))
329     wmax(ig)=max(wmax(ig), zw2(ig, l))
330     else
331     zw2(ig, l)=0.
332     endif
333     enddo
334     enddo
335 guez 3
336 guez 54 ! Longueur caracteristique correspondant a la hauteur des thermiques.
337     do ig=1, ngrid
338     zmax(ig)=0.
339     zlevinter(ig)=zlev(ig, 1)
340     enddo
341     do ig=1, ngrid
342     ! calcul de zlevinter
343     zlevinter(ig)=(zlev(ig, lmax(ig)+1)-zlev(ig, lmax(ig)))* &
344     linter(ig)+zlev(ig, lmax(ig))-lmax(ig)*(zlev(ig, lmax(ig)+1) &
345     -zlev(ig, lmax(ig)))
346     zmax(ig)=max(zmax(ig), zlevinter(ig)-zlev(ig, lmin(ig)))
347     enddo
348 guez 3
349 guez 54 print *, 'avant fermeture'
350     ! Fermeture, determination de f
351     do ig=1, ngrid
352     entr_star2(ig)=0.
353     enddo
354     do ig=1, ngrid
355     if (entr_star_tot(ig).LT.1.e-10) then
356     f(ig)=0.
357     else
358     do k=lmin(ig), lentr(ig)
359     entr_star2(ig)=entr_star2(ig)+entr_star(ig, k)**2 &
360     /(rho(ig, k)*(zlev(ig, k+1)-zlev(ig, k)))
361     enddo
362     ! Nouvelle fermeture
363     f(ig)=wmax(ig)/(max(500., zmax(ig))*r_aspect &
364     *entr_star2(ig))*entr_star_tot(ig)
365     endif
366     enddo
367     print *, 'apres fermeture'
368 guez 3
369 guez 54 ! Calcul de l'entrainement
370     do k=1, klev
371     do ig=1, ngrid
372     entr(ig, k)=f(ig)*entr_star(ig, k)
373     enddo
374     enddo
375     ! Calcul des flux
376     do ig=1, ngrid
377     do l=1, lmax(ig)-1
378     fmc(ig, l+1)=fmc(ig, l)+entr(ig, l)
379     enddo
380     enddo
381 guez 3
382 guez 54 ! determination de l'indice du debut de la mixed layer ou w decroit
383 guez 3
384 guez 54 ! calcul de la largeur de chaque ascendance dans le cas conservatif.
385     ! dans ce cas simple, on suppose que la largeur de l'ascendance provenant
386 guez 150 ! d'une couche est \'egale \`a la hauteur de la couche alimentante.
387 guez 54 ! La vitesse maximale dans l'ascendance est aussi prise comme estimation
388     ! de la vitesse d'entrainement horizontal dans la couche alimentante.
389 guez 3
390 guez 54 do l=2, nlay
391     do ig=1, ngrid
392     if (l.le.lmaxa(ig)) then
393     zw=max(wa_moy(ig, l), 1.e-10)
394     larg_cons(ig, l)=zmax(ig)*r_aspect &
395     *fmc(ig, l)/(rhobarz(ig, l)*zw)
396     endif
397     enddo
398     enddo
399 guez 3
400 guez 54 do l=2, nlay
401     do ig=1, ngrid
402     if (l.le.lmaxa(ig)) then
403     if ((l_mix*zlev(ig, l)).lt.0.)then
404     print *, 'pb l_mix*zlev<0'
405     endif
406     larg_detr(ig, l)=sqrt(l_mix*zlev(ig, l))
407     endif
408     enddo
409     enddo
410 guez 3
411 guez 150 ! calcul de la fraction de la maille concern\'ee par l'ascendance en tenant
412 guez 54 ! compte de l'epluchage du thermique.
413 guez 3
414 guez 54 !CR def de zmix continu (profil parabolique des vitesses)
415     do ig=1, ngrid
416     if (lmix(ig).gt.1.) then
417     if (((zw2(ig, lmix(ig)-1)-zw2(ig, lmix(ig))) &
418     *((zlev(ig, lmix(ig)))-(zlev(ig, lmix(ig)+1))) &
419     -(zw2(ig, lmix(ig))-zw2(ig, lmix(ig)+1)) &
420     *((zlev(ig, lmix(ig)-1))-(zlev(ig, lmix(ig))))).gt.1e-10) &
421     then
422 guez 3
423 guez 54 zmix(ig)=((zw2(ig, lmix(ig)-1)-zw2(ig, lmix(ig))) &
424     *((zlev(ig, lmix(ig)))**2-(zlev(ig, lmix(ig)+1))**2) &
425     -(zw2(ig, lmix(ig))-zw2(ig, lmix(ig)+1)) &
426     *((zlev(ig, lmix(ig)-1))**2-(zlev(ig, lmix(ig)))**2)) &
427     /(2.*((zw2(ig, lmix(ig)-1)-zw2(ig, lmix(ig))) &
428     *((zlev(ig, lmix(ig)))-(zlev(ig, lmix(ig)+1))) &
429     -(zw2(ig, lmix(ig))-zw2(ig, lmix(ig)+1)) &
430     *((zlev(ig, lmix(ig)-1))-(zlev(ig, lmix(ig))))))
431     else
432     zmix(ig)=zlev(ig, lmix(ig))
433     print *, 'pb zmix'
434     endif
435     else
436     zmix(ig)=0.
437     endif
438 guez 3
439 guez 54 if ((zmax(ig)-zmix(ig)).lt.0.) then
440     zmix(ig)=0.99*zmax(ig)
441     endif
442     enddo
443 guez 3
444 guez 54 ! calcul du nouveau lmix correspondant
445     do ig=1, ngrid
446     do l=1, klev
447     if (zmix(ig).ge.zlev(ig, l).and. &
448     zmix(ig).lt.zlev(ig, l+1)) then
449     lmix(ig)=l
450     endif
451     enddo
452     enddo
453 guez 3
454 guez 54 do l=2, nlay
455     do ig=1, ngrid
456     if(larg_cons(ig, l).gt.1.) then
457     fraca(ig, l)=(larg_cons(ig, l)-larg_detr(ig, l)) &
458     /(r_aspect*zmax(ig))
459     fraca(ig, l)=max(fraca(ig, l), 0.)
460     fraca(ig, l)=min(fraca(ig, l), 0.5)
461     fracd(ig, l)=1.-fraca(ig, l)
462     fracc(ig, l)=larg_cons(ig, l)/(r_aspect*zmax(ig))
463     else
464     fraca(ig, l)=0.
465     fracc(ig, l)=0.
466     fracd(ig, l)=1.
467     endif
468     enddo
469     enddo
470     !CR: calcul de fracazmix
471     do ig=1, ngrid
472     fracazmix(ig)=(fraca(ig, lmix(ig)+1)-fraca(ig, lmix(ig)))/ &
473     (zlev(ig, lmix(ig)+1)-zlev(ig, lmix(ig)))*zmix(ig) &
474     +fraca(ig, lmix(ig))-zlev(ig, lmix(ig))*(fraca(ig, lmix(ig)+1) &
475     -fraca(ig, lmix(ig)))/(zlev(ig, lmix(ig)+1)-zlev(ig, lmix(ig)))
476     enddo
477 guez 3
478 guez 54 do l=2, nlay
479     do ig=1, ngrid
480     if(larg_cons(ig, l).gt.1.) then
481     if (l.gt.lmix(ig)) then
482     if (zmax(ig)-zmix(ig).lt.1.e-10) then
483     xxx(ig, l)=(lmaxa(ig)+1.-l)/(lmaxa(ig)+1.-lmix(ig))
484     else
485     xxx(ig, l)=(zmax(ig)-zlev(ig, l))/(zmax(ig)-zmix(ig))
486     endif
487     if (idetr.eq.0) then
488     fraca(ig, l)=fracazmix(ig)
489     else if (idetr.eq.1) then
490     fraca(ig, l)=fracazmix(ig)*xxx(ig, l)
491     else if (idetr.eq.2) then
492     fraca(ig, l)=fracazmix(ig)*(1.-(1.-xxx(ig, l))**2)
493     else
494     fraca(ig, l)=fracazmix(ig)*xxx(ig, l)**2
495     endif
496     fraca(ig, l)=max(fraca(ig, l), 0.)
497     fraca(ig, l)=min(fraca(ig, l), 0.5)
498     fracd(ig, l)=1.-fraca(ig, l)
499     fracc(ig, l)=larg_cons(ig, l)/(r_aspect*zmax(ig))
500     endif
501     endif
502     enddo
503     enddo
504 guez 3
505 guez 54 print *, 'fin calcul fraca'
506 guez 3
507 guez 54 ! Calcul de fracd, wd
508     ! somme wa - wd = 0
509 guez 3
510 guez 54 do ig=1, ngrid
511     fm(ig, 1)=0.
512     fm(ig, nlay+1)=0.
513     enddo
514 guez 3
515 guez 54 do l=2, nlay
516     do ig=1, ngrid
517     fm(ig, l)=fraca(ig, l)*wa_moy(ig, l)*rhobarz(ig, l)
518     if (entr(ig, l-1).lt.1e-10.and.fm(ig, l).gt.fm(ig, l-1) &
519     .and.l.gt.lmix(ig)) then
520     fm(ig, l)=fm(ig, l-1)
521     endif
522     enddo
523     do ig=1, ngrid
524     if(fracd(ig, l).lt.0.1) then
525     stop'fracd trop petit'
526     endif
527     enddo
528     enddo
529 guez 3
530 guez 54 do l=1, nlay
531     do ig=1, ngrid
532     masse(ig, l)=(pplev(ig, l)-pplev(ig, l+1))/RG
533     enddo
534     enddo
535 guez 3
536 guez 54 print *, '12 OK convect8'
537 guez 3
538 guez 54 ! calcul du transport vertical
539 guez 3
540 guez 54 !CR:redefinition du entr
541     do l=1, nlay
542     do ig=1, ngrid
543     detr(ig, l)=fm(ig, l)+entr(ig, l)-fm(ig, l+1)
544     if (detr(ig, l).lt.0.) then
545     entr(ig, l)=entr(ig, l)-detr(ig, l)
546     detr(ig, l)=0.
547     endif
548     enddo
549     enddo
550 guez 3
551 guez 54 if (w2di.eq.1) then
552     fm0=fm0+ptimestep*(fm-fm0)/tho
553     entr0=entr0+ptimestep*(entr-entr0)/tho
554     else
555     fm0=fm
556     entr0=entr
557     endif
558 guez 3
559 guez 54 if (1.eq.1) then
560     call dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse &
561     , zh, zdhadj, zha)
562     call dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse &
563     , zo, pdoadj, zoa)
564     else
565     call dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca &
566     , zh, zdhadj, zha)
567     call dqthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse, fraca &
568     , zo, pdoadj, zoa)
569     endif
570 guez 3
571 guez 54 if (1.eq.0) then
572     call dvthermcell2(ngrid, nlay, ptimestep, fm0, entr0, masse &
573     , fraca, zmax &
574     , zu, zv, pduadj, pdvadj, zua, zva)
575     else
576     call dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse &
577     , zu, pduadj, zua)
578     call dqthermcell(ngrid, nlay, ptimestep, fm0, entr0, masse &
579     , zv, pdvadj, zva)
580     endif
581 guez 3
582 guez 54 do l=1, nlay
583     do ig=1, ngrid
584     zf=0.5*(fracc(ig, l)+fracc(ig, l+1))
585     zf2=zf/(1.-zf)
586     thetath2(ig, l)=zf2*(zha(ig, l)-zh(ig, l))**2
587     wth2(ig, l)=zf2*(0.5*(wa_moy(ig, l)+wa_moy(ig, l+1)))**2
588     enddo
589     enddo
590 guez 3
591 guez 54 do l=1, nlay
592     do ig=1, ngrid
593     pdtadj(ig, l)=zdhadj(ig, l)*zpspsk(ig, l)
594     enddo
595     enddo
596 guez 3
597 guez 54 end SUBROUTINE thermcell
598 guez 3
599 guez 54 end module thermcell_m

Properties

Name Value
svn:executable

  ViewVC Help
Powered by ViewVC 1.1.21