4 SUBROUTINE thermcell_plume(itap,ngrid,klev,ptimestep,ztv,zthl,po,zl,rhobarz, &
5 & zlev,pplev,pphi,zpspsk,alim_star,alim_star_tot, &
6 & lalim,f0,detr_star,entr_star,f_star,csc,ztva, &
7 & ztla,zqla,zqta,zha,zw2,w_est,ztva_est,zqsatth,lmix,lmix_bis,linter &
8 & ,lev_out,lunout1,igout)
13 USE ioipsl
, ONLY : getin
21 #include "thermcell.h"
31 REAL rhobarz(ngrid,
klev)
32 REAL zlev(ngrid,
klev+1)
33 REAL pplev(ngrid,
klev+1)
35 REAL zpspsk(ngrid,
klev)
36 REAL alim_star(ngrid,
klev)
42 real alim_star_tot(ngrid)
50 REAL detr_star(ngrid,
klev)
52 REAL entr_star(ngrid,
klev)
58 REAL zw2(ngrid,
klev+1)
59 REAL w_est(ngrid,
klev+1)
60 REAL f_star(ngrid,
klev+1)
61 REAL wa_moy(ngrid,
klev+1)
63 REAL ztva_est(ngrid,
klev)
64 REAL ztv_est(ngrid,
klev)
65 REAL zqla_est(ngrid,
klev)
66 REAL zqsatth(ngrid,
klev)
67 REAL zta_est(ngrid,
klev)
68 REAL ztemp(ngrid),zqsat(ngrid)
71 REAL zw2fact,zw2factbis
76 INTEGER lmix_bis(ngrid)
79 INTEGER ig,
l,k,lt,it,lm
81 real zdz,zbuoy(ngrid,
klev),zalpha,gamma(ngrid,
klev),zdqt(ngrid,
klev),zw2m
82 real zbuoyjam(ngrid,
klev),zdqtjam(ngrid,
klev)
83 real zbuoybis,zdz2,zdz3,lmel,entrbis,zdzbis
85 real ztv1,ztv2,factinv,zinv,zlmel
86 real zlmelup,zlmeldwn,zlt,zltdwn,zltup
87 real atv1,atv2,btv1,btv2
88 real ztv_est1,ztv_est2
89 real zcor,zdelta,zcvm5,qlbef
90 real zbetalpha, coefzlmel
95 LOGICAL active(ngrid),activetmp(ngrid)
96 REAL fact_gamma,fact_gamma2,fact_epsilon2
98 REAL,
SAVE :: fact_epsilon, fact_epsilon_omp=0.002
99 REAL,
SAVE :: betalpha, betalpha_omp=0.9
100 REAL,
SAVE :: afact, afact_omp=2./3.
101 REAL,
SAVE :: fact_shell, fact_shell_omp=1.
102 REAL,
SAVE :: detr_min,detr_min_omp=1.e-5
103 REAL,
SAVE :: entr_min,entr_min_omp=1.e-5
104 REAL,
SAVE :: detr_q_coef,detr_q_coef_omp=0.012
105 REAL,
SAVE :: detr_q_power,detr_q_power_omp=0.5
106 REAL,
SAVE :: mix0,mix0_omp=0.
107 INTEGER,
SAVE :: thermals_flag_alim,thermals_flag_alim_omp=0
109 LOGICAL,
SAVE :: first=.
true.
113 if (ngrid==1) print*,
'THERMCELL PLUME MODIFIE 2014/07/11'
122 CALL getin(
'thermals_fact_epsilon',fact_epsilon_omp)
123 CALL getin(
'thermals_betalpha',betalpha_omp)
124 CALL getin(
'thermals_afact',afact_omp)
125 CALL getin(
'thermals_fact_shell',fact_shell_omp)
126 CALL getin(
'thermals_detr_min',detr_min_omp)
127 CALL getin(
'thermals_entr_min',entr_min_omp)
128 CALL getin(
'thermals_detr_q_coef',detr_q_coef_omp)
129 CALL getin(
'thermals_detr_q_power',detr_q_power_omp)
130 CALL getin(
'thermals_mix0',mix0_omp)
131 CALL getin(
'thermals_flag_alim',thermals_flag_alim_omp)
136 fact_epsilon=fact_epsilon_omp
137 betalpha=betalpha_omp
139 fact_shell=fact_shell_omp
140 detr_min=detr_min_omp
141 entr_min=entr_min_omp
142 detr_q_coef=detr_q_coef_omp
143 detr_q_power=detr_q_power_omp
145 thermals_flag_alim=thermals_flag_alim_omp
149 zbetalpha=betalpha/(1.+betalpha)
155 ztva_est(:,:)=ztva(:,:)
156 ztv_est(:,:)=ztv(:,:)
201 active(:)=ztv(:,1)>ztv(:,2)
218 ztla(ig,1)=zthl(ig,1)
222 f_star(ig,2)=alim_star(ig,1)
223 zw2(ig,2)=2.*
rg*(ztv(ig,1)-ztv(ig,2))/ztv(ig,2) &
224 & *(zlev(ig,2)-zlev(ig,1)) &
225 & *0.4*pphi(ig,1)/(pphi(ig,2)-pphi(ig,1))
226 w_est(ig,2)=zw2(ig,2)
241 active(ig)=active(ig) &
242 & .and. zw2(ig,
l)>1.e-10 &
243 & .and. f_star(ig,
l)+alim_star(ig,
l)>1.e-10
258 ztemp(:)=zpspsk(:,
l)*ztla(:,
l-1)
263 zqla_est(ig,
l)=max(0.,zqta(ig,
l-1)-zqsat(ig))
264 ztva_est(ig,
l) = ztla(ig,
l-1)*zpspsk(ig,
l)+rlvcp*zqla_est(ig,
l)
265 zta_est(ig,
l)=ztva_est(ig,
l)
266 ztva_est(ig,
l) = ztva_est(ig,
l)/zpspsk(ig,
l)
267 ztva_est(ig,
l) = ztva_est(ig,
l)*(1.+retv*(zqta(ig,
l-1) &
268 & -zqla_est(ig,
l))-zqla_est(ig,
l))
273 zbuoy(ig,
l)=
rg*(ztva_est(ig,
l)-ztv(ig,
l))/ztv(ig,
l)
274 zdz=zlev(ig,
l+1)-zlev(ig,
l)
275 lmel=fact_thermals_ed_dz*zlev(ig,
l)
277 zlmel=zlev(ig,
l)+lmel
278 zlmelup=zlmel+(zdz/2)
279 zlmeldwn=zlmel-(zdz/2)
283 zdz3=zlev(ig,lt+1)-zlt
297 do while (zlmelup.gt.zltup)
300 zdz3=zlev(ig,lt+1)-zlt
319 atv1=(ztv(ig,lt-1)-ztv(ig,lt-2))/(zlev(ig,lt-1)-zlev(ig,lt-2))
320 btv1=(ztv(ig,lt-2)*zlev(ig,lt-1)-ztv(ig,lt-1)*zlev(ig,lt-2)) &
321 & /(zlev(ig,lt-1)-zlev(ig,lt-2))
322 atv2=(ztv(ig,lt+2)-ztv(ig,lt+1))/(zlev(ig,lt+2)-zlev(ig,lt+1))
323 btv2=(ztv(ig,lt+1)*zlev(ig,lt+2)-ztv(ig,lt+2)*zlev(ig,lt+1)) &
324 & /(zlev(ig,lt+2)-zlev(ig,lt+1))
329 if (ztv(ig,lt).gt.ztv1.and.ztv(ig,lt).lt.ztv2)
then
335 factinv=(ztv2-ztv(ig,lt))/(ztv2-ztv1)
336 zinv=zltdwn+zdz3*factinv
339 if (zlmeldwn.ge.zinv)
then
340 ztv_est(ig,
l)=atv2*zlmel+btv2
341 zbuoyjam(ig,
l)=fact_shell*
rg*(ztva_est(ig,
l)-ztv_est(ig,
l))/ztv_est(ig,
l) &
342 & +(1.-fact_shell)*zbuoy(ig,
l)
343 elseif (zlmelup.ge.zinv)
then
344 ztv_est2=atv2*0.5*(zlmelup+zinv)+btv2
345 ztv_est1=atv1*0.5*(zinv+zlmeldwn)+btv1
346 ztv_est(ig,
l)=((zlmelup-zinv)/zdz)*ztv_est2+((zinv-zlmeldwn)/zdz)*ztv_est1
348 zbuoyjam(ig,
l)=fact_shell*
rg*(((zlmelup-zinv)/zdz)*(ztva_est(ig,
l)- &
349 & ztv_est2)/ztv_est2+((zinv-zlmeldwn)/zdz)*(ztva_est(ig,
l)- &
350 & ztv_est1)/ztv_est1)+(1.-fact_shell)*zbuoy(ig,
l)
353 ztv_est(ig,
l)=atv1*zlmel+btv1
354 zbuoyjam(ig,
l)=fact_shell*
rg*(ztva_est(ig,
l)-ztv_est(ig,
l))/ztv_est(ig,
l) &
355 & +(1.-fact_shell)*zbuoy(ig,
l)
360 if (zlmeldwn.gt.zltdwn)
then
361 zbuoyjam(ig,
l)=fact_shell*
rg*((ztva_est(ig,
l)- &
362 & ztv(ig,lt))/ztv(ig,lt))+(1.-fact_shell)*zbuoy(ig,
l)
364 zbuoyjam(ig,
l)=fact_shell*
rg*(((zlmelup-zltdwn)/zdz)*(ztva_est(ig,
l)- &
365 & ztv(ig,lt))/ztv(ig,lt)+((zltdwn-zlmeldwn)/zdz)*(ztva_est(ig,
l)- &
366 & ztv(ig,lt-1))/ztv(ig,lt-1))+(1.-fact_shell)*zbuoy(ig,
l)
381 zdz2=zlev(ig,lt)-zlev(ig,
l)
383 do while (lmel.gt.zdz2)
388 zdz3=zlev(ig,lt+1)-zlt
389 zltdwn=zlev(ig,lt)-zdz3/2
390 zlmelup=zlmel+(zdz/2)
391 coefzlmel=min(1.,(zlmelup-zltdwn)/zdz)
392 zbuoyjam(ig,
l)=1.*
rg*(coefzlmel*(ztva_est(ig,
l)- &
393 & ztv(ig,lt))/ztv(ig,lt)+(1.-coefzlmel)*(ztva_est(ig,
l)- &
394 & ztv(ig,lt-1))/ztv(ig,lt-1))+0.*zbuoy(ig,
l)
400 zdz=zlev(ig,
l+1)-zlev(ig,
l)
401 zdzbis=zlev(ig,
l)-zlev(ig,
l-1)
402 zbuoy(ig,
l)=
rg*(ztva_est(ig,
l)-ztv(ig,
l))/ztv(ig,
l)
404 zw2fact=fact_epsilon*2.*zdz/(1.+betalpha)
405 zw2factbis=fact_epsilon*2.*zdzbis/(1.+betalpha)
406 zdw2=afact*zbuoy(ig,
l)/fact_epsilon
407 zdw2bis=afact*zbuoy(ig,
l-1)/fact_epsilon
429 w_est(ig,
l+1)=max(0.0001,exp(-zw2fact)*(w_est(ig,
l)-zdw2)+zdw2)
437 w_est(ig,
l+1)=max(0.0001,exp(-zw2fact)*(w_est(ig,
l)-zdw2bis)+zdw2)
456 zalpha=f0(ig)*f_star(ig,
l)/sqrt(w_est(ig,
l+1))/rhobarz(ig,
l)
459 fact_epsilon=0.0002/(zalpha+0.1)
460 zw2fact=fact_epsilon*2.*zdz/(1.+betalpha)
461 zw2factbis=fact_epsilon*2.*zdzbis/(1.+betalpha)
462 zdw2=afact*zbuoy(ig,
l)/fact_epsilon
463 zdw2bis=afact*zbuoy(ig,
l-1)/fact_epsilon
470 w_est(ig,
l+1)=max(0.0001,exp(-zw2fact)*(w_est(ig,
l)-zdw2bis)+zdw2)
498 zdz=zlev(ig,
l+1)-zlev(ig,
l)
499 zbuoy(ig,
l)=
rg*(ztva_est(ig,
l)-ztv(ig,
l))/ztv(ig,
l)
502 zalpha=f0(ig)*f_star(ig,
l)/sqrt(w_est(ig,
l+1))/rhobarz(ig,
l)
503 zdqt(ig,
l)=max(zqta(ig,
l-1)-po(ig,
l),0.)/po(ig,
l)
525 fact_epsilon=0.0002/(zalpha+0.1)
530 detr_star(ig,
l)=f_star(ig,
l)*zdz &
531 & *( mix0 * 0.1 / (zalpha+0.001) &
532 & + max(detr_min, -afact*zbetalpha*zbuoyjam(ig,
l)/zw2m &
533 & + detr_q_coef*(zdqt(ig,
l)/zw2m)**detr_q_power))
538 zbuoy(ig,
l)=
rg*(ztva_est(ig,
l)-ztv(ig,
l))/ztv(ig,
l)
540 entr_star(ig,
l)=f_star(ig,
l)*zdz* ( &
541 & mix0 * 0.1 / (zalpha+0.001) &
542 & + zbetalpha*max(entr_min, &
543 & afact*zbuoyjam(ig,
l)/zw2m - fact_epsilon))
563 if (
l.lt.lalim(ig))
then
564 alim_star(ig,
l)=max(alim_star(ig,
l),entr_star(ig,
l))
573 f_star(ig,
l+1)=f_star(ig,
l)+alim_star(ig,
l)+entr_star(ig,
l) &
584 activetmp(:)=active(:) .and. f_star(:,
l+1)>1.e-10
586 if (activetmp(ig))
then
588 ztla(ig,
l)=(f_star(ig,
l)*ztla(ig,
l-1)+ &
589 & (alim_star(ig,
l)+entr_star(ig,
l))*zthl(ig,
l)) &
590 & /(f_star(ig,
l+1)+detr_star(ig,
l))
591 zqta(ig,
l)=(f_star(ig,
l)*zqta(ig,
l-1)+ &
592 & (alim_star(ig,
l)+entr_star(ig,
l))*po(ig,
l)) &
593 & /(f_star(ig,
l+1)+detr_star(ig,
l))
598 ztemp(:)=zpspsk(:,
l)*ztla(:,
l)
601 if (activetmp(ig))
then
604 zqla(ig,
l)=max(0.,zqta(ig,
l)-zqsatth(ig,
l))
605 ztva(ig,
l) = ztla(ig,
l)*zpspsk(ig,
l)+rlvcp*zqla(ig,
l)
606 ztva(ig,
l) = ztva(ig,
l)/zpspsk(ig,
l)
608 zha(ig,
l) = ztva(ig,
l)
609 ztva(ig,
l) = ztva(ig,
l)*(1.+retv*(zqta(ig,
l) &
610 & -zqla(ig,
l))-zqla(ig,
l))
611 zbuoy(ig,
l)=
rg*(ztva(ig,
l)-ztv(ig,
l))/ztv(ig,
l)
612 zdz=zlev(ig,
l+1)-zlev(ig,
l)
613 zdzbis=zlev(ig,
l)-zlev(ig,
l-1)
614 zeps(ig,
l)=(entr_star(ig,
l)+alim_star(ig,
l))/(f_star(ig,
l)*zdz)
616 zw2fact=fact_epsilon*2.*zdz/(1.+betalpha)
617 zw2factbis=fact_epsilon*2.*zdzbis/(1.+betalpha)
618 zdw2= afact*zbuoy(ig,
l)/(fact_epsilon)
619 zdw2bis= afact*zbuoy(ig,
l-1)/(fact_epsilon)
633 zw2(ig,
l+1)=max(0.0001,exp(-zw2fact)*(zw2(ig,
l)-zdw2)+zdw2)
635 zw2(ig,
l+1)=max(0.0001,exp(-zw2fact)*(zw2(ig,
l)-zdw2bis)+zdw2)
643 zalpha=f0(ig)*f_star(ig,
l)/sqrt(zw2(ig,
l+1))/rhobarz(ig,
l)
646 fact_epsilon=0.0002/(zalpha+0.1)**1
647 zw2fact=fact_epsilon*2.*zdz/(1.+betalpha)
648 zw2factbis=fact_epsilon*2.*zdzbis/(1.+betalpha)
649 zdw2= afact*zbuoy(ig,
l)/(fact_epsilon)
650 zdw2bis= afact*zbuoy(ig,
l-1)/(fact_epsilon)
656 zw2(ig,
l+1)=max(0.0001,exp(-zw2fact)*(zw2(ig,
l)-zdw2bis)+zdw2)
664 if (
prt_level.ge.20) print*,
'coucou calcul detr 460: ig, l',ig,
l
672 if (zw2(ig,
l+1)>0. .and. zw2(ig,
l+1).lt.1.e-10)
then
680 if (zw2(ig,
l+1).lt.0.)
then
681 linter(ig)=(
l*(zw2(ig,
l+1)-zw2(ig,
l)) &
682 & -zw2(ig,
l))/(zw2(ig,
l+1)-zw2(ig,
l))
685 elseif (f_star(ig,
l+1).lt.0.)
then
686 linter(ig)=(
l*(f_star(ig,
l+1)-f_star(ig,
l)) &
687 & -f_star(ig,
l))/(f_star(ig,
l+1)-f_star(ig,
l))
692 wa_moy(ig,
l+1)=sqrt(zw2(ig,
l+1))
694 if (wa_moy(ig,
l+1).gt.wmaxa(ig))
then
697 if (zqla(ig,
l).lt.1.e-10)
then
701 wmaxa(ig)=wa_moy(ig,
l+1)
706 print*,
'WARNING on tombe ',nbpb,
' x sur un pb pour l=',
l,
' dans thermcell_plume'
720 alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,
l)
725 if (
prt_level.ge.20) print*,
'coucou calcul detr 470: ig, l', ig,
l
727 #undef wrgrads_thermcell
728 #ifdef wrgrads_thermcell
729 call wrgradsfi(1,
klev,entr_star(igout,1:
klev),
'esta ',
'esta ')
730 call wrgradsfi(1,
klev,detr_star(igout,1:
klev),
'dsta ',
'dsta ')
731 call wrgradsfi(1,
klev,zbuoy(igout,1:
klev),
'buoy ',
'buoy ')
732 call wrgradsfi(1,
klev,zdqt(igout,1:
klev),
'dqt ',
'dqt ')
733 call wrgradsfi(1,
klev,w_est(igout,1:
klev),
'w_est ',
'w_est ')
734 call wrgradsfi(1,
klev,w_est(igout,2:
klev+1),
'w_es2 ',
'w_es2 ')
735 call wrgradsfi(1,
klev,zw2(igout,1:
klev),
'zw2A ',
'zw2A ')
782 SUBROUTINE thermcellv1_plume(itap,ngrid,klev,ptimestep,ztv,zthl,po,zl,rhobarz, &
783 & zlev,pplev,pphi,zpspsk,alim_star,alim_star_tot, &
784 & lalim,f0,detr_star,entr_star,f_star,csc,ztva, &
785 & ztla,zqla,zqta,zha,zw2,w_est,ztva_est,zqsatth,lmix,lmix_bis,linter &
786 & ,lev_out,lunout1,igout)
801 #include "thermcell.h"
804 INTEGER lunout1,igout
808 REAL zthl(ngrid,
klev)
811 REAL rhobarz(ngrid,
klev)
812 REAL zlev(ngrid,
klev+1)
813 REAL pplev(ngrid,
klev+1)
814 REAL pphi(ngrid,
klev)
815 REAL zpspsk(ngrid,
klev)
816 REAL alim_star(ngrid,
klev)
822 real alim_star_tot(ngrid)
824 REAL ztva(ngrid,
klev)
825 REAL ztla(ngrid,
klev)
826 REAL zqla(ngrid,
klev)
827 REAL zqta(ngrid,
klev)
830 REAL detr_star(ngrid,
klev)
832 REAL entr_star(ngrid,
klev)
833 REAL detr(ngrid,
klev)
834 REAL entr(ngrid,
klev)
838 REAL zw2(ngrid,
klev+1)
839 REAL w_est(ngrid,
klev+1)
840 REAL f_star(ngrid,
klev+1)
841 REAL wa_moy(ngrid,
klev+1)
843 REAL ztva_est(ngrid,
klev)
844 REAL zqla_est(ngrid,
klev)
845 REAL zqsatth(ngrid,
klev)
846 REAL zta_est(ngrid,
klev)
847 REAL zbuoyjam(ngrid,
klev)
848 REAL ztemp(ngrid),zqsat(ngrid)
852 REAL zeps(ngrid,
klev)
856 INTEGER lmix_bis(ngrid)
861 real zdz,zbuoy(ngrid,
klev),zalpha,gamma(ngrid,
klev),zdqt(ngrid,
klev),zw2m
863 real zcor,zdelta,zcvm5,qlbef,zdz2
864 real betalpha,zbetalpha
869 LOGICAL active(ngrid),activetmp(ngrid)
870 REAL fact_gamma,fact_epsilon,fact_gamma2,fact_epsilon2
880 zbetalpha=betalpha/(1.+betalpha)
886 ztva_est(:,:)=ztva(:,:)
929 active(:)=ztv(:,1)>ztv(:,2)
936 if (ztv(ig,
l)> ztv(ig,
l+1) .and. ztv(ig,1)>=ztv(ig,
l) )
then
937 alim_star(ig,
l)=max((ztv(ig,
l)-ztv(ig,
l+1)),0.) &
938 & *sqrt(zlev(ig,
l+1))
940 alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,
l)
946 if (alim_star_tot(ig) > 1.e-10 )
then
947 alim_star(ig,
l)=alim_star(ig,
l)/alim_star_tot(ig)
966 ztla(ig,1)=zthl(ig,1)
970 f_star(ig,2)=alim_star(ig,1)
971 zw2(ig,2)=2.*
rg*(ztv(ig,1)-ztv(ig,2))/ztv(ig,2) &
972 & *(zlev(ig,2)-zlev(ig,1)) &
973 & *0.4*pphi(ig,1)/(pphi(ig,2)-pphi(ig,1))
974 w_est(ig,2)=zw2(ig,2)
989 active(ig)=active(ig) &
990 & .and. zw2(ig,
l)>1.e-10 &
991 & .and. f_star(ig,
l)+alim_star(ig,
l)>1.e-10
1006 ztemp(:)=zpspsk(:,
l)*ztla(:,
l-1)
1012 zqla_est(ig,
l)=max(0.,zqta(ig,
l-1)-zqsat(ig))
1013 ztva_est(ig,
l) = ztla(ig,
l-1)*zpspsk(ig,
l)+rlvcp*zqla_est(ig,
l)
1014 zta_est(ig,
l)=ztva_est(ig,
l)
1015 ztva_est(ig,
l) = ztva_est(ig,
l)/zpspsk(ig,
l)
1016 ztva_est(ig,
l) = ztva_est(ig,
l)*(1.+retv*(zqta(ig,
l-1) &
1017 & -zqla_est(ig,
l))-zqla_est(ig,
l))
1022 zdz=zlev(ig,
l+1)-zlev(ig,
l)
1023 zbuoy(ig,
l)=
rg*(ztva_est(ig,
l)-ztv(ig,
l))/ztv(ig,
l)
1025 zw2fact=fact_epsilon*2.*zdz/(1.+betalpha)
1026 zdw2=(afact)*zbuoy(ig,
l)/(fact_epsilon)
1027 w_est(ig,
l+1)=max(0.0001,exp(-zw2fact)*(w_est(ig,
l)-zdw2)+zdw2)
1030 if (w_est(ig,
l+1).lt.0.)
then
1031 w_est(ig,
l+1)=zw2(ig,
l)
1042 if (active(ig))
then
1044 zw2m=max(0.5*(w_est(ig,
l)+w_est(ig,
l+1)),0.1)
1046 zdz=zlev(ig,
l+1)-zlev(ig,
l)
1047 zbuoy(ig,
l)=
rg*(ztva_est(ig,
l)-ztv(ig,
l))/ztv(ig,
l)
1049 zbuoybis=zbuoy(ig,
l)
1050 zalpha=f0(ig)*f_star(ig,
l)/sqrt(w_est(ig,
l+1))/rhobarz(ig,
l)
1051 zdqt(ig,
l)=max(zqta(ig,
l-1)-po(ig,
l),0.)/po(ig,
l)
1054 entr_star(ig,
l)=f_star(ig,
l)*zdz* zbetalpha*max(0., &
1055 & afact*zbuoybis/zw2m - fact_epsilon )
1058 detr_star(ig,
l)=f_star(ig,
l)*zdz &
1059 & *max(1.e-3, -afact*zbetalpha*zbuoy(ig,
l)/zw2m &
1060 & + 0.012*(zdqt(ig,
l)/zw2m)**0.5 )
1064 if (
l.lt.lalim(ig))
then
1065 alim_star(ig,
l)=max(alim_star(ig,
l),entr_star(ig,
l))
1070 f_star(ig,
l+1)=f_star(ig,
l)+alim_star(ig,
l)+entr_star(ig,
l) &
1080 activetmp(:)=active(:) .and. f_star(:,
l+1)>1.e-10
1082 if (activetmp(ig))
then
1084 ztla(ig,
l)=(f_star(ig,
l)*ztla(ig,
l-1)+ &
1085 & (alim_star(ig,
l)+entr_star(ig,
l))*zthl(ig,
l)) &
1086 & /(f_star(ig,
l+1)+detr_star(ig,
l))
1087 zqta(ig,
l)=(f_star(ig,
l)*zqta(ig,
l-1)+ &
1088 & (alim_star(ig,
l)+entr_star(ig,
l))*po(ig,
l)) &
1089 & /(f_star(ig,
l+1)+detr_star(ig,
l))
1094 ztemp(:)=zpspsk(:,
l)*ztla(:,
l)
1098 if (activetmp(ig))
then
1101 zqla(ig,
l)=max(0.,zqta(ig,
l)-zqsatth(ig,
l))
1102 ztva(ig,
l) = ztla(ig,
l)*zpspsk(ig,
l)+rlvcp*zqla(ig,
l)
1103 ztva(ig,
l) = ztva(ig,
l)/zpspsk(ig,
l)
1105 zha(ig,
l) = ztva(ig,
l)
1106 ztva(ig,
l) = ztva(ig,
l)*(1.+retv*(zqta(ig,
l) &
1107 & -zqla(ig,
l))-zqla(ig,
l))
1108 zbuoy(ig,
l)=
rg*(ztva(ig,
l)-ztv(ig,
l))/ztv(ig,
l)
1109 zdz=zlev(ig,
l+1)-zlev(ig,
l)
1110 zeps(ig,
l)=(entr_star(ig,
l)+alim_star(ig,
l))/(f_star(ig,
l)*zdz)
1112 zw2fact=fact_epsilon*2.*zdz/(1.+betalpha)
1113 zdw2=afact*zbuoy(ig,
l)/(fact_epsilon)
1114 zw2(ig,
l+1)=max(0.0001,exp(-zw2fact)*(zw2(ig,
l)-zdw2)+zdw2)
1118 if (
prt_level.ge.20) print*,
'coucou calcul detr 460: ig, l',ig,
l
1126 if (zw2(ig,
l+1)>0. .and. zw2(ig,
l+1).lt.1.e-10)
then
1134 if (zw2(ig,
l+1).lt.0.)
then
1135 linter(ig)=(
l*(zw2(ig,
l+1)-zw2(ig,
l)) &
1136 & -zw2(ig,
l))/(zw2(ig,
l+1)-zw2(ig,
l))
1138 elseif (f_star(ig,
l+1).lt.0.)
then
1139 linter(ig)=(
l*(f_star(ig,
l+1)-f_star(ig,
l)) &
1140 & -f_star(ig,
l))/(f_star(ig,
l+1)-f_star(ig,
l))
1145 wa_moy(ig,
l+1)=sqrt(zw2(ig,
l+1))
1147 if (wa_moy(ig,
l+1).gt.wmaxa(ig))
then
1150 if (zqla(ig,
l).lt.1.e-10)
then
1154 wmaxa(ig)=wa_moy(ig,
l+1)
1159 print*,
'WARNING on tombe ',nbpb,
' x sur un pb pour l=',
l,
' dans thermcell_plume'
1169 alim_star_tot(ig)=0.
1173 alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,
l)
1178 if (
prt_level.ge.20) print*,
'coucou calcul detr 470: ig, l', ig,
l
1180 #undef wrgrads_thermcell
1181 #ifdef wrgrads_thermcell
1182 call wrgradsfi(1,
klev,entr_star(igout,1:
klev),
'esta ',
'esta ')
1183 call wrgradsfi(1,
klev,detr_star(igout,1:
klev),
'dsta ',
'dsta ')
1184 call wrgradsfi(1,
klev,zbuoy(igout,1:
klev),
'buoy ',
'buoy ')
1185 call wrgradsfi(1,
klev,zdqt(igout,1:
klev),
'dqt ',
'dqt ')
1186 call wrgradsfi(1,
klev,w_est(igout,1:
klev),
'w_est ',
'w_est ')
1187 call wrgradsfi(1,
klev,w_est(igout,2:
klev+1),
'w_es2 ',
'w_es2 ')
1188 call wrgradsfi(1,
klev,zw2(igout,1:
klev),
'zw2A ',
'zw2A ')
!$Id klon initialisation mois suivants day_rain itap
c c $Id c c calculs statistiques distribution nuage ftion du regime dynamique c c Ce calcul doit etre fait a partir de valeurs mensuelles CALL nbregdyn DO kmaxm1 DO l
!$Id!Thermodynamical constants for t0 real clmci real eps
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
nsplit_thermals!nrlmd le iflag_clos_bl tau_trig_deep real::s_trig!fin nrlmd le fact_thermals_ed_dz iflag_wake iflag_thermals_closure common ctherm1 iflag_thermals_closure common ctherm2 fact_thermals_ed_dz common ctherm4 iflag_wake common ctherm5 iflag_thermals_ed
subroutine thermcell_qsat(klon, active, pplev, ztemp, zqta, zqsat)
subroutine thermcell_alim(flag, ngrid, klev, ztv, d_temp, zlev, alim_star, lalim)