4 SUBROUTINE vlx_loc(q,pente_max,masse,u_m,ijb_x,ije_x)
18 #include "dimensions.h"
27 REAL masse(ijb_u:ije_u,llm),pente_max
28 REAL u_m( ijb_u:ije_u,llm ),pbarv( iip1,jjb_v:jje_v,llm)
29 REAL q(ijb_u:ije_u,llm)
30 REAL w(ijb_u:ije_u,llm)
35 INTEGER ij,
l,
j,
i,iju,ijq,indu(ijnb_u),niju
36 INTEGER n0,iadvplus(ijb_u:ije_u,llm),
nl(llm)
38 REAL new_m,zu_m,zdum(ijb_u:ije_u,llm)
39 REAL sigu(ijb_u:ije_u),dxq(ijb_u:ije_u,llm),dxqu(ijb_u:ije_u)
41 REAL adxqu(ijb_u:ije_u),dxqmax(ijb_u:ije_u,llm)
42 REAL u_mq(ijb_u:ije_u,llm)
51 INTEGER ijb,ije,ijb_x,ije_x
58 if (pole_nord.and.ijb==1) ijb=ijb+iip1
59 if (pole_sud.and.ije==
ip1jmp1) ije=ije-iip1
61 IF (pente_max.gt.-1.e-5)
THEN
76 DO ij=ijb+iip1-1,ije,iip1
82 adxqu(
ij)=abs(dxqu(
ij))
88 dxqmax(
ij,
l)=pente_max*
89 , min(adxqu(
ij-1),adxqu(
ij))
96 DO ij=ijb+iip1-1,ije,iip1
103 , cvmgp(dxqu(
ij-1)+dxqu(
ij),0.,dxqu(
ij-1)*dxqu(
ij))
105 IF(dxqu(
ij-1)*dxqu(
ij).gt.0)
THEN
114 , sign(min(abs(dxq(
ij,
l)),dxqmax(
ij,
l)),dxq(
ij,
l))
130 DO ij=ijb+iip1-1,ije,iip1
135 zz(
ij)=dxqu(
ij-1)*dxqu(
ij)
153 DO ij=ijb+iip1-1,ije,iip1
170 zdum(
ij,
l)=cvmgp(1.-u_m(
ij,
l)/masse(
ij,
l),
171 , 1.+u_m(
ij,
l)/masse(
ij+1,
l),
190 IF (u_m(
ij,
l).gt.0.)
THEN
209 IF(zdum(
ij,
l).lt.0)
THEN
219 DO ij=ijb+iip1-1,ije,iip1
254 IF(iadvplus(
ij,
l).eq.1.and.mod(
ij,iip1).ne.0)
THEN
272 do while(zu_m.gt.masse(ijq,
l))
273 u_mq(
ij,
l)=u_mq(
ij,
l)+
q(ijq,
l)*masse(ijq,
l)
274 zu_m=zu_m-masse(ijq,
l)
279 u_mq(
ij,
l)=u_mq(
ij,
l)+zu_m*
280 & (
q(ijq,
l)+0.5*(1.-zu_m/masse(ijq,
l))*dxq(ijq,
l))
285 do while(-zu_m.gt.masse(ijq,
l))
286 u_mq(
ij,
l)=u_mq(
ij,
l)-
q(ijq,
l)*masse(ijq,
l)
287 zu_m=zu_m+masse(ijq,
l)
292 u_mq(
ij,
l)=u_mq(
ij,
l)+zu_m*(
q(ijq,
l)-
293 & 0.5*(1.+zu_m/masse(ijq,
l))*dxq(ijq,
l))
307 DO ij=ijb+iip1-1,ije,iip1
319 & u_mq(
ij-1,
l)-u_mq(
ij,
l))
324 DO ij=ijb+iip1-1,ije,iip1
338 SUBROUTINE vly_loc(q,pente_max,masse,masse_adv_v)
353 #include "dimensions.h"
357 #include "comconst.h"
363 REAL masse(ijb_u:ije_u,llm),pente_max
364 REAL masse_adv_v( ijb_v:ije_v,llm)
365 REAL q(ijb_u:ije_u,llm), dq( ijb_u:ije_u,llm)
372 REAL airej2,airejjm,airescb(
iim),airesch(
iim)
373 REAL dyq(ijb_u:ije_u,llm),dyqv(ijb_v:ije_v),zdvm(ijb_u:ije_u,llm)
374 REAL adyqv(ijb_v:ije_v),dyqmax(ijb_u:ije_u)
375 REAL qbyv(ijb_v:ije_v,llm)
377 REAL qpns,qpsn,appn,apps,dyn1,dys1,dyn2,dys2,newmasse,fn,fs
379 Logical extremum,first,testcpu
380 REAL temps0,temps1,temps2,temps3,temps4,temps5,second
381 SAVE temps0,temps1,temps2,temps3,temps4,temps5
386 REAL convpn,convps,convmpn,convmps
387 real massepn,masseps,qpn,qps
388 REAL sinlon(iip1),sinlondlon(iip1)
389 REAL coslon(iip1),coslondlon(iip1)
390 SAVE sinlon,coslon,sinlondlon,coslondlon
399 DATA first,testcpu/.true.,.
false./
400 DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
412 coslon(1)=coslon(iip1)
413 coslondlon(1)=coslondlon(iip1)
414 sinlon(1)=sinlon(iip1)
415 sinlondlon(1)=sinlondlon(iip1)
436 airescb(
i) =
aire(
i+ iip1) *
q(
i+ iip1,
l)
438 qpns =
ssum(
iim, airescb ,1 ) / airej2
445 qpsn =
ssum(
iim, airesch ,1 ) / airejjm
454 if (pole_nord) ijb=ij_begin
455 if (pole_sud) ije=ij_end-iip1
459 adyqv(
ij)=abs(dyqv(
ij))
465 if (pole_nord) ijb=ij_begin+iip1
466 if (pole_sud) ije=ij_end-iip1
469 dyq(
ij,
l)=.5*(dyqv(
ij-iip1)+dyqv(
ij))
470 dyqmax(
ij)=min(adyqv(
ij-iip1),adyqv(
ij))
471 dyqmax(
ij)=pente_max*dyqmax(
ij)
483 dyn1=dyn1+sinlondlon(
ij)*dyq(
ij,
l)
484 dyn2=dyn2+coslondlon(
ij)*dyq(
ij,
l)
487 dyq(
ij,
l)=dyn1*sinlon(
ij)+dyn2*coslon(
ij)
612 if (pole_nord) ijb=ij_begin+iip1
613 if (pole_sud) ije=ij_end-iip1
616 IF(dyqv(
ij)*dyqv(
ij-iip1).gt.0.)
THEN
617 dyq(
ij,
l)=sign(min(abs(dyq(
ij,
l)),dyqmax(
ij)),dyq(
ij,
l))
628 if (pole_nord) ijb=ij_begin
629 if (pole_sud) ije=ij_end-iip1
634 IF(masse_adv_v(
ij,
l).gt.0)
THEN
636 , 0.5*(1.-masse_adv_v(
ij,
l)/masse(
ij+iip1,
l))
639 , 0.5*(1.+masse_adv_v(
ij,
l)/masse(
ij,
l))
648 if (pole_nord) ijb=ij_begin+iip1
649 if (pole_sud) ije=ij_end-iip1
655 & +masse_adv_v(
ij,
l)-masse_adv_v(
ij-iip1,
l)
666 convmpn=
ssum(
iim,masse_adv_v(1,
l),1)
672 qpn=(qpn+convpn)/(massepn+convmpn)
690 qps=(qps+convps)/(masseps+convmps)
727 SUBROUTINE vlz_loc(q,pente_max,masse,w,ijb_x,ije_x)
743 #include "dimensions.h"
747 #include "comconst.h"
752 REAL masse(ijb_u:ije_u,llm),pente_max
753 REAL q(ijb_u:ije_u,llm)
754 REAL w(ijb_u:ije_u,llm+1)
769 REAL temps0,temps1,temps2,temps3,temps4,temps5,second
770 SAVE temps0,temps1,temps2,temps3,temps4,temps5
776 DATA testcpu/.
false./
777 DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
778 INTEGER ijb,ije,ijb_x,ije_x
779 LOGICAL,
SAVE :: first=.true.
802 adzqw(
ij,
l)=abs(dzqw(
ij,
l))
812 , cvmgp(dzqw(
ij,
l)+dzqw(
ij,
l+1),0.,dzqw(
ij,
l)*dzqw(
ij,
l+1))
814 IF(dzqw(
ij,
l)*dzqw(
ij,
l+1).gt.0.)
THEN
820 dzqmax=pente_max*min(adzqw(
ij,
l),adzqw(
ij,
l+1))
821 dzq(
ij,
l)=sign(min(abs(dzq(
ij,
l)),dzqmax),dzq(
ij,
l))
835 temps1=temps1+second(0.)-temps0
847 IF(w(
ij,
l+1).gt.0.)
THEN
848 sigw=w(
ij,
l+1)/masse(
ij,
l+1)
851 sigw=w(
ij,
l+1)/masse(
ij,
l)