5       SUBROUTINE vlsplt(q,pente_max,masse,w,pbaru,pbarv,pdt,iq)
 
   23 #include "dimensions.h" 
   44       INTEGER ijlqmin,iqmin,jqmin,lqmin
 
   52       REAL second,temps0,temps1,temps2,temps3
 
   53       REAL ztemps1,ztemps2,ztemps3
 
   57       SAVE temps1,temps2,temps3
 
   62       DATA qmin,qmax/0.,1.e33/
 
   64       DATA temps1,temps2,temps3/0.,0.,0./
 
   71             mu(ij,l)=pbaru(ij,l) * zzpbar
 
   74             mv(ij,l)=pbarv(ij,l) * zzpbar
 
   77             mw(ij,l)=w(ij,l) * zzw
 
   85       CALL scopy(ijp1llm,q(1,1,iq),1,zq(1,1,iq),1)
 
   86       CALL scopy(ijp1llm,masse,1,zm(1,1,iq),1)
 
   91           CALL scopy(ijp1llm,q(1,1,iq2),1,zq(1,1,iq2),1)
 
   97       call vlx(zq,pente_max,zm,mu,iq)
 
  103       call vly(zq,pente_max,zm,mv,iq)
 
  106       call vlz(zq,pente_max,zm,mw,iq)
 
  110       call vly(zq,pente_max,zm,mv,iq)
 
  114       call vlx(zq,pente_max,zm,mu,iq)
 
  120            q(ij,l,iq)=zq(ij,l,iq)
 
  123             q(ij+
iim,l,iq)=q(ij,l,iq)
 
  132            q(ij,l,iq2)=zq(ij,l,iq2)
 
  135             q(ij+
iim,l,iq2)=q(ij,l,iq2)
 
  143       RECURSIVE SUBROUTINE vlx(q,pente_max,masse,u_m,iq)
 
  157       include 
"dimensions.h" 
  176       INTEGER ij,l,j,i,iju,ijq,indu(
ip1jmp1),niju
 
  189       Logical extremum,first,testcpu
 
  193       REAL temps0,temps1,temps2,temps3,temps4,temps5,second
 
  194       SAVE temps0,temps1,temps2,temps3,temps4,temps5
 
  212       IF (pente_max.gt.-1.e-5) 
THEN 
  221                dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq)
 
  225             DO ij=iip1+iip1,
ip1jm,iip1
 
  226                dxqu(ij)=dxqu(ij-
iim)
 
  231                adxqu(ij)=abs(dxqu(ij))
 
  237                dxqmax(ij,l)=pente_max*
 
  238      ,      min(adxqu(ij-1),adxqu(ij))
 
  245             DO ij=iip1+iip1,
ip1jm,iip1
 
  246                dxqmax(ij-
iim,l)=dxqmax(ij,l)
 
  252      ,         cvmgp(dxqu(ij-1)+dxqu(ij),0.,dxqu(ij-1)*dxqu(ij))
 
  254                IF(dxqu(ij-1)*dxqu(ij).gt.0) 
THEN 
  255                   dxq(ij,l)=dxqu(ij-1)+dxqu(ij)
 
  261                dxq(ij,l)=0.5*dxq(ij,l)
 
  263      ,         sign(min(abs(dxq(ij,l)),dxqmax(ij,l)),dxq(ij,l))
 
  276                dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq)
 
  278             DO ij=iip1+iip1,
ip1jm,iip1
 
  279                dxqu(ij)=dxqu(ij-
iim)
 
  283                zz(ij)=dxqu(ij-1)*dxqu(ij)
 
  286                   dxq(ij,l)=zz(ij)/(dxqu(ij-1)+dxqu(ij))
 
  301          DO ij=iip1+iip1,
