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)
20 #include "thermcell.h"
30 REAL rhobarz(ngrid,
klev)
31 REAL zlev(ngrid,
klev+1)
32 REAL pplev(ngrid,
klev+1)
34 REAL zpspsk(ngrid,
klev)
42 real alim_star_tot(ngrid)
52 REAL entr_star(ngrid,
klev)
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 zqla_est(ngrid,
klev)
65 REAL zqsatth(ngrid,
klev)
66 REAL zta_est(ngrid,
klev)
73 INTEGER lmix_bis(ngrid)
78 real zdz,zfact,zbuoy,zalpha,zdrag
79 real zcor,zdelta,zcvm5,qlbef
81 real dqsat_dt,
dt,num,denom
85 LOGICAL active(ngrid),activetmp(ngrid)
86 REAL fact_gamma,fact_epsilon,fact_gamma2
99 zfact=fact_gamma/(1+fact_gamma)
107 ztva_est(:,:)=ztva(:,:)
146 active(:)=
ztv(:,1)>
ztv(:,2)
155 & *sqrt(zlev(ig,
l+1))
157 alim_star_tot(ig)=alim_star_tot(ig)+
alim_star(ig,
l)
163 if (alim_star_tot(ig) > 1.e-10 )
then
182 ztla(ig,1)=zthl(ig,1)
188 & *(zlev(ig,2)-zlev(ig,1)) &
189 & *0.4*pphi(ig,1)/(pphi(ig,2)-pphi(ig,1))
190 w_est(ig,2)=
zw2(ig,2)
205 active(ig)=active(ig) &
206 & .and.
zw2(ig,
l)>1.e-10 &
232 & zpspsk(:,
l),pplev(:,
l),ztla(:,
l-1),
zqta(:,
l-1),zqla_est(:,
l))
236 ztva_est(ig,
l) = ztla(ig,
l-1)*zpspsk(ig,
l)+rlvcp*zqla_est(ig,
l)
237 zta_est(ig,
l)=ztva_est(ig,
l)
238 ztva_est(ig,
l) = ztva_est(ig,
l)/zpspsk(ig,
l)
239 ztva_est(ig,
l) = ztva_est(ig,
l)*(1.+retv*(
zqta(ig,
l-1) &
240 & -zqla_est(ig,
l))-zqla_est(ig,
l))
244 w_est(ig,
l+1)=
zw2(ig,
l)* &
245 & ((f_star(ig,
l))**2) &
247 & 2.*rg*(ztva_est(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l) &
248 & *(zlev(ig,
l+1)-zlev(ig,
l))
251 zdz=zlev(ig,
l+1)-zlev(ig,
l)
252 zalpha=f0(ig)*f_star(ig,
l)/sqrt(w_est(ig,
l))/rhobarz(ig,
l)
253 zbuoy=rg*(ztva_est(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l)
254 zdrag=fact_epsilon/(zalpha**expa)
255 zw2fact=zbuoy/zdrag*a1
256 w_est(ig,
l+1)=(w_est(ig,
l)-zw2fact)*exp(-2.*zdrag/(1+fact_gamma)*zdz) &
261 if (w_est(ig,
l+1).lt.0.)
then
262 w_est(ig,
l+1)=
zw2(ig,
l)
273 zdz=zlev(ig,
l+1)-zlev(ig,
l)
274 zbuoy=rg*(ztva_est(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l)
277 zalpha=f0(ig)*f_star(ig,
l)/sqrt(w_est(ig,
l))/rhobarz(ig,
l)
281 entr_star(ig,
l)=f_star(ig,
l)*zdz * ( zfact * max(0., &
282 & a1*zbuoy/w_est(ig,
l+1) &
283 & - fact_epsilon/zalpha**expa ) &
296 & max(5.e-4,-fact_gamma2*a1*(1./w_est(ig,
l+1))*((1.-(1.-
m)/(1.+70*
zqta(ig,
l-1)))*zbuoy &
297 & -40*(1.-
m)*(max(
zqta(ig,
l-1)-po(ig,
l),0.))/(1.+70*
zqta(ig,
l-1)) ) )
308 if (
l.lt.lalim(ig))
then
318 f_star(ig,
l+1)=f_star(ig,
l)+
alim_star(ig,
l)+entr_star(ig,
l) &
327 activetmp(:)=active(:) .and. f_star(:,
l+1)>1.e-10
329 if (activetmp(ig))
then
331 ztla(ig,
l)=(f_star(ig,
l)*ztla(ig,
l-1)+ &
341 call
thermcell_condens(ngrid,activetmp,zpspsk(:,
l),pplev(:,
l),ztla(:,
l),
zqta(:,
l),zqla(:,
l))
345 if (activetmp(ig))
then
348 ztva(ig,
l) = ztla(ig,
l)*zpspsk(ig,
l)+rlvcp*zqla(ig,
l)
349 ztva(ig,
l) = ztva(ig,
l)/zpspsk(ig,
l)
351 zha(ig,
l) = ztva(ig,
l)
352 ztva(ig,
l) = ztva(ig,
l)*(1.+retv*(
zqta(ig,
l) &
353 & -zqla(ig,
l))-zqla(ig,
l))
356 zqsatth(ig,
l)=qsatbef
366 zbuoy=rg*(ztva(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l)
367 zdz=zlev(ig,
l+1)-zlev(ig,
l)
370 zeps=(entr_star(ig,
l)+
alim_star(ig,
l))/(f_star(ig,
l)*zdz)
377 zdrag=fact_epsilon/(zalpha**expa)
378 zw2fact=zbuoy/zdrag*a1
379 zw2(ig,
l+1)=(
zw2(ig,
l)-zw2fact)*exp(-2.*zdrag/(1+fact_gamma)*zdz) &
386 if (
prt_level.ge.20) print*,
'coucou calcul detr 460: ig, l',ig,
l
394 if (
zw2(ig,
l+1)>0. .and.
zw2(ig,
l+1).lt.1.e-10)
then
402 if (
zw2(ig,
l+1).lt.0.)
then
408 wa_moy(ig,
l+1)=sqrt(
zw2(ig,
l+1))
410 if (wa_moy(ig,
l+1).gt.wmaxa(ig))
then
413 if (zqla(ig,
l).lt.1.e-10)
then
417 wmaxa(ig)=wa_moy(ig,
l+1)
422 print*,
'WARNING on tombe ',nbpb,
' x sur un pb pour l=',
l,
' dans thermcell_plume'
436 alim_star_tot(ig)=alim_star_tot(ig)+
alim_star(ig,
l)
441 if (
prt_level.ge.20) print*,
'coucou calcul detr 470: ig, l', ig,
l
453 SUBROUTINE thermcellv1_plume(itap,ngrid,klev,ptimestep,ztv,zthl,po,zl,rhobarz, &
454 & zlev,pplev,pphi,zpspsk,
alim_star,alim_star_tot, &
455 & lalim,f0,
detr_star,entr_star,f_star,csc,ztva, &
456 & ztla,zqla,
zqta,
zha,
zw2,w_est,ztva_est,zqsatth,lmix,lmix_bis,linter &
457 & ,lev_out,lunout1,igout)
470 #include "iniprint.h"
471 #include "thermcell.h"
474 INTEGER lunout1,igout
478 REAL zthl(ngrid,
klev)
481 REAL rhobarz(ngrid,
klev)
482 REAL zlev(ngrid,
klev+1)
483 REAL pplev(ngrid,
klev+1)
484 REAL pphi(ngrid,
klev)
485 REAL zpspsk(ngrid,
klev)
492 real alim_star_tot(ngrid)
494 REAL ztva(ngrid,
klev)
495 REAL ztla(ngrid,
klev)
496 REAL zqla(ngrid,
klev)
502 REAL entr_star(ngrid,
klev)
504 REAL entr(ngrid,
klev)
509 REAL w_est(ngrid,
klev+1)
510 REAL f_star(ngrid,
klev+1)
511 REAL wa_moy(ngrid,
klev+1)
513 REAL ztva_est(ngrid,
klev)
514 REAL zqla_est(ngrid,
klev)
515 REAL zqsatth(ngrid,
klev)
516 REAL zta_est(ngrid,
klev)
517 REAL ztemp(ngrid),
zqsat(ngrid)
521 REAL zeps(ngrid,
klev)
525 INTEGER lmix_bis(ngrid)
532 real zcor,zdelta,zcvm5,qlbef,zdz2
533 real betalpha,zbetalpha
538 LOGICAL active(ngrid),activetmp(ngrid)
539 REAL fact_gamma,fact_epsilon,fact_gamma2,fact_epsilon2
549 zbetalpha=betalpha/(1.+betalpha)
555 ztva_est(:,:)=ztva(:,:)
597 active(:)=
ztv(:,1)>
ztv(:,2)
606 & *sqrt(zlev(ig,
l+1))
608 alim_star_tot(ig)=alim_star_tot(ig)+
alim_star(ig,
l)
614 if (alim_star_tot(ig) > 1.e-10 )
then
634 ztla(ig,1)=zthl(ig,1)
640 & *(zlev(ig,2)-zlev(ig,1)) &
641 & *0.4*pphi(ig,1)/(pphi(ig,2)-pphi(ig,1))
642 w_est(ig,2)=
zw2(ig,2)
657 active(ig)=active(ig) &
658 & .and.
zw2(ig,
l)>1.e-10 &
674 ztemp(:)=zpspsk(:,
l)*ztla(:,
l-1)
681 ztva_est(ig,
l) = ztla(ig,
l-1)*zpspsk(ig,
l)+rlvcp*zqla_est(ig,
l)
682 zta_est(ig,
l)=ztva_est(ig,
l)
683 ztva_est(ig,
l) = ztva_est(ig,
l)/zpspsk(ig,
l)
684 ztva_est(ig,
l) = ztva_est(ig,
l)*(1.+retv*(
zqta(ig,
l-1) &
685 & -zqla_est(ig,
l))-zqla_est(ig,
l))
690 zdz=zlev(ig,
l+1)-zlev(ig,
l)
691 zbuoy(ig,
l)=rg*(ztva_est(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l)
693 zw2fact=fact_epsilon*2.*zdz/(1.+betalpha)
694 zdw2=(afact)*zbuoy(ig,
l)/(fact_epsilon)
695 w_est(ig,
l+1)=max(0.0001,exp(-zw2fact)*(w_est(ig,
l)-zdw2)+zdw2)
698 if (w_est(ig,
l+1).lt.0.)
then
699 w_est(ig,
l+1)=
zw2(ig,
l)
712 zw2m=max(0.5*(w_est(ig,
l)+w_est(ig,
l+1)),0.1)
714 zdz=zlev(ig,
l+1)-zlev(ig,
l)
715 zbuoy(ig,
l)=rg*(ztva_est(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l)
718 zalpha=f0(ig)*f_star(ig,
l)/sqrt(w_est(ig,
l+1))/rhobarz(ig,
l)
719 zdqt(ig,
l)=max(
zqta(ig,
l-1)-po(ig,
l),0.)/po(ig,
l)
722 entr_star(ig,
l)=f_star(ig,
l)*zdz* zbetalpha*max(0., &
723 & afact*zbuoybis/zw2m - fact_epsilon )
727 & *max(1.e-3, -afact*zbetalpha*zbuoy(ig,
l)/zw2m &
728 & + 0.012*(zdqt(ig,
l)/zw2m)**0.5 )
732 if (
l.lt.lalim(ig))
then
738 f_star(ig,
l+1)=f_star(ig,
l)+
alim_star(ig,
l)+entr_star(ig,
l) &
748 activetmp(:)=active(:) .and. f_star(:,
l+1)>1.e-10
750 if (activetmp(ig))
then
752 ztla(ig,
l)=(f_star(ig,
l)*ztla(ig,
l-1)+ &
762 ztemp(:)=zpspsk(:,
l)*ztla(:,
l)
766 if (activetmp(ig))
then
769 zqla(ig,
l)=max(0.,
zqta(ig,
l)-zqsatth(ig,
l))
770 ztva(ig,
l) = ztla(ig,
l)*zpspsk(ig,
l)+rlvcp*zqla(ig,
l)
771 ztva(ig,
l) = ztva(ig,
l)/zpspsk(ig,
l)
773 zha(ig,
l) = ztva(ig,
l)
774 ztva(ig,
l) = ztva(ig,
l)*(1.+retv*(
zqta(ig,
l) &
775 & -zqla(ig,
l))-zqla(ig,
l))
776 zbuoy(ig,
l)=rg*(ztva(ig,
l)-
ztv(ig,
l))/
ztv(ig,
l)
777 zdz=zlev(ig,
l+1)-zlev(ig,
l)
778 zeps(ig,
l)=(entr_star(ig,
l)+
alim_star(ig,
l))/(f_star(ig,
l)*zdz)
780 zw2fact=fact_epsilon*2.*zdz/(1.+betalpha)
781 zdw2=afact*zbuoy(ig,
l)/(fact_epsilon)
782 zw2(ig,
l+1)=max(0.0001,exp(-zw2fact)*(
zw2(ig,
l)-zdw2)+zdw2)
786 if (
prt_level.ge.20) print*,
'coucou calcul detr 460: ig, l',ig,
l
794 if (
zw2(ig,
l+1)>0. .and.
zw2(ig,
l+1).lt.1.e-10)
then
802 if (
zw2(ig,
l+1).lt.0.)
then
808 wa_moy(ig,
l+1)=sqrt(
zw2(ig,
l+1))
810 if (wa_moy(ig,
l+1).gt.wmaxa(ig))
then
813 if (zqla(ig,
l).lt.1.e-10)
then
817 wmaxa(ig)=wa_moy(ig,
l+1)
822 print*,
'WARNING on tombe ',nbpb,
' x sur un pb pour l=',
l,
' dans thermcell_plume'
836 alim_star_tot(ig)=alim_star_tot(ig)+
alim_star(ig,
l)
841 if (
prt_level.ge.20) print*,
'coucou calcul detr 470: ig, l', ig,
l
843 #undef wrgrads_thermcell
844 #ifdef wrgrads_thermcell