5 & ,
pplay,pplev,pphi,debut &
8 & ,fm0,entr0,detr0,
zqta,zqla,lmax &
9 & ,ratqscth,ratqsdiff,zqsatth &
11 & ,ale_bl,alp_bl,lalim_conv,wght_th &
43 #include "dimensions.h"
55 INTEGER ngrid,
nlay,w2di
57 real ptimestep,l_mix,r_aspect
58 REAL pt(ngrid,
nlay),pdtadj(ngrid,
nlay)
60 REAL pv(ngrid,
nlay),pdvadj(ngrid,
nlay)
73 integer,
save :: igout=1
75 integer,
save :: lunout1=6
77 integer,
save :: lev_out=10
82 INTEGER lmax(klon),lmin(klon),lalim(klon)
84 INTEGER lmix_bis(klon)
104 real zsortie(klon,
klev)
118 real ratqscth(klon,
klev)
121 real ratqsdiff(klon,
klev)
125 real zpspsk(klon,
klev)
140 real zqsatth(klon,
klev)
142 real f_star(klon,
klev+1),entr_star(klon,
klev)
144 real alim_star_tot(klon),alim_star2(klon)
146 real f(klon), f0(klon)
168 real wght_th(klon,
klev)
169 integer lalim_conv(klon)
176 character (len=20) :: modname=
'thermcellV0_main'
177 character (len=80) :: abort_message
195 #undef wrgrads_thermcell
196 #ifdef wrgrads_thermcell
202 &
rlatd(igout),-90.,90.,1.,llm,
pplay(igout,:),1., &
203 & ptimestep,str10,
'therm ')
210 fm=0. ; entr=0. ;
detr=0.
222 if (
prt_level.ge.1) print*,
'thermcell_main V4'
225 IF(ngrid.NE.klon)
THEN
227 print*,
'STOP dans convadj'
228 print*,
'ngrid =',ngrid
235 &
'WARNING thermcell_main f0=max(f0,1.e-2)'
237 f0(ig)=max(f0(ig),1.e-2)
245 & pplev,zo,zh,zl,
ztv,zthl,zu,
zv,zpspsk,
zqsat,lev_out)
247 if (
prt_level.ge.1) print*,
'thermcell_main apres thermcell_env'
272 zlev(:,
l)=0.5*(pphi(:,
l)+pphi(:,
l-1))/rg
295 &
'WARNING thermcell_main rhobarz(:,1)=rho(:,1)'
296 rhobarz(:,1)=rho(:,1)
299 rhobarz(:,
l)=0.5*(rho(:,
l)+rho(:,
l-1))
304 masse(:,
l)=(pplev(:,
l)-pplev(:,
l+1))/rg
307 if (
prt_level.ge.1) print*,
'thermcell_main apres initialisation'
369 & lalim,lmin,
alim_star,alim_star_tot,lev_out)
375 if (
prt_level.ge.1) print*,
'thermcell_main apres thermcell_init'
377 write(lunout1,*)
'Dans thermcell_main 1'
378 write(lunout1,*)
'lmin ',lmin(igout)
379 write(lunout1,*)
'lalim ',lalim(igout)
380 write(lunout1,*)
' ig l alim_star thetav'
381 write(lunout1,
'(i6,i4,2e15.5)') (igout,
l,
alim_star(igout,
l) &
382 & ,
ztv(igout,
l),
l=1,lalim(igout)+4)
398 & lalim,lmin,zmax_sec,wmax_sec,lev_out)
403 if (
prt_level.ge.1) print*,
'thermcell_main apres thermcell_dry'
405 write(lunout1,*)
'Dans thermcell_main 1b'
406 write(lunout1,*)
'lmin ',lmin(igout)
407 write(lunout1,*)
'lalim ',lalim(igout)
408 write(lunout1,*)
' ig l alim_star entr_star detr_star f_star '
409 write(lunout1,
'(i6,i4,e15.5)') (igout,
l,
alim_star(igout,
l) &
410 & ,
l=1,lalim(igout)+4)
419 if (
prt_level.ge.1) print*,
'avant thermcell_plume ',lev_out
422 & zlev,pplev,pphi,zpspsk,l_mix,r_aspect,
alim_star,alim_star_tot, &
423 & lalim,zmax_sec,f0,
detr_star,entr_star,f_star,ztva, &
424 & ztla,zqla,
zqta,
zha,
zw2,zw_est,zqsatth,lmix,lmix_bis,linter &
425 & ,lev_out,lunout1,igout)
426 if (
prt_level.ge.1) print*,
'apres thermcell_plume ',lev_out
428 call
testv0_ltherm(ngrid,
nlay,pplev,
pplay,lalim,seuil,
ztv,po,ztva,zqla,f_star,
zw2,
'thermcell_plum lalim ')
429 call
testv0_ltherm(ngrid,
nlay,pplev,
pplay,lmix ,seuil,
ztv,po,ztva,zqla,f_star,
zw2,
'thermcell_plum lmix ')
431 if (
prt_level.ge.1) print*,
'thermcell_main apres thermcell_plume'
433 write(lunout1,*)
'Dans thermcell_main 2'
434 write(lunout1,*)
'lmin ',lmin(igout)
435 write(lunout1,*)
'lalim ',lalim(igout)
436 write(lunout1,*)
' ig l alim_star entr_star detr_star f_star '
437 write(lunout1,
'(i6,i4,4e15.5)') (igout,
l,
alim_star(igout,
l),entr_star(igout,
l),
detr_star(igout,
l) &
438 & ,f_star(igout,
l+1),
l=1,nint(linter(igout))+5)
446 & zlev,lmax,
zmax,zmax0,
zmix,wmax,lev_out)
449 call
testv0_ltherm(ngrid,
nlay,pplev,
pplay,lalim,seuil,
ztv,po,ztva,zqla,f_star,
zw2,
'thermcell_heig lalim ')
450 call
testv0_ltherm(ngrid,
nlay,pplev,
pplay,lmin ,seuil,
ztv,po,ztva,zqla,f_star,
zw2,
'thermcell_heig lmin ')
451 call
testv0_ltherm(ngrid,
nlay,pplev,
pplay,lmix ,seuil,
ztv,po,ztva,zqla,f_star,
zw2,
'thermcell_heig lmix ')
452 call
testv0_ltherm(ngrid,
nlay,pplev,
pplay,lmax ,seuil,
ztv,po,ztva,zqla,f_star,
zw2,
'thermcell_heig lmax ')
454 if (
prt_level.ge.1) print*,
'thermcell_main apres thermcell_height'
469 & zlev,lalim,
alim_star,alim_star_tot,zmax_sec,wmax_sec,
zmax,wmax,
f,lev_out)
471 if(
prt_level.ge.1)print*,
'thermcell_closure apres thermcell_closure'
475 f0=(1.-lambda)*
f+lambda*f0
481 if (.not. (f0(1).ge.0.) )
then
482 abort_message = .lt.
'Dans thermcell_main f0(1)0 '
493 &
detr,zqla,lev_out,lunout1,igout)
496 if (
prt_level.ge.1) print*,
'thermcell_main apres thermcell_flux'
497 call
testv0_ltherm(ngrid,
nlay,pplev,
pplay,lalim,seuil,
ztv,po,ztva,zqla,f_star,
zw2,
'thermcell_flux lalim ')
498 call
testv0_ltherm(ngrid,
nlay,pplev,
pplay,lmax ,seuil,
ztv,po,ztva,zqla,f_star,
zw2,
'thermcell_flux lmax ')
508 fm0=(1.-lambda)*fm+lambda*fm0
509 entr0=(1.-lambda)*entr+lambda*entr0
535 if (
zw2(ig,
l).gt.1.e-10)
then
566 & ,
zv,pdvadj,
zva,lev_out)
576 if (
prt_level.ge.1) print*,
'14 OK convect8'
583 if (
prt_level.ge.1) print*,
'14a OK convect8'
592 chi=zh(ig,1)/(1669.0-122.0*zo(ig,1)/
zqsat(ig,1)-zh(ig,1))
593 pcon(ig)=
pplay(ig,1)*(zo(ig,1)/
zqsat(ig,1))**chi
598 if ((pcon(ig).le.
pplay(ig,
k)) &
599 & .and.(pcon(ig).gt.
pplay(ig,
k+1)))
then
600 zcon2(ig)=
zlay(ig,
k)-(pcon(ig)-
pplay(ig,
k))/(rg*rho(ig,
k))/100.
608 abort_message =
'thermcellV0_main: les thermiques vont trop haut '
612 if (
prt_level.ge.1) print*,
'14b OK convect8'
615 if (zqla(ig,
k).gt.1e-10)
then
621 if (
prt_level.ge.1) print*,
'14c OK convect8'
633 if (
prt_level.ge.1) print*,
'14d OK convect8'
635 &
'WARNING thermcell_main wth2=0. si zw2 > 1.e-10'
642 if(
zw2(ig,
l).gt.1.e-10)
then
643 wth2(ig,
l)=zf2*(
zw2(ig,
l))**2
650 q2(ig,
l)=zf2*(
zqta(ig,
l)*1000.-po(ig,
l)*1000.)**2
652 ratqscth(ig,
l)=sqrt(max(q2(ig,
l),1.e-6)/(po(ig,
l)*1000.))
657 print*,
'14e OK convect8 ig,l,zf,zf2',ig,
l,zf,zf2
660 print*,
'14f OK convect8 ig,l,zha zh zpspsk ',ig,
l,
zha(ig,
l),zh(ig,
l),zpspsk(ig,
l)
663 print*,
'14g OK convect8 ig,l,po',ig,
l,po(ig,
l)
675 if(
l.LE.lmax(ig))
THEN
676 alp_int(ig)=alp_int(ig)+0.5*rhobarz(ig,
l)*
wth3(ig,
l)
677 ale_int(ig)=ale_int(ig)+0.5*
zw2(ig,
l)**2
678 n_int(ig)=n_int(ig)+1
690 if (n_int(ig).gt.0)
then
691 alp_bl(ig)=0.5*alp_int(ig)/n_int(ig)
704 ale_bl(ig)=0.5*
zw2(ig,lmix(ig))**2
731 lalim_conv(ig)=lalim(ig)
735 do k=1,lalim_conv(ig)
736 fm_tot(ig)=fm_tot(ig)+fm(ig,
k)
740 do k=1,lalim_conv(ig)
741 if (fm_tot(ig).gt.1.e-10)
then
764 if (
prt_level.ge.1) print*,
'14e OK convect8'
773 if (
prt_level.ge.1) print*,
'14f OK convect8'
784 if (
prt_level.ge.1) print*,
'14g OK convect8'
787 ratqsdiff(ig,
l)=sqrt(vardiff)/(po(ig,
l)*1000.)
796 if (
prt_level.ge.1) print*,
'thermcell_main sorties 3D'
797 #ifdef wrgrads_thermcell
798 #include "thermcell_out3d.h"
803 if (
prt_level.ge.1) print*,
'thermcell_main FIN OK'
811 subroutine testv0_ltherm(klon,klev,pplev,pplay,long,seuil,ztv,po,ztva,zqla,f_star,zw2,comment)
813 #include "iniprint.h"
821 real f_star(klon,
klev)
828 print*,
'WARNING !!! TEST ',comment
836 print*,
'WARNING ',comment,
' au point ',
i,
' K= ',long(
i)
837 print*,
' K P(MB) THV(K) Qenv(g/kg)THVA QLA(g/kg) F* W2'
839 write(6,
'(i3,7f10.3)')
k,
pplay(
i,
k),
ztv(
i,
k),1000*po(
i,
k),ztva(
i,
k),1000*zqla(
i,
k),f_star(
i,
k),
zw2(
i,
k)
850 & zlev,lalim,
alim_star,alim_star_tot,zmax_sec,wmax_sec,
zmax,wmax,
f,lev_out)
857 #include "iniprint.h"
858 #include "thermcell.h"
861 REAL r_aspect,ptimestep
866 REAL alim_star_tot(ngrid)
868 REAL zlev(ngrid,
nlay)
869 REAL zmax(ngrid),zmax_sec(ngrid)
870 REAL wmax(ngrid),wmax_sec(ngrid)
873 REAL alim_star2(ngrid)
877 character (len=20) :: modname=
'thermcellV0_main'
878 character (len=80) :: abort_message
888 alim_star2(ig)=alim_star2(ig)+
alim_star(ig,
k)**2 &
889 & /(rho(ig,
k)*(zlev(ig,
k+1)-zlev(ig,
k)))
891 zdenom=max(500.,
zmax(ig))*r_aspect*alim_star2(ig)
892 if (zdenom<1.e-14)
then
894 print*,
'alim_star2',alim_star2(ig)
895 print*,
'zmax',
zmax(ig)
896 print*,
'r_aspect',r_aspect
897 print*,
'zdenom',zdenom
899 print*,
'zmax_sec',zmax_sec(ig)
900 print*,
'wmax_sec',wmax_sec(ig)
901 abort_message =
'zdenom<1.e-14'
905 f(ig)=wmax_sec(ig)*alim_star_tot(ig)/(max(500.,zmax_sec(ig))*r_aspect &
909 if(
prt_level.GE.10)
write(
lunout,*)
'closure dry',
f(ig),wmax_sec(ig),alim_star_tot(ig),zmax_sec(ig)
911 f(ig)=wmax(ig)*alim_star_tot(ig)/zdenom
914 if(
prt_level.GE.10) print*,
'closure moist',
f(ig),wmax(ig),alim_star_tot(ig),
zmax(ig)
919 if (
prt_level.ge.1) print*,
'apres fermeture'
926 & zlev,pplev,pphi,zpspsk,l_mix,r_aspect,
alim_star,alim_star_tot, &
927 & lalim,zmax_sec,f0,
detr_star,entr_star,f_star,ztva, &
928 & ztla,zqla,
zqta,
zha,
zw2,w_est,zqsatth,lmix,lmix_bis,linter &
929 & ,lev_out,lunout1,igout)
940 #include "iniprint.h"
941 #include "thermcell.h"
944 INTEGER lunout1,igout
948 REAL zthl(ngrid,
klev)
951 REAL rhobarz(ngrid,
klev)
952 REAL zlev(ngrid,
klev+1)
953 REAL pplev(ngrid,
klev+1)
954 REAL pphi(ngrid,
klev)
955 REAL zpspsk(ngrid,
klev)
965 real alim_star_tot(ngrid)
967 REAL ztva(ngrid,
klev)
968 REAL ztla(ngrid,
klev)
969 REAL zqla(ngrid,
klev)
970 REAL zqla0(ngrid,
klev)
976 REAL detr_stara(ngrid,
klev)
977 REAL detr_starb(ngrid,
klev)
978 REAL detr_starc(ngrid,
klev)
979 REAL detr_star0(ngrid,
klev)
980 REAL detr_star1(ngrid,
klev)
981 REAL detr_star2(ngrid,
klev)
983 REAL entr_star(ngrid,
klev)
984 REAL entr_star1(ngrid,
klev)
985 REAL entr_star2(ngrid,
klev)
987 REAL entr(ngrid,
klev)
990 REAL w_est(ngrid,
klev+1)
991 REAL f_star(ngrid,
klev+1)
992 REAL wa_moy(ngrid,
klev+1)
994 REAL ztva_est(ngrid,
klev)
995 REAL zqla_est(ngrid,
klev)
996 REAL zqsatth(ngrid,
klev)
997 REAL zta_est(ngrid,
klev)
1001 INTEGER lmix_bis(ngrid)
1006 real zcor,zdelta,zcvm5,qlbef
1008 real dqsat_dt,
dt,num,denom
1009 REAL reps,rlvcp,ddt0
1012 REAL fact_gamma,fact_epsilon
1033 ztva_est(ig,
l)=ztva(ig,
l)
1047 ztva(ig,
k)=
ztv(ig,
k)
1048 ztla(ig,
k)=zthl(ig,
k)
1052 ztva(ig,
k) = ztla(ig,
k)*zpspsk(ig,
k)+rlvcp*zqla(ig,
k)
1053 ztva(ig,
k) = ztva(ig,
k)/zpspsk(ig,
k)
1054 zha(ig,
k) = ztva(ig,
k)
1077 if (
prt_level.ge.1) print*,
'7 OK convect8'
1087 if (
prt_level.ge.1) print*,
'8 OK convect8'
1109 & .and.
zw2(ig,
l).lt.1e-10)
then
1114 ztla(ig,
l)=zthl(ig,
l)
1120 & *(zlev(ig,
l+1)-zlev(ig,
l)) &
1121 & *0.4*pphi(ig,
l)/(pphi(ig,
l+1)-pphi(ig,
l))
1122 w_est(ig,
l+1)=
zw2(ig,
l+1)
1126 else if ((
zw2(ig,
l).ge.1e-10).and. &
1159 w_est(ig,3)=
zw2(ig,2)* &
1160 & ((f_star(ig,2))**2) &
1162 & 2.*rg*(ztva(ig,2)-
ztv(ig,2))/
ztv(ig,2) &
1164 & *(zlev(ig,3)-zlev(ig,2))
1174 tbef=ztla(ig,
l-1)*zpspsk(ig,
l)
1175 zdelta=max(0.,sign(1.,rtt-tbef))
1176 qsatbef= r2es * foeew(tbef,zdelta)/pplev(ig,
l)
1177 qsatbef=min(0.5,qsatbef)
1178 zcor=1./(1.-retv*qsatbef)
1179 qsatbef=qsatbef*zcor
1180 zsat = (max(0.,
zqta(ig,
l-1)-qsatbef) .gt. 1.e-10)
1182 qlbef=max(0.,
zqta(ig,
l-1)-qsatbef)
1183 dt = 0.5*rlvcp*qlbef
1184 do while (abs(
dt).gt.ddt0)
1186 zdelta=max(0.,sign(1.,rtt-tbef))
1187 qsatbef= r2es * foeew(tbef,zdelta)/pplev(ig,
l)
1188 qsatbef=min(0.5,qsatbef)
1189 zcor=1./(1.-retv*qsatbef)
1190 qsatbef=qsatbef*zcor
1191 qlbef=
zqta(ig,
l-1)-qsatbef
1193 zdelta=max(0.,sign(1.,rtt-tbef))
1194 zcvm5=r5les*(1.-zdelta) + r5ies*zdelta
1195 zcor=1./(1.-retv*qsatbef)
1196 dqsat_dt=foede(tbef,zdelta,zcvm5,qsatbef,zcor)
1197 num=-tbef+ztla(ig,
l-1)*zpspsk(ig,
l)+rlvcp*qlbef
1198 denom=1.+rlvcp*dqsat_dt
1201 zqla_est(ig,
l) = max(0.,
zqta(ig,
l-1)-qsatbef)
1203 ztva_est(ig,
l) = ztla(ig,
l-1)*zpspsk(ig,
l)+rlvcp*zqla_est(ig,
l)
1204 ztva_est(ig,
l) = ztva_est(ig,
l)/zpspsk(ig,
l)
1205 zta_est(ig,
l)=ztva_est(ig,
l)
1206 ztva_est(ig,
l) = ztva_est(ig,
l)*(1.+retv*(
zqta(ig,
l-1) &
1207 & -zqla_est(ig,
l))-zqla_est(ig,
l))
1209 w_est(ig,
l+1)=
zw2(ig,
l)* &
1210 & ((f_star(ig,
l))**2) &
1212 & 2.*rg*(ztva_est(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l) &
1214 & *(zlev(ig,
l+1)-zlev(ig,
l))
1215 if (w_est(ig,
l+1).lt.0.)
then
1216 w_est(ig,
l+1)=
zw2(ig,
l)
1239 if ((w_est(ig,
l+1).gt.w_est(ig,
l)).and. &
1240 & (zlev(ig,
l+1).lt.zmax_sec(ig)).and. &
1242 & (zqla_est(ig,
l).lt.1.e-10))
then
1244 & (zqla(ig,
l-1).lt.1.e-10))
then
1247 & *sqrt(w_est(ig,
l+1))*sqrt(l_mix*zlev(ig,
l+1)) &
1248 & -rhobarz(ig,
l)*sqrt(w_est(ig,
l))*sqrt(l_mix*zlev(ig,
l))) &
1249 & /(r_aspect*zmax_sec(ig)))
1252 if (
prt_level.ge.20) print*,
'coucou calcul detr 1: ig, l',ig,
l
1255 else if ((zlev(ig,
l+1).lt.zmax_sec(ig)).and. &
1257 & (zqla_est(ig,
l).lt.1.e-10))
then
1259 & (zqla(ig,
l-1).lt.1.e-10))
then
1261 detr_star(ig,
l)=-f0(ig)*f_star(ig,lmix(ig)) &
1262 & /(rhobarz(ig,lmix(ig))*wmaxa(ig))* &
1263 & (rhobarz(ig,
l+1)*sqrt(w_est(ig,
l+1)) &
1264 & *((zmax_sec(ig)-zlev(ig,
l+1))/ &
1265 & ((zmax_sec(ig)-zlev(ig,lmix(ig)))))**2. &
1266 & -rhobarz(ig,
l)*sqrt(w_est(ig,
l)) &
1267 & *((zmax_sec(ig)-zlev(ig,
l))/ &
1268 & ((zmax_sec(ig)-zlev(ig,lmix(ig)))))**2.)
1271 if (
prt_level.ge.20) print*,
'coucou calcul detr 2: ig, l',ig,
l
1277 & *(zlev(ig,
l+1)-zlev(ig,
l))
1280 if (
prt_level.ge.20) print*,
'coucou calcul detr 3 n: ig, l',ig,
l
1287 if ((w_est(ig,
l+1).gt.w_est(ig,
l)).and. &
1288 & (zlev(ig,
l+1).lt.zmax_sec(ig)) )
then
1290 & *sqrt(w_est(ig,
l+1))*sqrt(l_mix*zlev(ig,
l+1)) &
1291 & -rhobarz(ig,
l)*sqrt(w_est(ig,
l))*sqrt(l_mix*zlev(ig,
l))) &
1292 & /(r_aspect*zmax_sec(ig)))
1294 if (
prt_level.ge.20) print*,
'coucou calcul detr 1: ig, l', ig,
l
1297 else if ((zlev(ig,
l+1).lt.zmax_sec(ig)) )
then
1298 detr_star(ig,
l)=-f0(ig)*f_star(ig,lmix(ig)) &
1299 & /(rhobarz(ig,lmix(ig))*wmaxa(ig))* &
1300 & (rhobarz(ig,
l+1)*sqrt(w_est(ig,
l+1)) &
1301 & *((zmax_sec(ig)-zlev(ig,
l+1))/ &
1302 & ((zmax_sec(ig)-zlev(ig,lmix(ig)))))**2. &
1303 & -rhobarz(ig,
l)*sqrt(w_est(ig,
l)) &
1304 & *((zmax_sec(ig)-zlev(ig,
l))/ &
1305 & ((zmax_sec(ig)-zlev(ig,lmix(ig)))))**2.)
1306 if (
prt_level.ge.20) print*,
'coucou calcul detr 1: ig, l', ig,
l
1313 detr_starc(ig,
l)=0.002*f0(ig)*f_star(ig,
l) &
1314 & *(zlev(ig,
l+1)-zlev(ig,
l))
1316 coefc=min(zqla(ig,
l-1)/1.e-3,1.)
1317 if (zlev(ig,
l+1).ge.zmax_sec(ig)) coefc=1.
1323 if (
prt_level.ge.20) print*,
'coucou calcul detr 2: ig, l', ig,
l
1328 if (
prt_level.ge.20) print*,
'coucou calcul detr 444: ig, l', ig,
l
1335 zqla0(ig,
l)=zqla_est(ig,
l)
1358 if (
prt_level.ge.20) print*,
'coucou calcul detr 445: ig, l', ig,
l
1379 if (
prt_level.ge.20) print*,
'coucou calcul detr 446: ig, l', ig,
l
1397 if (
prt_level.ge.20) print*,
'coucou calcul detr 447: ig, l', ig,
l
1412 if (
prt_level.ge.20) print*,
'coucou calcul detr 448: ig, l', ig,
l
1413 if(
l.gt.lalim(ig))
then
1426 if (
prt_level.ge.20) print*,
'coucou calcul detr 449: ig, l', ig,
l
1439 if (
prt_level.ge.20) print*,
'coucou calcul detr 440: ig, l', ig,
l
1440 entr_star1(ig,
l)=entr_star(ig,
l)
1454 if (
l.gt.lalim(ig)+1)
then
1475 entr_star2(ig,
l)=entr_star(ig,
l)
1477 if (
prt_level.ge.20) print*,
'coucou calcul detr 450: ig, l', ig,
l
1497 entr_star(ig,
l)=max(0.*f_star(ig,
l)*(zlev(ig,
l+1)-zlev(ig,
l)), &
1498 & f_star(ig,
l)/(2.*w_est(ig,
l+1)) &
1499 & *rg*(ztva_est(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l) &
1500 & *(zlev(ig,
l+1)-zlev(ig,
l))) &
1501 & +0.0001*f_star(ig,
l)*(zlev(ig,
l+1)-zlev(ig,
l))
1503 if (((ztva_est(ig,
l)-
ztv(ig,
l)).gt.1.e-10).and.(
l.le.lmix_bis(ig)))
then
1504 alim_star_tot(ig)=alim_star_tot(ig)+entr_star(ig,
l)
1505 lalim(ig)=lmix_bis(ig)
1506 if(
prt_level.GE.10) print*,
'alim_star_tot',alim_star_tot(ig),entr_star(ig,
l)
1509 if (((ztva_est(ig,
l)-
ztv(ig,
l)).gt.1.e-10).and.(
l.le.lmix_bis(ig)))
then
1512 detr_star(ig,
l)=max(0.*f_star(ig,
l)*(zlev(ig,
l+1)-zlev(ig,
l)), &
1513 & c2(ig,
l)*f_star(ig,
l)*(zlev(ig,
l+1)-zlev(ig,
l)) &
1514 & -f_star(ig,
l)/(2.*w_est(ig,
l+1)) &
1515 & *rg*(ztva_est(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l) &
1516 & *(zlev(ig,
l+1)-zlev(ig,
l))) &
1517 & +0.0001*f_star(ig,
l)*(zlev(ig,
l+1)-zlev(ig,
l))
1523 detr_star(ig,
l)=max(0.*f_star(ig,
l)*(zlev(ig,
l+1)-zlev(ig,
l)), &
1524 & c2(ig,
l)*f_star(ig,
l)*(zlev(ig,
l+1)-zlev(ig,
l)) &
1525 & -f_star(ig,
l)/(2.*w_est(ig,
l+1)) &
1526 & *rg*(ztva_est(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l) &
1527 & *(zlev(ig,
l+1)-zlev(ig,
l))) &
1528 & +0.0002*f_star(ig,
l)*(zlev(ig,
l+1)-zlev(ig,
l))
1572 f_star(ig,
l+1)=f_star(ig,
l)+
alim_star(ig,
l)+entr_star(ig,
l) &
1576 if (
prt_level.ge.20) print*,
'coucou calcul detr 451: ig, l', ig,
l
1577 if (f_star(ig,
l+1).gt.1.e-10)
then
1583 ztla(ig,
l)=(f_star(ig,
l)*ztla(ig,
l-1)+ &
1591 tbef=ztla(ig,
l)*zpspsk(ig,
l)
1592 zdelta=max(0.,sign(1.,rtt-tbef))
1593 qsatbef= r2es * foeew(tbef,zdelta)/pplev(ig,
l)
1594 qsatbef=min(0.5,qsatbef)
1595 zcor=1./(1.-retv*qsatbef)
1596 qsatbef=qsatbef*zcor
1597 zsat = (max(0.,
zqta(ig,
l)-qsatbef) .gt. 1.e-10)
1599 qlbef=max(0.,
zqta(ig,
l)-qsatbef)
1600 dt = 0.5*rlvcp*qlbef
1601 do while (abs(
dt).gt.ddt0)
1603 zdelta=max(0.,sign(1.,rtt-tbef))
1604 qsatbef= r2es * foeew(tbef,zdelta)/pplev(ig,
l)
1605 qsatbef=min(0.5,qsatbef)
1606 zcor=1./(1.-retv*qsatbef)
1607 qsatbef=qsatbef*zcor
1608 qlbef=
zqta(ig,
l)-qsatbef
1610 zdelta=max(0.,sign(1.,rtt-tbef))
1611 zcvm5=r5les*(1.-zdelta) + r5ies*zdelta
1612 zcor=1./(1.-retv*qsatbef)
1613 dqsat_dt=foede(tbef,zdelta,zcvm5,qsatbef,zcor)
1614 num=-tbef+ztla(ig,
l)*zpspsk(ig,
l)+rlvcp*qlbef
1615 denom=1.+rlvcp*dqsat_dt
1618 zqla(ig,
l) = max(0.,qlbef)
1621 if (
prt_level.ge.20) print*,
'coucou calcul detr 4512: ig, l', ig,
l
1624 ztva(ig,
l) = ztla(ig,
l)*zpspsk(ig,
l)+rlvcp*zqla(ig,
l)
1625 ztva(ig,
l) = ztva(ig,
l)/zpspsk(ig,
l)
1627 zha(ig,
l) = ztva(ig,
l)
1628 ztva(ig,
l) = ztva(ig,
l)*(1.+retv*(
zqta(ig,
l) &
1629 & -zqla(ig,
l))-zqla(ig,
l))
1632 zqsatth(ig,
l)=qsatbef
1635 & ((f_star(ig,
l))**2) &
1638 & /(f_star(ig,
l+1)+
detr_star(ig,
l)-entr_star(ig,
l)*(1.-fact_epsilon))**2+ &
1639 & 2.*rg*(ztva(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l) &
1641 & *(zlev(ig,
l+1)-zlev(ig,
l))
1668 if (
prt_level.ge.20) print*,
'coucou calcul detr 460: ig, l',ig,
l
1672 if (
zw2(ig,
l+1)>0. .and.
zw2(ig,
l+1).lt.1.e-10)
then
1673 print*,
'On tombe sur le cas particulier de thermcell_plume'
1679 if (
zw2(ig,
l+1).lt.0.)
then
1685 wa_moy(ig,
l+1)=sqrt(
zw2(ig,
l+1))
1687 if (wa_moy(ig,
l+1).gt.wmaxa(ig))
then
1690 if (zqla(ig,
l).lt.1.e-10)
then
1694 wmaxa(ig)=wa_moy(ig,
l+1)
1720 if (
prt_level.ge.20) print*,
'coucou calcul detr 470: ig, l', ig,
l
1728 & lalim,lmin,
zmax,wmax,lev_out)
1735 #include "iniprint.h"
1739 REAL zlev(ngrid,
nlay+1)
1740 REAL pphi(ngrid,
nlay)
1743 INTEGER lalim(ngrid)
1751 REAL f_star(ngrid,
nlay+1)
1752 REAL ztva(ngrid,
nlay+1)
1754 REAL wa_moy(ngrid,
nlay+1)
1755 REAL linter(ngrid),zlevinter(ngrid)
1756 INTEGER lmix(ngrid),lmax(ngrid),lmin(ngrid)
1767 ztva(ig,
l)=
ztv(ig,
l)
1806 if (
l.eq.lmin(ig).and.lalim(ig).gt.1)
then
1813 & *(zlev(ig,
l+1)-zlev(ig,
l)) &
1814 & *0.4*pphi(ig,
l)/(pphi(ig,
l+1)-pphi(ig,
l))
1836 else if (
zw2(ig,
l).ge.1e-10)
then
1839 & *
ztv(ig,
l))/f_star(ig,
l+1)
1840 zw2(ig,
l+1)=
zw2(ig,
l)*(f_star(ig,
l)/f_star(ig,
l+1))**2+ &
1841 & 2.*rg*(ztva(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l) &
1842 & *(zlev(ig,
l+1)-zlev(ig,
l))
1847 if (
zw2(ig,
l+1)>0. .and.
zw2(ig,
l+1).lt.1.e-10)
then
1854 if (
zw2(ig,
l+1).lt.0.)
then
1861 wa_moy(ig,
l+1)=sqrt(
zw2(ig,
l+1))
1863 if (wa_moy(ig,
l+1).gt.wmaxa(ig))
then
1866 wmaxa(ig)=wa_moy(ig,
l+1)
1870 if (
prt_level.ge.1) print*,
'fin calcul zw2'
1896 if (
l.le.lmax(ig))
then
1898 wmax(ig)=max(wmax(ig),
zw2(ig,
l))
1908 zlevinter(ig)=zlev(ig,1)
1921 zlevinter(ig)=zlev(ig,lmax(ig)) + &
1922 & (linter(ig)-lmax(ig))*(zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))
1923 zmax(ig)=max(
zmax(ig),zlevinter(ig)-zlev(ig,lmin(ig)))
1928 if(lalim(ig)>lmax(ig))
then
1930 print*,
'WARNING thermcell_dry ig=',ig,
' lalim=',lalim(ig),
' lmax(ig)=',lmax(ig)
1940 & lalim,lmin,
alim_star,alim_star_tot,lev_out)
1946 #include "iniprint.h"
1947 #include "thermcell.h"
1954 REAL zlev(ngrid,
nlay+1)
1956 INTEGER lalim(ngrid)
1959 REAL alim_star_tot(ngrid)
1979 if (
ztv(ig,1).gt.
ztv(ig,2))
then
1989 alim_star_tot(ig)=0.
1999 if (
ztv(ig,
l).gt.
ztv(ig,
l+1).and. &
2024 if (
l<lalim(ig))
then
2030 if (lalim(ig)>1)
then
2031 zzalim(ig)=
zlay(ig,1)+zzalim(ig)/(
ztv(ig,1)-
ztv(ig,lalim(ig)))
2033 zzalim(ig)=
zlay(ig,1)
2037 if(
prt_level.GE.10) print*,
'ZZALIM LALIM ',zzalim,lalim,
zlay(1,lalim(1))
2043 if (
ztv(ig,
l).gt.
ztv(ig,
l+1).and. &
2044 &
l.ge.lmin(ig).and.
l.lt.lalim(ig))
then
2047 & *sqrt(zlev(ig,
l+1))
2054 if (
ztv(ig,
l).gt.
ztv(ig,
l+1).and. &
2055 &
l.ge.lmin(ig).and.
l.lt.lalim(ig))
then
2057 & *(zlev(ig,
l+1)-zlev(ig,
l))
2075 alim_star_tot(ig)=0.
2079 alim_star_tot(ig)=alim_star_tot(ig)+
alim_star(ig,
l)
2086 if (alim_star_tot(ig).gt.1.e-10)
then
2094 alim_star_tot(ig)=1.