5 SUBROUTINE vlsplt_p(q,pente_max,masse,w,pbaru,pbarv,pdt)
25 #include "dimensions.h"
34 REAL masse(
ip1jmp1,llm),pente_max
45 INTEGER ijlqmin,iqmin,jqmin,lqmin
53 REAL second,temps0,temps1,temps2,temps3
54 REAL ztemps1,ztemps2,ztemps3
58 SAVE temps1,temps2,temps3
62 DATA qmin,qmax/0.,1.e33/
64 DATA temps1,temps2,temps3/0.,0.,0./
69 call
settag(myrequest1,100)
70 call
settag(myrequest2,101)
77 if (pole_nord) ijb=ijb+iip1
78 if (pole_sud) ije=ije-iip1
88 if (pole_nord) ijb=ij_begin
89 if (pole_sud) ije=ij_end-iip1
93 mv(
ij,
l)=pbarv(
ij,
l) * zzpbar
115 zq(ijb:ije,:)=
q(ijb:ije,:)
116 zm(ijb:ije,:)=masse(ijb:ije,:)
121 call
vlx_p(zq,pente_max,zm,
mu,ij_begin,ij_begin+2*iip1-1)
122 call
vlx_p(zq,pente_max,zm,
mu,ij_end-2*iip1+1,ij_end)
128 call
vlx_p(zq,pente_max,zm,
mu,ij_begin+2*iip1,ij_end-2*iip1)
142 call
vly_p(zq,pente_max,zm,mv)
145 call
vlz_p(zq,pente_max,zm,mw,ij_begin,ij_begin+2*iip1-1)
146 call
vlz_p(zq,pente_max,zm,mw,ij_end-2*iip1+1,ij_end)
152 call
vlz_p(zq,pente_max,zm,mw,ij_begin+2*iip1,ij_end-2*iip1)
163 call
vly_p(zq,pente_max,zm,mv)
167 call
vlx_p(zq,pente_max,zm,
mu,ij_begin,ij_end)
182 DO ij=ijb,ije-iip1+1,iip1
194 SUBROUTINE vlx_p(q,pente_max,masse,u_m,ijb_x,ije_x)
208 #include "dimensions.h"
212 #include "comconst.h"
217 REAL masse(
ip1jmp1,llm),pente_max
218 REAL u_m(
ip1jmp1,llm ),pbarv( iip1,jjm,llm)
228 REAL new_m,zu_m,zdum(
ip1jmp1,llm)
241 INTEGER ijb,ije,ijb_x,ije_x
248 if (pole_nord.and.ijb==1) ijb=ijb+iip1
249 if (pole_sud.and.ije==
ip1jmp1) ije=ije-iip1
251 IF (pente_max.gt.-1.e-5)
THEN
266 DO ij=ijb+iip1-1,ije,iip1
272 adxqu(
ij)=abs(dxqu(
ij))
278 dxqmax(
ij,
l)=pente_max*
279 , min(adxqu(
ij-1),adxqu(
ij))
286 DO ij=ijb+iip1-1,ije,iip1
293 , cvmgp(dxqu(
ij-1)+dxqu(
ij),0.,dxqu(
ij-1)*dxqu(
ij))
295 IF(dxqu(
ij-1)*dxqu(
ij).gt.0)
THEN
304 , sign(min(abs(dxq(
ij,
l)),dxqmax(
ij,
l)),dxq(
ij,
l))
320 DO ij=ijb+iip1-1,ije,iip1
325 zz(
ij)=dxqu(
ij-1)*dxqu(
ij)
343 DO ij=ijb+iip1-1,ije,iip1
360 zdum(
ij,
l)=cvmgp(1.-u_m(
ij,
l)/masse(
ij,
l),
361 , 1.+u_m(
ij,
l)/masse(
ij+1,
l),
380 IF (u_m(
ij,
l).gt.0.)
THEN
399 IF(zdum(
ij,
l).lt.0)
THEN
409 DO ij=ijb+iip1-1,ije,iip1
444 IF(iadvplus(
ij,
l).eq.1.and.mod(
ij,iip1).ne.0)
THEN
462 do while(zu_m.gt.masse(ijq,
l))
463 u_mq(
ij,
l)=u_mq(
ij,
l)+
q(ijq,
l)*masse(ijq,
l)
464 zu_m=zu_m-masse(ijq,
l)
469 u_mq(
ij,
l)=u_mq(
ij,
l)+zu_m*
470 & (
q(ijq,
l)+0.5*(1.-zu_m/masse(ijq,
l))*dxq(ijq,
l))
475 do while(-zu_m.gt.masse(ijq,
l))
476 u_mq(
ij,
l)=u_mq(
ij,
l)-
q(ijq,
l)*masse(ijq,
l)
477 zu_m=zu_m+masse(ijq,
l)
482 u_mq(
ij,
l)=u_mq(
ij,
l)+zu_m*(
q(ijq,
l)-
483 & 0.5*(1.+zu_m/masse(ijq,
l))*dxq(ijq,
l))
497 DO ij=ijb+iip1-1,ije,iip1
509 & u_mq(
ij-1,
l)-u_mq(
ij,
l))
514 DO ij=ijb+iip1-1,ije,iip1
528 SUBROUTINE vly_p(q,pente_max,masse,masse_adv_v)
543 #include "dimensions.h"
547 #include "comconst.h"
553 REAL masse(
ip1jmp1,llm),pente_max
554 REAL masse_adv_v(
ip1jm,llm)
562 REAL airej2,airejjm,airescb(
iim),airesch(
iim)
567 REAL qpns,qpsn,appn,apps,dyn1,dys1,dyn2,dys2,newmasse,fn,fs
569 Logical extremum,first,testcpu
570 REAL temps0,temps1,temps2,temps3,temps4,temps5,second
571 SAVE temps0,temps1,temps2,temps3,temps4,temps5
576 REAL convpn,convps,convmpn,convmps
577 real massepn,masseps,qpn,qps
578 REAL sinlon(iip1),sinlondlon(iip1)
579 REAL coslon(iip1),coslondlon(iip1)
580 SAVE sinlon,coslon,sinlondlon,coslondlon
589 DATA first,testcpu/.true.,.
false./
590 DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
602 coslon(1)=coslon(iip1)
603 coslondlon(1)=coslondlon(iip1)
604 sinlon(1)=sinlon(iip1)
605 sinlondlon(1)=sinlondlon(iip1)
626 airescb(
i) =
aire(
i+ iip1) *
q(
i+ iip1,
l)
628 qpns =
ssum(
iim, airescb ,1 ) / airej2
635 qpsn =
ssum(
iim, airesch ,1 ) / airejjm
644 if (pole_nord) ijb=ij_begin
645 if (pole_sud) ije=ij_end-iip1
649 adyqv(
ij)=abs(dyqv(
ij))
655 if (pole_nord) ijb=ij_begin+iip1
656 if (pole_sud) ije=ij_end-iip1
659 dyq(
ij,
l)=.5*(dyqv(
ij-iip1)+dyqv(
ij))
660 dyqmax(
ij)=min(adyqv(
ij-iip1),adyqv(
ij))
661 dyqmax(
ij)=pente_max*dyqmax(
ij)
673 dyn1=dyn1+sinlondlon(
ij)*dyq(
ij,
l)
674 dyn2=dyn2+coslondlon(
ij)*dyq(
ij,
l)
677 dyq(
ij,
l)=dyn1*sinlon(
ij)+dyn2*coslon(
ij)
802 if (pole_nord) ijb=ij_begin+iip1
803 if (pole_sud) ije=ij_end-iip1
806 IF(dyqv(
ij)*dyqv(
ij-iip1).gt.0.)
THEN
807 dyq(
ij,
l)=sign(min(abs(dyq(
ij,
l)),dyqmax(
ij)),dyq(
ij,
l))
818 if (pole_nord) ijb=ij_begin
819 if (pole_sud) ije=ij_end-iip1
824 IF(masse_adv_v(
ij,
l).gt.0)
THEN
826 , 0.5*(1.-masse_adv_v(
ij,
l)/masse(
ij+iip1,
l))
829 , 0.5*(1.+masse_adv_v(
ij,
l)/masse(
ij,
l))
838 if (pole_nord) ijb=ij_begin+iip1
839 if (pole_sud) ije=ij_end-iip1
845 & +masse_adv_v(
ij,
l)-masse_adv_v(
ij-iip1,
l)
856 convmpn=
ssum(
iim,masse_adv_v(1,
l),1)
862 qpn=(qpn+convpn)/(massepn+convmpn)
880 qps=(qps+convps)/(masseps+convmps)
917 SUBROUTINE vlz_p(q,pente_max,masse,w,ijb_x,ije_x)
932 #include "dimensions.h"
936 #include "comconst.h"
941 REAL masse(
ip1jmp1,llm),pente_max
960 REAL temps0,temps1,temps2,temps3,temps4,temps5,second
961 SAVE temps0,temps1,temps2,temps3,temps4,temps5
967 DATA testcpu/.
false./
968 DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
969 INTEGER ijb,ije,ijb_x,ije_x
986 adzqw(
ij,
l)=abs(dzqw(
ij,
l))
996 , cvmgp(dzqw(
ij,
l)+dzqw(
ij,
l+1),0.,dzqw(
ij,
l)*dzqw(
ij,
l+1))
998 IF(dzqw(
ij,
l)*dzqw(
ij,
l+1).gt.0.)
THEN
1004 dzqmax=pente_max*min(adzqw(
ij,
l),adzqw(
ij,
l+1))
1005 dzq(
ij,
l)=sign(min(abs(dzq(
ij,
l)),dzqmax),dzq(
ij,
l))
1019 temps1=temps1+second(0.)-temps0
1031 IF(w(
ij,
l+1).gt.0.)
THEN
1032 sigw=w(
ij,
l+1)/masse(
ij,
l+1)
1035 sigw=w(
ij,
l+1)/masse(
ij,
l)
1056 masse(
ij,
l)=newmasse
1098 #include "dimensions.h"
1099 #include "paramet.h"
1101 character*20 comment
1104 real zzq(iip1,
jjp1,llm)
1106 integer imin,jmin,lmin,ijlmin
1107 integer imax,jmax,lmax,ijlmax
1114 ijlmin=
ismin(ijp1llm,zq,1)
1116 ijlmin=ijlmin-(lmin-1.)*
ip1jmp1
1117 jmin=(ijlmin-1)/iip1+1
1118 imin=ijlmin-(jmin-1.)*iip1
1119 zqmin=zq(ijlmin,lmin)
1121 ijlmax=
ismax(ijp1llm,zq,1)
1123 ijlmax=ijlmax-(lmax-1.)*
ip1jmp1
1124 jmax=(ijlmax-1)/iip1+1
1125 imax=ijlmax-(jmax-1.)*iip1
1126 zqmax=zq(ijlmax,lmax)
1130 s
write(*,*) comment,
1131 s imin,jmin,lmin,zqmin,zzq(imin,jmin,lmin)
1134 s
write(*,*) comment,
1135 s imax,jmax,lmax,zqmax,zzq(imax,jmax,lmax)
1138 9999
format(a20,
' q(',i3,
',',i2,
',',i2,
')=',e12.5,e12.5)