4        SUBROUTINE vlspltqs ( q,pente_max,masse,w,pbaru,pbarv,pdt,
 
   27 #include "dimensions.h" 
   55       REAL temps1,temps2,temps3
 
   59       SAVE temps1,temps2,temps3
 
   62       DATA qmin,qmax/0.,1.e33/
 
   64       DATA temps1,temps2,temps3/0.,0.,0./
 
   68       REAL rtt,retv,r2es,r3les,r3ies,r4les,r4ies,play
 
   69       REAL ptarg,pdelarg,foeew,zdelta
 
   74        foeew( ptarg,pdelarg ) = exp(
 
   75      *          (r3les*(1.-pdelarg)+r3ies*pdelarg) * (ptarg-rtt)
 
   76      * / (ptarg-(r4les*(1.-pdelarg)+r4ies*pdelarg)) )
 
   91           tempe(ij) = teta(ij,l) * pk(ij,l) /
cpp 
   94           zdelta = max( 0., sign(1., rtt - tempe(ij)) )
 
   95           play   = 0.5*(p(ij,l)+p(ij,l+1))
 
   96           qsat(ij,l) = min(0.5, r2es* foeew(tempe(ij),zdelta) / play )
 
   97           qsat(ij,l) = qsat(ij,l) / ( 1. - retv * qsat(ij,l) )
 
  107             mu(ij,l)=pbaru(ij,l) * zzpbar
 
  110             mv(ij,l)=pbarv(ij,l) * zzpbar
 
  113             mw(ij,l)=w(ij,l) * zzw
 
  121       CALL scopy(ijp1llm,q(1,1,iq),1,zq(1,1,iq),1)
 
  122       CALL scopy(ijp1llm,masse,1,zm(1,1,iq),1)
 
  126         CALL scopy(ijp1llm,q(1,1,iq2),1,zq(1,1,iq2),1)
 
  131       call vlxqs(zq,pente_max,zm,mu,qsat,iq)
 
  135       call vlyqs(zq,pente_max,zm,mv,qsat,iq)
 
  139       call vlz(zq,pente_max,zm,mw,iq)
 
  144       call vlyqs(zq,pente_max,zm,mv,qsat,iq)
 
  149       call vlxqs(zq,pente_max,zm,mu,qsat,iq)
 
  157            q(ij,l,iq)=zq(ij,l,iq)
 
  160             q(ij+
iim,l,iq)=q(ij,l,iq)
 
  169            q(ij,l,iq2)=zq(ij,l,iq2)
 
  172             q(ij+
iim,l,iq2)=q(ij,l,iq2)
 
  181       SUBROUTINE vlxqs(q,pente_max,masse,u_m,qsat,iq)
 
  194 #include "dimensions.h" 
  198 #include "comconst.h" 
  212       INTEGER ij,l,j,i,iju,ijq,indu(
ip1jmp1),niju
 
  225       Logical first,testcpu
 
  229       REAL temps0,temps1,temps2,temps3,temps4,temps5
 
  230       SAVE temps0,temps1,temps2,temps3,temps4,temps5
 
  247       IF (pente_max.gt.-1.e-5) 
THEN 
  256                dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq)
 
  260             DO ij=iip1+iip1,
ip1jm,iip1
 
  261                dxqu(ij)=dxqu(ij-
iim)
 
  266                adxqu(ij)=abs(dxqu(ij))
 
  272                dxqmax(ij,l)=pente_max*
 
  273      ,      min(adxqu(ij-1),adxqu(ij))
 
  280             DO ij=iip1+iip1,
ip1jm,iip1
 
  281                dxqmax(ij-
iim,l)=dxqmax(ij,l)
 
  287      ,         cvmgp(dxqu(ij-1)+dxqu(ij),0.,dxqu(ij-1)*dxqu(ij))
 
  289                IF(dxqu(ij-1)*dxqu(ij).gt.0) 
THEN 
  290                   dxq(ij,l)=dxqu(ij-1)+dxqu(ij)
 
  296                dxq(ij,l)=0.5*dxq(ij,l)
 
  298      ,         sign(min(abs(dxq(ij,l)),dxqmax(ij,l)),dxq(ij,l))
 
  310                dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq)
 
  312             DO ij=iip1+iip1,
ip1jm,iip1
 
  313                dxqu(ij)=dxqu(ij-
iim)
 
  317                zz(ij)=dxqu(ij-1)*dxqu(ij)
 
  320                   dxq(ij,l)=zz(ij)/(dxqu(ij-1)+dxqu(ij))
 
  335          DO ij=iip1+iip1,
