/[lmdze]/trunk/phylmd/Thermcell/thermcell.f90
ViewVC logotype

Annotation of /trunk/phylmd/Thermcell/thermcell.f90

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable

  ViewVC Help
Powered by ViewVC 1.1.21