/[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 178 - (show annotations)
Fri Mar 11 18:47:26 2016 UTC (8 years, 2 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 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\^ole 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)
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 zva(klon, klev)
61 real zua(klon, klev)
62 real zoa(klon, klev)
63
64 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
72 integer nsplit
73 parameter (nsplit=10)
74
75 real rho(klon, klev), rhobarz(klon, klev+1), masse(klon, klev)
76 real zpspsk(klon, klev)
77
78 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
87 !CR:nouvelles variables
88 real f_star(klon, klev+1), entr_star(klon, klev)
89 real entr_star_tot(klon), entr_star2(klon)
90 real f(klon)
91 real zlevinter(klon)
92
93 EXTERNAL SCOPY
94
95 !-----------------------------------------------------------------------
96
97 ! initialisation:
98
99 IF(ngrid.NE.klon) THEN
100 PRINT *
101 PRINT *, 'STOP dans convadj'
102 PRINT *, 'ngrid =', ngrid
103 PRINT *, 'klon =', klon
104 ENDIF
105
106 ! incrementation eventuelle de tendances precedentes:
107
108 print *, '0 OK convect8'
109
110 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
121 print *, '1 OK convect8'
122
123 ! See notes, "thermcell.txt"
124 ! Calcul des altitudes des couches
125
126 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
136 ! Calcul des densites
137
138 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
144 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
150 ! Calcul de w2, quarre de w a partir de la cape
151 ! a partir de w2, on calcule wa, vitesse de l'ascendance
152
153 ! ATTENTION: Dans cette version, pour cause d'economie de memoire,
154 ! w2 est stoke dans wa
155
156 ! 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
160 ! 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
165 !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
177 !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
187 ! 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
199 ! 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
227 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
234 do k=1, klev+1
235 do ig=1, ngrid
236 zw2(ig, k)=0.
237 fmc(ig, k)=0.
238
239 f_star(ig, k)=0.
240
241 larg_cons(ig, k)=0.
242 larg_detr(ig, k)=0.
243 wa_moy(ig, k)=0.
244 enddo
245 enddo
246
247 do ig=1, ngrid
248 linter(ig)=1.
249 lmaxa(ig)=1
250 lmix(ig)=1
251 wmaxa(ig)=0.
252 enddo
253
254 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
298 ! 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
317 ! Determination de zw2 max
318 do ig=1, ngrid
319 wmax(ig)=0.
320 enddo
321
322 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
336 ! 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
349 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
369 ! 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
382 ! determination de l'indice du debut de la mixed layer ou w decroit
383
384 ! 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 ! d'une couche est \'egale \`a la hauteur de la couche alimentante.
387 ! La vitesse maximale dans l'ascendance est aussi prise comme estimation
388 ! de la vitesse d'entrainement horizontal dans la couche alimentante.
389
390 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
400 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
411 ! calcul de la fraction de la maille concern\'ee par l'ascendance en tenant
412 ! compte de l'epluchage du thermique.
413
414 !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
423 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
439 if ((zmax(ig)-zmix(ig)).lt.0.) then
440 zmix(ig)=0.99*zmax(ig)
441 endif
442 enddo
443
444 ! 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
454 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
478 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
505 print *, 'fin calcul fraca'
506
507 ! Calcul de fracd, wd
508 ! somme wa - wd = 0
509
510 do ig=1, ngrid
511 fm(ig, 1)=0.
512 fm(ig, nlay+1)=0.
513 enddo
514
515 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
530 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
536 print *, '12 OK convect8'
537
538 ! calcul du transport vertical
539
540 !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
551 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
559 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
571 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
582 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
591 do l=1, nlay
592 do ig=1, ngrid
593 pdtadj(ig, l)=zdhadj(ig, l)*zpspsk(ig, l)
594 enddo
595 enddo
596
597 end SUBROUTINE thermcell
598
599 end module thermcell_m

Properties

Name Value
svn:executable

  ViewVC Help
Powered by ViewVC 1.1.21