ip1jm,iip1
 
  302             dxq(ij-
iim,l)=dxq(ij,l)
 
  318           zdum(ij,l)=cvmgp(1.-u_m(ij,l)/masse(ij,l,iq),
 
  319      ,                     1.+u_m(ij,l)/masse(ij+1,l,iq),
 
  321           zdum(ij,l)=0.5*zdum(ij,l)
 
  323      ,                q(ij,l,iq)+zdum(ij,l)*dxq(ij,l),
 
  324      ,                q(ij+1,l,iq)-zdum(ij,l)*dxq(ij+1,l),
 
  326           u_mq(ij,l)=u_m(ij,l)*u_mq(ij,l)
 
  337           IF (u_m(ij,l).gt.0.) 
THEN 
  338              zdum(ij,l)=1.-u_m(ij,l)/masse(ij,l,iq)
 
  339              u_mq(ij,l)=u_m(ij,l)*(q(ij,l,iq)+0.5*zdum(ij,l)*dxq(ij,l))
 
  341              zdum(ij,l)=1.+u_m(ij,l)/masse(ij+1,l,iq)
 
  342              u_mq(ij,l)=u_m(ij,l)*(q(ij+1,l,iq)
 
  343      &           -0.5*zdum(ij,l)*dxq(ij+1,l))
 
  355             IF(zdum(ij,l).lt.0) 
THEN 
  363        DO ij=iip1+iip1,
ip1jm,iip1
 
  364           iadvplus(ij,l)=iadvplus(ij-
iim,l)
 
  380             nl(l)=nl(l)+iadvplus(ij,l)
 
  387      $        
'Nombre de points pour lesquels on advect plus que le' 
  388      &       ,
'contenu de la maille : ',n0
 
  395                   IF(iadvplus(ij,l).eq.1.and.mod(ij,iip1).ne.0) 
THEN 
  413                      do while(zu_m.gt.masse(ijq,l,iq))
 
  414                         u_mq(ij,l)=u_mq(ij,l)+q(ijq,l,iq)
 
  416                         zu_m=zu_m-masse(ijq,l,iq)
 
  421                      u_mq(ij,l)=u_mq(ij,l)+zu_m*
 
  422      &                  (q(ijq,l,iq)+0.5*(1.-zu_m/masse(ijq,l,iq))
 
  428                      do while(-zu_m.gt.masse(ijq,l,iq))
 
  429                         u_mq(ij,l)=u_mq(ij,l)-q(ijq,l,iq)
 
  431                         zu_m=zu_m+masse(ijq,l,iq)
 
  436                      u_mq(ij,l)=u_mq(ij,l)+zu_m*(q(ijq,l,iq)-
 
  437      &               0.5*(1.+zu_m/masse(ijq,l,iq))*dxq(ijq,l))
 
  449         DO ij=iip1+iip1,
ip1jm,iip1
 
  450            u_mq(ij,l)=u_mq(ij-
iim,l)
 
  464            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
 
  465            ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
 
  471          call vlx(ratio,pente_max,masseq,u_mq,iq2)
 
  481             new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l)
 
  482             q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+
 
  483      &      u_mq(ij-1,l)-u_mq(ij,l))
 
  488          DO ij=iip1+iip1,
ip1jm,iip1
 
  489             q(ij-
iim,l,iq)=q(ij,l,iq)
 
  490             masse(ij-
iim,l,iq)=masse(ij,l,iq)
 
  502             q(ij,l,iq2)=q(ij,l,iq)*ratio(ij,l,iq2)            
 
  504           DO ij=iip1+iip1,
ip1jm,iip1
 
  505              q(ij-
iim,l,iq2)=q(ij,l,iq2)
 
  517       RECURSIVE SUBROUTINE vly(q,pente_max,masse,masse_adv_v,iq)
 
  532 #include "dimensions.h" 
  536 #include "comconst.h" 
  552       REAL airej2,airejjm,airescb(
iim),airesch(
iim)
 
  557       REAL qpns,qpsn,appn,apps,dyn1,dys1,dyn2,dys2,newmasse,fn,fs
 
  559       Logical extremum,first,testcpu
 
  560       REAL temps0,temps1,temps2,temps3,temps4,temps5,second
 
  561       SAVE temps0,temps1,temps2,temps3,temps4,temps5
 
  564       REAL convpn,convps,convmpn,convmps
 
  565       real massepn,masseps,qpn,qps
 
  566       REAL sinlon(iip1),sinlondlon(iip1)
 
  567       REAL coslon(iip1),coslondlon(iip1)
 
  568       SAVE sinlon,coslon,sinlondlon,coslondlon
 
  579       DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
 
  584          print*,
'Shema  Amont nouveau  appele dans  Vanleer   ' 
  587             coslon(i)=cos(
rlonv(i))
 
  588             sinlon(i)=sin(
rlonv(i))
 
  592          coslon(1)=coslon(iip1)
 
  593          coslondlon(1)=coslondlon(iip1)
 
  594          sinlon(1)=sinlon(iip1)
 
  595          sinlondlon(1)=sinlondlon(iip1)
 
  614       airescb(i) = 
