/[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 150 - (show annotations)
Thu Jun 18 13:49:26 2015 UTC (8 years, 11 months ago) by guez
File size: 18591 byte(s)
Removed unused arguments of groupe, cv3_undilute2, cv_undilute2,
interfsur_lim, drag_noro, orodrag, gwprofil

Chickened out of revision 148: back to double precision in
invert_zoom_x (and overloaded rtsafe).

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

Properties

Name Value
svn:executable

  ViewVC Help
Powered by ViewVC 1.1.21