5 SUBROUTINE vlsplt_p(q,pente_max,masse,w,pbaru,pbarv,pdt)
25 #include "dimensions.h"
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)
82 mu(ij,l)=pbaru(ij,l) * zzpbar
93 mv(ij,l)=pbarv(ij,l) * zzpbar
102 mw(ij,l)=w(ij,l) * zzw
115 zq(ijb:ije,:)=q(ijb:ije,:)
116 zm(ijb:ije,:)=masse(ijb:ije,:)
142 call vly_p(zq,pente_max,zm,mv)
163 call vly_p(zq,pente_max,zm,mv)
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"
225 INTEGER ij,l,j,i,iju,ijq,indu(
ip1jmp1),niju
241 INTEGER ijb,ije,ijb_x,ije_x
251 IF (pente_max.gt.-1.e-5)
THEN
262 dxqu(ij)=q(ij+1,l)-q(ij,l)
266 DO ij=ijb+iip1-1,ije,iip1
267 dxqu(ij)=dxqu(ij-
iim)
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
287 dxqmax(ij-
iim,l)=dxqmax(ij,l)
293 , cvmgp(dxqu(ij-1)+dxqu(ij),0.,dxqu(ij-1)*dxqu(ij))
295 IF(dxqu(ij-1)*dxqu(ij).gt.0)
THEN
296 dxq(ij,l)=dxqu(ij-1)+dxqu(ij)
302 dxq(ij,l)=0.5*dxq(ij,l)
304 , sign(min(abs(dxq(ij,l)),dxqmax(ij,l)),dxq(ij,l))
318 dxqu(ij)=q(ij+1,l)-q(ij,l)
320 DO ij=ijb+iip1-1,ije,iip1
321 dxqu(ij)=dxqu(ij-
iim)
325 zz(ij)=dxqu(ij-1)*dxqu(ij)
328 dxq(ij,l)=zz(ij)/(dxqu(ij-1)+dxqu(ij))
343 DO ij=ijb+iip1-1,ije,iip1
344 dxq(ij-
iim,l)=dxq(ij,l)
360 zdum(ij,l)=cvmgp(1.-u_m(ij,l)/masse(ij,l),
361 , 1.+u_m(ij,l)/masse(ij+1,l),
363 zdum(ij,l)=0.5*zdum(ij,l)
365 , q(ij,l)+zdum(ij,l)*dxq(ij,l),
366 , q(ij+1,l)-zdum(ij,l)*dxq(ij+1,l),
368 u_mq(ij,l)=u_m(ij,l)*u_mq(ij,l)
380 IF (u_m(ij,l).gt.0.)
THEN
381 zdum(ij,l)=1.-u_m(ij,l)/masse(ij,l)
382 u_mq(ij,l)=u_m(ij,l)*(q(ij,l)+0.5*zdum(ij,l)*dxq(ij,l))
384 zdum(ij,l)=1.+u_m(ij,l)/masse(ij+1,l)
385 u_mq(ij,l)=u_m(ij,l)*(q(ij+1,l)-0.5*zdum(ij,l)*dxq(ij+1,l))
399 IF(zdum(ij,l).lt.0)
THEN
409 DO ij=ijb+iip1-1,ije,iip1
410 iadvplus(ij,l)=iadvplus(ij-
iim,l)
428 nl(l)=nl(l)+iadvplus(ij,l)
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
498 u_mq(ij,l)=u_mq(ij-
iim,l)
507 new_m=masse(ij,l)+u_m(ij-1,l)-u_m(ij,l)
508 q(ij,l)=(q(ij,l)*masse(ij,l)+
509 & u_mq(ij-1,l)-u_mq(ij,l))
514 DO ij=ijb+iip1-1,ije,iip1
516 masse(ij-
iim,l)=masse(ij,l)
528 SUBROUTINE vly_p(q,pente_max,masse,masse_adv_v)
543 #include "dimensions.h"
547 #include "comconst.h"
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
590 DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
597 coslon(i)=cos(
rlonv(i))
598 sinlon(i)=sin(
rlonv(i))
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
648 dyqv(ij)=q(ij,l)-q(ij+iip1,l)
649 adyqv(ij)=abs(dyqv(ij))
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)
667 dyq(ij,l)=qpns-q(ij+iip1,l)
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)
696 dys1=dys1+sinlondlon(ij)*dyq(
ip1jm+ij,l)
697 dys2=dys2+coslondlon(ij)*dyq(
ip1jm+ij,l)
701 dyq(
ip1jm+ij,l)=dys1*sinlon(ij)+dys2*coslon(ij)
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))
824 IF(masse_adv_v(ij,l).gt.0)
THEN
825 qbyv(ij,l)=q(ij+iip1,l)+dyq(ij+iip1,l)*
826 , 0.5*(1.-masse_adv_v(ij,l)/masse(ij+iip1,l))
828 qbyv(ij,l)=q(ij,l)-dyq(ij,l)*
829 , 0.5*(1.+masse_adv_v(ij,l)/masse(ij,l))
831 qbyv(ij,l)=masse_adv_v(ij,l)*qbyv(ij,l)
845 & +masse_adv_v(ij,l)-masse_adv_v(ij-iip1,l)
847 q(ij,l)=(q(ij,l)*masse(ij,l)+qbyv(ij,l)-qbyv(ij-iip1,l))
855 convpn=ssum(
iim,qbyv(1,l),1)
856 convmpn=ssum(
iim,masse_adv_v(1,l),1)
857 massepn=ssum(
iim,masse(1,l),1)
860 qpn=qpn+masse(ij,l)*q(ij,l)
862 qpn=(qpn+convpn)/(massepn+convmpn)
875 masseps=ssum(
iim, masse(
ip1jm+1,l),1)
878 qps=qps+masse(ij,l)*q(ij,l)
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"
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
985 dzqw(ij,l)=q(ij,l-1)-q(ij,l)
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
999 dzq(ij,l)=0.5*(dzqw(ij,l)+dzqw(ij,l+1))
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)
1033 wq(ij,l+1)=w(ij,l+1)*(q(ij,l+1)+0.5*(1.-sigw)*dzq(ij,l+1))
1035 sigw=w(ij,l+1)/masse(ij,l)
1036 wq(ij,l+1)=w(ij,l+1)*(q(ij,l)-0.5*(1.+sigw)*dzq(ij,l))
1053 newmasse=masse(ij,l)+w(ij,l+1)-w(ij,l)
1054 q(ij,l)=(q(ij,l)*masse(ij,l)+wq(ij,l+1)-wq(ij,l))
1056 masse(ij,l)=newmasse
1096 subroutine minmaxq_p(zq,qmin,qmax,comment)
1098 #include "dimensions.h"
1099 #include "paramet.h"
1101 character*20 comment
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)
!$Header llmm1 INTEGER ip1jmp1
subroutine register_hallo(Field, ij, ll, RUp, Rdown, SUp, SDown, a_request)
subroutine minmaxq_p(zq, qmin, qmax, comment)
subroutine vlsplt_p(q, pente_max, masse, w, pbaru, pbarv, pdt)
!$Id Turb_fcg_gcssold get_uvd hqturb_gcssold endif!large scale llm day day1 day day1 *dt_toga endif!time annee_ref dt_toga u_toga vq_toga w_prof vq_prof llm day day1 day day1 *dt_dice endif!time annee_ref dt_dice swup_dice vg_dice omega_dice tg_prof vg_profd w_profd omega_profd!do llm!print llm l llm
!$Id mode_top_bound COMMON comconstr && pi
!$Header!CDK comgeom COMMON comgeom aire
subroutine scopy(n, sx, incx, sy, incy)
!$Header llmm1 INTEGER ip1jm
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
integer, parameter vthallo
!$Header!CDK comgeom COMMON comgeom rlonu
subroutine sendrequest(a_Request)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
subroutine waitrecvrequest(a_Request)
subroutine vlz_p(q, pente_max, masse, w, ijb_x, ije_x)
subroutine vly_p(q, pente_max, masse, masse_adv_v)
subroutine waitsendrequest(a_Request)
c c zjulian c cym CALL iim cym klev iim
subroutine vlx_p(q, pente_max, masse, u_m, ijb_x, ije_x)
subroutine settag(a_request, tag)
!$Header!CDK comgeom COMMON comgeom rlonv