aire(i+ iip1) * q(i+ iip1,l,iq)
 
  617       qpns   = ssum( 
iim,  airescb ,1 ) / airej2
 
  618       qpsn   = ssum( 
iim,  airesch ,1 ) / airejjm
 
  623          dyqv(ij)=q(ij,l,iq)-q(ij+iip1,l,iq)
 
  624          adyqv(ij)=abs(dyqv(ij))
 
  630          dyq(ij,l)=.5*(dyqv(ij-iip1)+dyqv(ij))
 
  631          dyqmax(ij)=min(adyqv(ij-iip1),adyqv(ij))
 
  632          dyqmax(ij)=pente_max*dyqmax(ij)
 
  638          dyq(ij,l)=qpns-q(ij+iip1,l,iq)
 
  648          dyn1=dyn1+sinlondlon(ij)*dyq(ij,l)
 
  649          dys1=dys1+sinlondlon(ij)*dyq(
ip1jm+ij,l)
 
  650          dyn2=dyn2+coslondlon(ij)*dyq(ij,l)
 
  651          dys2=dys2+coslondlon(ij)*dyq(
ip1jm+ij,l)
 
  654          dyq(ij,l)=dyn1*sinlon(ij)+dyn2*coslon(ij)
 
  655          dyq(
ip1jm+ij,l)=dys1*sinlon(ij)+dys2*coslon(ij)
 
  664          IF(pente_max*adyqv(ij).lt.abs(dyq(ij,l))) 
THEN 
  665             fn=min(pente_max*adyqv(ij)/abs(dyq(ij,l)),fn)
 
  667       IF(pente_max*adyqv(ij+
ip1jm-iip1).lt.abs(dyq(ij+
ip1jm,l))) 
THEN 
  668          fs=min(pente_max*adyqv(ij+
ip1jm-iip1)/abs(dyq(ij+
ip1jm,l)),fs)
 
  672          dyq(ij,l)=fn*dyq(ij,l)
 
  751          IF(dyqv(ij)*dyqv(ij-iip1).gt.0.) 
THEN 
  752             dyq(ij,l)=sign(min(abs(dyq(ij,l)),dyqmax(ij)),dyq(ij,l))
 
  763           IF(masse_adv_v(ij,l).gt.0) 
THEN 
  764               qbyv(ij,l)=q(ij+iip1,l,iq)+dyq(ij+iip1,l)*
 
  765      ,                   0.5*(1.-masse_adv_v(ij,l)
 
  766      ,                   /masse(ij+iip1,l,iq))
 
  768               qbyv(ij,l)=q(ij,l,iq)-dyq(ij,l)*
 
  769      ,                   0.5*(1.+masse_adv_v(ij,l)
 
  772           qbyv(ij,l)=masse_adv_v(ij,l)*qbyv(ij,l)
 
  787            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
 
  788            ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
 
  795          call vly(ratio,pente_max,masseq,qbyv,iq2)
 
  801             newmasse=masse(ij,l,iq)
 
  802      &      +masse_adv_v(ij,l)-masse_adv_v(ij-iip1,l)
 
  803             q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+qbyv(ij,l)
 
  804      &         -qbyv(ij-iip1,l))/newmasse
 
  805             masse(ij,l,iq)=newmasse
 
  811          convpn=ssum(
iim,qbyv(1,l),1)
 
  812          convmpn=ssum(
iim,masse_adv_v(1,l),1)
 
  813          massepn=ssum(
iim,masse(1,l,iq),1)
 
  816             qpn=qpn+masse(ij,l,iq)*q(ij,l,iq)
 
  818          qpn=(qpn+convpn)/(massepn+convmpn)
 
  828          masseps=ssum(
iim, masse(
ip1jm+1,l,iq),1)
 
  831             qps=qps+masse(ij,l,iq)*q(ij,l,iq)
 
  833          qps=(qps+convps)/(masseps+convmps)
 
  870             q(ij,l,iq2)=q(ij,l,iq)*ratio(ij,l,iq2)            
 
  880       RECURSIVE SUBROUTINE vlz(q,pente_max,masse,w,iq)
 
  895 #include "dimensions.h" 
  899 #include "comconst.h" 
  925       REAL temps0,temps1,temps2,temps3,temps4,temps5,second
 
  926       SAVE temps0,temps1,temps2,temps3,temps4,temps5
 
  929       DATA testcpu/.