ip1jm,iip1
 
  336             dxq(ij-
iim,l)=dxq(ij,l)
 
  352           zdum(ij,l)=cvmgp(1.-u_m(ij,l)/masse(ij,l,iq),
 
  353      ,                     1.+u_m(ij,l)/masse(ij+1,l,iq),
 
  355           zdum(ij,l)=0.5*zdum(ij,l)
 
  357      ,                q(ij,l,iq)+zdum(ij,l)*dxq(ij,l),
 
  358      ,                q(ij+1,l,iq)-zdum(ij,l)*dxq(ij+1,l),
 
  360           u_mq(ij,l)=u_m(ij,l)*u_mq(ij,l)
 
  369           IF (u_m(ij,l).gt.0.) 
THEN 
  370              zdum(ij,l)=1.-u_m(ij,l)/masse(ij,l,iq)
 
  371              u_mq(ij,l)=u_m(ij,l)*
 
  372      $         min(q(ij,l,iq)+0.5*zdum(ij,l)*dxq(ij,l),qsat(ij+1,l))
 
  374              zdum(ij,l)=1.+u_m(ij,l)/masse(ij+1,l,iq)
 
  375              u_mq(ij,l)=u_m(ij,l)*
 
  376      $         min(q(ij+1,l,iq)-0.5*zdum(ij,l)*dxq(ij+1,l),qsat(ij,l))
 
  387             IF(zdum(ij,l).lt.0) 
THEN 
  394        DO ij=iip1+iip1,
ip1jm,iip1
 
  395           iadvplus(ij,l)=iadvplus(ij-
iim,l)
 
  413             nl(l)=nl(l)+iadvplus(ij,l)
 
  427                   IF(iadvplus(ij,l).eq.1.and.mod(ij,iip1).ne.0) 
THEN 
  445                      do while(zu_m.gt.masse(ijq,l,iq))
 
  446                         u_mq(ij,l)=u_mq(ij,l)+q(ijq,l,iq)
 
  448                         zu_m=zu_m-masse(ijq,l,iq)
 
  453                      u_mq(ij,l)=u_mq(ij,l)+zu_m*
 
  454      &                  (q(ijq,l,iq)+0.5*(1.-zu_m/masse(ijq,l,iq))
 
  460                      do while(-zu_m.gt.masse(ijq,l,iq))
 
  461                         u_mq(ij,l)=u_mq(ij,l)-q(ijq,l,iq)
 
  463                         zu_m=zu_m+masse(ijq,l,iq)
 
  468                      u_mq(ij,l)=u_mq(ij,l)+zu_m*(q(ijq,l,iq)-
 
  469      &               0.5*(1.+zu_m/masse(ijq,l,iq))*dxq(ijq,l))
 
  481         DO ij=iip1+iip1,
ip1jm,iip1
 
  482            u_mq(ij,l)=u_mq(ij-
iim,l)
 
  496            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
 
  497            ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
 
  503          call vlx(ratio,pente_max,masseq,u_mq,iq2)
 
  512             new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l)
 
  513             q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+
 
  514      &      u_mq(ij-1,l)-u_mq(ij,l))
 
  519          DO ij=iip1+iip1,
ip1jm,iip1
 
  520             q(ij-
iim,l,iq)=q(ij,l,iq)
 
  521             masse(ij-
iim,l,iq)=masse(ij,l,iq)
 
  533             q(ij,l,iq2)=q(ij,l,iq)*ratio(ij,l,iq2)            
 
  535           DO ij=iip1+iip1,
ip1jm,iip1
 
  536              q(ij-
iim,l,iq2)=q(ij,l,iq2)
 
  548       SUBROUTINE vlyqs(q,pente_max,masse,masse_adv_v,qsat,iq)
 
  563 #include "dimensions.h" 
  567 #include "comconst.h" 
  584       REAL airej2,airejjm,airescb(
iim),airesch(
iim)
 
  589       REAL qpns,qpsn,dyn1,dys1,dyn2,dys2,newmasse,fn,fs
 
  591       Logical first,testcpu
 
  592       REAL temps0,temps1,temps2,temps3,temps4,temps5
 
  593       SAVE temps0,temps1,temps2,temps3,temps4,temps5
 
  596       REAL convpn,convps,convmpn,convmps
 
  597       REAL sinlon(iip1),sinlondlon(iip1)
 
  598       REAL coslon(iip1),coslondlon(iip1)
 
  599       SAVE sinlon,coslon,sinlondlon,coslondlon
 
  609       DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
 
  612          print*,
'Shema  Amont nouveau  appele dans  Vanleer   ' 
  615             coslon(i)=cos(
rlonv(i))
 
  616             sinlon(i)=sin(
rlonv(i))
 
  620          coslon(1)=coslon(iip1)
 
  621          coslondlon(1)=coslondlon(iip1)
 
  622          sinlon(1)=sinlon(iip1)
 
  623          sinlondlon(1)=sinlondlon(iip1)
 
  642       airescb(i) = 
