4 RECURSIVE SUBROUTINE vlx_loc(q,pente_max,masse,u_m,ijb_x,ije_x,iq)
19 #include "dimensions.h"
37 INTEGER ij,l,j,i,iju,ijq,indu(
ijnb_u),niju
56 INTEGER ijb,ije,ijb_x,ije_x
68 IF (pente_max.gt.-1.e-5)
THEN
79 dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq)
83 DO ij=ijb+iip1-1,ije,iip1
89 adxqu(ij)=abs(dxqu(ij))
95 dxqmax(ij,l)=pente_max*
96 , min(adxqu(ij-1),adxqu(ij))
103 DO ij=ijb+iip1-1,ije,iip1
104 dxqmax(ij-
iim,l)=dxqmax(ij,l)
110 , cvmgp(dxqu(ij-1)+dxqu(ij),0.,dxqu(ij-1)*dxqu(ij))
112 IF(dxqu(ij-1)*dxqu(ij).gt.0)
THEN
113 dxq(ij,l)=dxqu(ij-1)+dxqu(ij)
119 dxq(ij,l)=0.5*dxq(ij,l)
121 , sign(min(abs(dxq(ij,l)),dxqmax(ij,l)),dxq(ij,l))
135 dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq)
137 DO ij=ijb+iip1-1,ije,iip1
138 dxqu(ij)=dxqu(ij-
iim)
142 zz(ij)=dxqu(ij-1)*dxqu(ij)
145 dxq(ij,l)=zz(ij)/(dxqu(ij-1)+dxqu(ij))
162 DO ij=ijb+iip1-1,ije,iip1
163 dxq(ij-
iim,l)=dxq(ij,l)
179 zdum(ij,l)=cvmgp(1.-u_m(ij,l)/masse(ij,l,iq),
180 , 1.+u_m(ij,l)/masse(ij+1,l,iq),
182 zdum(ij,l)=0.5*zdum(ij,l)
184 , q(ij,l,iq)+zdum(ij,l)*dxq(ij,l),
185 , q(ij+1,l,iq)-zdum(ij,l)*dxq(ij+1,l),
187 u_mq(ij,l)=u_m(ij,l)*u_mq(ij,l)
200 IF (u_m(ij,l).gt.0.)
THEN
201 zdum(ij,l)=1.-u_m(ij,l)/masse(ij,l,iq)
202 u_mq(ij,l)=u_m(ij,l)*(q(ij,l,iq)
203 : +0.5*zdum(ij,l)*dxq(ij,l))
205 zdum(ij,l)=1.+u_m(ij,l)/masse(ij+1,l,iq)
206 u_mq(ij,l)=u_m(ij,l)*(q(ij+1,l,iq)
207 : -0.5*zdum(ij,l)*dxq(ij+1,l))
221 IF(zdum(ij,l).lt.0)
THEN
232 DO ij=ijb+iip1-1,ije,iip1
233 iadvplus(ij,l)=iadvplus(ij-
iim,l)
251 nl(l)=nl(l)+iadvplus(ij,l)
269 IF(iadvplus(ij,l).eq.1.and.mod(ij,iip1).ne.0)
THEN
287 do while(zu_m.gt.masse(ijq,l,iq))
288 u_mq(ij,l)=u_mq(ij,l)
289 & +q(ijq,l,iq)*masse(ijq,l,iq)
290 zu_m=zu_m-masse(ijq,l,iq)
295 u_mq(ij,l)=u_mq(ij,l)+zu_m*
297 & (1.-zu_m/masse(ijq,l,iq))*dxq(ijq,l))
302 do while(-zu_m.gt.masse(ijq,l,iq))
303 u_mq(ij,l)=u_mq(ij,l)-q(ijq,l,iq)
305 zu_m=zu_m+masse(ijq,l,iq)
310 u_mq(ij,l)=u_mq(ij,l)+zu_m*(q(ijq,l,iq)-
311 & 0.5*(1.+zu_m/masse(ijq,l,iq))*dxq(ijq,l))
324 DO ij=ijb+iip1-1,ije,iip1
325 u_mq(ij,l)=u_mq(ij-
iim,l)
343 masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
344 ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
351 call vlx_loc(ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2)
362 new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l)
363 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+
364 & u_mq(ij-1,l)-u_mq(ij,l))
369 DO ij=ijb+iip1-1,ije,iip1
370 q(ij-
iim,l,iq)=q(ij,l,iq)
371 masse(ij-
iim,l,iq)=masse(ij,l,iq)
386 q(ij,l,iq2)=q(ij,l,iq)*ratio(ij,l,iq2)
388 DO ij=ijb+iip1-1,ije,iip1
389 q(ij-
iim,l,iq2)=q(ij,l,iq2)
405 RECURSIVE SUBROUTINE vly_loc(q,pente_max,masse,masse_adv_v,iq)
421 #include "dimensions.h"
425 #include "comconst.h"
441 REAL airej2,airejjm,airescb(
iim),airesch(
iim)
446 REAL qpns,qpsn,appn,apps,dyn1,dys1,dyn2,dys2,newmasse,fn,fs
448 Logical extremum,first,testcpu
449 REAL temps0,temps1,temps2,temps3,temps4,temps5,second
450 SAVE temps0,temps1,temps2,temps3,temps4,temps5
455 REAL convpn,convps,convmpn,convmps
456 real massepn,masseps,qpn,qps
457 REAL sinlon(iip1),sinlondlon(iip1)
458 REAL coslon(iip1),coslondlon(iip1)
459 SAVE sinlon,coslon,sinlondlon,coslondlon
472 DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
481 print*,
'Shema Amont nouveau appele dans Vanleer '
484 coslon(i)=cos(
rlonv(i))
485 sinlon(i)=sin(
rlonv(i))
489 coslon(1)=coslon(iip1)
490 coslondlon(1)=coslondlon(iip1)
491 sinlon(1)=sinlon(iip1)
492 sinlondlon(1)=sinlondlon(iip1)
513 airescb(i) =
aire(i+ iip1) * q(i+ iip1,l,iq)
515 qpns = ssum(
iim, airescb ,1 ) / airej2
522 qpsn = ssum(
iim, airesch ,1 ) / airejjm
536 dyqv(ij)=q(ij,l,iq)-q(ij+iip1,l,iq)
537 adyqv(ij)=abs(dyqv(ij))
548 dyq(ij,l)=.5*(dyqv(ij-iip1)+dyqv(ij))
549 dyqmax(ij)=min(adyqv(ij-iip1),adyqv(ij))
550 dyqmax(ij)=pente_max*dyqmax(ij)
556 dyq(ij,l)=qpns-q(ij+iip1,l,iq)
562 dyn1=dyn1+sinlondlon(ij)*dyq(ij,l)
563 dyn2=dyn2+coslondlon(ij)*dyq(ij,l)
566 dyq(ij,l)=dyn1*sinlon(ij)+dyn2*coslon(ij)
585 dys1=dys1+sinlondlon(ij)*dyq(
ip1jm+ij,l)
586 dys2=dys2+coslondlon(ij)*dyq(
ip1jm+ij,l)
590 dyq(
ip1jm+ij,l)=dys1*sinlon(ij)+dys2*coslon(ij)
695 IF(dyqv(ij)*dyqv(ij-iip1).gt.0.)
THEN
696 dyq(ij,l)=sign(min(abs(dyq(ij,l)),dyqmax(ij)),dyq(ij,l))
713 IF(masse_adv_v(ij,l).gt.0)
THEN
714 qbyv(ij,l)=q(ij+iip1,l,iq)+dyq(ij+iip1,l)*
715 , 0.5*(1.-masse_adv_v(ij,l)
716 , /masse(ij+iip1,l,iq))
718 qbyv(ij,l)=q(ij,l,iq)-dyq(ij,l)*
719 , 0.5*(1.+masse_adv_v(ij,l)/masse(ij,l,iq))
721 qbyv(ij,l)=masse_adv_v(ij,l)*qbyv(ij,l)
741 masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
742 ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
750 call vly_loc(ratio,pente_max,masse,qbyv,iq2)
763 newmasse=masse(ij,l,iq)
764 & +masse_adv_v(ij,l)-masse_adv_v(ij-iip1,l)
766 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+qbyv(ij,l)
767 & -qbyv(ij-iip1,l))/newmasse
769 masse(ij,l,iq)=newmasse
778 convpn=ssum(
iim,qbyv(1,l),1)
779 convmpn=ssum(
iim,masse_adv_v(1,l),1)
780 massepn=ssum(
iim,masse(1,l,iq),1)
783 qpn=qpn+masse(ij,l,iq)*q(ij,l,iq)
785 qpn=(qpn+convpn)/(massepn+convmpn)
798 masseps=ssum(
iim, masse(
ip1jm+1,l,iq),1)
801 qps=qps+masse(ij,l,iq)*q(ij,l,iq)
803 qps=(qps+convps)/(masseps+convmps)
847 q(ij,l,iq2)=q(ij,l,iq)*ratio(ij,l,iq2)
860 RECURSIVE SUBROUTINE vlz_loc(q,pente_max,masse,w,ijb_x,ije_x,iq)
877 #include "dimensions.h"
881 #include "comconst.h"
904 REAL temps0,temps1,temps2,temps3,temps4,temps5,second
905 SAVE temps0,temps1,temps2,temps3,temps4,temps5
911 DATA testcpu/.
false./
912 DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
913 INTEGER ijb,ije,ijb_x,ije_x
914 LOGICAL,
SAVE :: first=.
true.
941 dzqw(ij,l)=q(ij,l-1,iq)-q(ij,l,iq)
954 IF(
dzqw(ij,l)*
dzqw(ij,l+1).gt.0.)
THEN
960 dzqmax=pente_max*min(
adzqw(ij,l),
adzqw(ij,l+1))
961 dzq(ij,l)=sign(min(abs(
dzq(ij,l)),dzqmax),
dzq(ij,l))
975 temps1=temps1+second(0.)-temps0
988 IF(w(ij,l+1,iq).gt.0.)
THEN
989 sigw=w(ij,l+1,iq)/masse(ij,l+1,iq)
990 wq(ij,l+1,iq)=w(ij,l+1,iq)*(q(ij,l+1,iq)
991 : +0.5*(1.-sigw)*
dzq(ij,l+1))
993 sigw=w(ij,l+1,iq)/masse(ij,l,iq)
994 wq(ij,l+1,iq)=w(ij,l+1,iq)*(q(ij,l,iq)
995 : -0.5*(1.+sigw)*
dzq(ij,l))
1013 if (
nqfils(iq).gt.0)
then
1019 masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
1020 ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
1022 w(ij,l,iq2)=
wq(ij,l,iq)
1043 newmasse=masse(ij,l,iq)+w(ij,l+1,iq)-w(ij,l,iq)
1044 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)
1045 & +
wq(ij,l+1,iq)-
wq(ij,l,iq))
1047 masse(ij,l,iq)=newmasse
1054 if (
nqfils(iq).gt.0)
then
1060 q(ij,l,iq2)=q(ij,l,iq)*
ratio(ij,l,iq2)
real, dimension(:,:), pointer, save dzqw
!$Header llmm1 INTEGER ip1jmp1
integer, dimension(:), allocatable, save nqdesc
recursive subroutine vlx_loc(q, pente_max, masse, u_m, ijb_x, ije_x, iq)
!$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
integer, dimension(:,:), allocatable, save iqfils
!$Header llmm1 INTEGER ip1jm
real, dimension(:,:), pointer, save adzqw
!$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
real, dimension(:,:), pointer, save dzq
!$Header!CDK comgeom COMMON comgeom rlonu
recursive subroutine vly_loc(q, pente_max, masse, masse_adv_v, iq)
!$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
integer, dimension(:), allocatable, save nqfils
real, dimension(:,:,:), pointer, save wq
c c zjulian c cym CALL iim cym klev iim
real, dimension(:,:,:), pointer, save ratio
recursive subroutine vlz_loc(q, pente_max, masse, w, ijb_x, ije_x, iq)
!$Header!CDK comgeom COMMON comgeom rlonv