false./
 
  930       DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
 
  944             dzqw(ij,l)=q(ij,l-1,iq)-q(ij,l,iq)
 
  945             adzqw(ij,l)=abs(dzqw(ij,l))
 
  953      ,      cvmgp(dzqw(ij,l)+dzqw(ij,l+1),0.,dzqw(ij,l)*dzqw(ij,l+1))
 
  955             IF(dzqw(ij,l)*dzqw(ij,l+1).gt.0.) 
THEN 
  956                 dzq(ij,l)=0.5*(dzqw(ij,l)+dzqw(ij,l+1))
 
  961             dzqmax=pente_max*min(adzqw(ij,l),adzqw(ij,l+1))
 
  962             dzq(ij,l)=sign(min(abs(dzq(ij,l)),dzqmax),dzq(ij,l))
 
  974          temps1=temps1+second(0.)-temps0
 
  986           IF(w(ij,l+1).gt.0.) 
THEN 
  987              sigw=w(ij,l+1)/masse(ij,l+1,iq)
 
  988              wq(ij,l+1)=w(ij,l+1)*(q(ij,l+1,iq)
 
  989      &           +0.5*(1.-sigw)*dzq(ij,l+1))
 
  991              sigw=w(ij,l+1)/masse(ij,l,iq)
 
  992              wq(ij,l+1)=w(ij,l+1)*(q(ij,l,iq)-0.5*(1.+sigw)*dzq(ij,l))
 
 1005       if (
nqfils(iq).gt.0) 
then   
 1010            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
 
 1011            ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)        
 
 1018          call vlz(ratio,pente_max,masseq,wq,iq2)
 
 1025             newmasse=masse(ij,l,iq)+w(ij,l+1)-w(ij,l)
 
 1026             q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+wq(ij,l+1)-wq(ij,l))
 
 1028             masse(ij,l,iq)=newmasse
 
 1033       if (
nqfils(iq).gt.0) 
then   
 1038             q(ij,l,iq2)=q(ij,l,iq)*ratio(ij,l,iq2)            
 
 1077       subroutine minmaxq(zq,qmin,qmax,comment)
 
 1079 #include "dimensions.h" 
 1080 #include "paramet.h" 
 1082       character*20 comment
 
 1087       integer imin,jmin,lmin,ijlmin
 
 1088       integer imax,jmax,lmax,ijlmax
 
 1095       ijlmin=ismin(ijp1llm,zq,1)
 
 1097       ijlmin=ijlmin-(lmin-1.)*
ip1jmp1 
 1098       jmin=(ijlmin-1)/iip1+1
 
 1099       imin=ijlmin-(jmin-1.)*iip1
 
 1100       zqmin=zq(ijlmin,lmin)
 
 1102       ijlmax=ismax(ijp1llm,zq,1)
 
 1104       ijlmax=ijlmax-(lmax-1.)*
ip1jmp1 
 1105       jmax=(ijlmax-1)/iip1+1
 
 1106       imax=ijlmax-(jmax-1.)*iip1
 
 1107       zqmax=zq(ijlmax,lmax)
 
 1111      s     
write(*,*) comment,
 
 1112      s     imin,jmin,lmin,zqmin,zzq(imin,jmin,lmin)
 
 1115      s     
write(*,*) comment,
 
 1116      s     imax,jmax,lmax,zqmax,zzq(imax,jmax,lmax)
 
 1120 9999  
format(a20,
'  q(',i3,
',',i2,
',',i2,
')=',e12.5,e12.5)
 
!$Header llmm1 INTEGER ip1jmp1
 
integer, dimension(:), allocatable, save nqdesc
 
recursive subroutine vly(q, pente_max, masse, masse_adv_v, iq)
 
recursive subroutine vlx(q, pente_max, masse, u_m, 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
 
subroutine scopy(n, sx, incx, sy, incy)
 
integer, dimension(:,:), allocatable, save iqfils
 
!$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
 
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
 
!$Header!CDK comgeom COMMON comgeom rlonu
 
!$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
 
c c zjulian c cym CALL iim cym klev iim
 
recursive subroutine vlz(q, pente_max, masse, w, iq)
 
subroutine vlsplt(q, pente_max, masse, w, pbaru, pbarv, pdt, iq)
 
subroutine minmaxq(zq, qmin, qmax, comment)
 
!$Header!CDK comgeom COMMON comgeom rlonv