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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable

  ViewVC Help
Powered by ViewVC 1.1.21