4 SUBROUTINE vlspltqs_p ( q,pente_max,masse,w,pbaru,pbarv,pdt,
30 #include "dimensions.h"
39 REAL masse(
ip1jmp1,llm),pente_max
56 REAL temps1,temps2,temps3
60 SAVE temps1,temps2,temps3
63 DATA qmin,qmax/0.,1.e33/
65 DATA temps1,temps2,temps3/0.,0.,0./
69 REAL rtt,retv,r2es,r3les,r3ies,r4les,r4ies,
play
70 REAL ptarg,pdelarg,foeew,zdelta
78 foeew( ptarg,pdelarg ) = exp(
79 * (r3les*(1.-pdelarg)+r3ies*pdelarg) * (ptarg-rtt)
80 * / (ptarg-(r4les*(1.-pdelarg)+r4ies*pdelarg)) )
94 call
settag(myrequest1,100)
95 call
settag(myrequest2,101)
99 if (pole_nord) ijb=ij_begin
100 if (pole_sud) ije=ij_end
108 zdelta = max( 0., sign(1., rtt - tempe(
ij)) )
110 qsat(
ij,
l) = min(0.5, r2es* foeew(tempe(
ij),zdelta) /
play )
111 qsat(
ij,
l) = qsat(
ij,
l) / ( 1. - retv * qsat(
ij,
l) )
122 if (pole_nord) ijb=ijb+iip1
123 if (pole_sud) ije=ije-iip1
134 if (pole_nord) ijb=ij_begin
135 if (pole_sud) ije=ij_end-iip1
139 mv(
ij,
l)=pbarv(
ij,
l) * zzpbar
161 zq(ijb:ije,1:llm)=
q(ijb:ije,1:llm)
162 zm(ijb:ije,1:llm)=masse(ijb:ije,1:llm)
165 call
vlxqs_p(zq,pente_max,zm,
mu,qsat,ij_begin,ij_begin+2*iip1-1)
166 call
vlxqs_p(zq,pente_max,zm,
mu,qsat,ij_end-2*iip1+1,ij_end)
175 . ij_begin+2*iip1,ij_end-2*iip1)
181 call
vlyqs_p(zq,pente_max,zm,mv,qsat)
183 call
vlz_p(zq,pente_max,zm,mw,ij_begin,ij_begin+2*iip1-1)
184 call
vlz_p(zq,pente_max,zm,mw,ij_end-2*iip1+1,ij_end)
192 call
vlz_p(zq,pente_max,zm,mw,ij_begin+2*iip1,ij_end-2*iip1)
198 call
vlyqs_p(zq,pente_max,zm,mv,qsat)
201 call
vlxqs_p(zq,pente_max,zm,
mu,qsat,ij_begin,ij_end)
214 DO ij=ijb,ije-iip1+1,iip1
224 SUBROUTINE vlxqs_p(q,pente_max,masse,u_m,qsat,ijb_x,ije_x)
236 #include "dimensions.h"
240 #include "comconst.h"
245 REAL masse(
ip1jmp1,llm),pente_max
256 REAL new_m,zu_m,zdum(
ip1jmp1,llm)
265 INTEGER ijb,ije,ijb_x,ije_x
276 if (pole_nord.and.ijb==1) ijb=ijb+iip1
277 if (pole_sud.and.ije==
ip1jmp1) ije=ije-iip1
279 IF (pente_max.gt.-1.e-5)
THEN
294 DO ij=ijb+iip1-1,ije,iip1
300 adxqu(
ij)=abs(dxqu(
ij))
306 dxqmax(
ij,
l)=pente_max*
307 , min(adxqu(
ij-1),adxqu(
ij))
314 DO ij=ijb+iip1-1,ije,iip1
321 , cvmgp(dxqu(
ij-1)+dxqu(
ij),0.,dxqu(
ij-1)*dxqu(
ij))
323 IF(dxqu(
ij-1)*dxqu(
ij).gt.0)
THEN
332 , sign(min(abs(dxq(
ij,
l)),dxqmax(
ij,
l)),dxq(
ij,
l))
347 DO ij=ijb+iip1-1,ije,iip1
352 zz(
ij)=dxqu(
ij-1)*dxqu(
ij)
370 DO ij=ijb+iip1-1,ije,iip1
404 zdum(
ij,
l)=cvmgp(1.-u_m(
ij,
l)/masse(
ij,
l),
405 , 1.+u_m(
ij,
l)/masse(
ij+1,
l),
424 IF (u_m(
ij,
l).gt.0.)
THEN
444 IF(zdum(
ij,
l).lt.0)
THEN
454 DO ij=ijb+iip1-1,ije,iip1
492 IF(iadvplus(
ij,
l).eq.1.and.mod(
ij,iip1).ne.0)
THEN
510 do while(zu_m.gt.masse(ijq,
l))
511 u_mq(
ij,
l)=u_mq(
ij,
l)+
q(ijq,
l)*masse(ijq,
l)
512 zu_m=zu_m-masse(ijq,
l)
517 u_mq(
ij,
l)=u_mq(
ij,
l)+zu_m*
518 & (
q(ijq,
l)+0.5*(1.-zu_m/masse(ijq,
l))*dxq(ijq,
l))
523 do while(-zu_m.gt.masse(ijq,
l))
524 u_mq(
ij,
l)=u_mq(
ij,
l)-
q(ijq,
l)*masse(ijq,
l)
525 zu_m=zu_m+masse(ijq,
l)
530 u_mq(
ij,
l)=u_mq(
ij,
l)+zu_m*(
q(ijq,
l)-
531 & 0.5*(1.+zu_m/masse(ijq,
l))*dxq(ijq,
l))
544 DO ij=ijb+iip1-1,ije,iip1
556 & u_mq(
ij-1,
l)-u_mq(
ij,
l))
561 DO ij=ijb+iip1-1,ije,iip1
573 SUBROUTINE vlyqs_p(q,pente_max,masse,masse_adv_v,qsat)
588 #include "dimensions.h"
592 #include "comconst.h"
598 REAL masse(
ip1jmp1,llm),pente_max
599 REAL masse_adv_v(
ip1jm,llm)
608 REAL airej2,airejjm,airescb(
iim),airesch(
iim)
613 REAL qpns,qpsn,dyn1,dys1,dyn2,dys2,newmasse,fn,fs
618 REAL convpn,convps,convmpn,convmps
619 REAL sinlon(iip1),sinlondlon(iip1)
620 REAL coslon(iip1),coslondlon(iip1)
621 SAVE sinlon,coslon,sinlondlon,coslondlon
633 print*,
'Shema Amont nouveau appele dans Vanleer '
641 coslon(1)=coslon(iip1)
642 coslondlon(1)=coslondlon(iip1)
643 sinlon(1)=sinlon(iip1)
644 sinlondlon(1)=sinlondlon(iip1)
664 airescb(
i) =
aire(
i+ iip1) *
q(
i+ iip1,
l)
666 qpns =
ssum(
iim, airescb ,1 ) / airej2
673 qpsn =
ssum(
iim, airesch ,1 ) / airejjm
681 if (pole_nord) ijb=ij_begin
682 if (pole_sud) ije=ij_end-iip1
686 adyqv(
ij)=abs(dyqv(
ij))
694 if (pole_nord) ijb=ij_begin+iip1
695 if (pole_sud) ije=ij_end-iip1
698 dyq(
ij,
l)=.5*(dyqv(
ij-iip1)+dyqv(
ij))
699 dyqmax(
ij)=min(adyqv(
ij-iip1),adyqv(
ij))
700 dyqmax(
ij)=pente_max*dyqmax(
ij)
714 dyn1=dyn1+sinlondlon(
ij)*dyq(
ij,
l)
715 dyn2=dyn2+coslondlon(
ij)*dyq(
ij,
l)
718 dyq(
ij,
l)=dyn1*sinlon(
ij)+dyn2*coslon(
ij)
724 IF(pente_max*adyqv(
ij).lt.abs(dyq(
ij,
l)))
THEN
725 fn=min(pente_max*adyqv(
ij)/abs(dyq(
ij,
l)),fn)
838 if (pole_nord) ijb=ij_begin+iip1
839 if (pole_sud) ije=ij_end-iip1
842 IF(dyqv(
ij)*dyqv(
ij-iip1).gt.0.)
THEN
843 dyq(
ij,
l)=sign(min(abs(dyq(
ij,
l)),dyqmax(
ij)),dyq(
ij,
l))
854 if (pole_nord) ijb=ij_begin
855 if (pole_sud) ije=ij_end-iip1
860 IF( masse_adv_v(
ij,
l).GT.0. )
THEN
861 qbyv(
ij,
l)= min( qsat(
ij+iip1,
l),
q(
ij+iip1,
l ) +
862 , dyq(
ij+iip1,
l)*0.5*(1.-masse_adv_v(
ij,
l)/masse(
ij+iip1,
l)))
865 , 0.5*(1.+masse_adv_v(
ij,
l)/masse(
ij,
l)) )
867 qbyv(
ij,
l) = masse_adv_v(
ij,
l)*qbyv(
ij,
l)
874 if (pole_nord) ijb=ij_begin+iip1
875 if (pole_sud) ije=ij_end-iip1
881 & +masse_adv_v(
ij,
l)-masse_adv_v(
ij-iip1,
l)