aire(i+ iip1) * q(i+ iip1,l,iq)
 
  645       qpns   = ssum( 
iim,  airescb ,1 ) / airej2
 
  646       qpsn   = ssum( 
iim,  airesch ,1 ) / airejjm
 
  651          dyqv(ij)=q(ij,l,iq)-q(ij+iip1,l,iq)
 
  652          adyqv(ij)=abs(dyqv(ij))
 
  658          dyq(ij,l)=.5*(dyqv(ij-iip1)+dyqv(ij))
 
  659          dyqmax(ij)=min(adyqv(ij-iip1),adyqv(ij))
 
  660          dyqmax(ij)=pente_max*dyqmax(ij)
 
  666          dyq(ij,l)=qpns-q(ij+iip1,l,iq)
 
  676          dyn1=dyn1+sinlondlon(ij)*dyq(ij,l)
 
  677          dys1=dys1+sinlondlon(ij)*dyq(
ip1jm+ij,l)
 
  678          dyn2=dyn2+coslondlon(ij)*dyq(ij,l)
 
  679          dys2=dys2+coslondlon(ij)*dyq(
ip1jm+ij,l)
 
  682          dyq(ij,l)=dyn1*sinlon(ij)+dyn2*coslon(ij)
 
  683          dyq(
ip1jm+ij,l)=dys1*sinlon(ij)+dys2*coslon(ij)
 
  691          IF(pente_max*adyqv(ij).lt.abs(dyq(ij,l))) 
THEN 
  692             fn=min(pente_max*adyqv(ij)/abs(dyq(ij,l)),fn)
 
  694       IF(pente_max*adyqv(ij+
ip1jm-iip1).lt.abs(dyq(ij+
ip1jm,l))) 
THEN 
  695          fs=min(pente_max*adyqv(ij+
ip1jm-iip1)/abs(dyq(ij+
ip1jm,l)),fs)
 
  699          dyq(ij,l)=fn*dyq(ij,l)
 
  773          IF(dyqv(ij)*dyqv(ij-iip1).gt.0.) 
THEN 
  774             dyq(ij,l)=sign(min(abs(dyq(ij,l)),dyqmax(ij)),dyq(ij,l))
 
  784          IF( masse_adv_v(ij,l).GT.0. ) 
THEN 
  785            qbyv(ij,l)= min( qsat(ij+iip1,l), q(ij+iip1,l,iq )  +
 
  786      ,      dyq(ij+iip1,l)*0.5*(1.-masse_adv_v(ij,l)
 
  787      ,      /masse(ij+iip1,l,iq)))
 
  789               qbyv(ij,l)= min( qsat(ij,l), q(ij,l,iq) - dyq(ij,l) *
 
  790      ,                   0.5*(1.+masse_adv_v(ij,l)/masse(ij,l,iq)) )
 
  792           qbyv(ij,l) = masse_adv_v(ij,l)*qbyv(ij,l)
 
  806            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
 
  807            ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
 
  815          call vly(ratio,pente_max,masseq,qbyv,iq2)
 
  821             newmasse=masse(ij,l,iq)
 
  822      &      +masse_adv_v(ij,l)-masse_adv_v(ij-iip1,l)
 
  823             q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+qbyv(ij,l)
 
  824      &         -qbyv(ij-iip1,l))/newmasse
 
  825             masse(ij,l,iq)=newmasse
 
  829          convmpn=ssum(
iim,masse_adv_v(1,l),1)/
apoln 
  831             newmasse=masse(ij,l,iq)+convmpn*
aire(ij)
 
  832             q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+convpn*
aire(ij))/
 
  834             masse(ij,l,iq)=newmasse
 
  839             newmasse=masse(ij,l,iq)+convmps*
aire(ij)
 
  840             q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+convps*
aire(ij))/
 
  842             masse(ij,l,iq)=newmasse
 
  878             q(ij,l,iq2)=q(ij,l,iq)*ratio(ij,l,iq2)            
 
!$Header llmm1 INTEGER ip1jmp1
 
integer, dimension(:), allocatable, save nqdesc
 
!$Header!CDK comgeom COMMON comgeom apols
 
recursive subroutine vly(q, pente_max, masse, masse_adv_v, iq)
 
subroutine vlyqs(q, pente_max, masse, masse_adv_v, qsat, 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
 
!$Header!CDK comgeom COMMON comgeom apoln
 
!$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
 
!$Id mode_top_bound COMMON comconstr cpp
 
!$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
 
subroutine vlspltqs(q, pente_max, masse, w, pbaru, pbarv, pdt, p, pk, teta, iq)
 
integer, dimension(:), allocatable, save nqfils
 
subroutine vlxqs(q, pente_max, masse, u_m, qsat, iq)
 
c c zjulian c cym CALL iim cym klev iim
 
recursive subroutine vlz(q, pente_max, masse, w, iq)
 
!$Header!CDK comgeom COMMON comgeom rlonv