4       SUBROUTINE advn(q,masse,w,pbaru,pbarv,pdt,mode)
 
   19 #include "dimensions.h" 
   40       integer ijlqmin,iqmin,jqmin,lqmin
 
   51       real temps0,temps1,temps2,temps3
 
   52       real ztemps1,ztemps2,ztemps3,ssum
 
   55       save temps1,temps2,temps3
 
   65       data temps1,temps2,temps3/0.,0.,0./
 
   72             mu(ij,l)=pbaru(ij,l) * zzpbar
 
   75             mv(ij,l)=pbarv(ij,l) * zzpbar
 
   78             mw(ij,l)=w(ij,l) * zzw
 
   90             qpn=qpn+q(ij,l)*masse(ij,l)
 
   93          qpn=qpn/ssum(
iim,masse(1,l),1)
 
  113       call advnx(zq,zqg,zqd,zm,mu,mode)
 
  115       call advny(zq,zqs,zqn,zm,mv)
 
  117       call advnz(zq,zqh,zqb,zm,mw)
 
  120       call advny(zq,zqs,zqn,zm,mv)
 
  122       call advnx(zq,zqg,zqd,zm,mu,mode)
 
  128          temps1=temps1+ztemps1-ztemps2
 
  129             print*,
'VLSPLT X:',temps1,
'   Y:',temps2,
'   Z:',temps3
 
  144       SUBROUTINE advnqx(q,qg,qd)
 
  151 #include "dimensions.h" 
  153 #include "iniprint.h" 
  185             dxqu(ij)=q(ij+1,l)-q(ij,l)
 
  186             zqu(ij)=0.5*(q(ij+1,l)+q(ij,l))
 
  188          do ij=iip1+iip1,
ip1jm,iip1
 
  189             dxqu(ij)=dxqu(ij-
iim)
 
  193             zqu(ij)=zqu(ij)-dxqu(ij+1)/12.
 
  195          do ij=iip1+iip1,
ip1jm,iip1
 
  199             zqu(ij)=zqu(ij)+dxqu(ij-1)/12.
 
  201          do ij=iip1+iip1,
ip1jm,iip1
 
  208             zqmax(ij)=max(q(ij+1,l),q(ij,l))
 
  209             zqmin(ij)=min(q(ij+1,l),q(ij,l))
 
  211          do ij=iip1+iip1,
ip1jm,iip1
 
  212             zqmax(ij)=zqmax(ij-
iim)
 
  213             zqmin(ij)=zqmin(ij-
iim)
 
  216             extremum(ij)=dxqu(ij)*dxqu(ij-1).le.0.
 
  218          do ij=iip1+iip1,
ip1jm,iip1
 
  219             extremum(ij-
iim)=extremum(ij)
 
  222             zqu(ij)=min(max(zqmin(ij),zqu(ij)),zqmax(ij))
 
  225             if(extremum(ij)) 
then 
  233          do ij=iip1+iip1,
ip1jm,iip1
 
  234             qd(ij-
iim,l)=qd(ij,l)
 
  235             qg(ij-
iim,l)=qg(ij,l)
 
  241             if(extremum(ij).and..not.extremum(ij-1))
 
  245          do ij=iip1+iip1,
ip1jm,iip1
 
  246             qd(ij-
iim,l)=qd(ij,l)
 
  249             if (extremum(ij).and..not.extremum(ij+1))
 
  253          do ij=iip1+iip1,
ip1jm,iip1
 
  254             qg(ij,l)=qg(ij-
iim,l)
 
  261       SUBROUTINE advnqy(q,qs,qn)
 
  268 #include "dimensions.h" 
  270 #include "iniprint.h" 
  303             dyqv(ij)=q(ij,l)-q(ij+iip1,l)
 
  307             zqv(ij,l)=0.5*(q(ij+iip1,l)+q(ij,l))
 
  308             zqv(ij,l)=zqv(ij,l)+(dyqv(ij+iip1)-dyqv(ij-iip1))/12.
 
  312             extremum(ij)=dyqv(ij)*dyqv(ij-iip1).le.0.
 
  325             zqmax(ij)=max(q(ij+iip1,l),q(ij,l))
 
  326             zqmin(ij)=min(q(ij+iip1,l),q(ij,l))
 
  330             zqv(ij,l)=min(max(zqmin(ij),zqv(ij,l)),zqmax(ij))
 
  334             if(extremum(ij)) 
then 
  341                qn(ij,l)=zqv(ij-iip1,l)
 
  357       SUBROUTINE advnqz(q,qh,qb)
 
  364 #include "dimensions.h" 
  366 #include "iniprint.h" 
  400             dzqw(ij,l)=q(ij,l-1)-q(ij,l)
 
  401             zqw(ij,l)=0.5*(q(ij,l-1)+q(ij,l))
 
  410             zqw(ij,l)=zqw(ij,l)+(dzqw(ij,l+1)-dzqw(ij,l-1))/12.
 
  415             extremum(ij,l)=dzqw(ij,l)*dzqw(ij,l+1).le.0.
 
  423             extremum(ij,1)=.
true.
 
  430             zqmax(ij,l)=max(q(ij,l-1),q(ij,l))
 
  431             zqmin(ij,l)=min(q(ij,l-1),q(ij,l))
 
  437             zqw(ij,l)=min(max(zqmin(ij,l),zqw(ij,l)),zqmax(ij,l))
 
  443             if(extremum(ij,l)) 
then 
  473       SUBROUTINE advnx(q,qg,qd,masse,u_m,mode)
 
  486 #include "dimensions.h" 
  490 #include "comconst.h" 
  491 #include "iniprint.h" 
  504       INTEGER i,j,ij,l,indu(
ip1jmp1),niju,iju,ijq
 
  507       real new_m,zu_m,zdq,zz
 
  511       real zm,zq,zsigm,zsigp,zqm,zqp,zu
 
  526                zdq=qd(ij,l)-qg(ij,l)
 
  533                if(abs(zdq).gt.prec) 
then 
  534                   zsigd(ij,l)=(q(ij,l)-qg(ij,l))/zdq
 
  535                   zsigg(ij,l)=1.-zsigd(ij,l)
 
  556           if (u_m(ij,l).ge.0.) 
then 
  572           ladvplus(ij,l)=zu.gt.zm
 
  574           if(zsig.eq.0.) zsigp=0.1
 
  576              if (zsig.le.zsigp) 
then 
  577                  u_mq(ij,l)=u_m(ij,l)*zqp
 
  578              else if (mode.eq.1) 
then 
  580      s           sign(zm,u_m(ij,l))*(zsigp*zqp+(zsig-zsigp)*zqm)
 
  583              if (zsig.le.zsigp) 
then 
  584                  u_mq(ij,l)=u_m(ij,l)*(zqp-0.5*zsig/zsigp*(zqp-zq))
 
  586                 zz=0.5*(zsig-zsigp)/zsigm
 
  587                 u_mq(ij,l)=sign(zm,u_m(ij,l))*( 0.5*(zq+zqp)*zsigp
 
  588      s          +(zsig-zsigp)*(zq+zz*(zqm-zq)) )
 
  599        do ij=iip1+iip1,
ip1jm,iip1
 
  600           u_mq(ij,l)=u_mq(ij-
iim,l)
 
  601           ladvplus(ij,l)=ladvplus(ij-
iim,l)
 
  613             if(ladvplus(ij,l)) 
then 
  623      & 
'Nombre de points pour lesquels on advect plus que le' 
  624      &       ,
'contenu de la maille : ',n0
 
  631                   if(ladvplus(ij,l).and.mod(ij,iip1).ne.0) 
then 
  649                      do while(zu_m.gt.masse(ijq,l))
 
  650                         u_mq(ij,l)=u_mq(ij,l)+q(ijq,l)*masse(ijq,l)
 
  651                         zu_m=zu_m-masse(ijq,l)
 
  657              zsig=zu_m/masse(ijq,l)
 
  658              if(zsig.le.zsigd(ijq,l)) 
then 
  659                 u_mq(ij,l)=u_mq(ij,l)+zu_m*(qd(ijq,l)
 
  660      s          -0.5*zsig/zsigd(ijq,l)*(qd(ijq,l)-q(ijq,l)))
 
  664                 zz=0.5*(zsig-zsigd(ijq,l))/zsigg(ijq,l)
 
  665                 if(.not.(zz.gt.0..and.zz.le.0.5)) 
then 
  666                      WRITE(
lunout,*)
'probleme2 au point ij=',ij,
 
  671                 u_mq(ij,l)=u_mq(ij,l)+masse(ijq,l)*(
 
  672      s          0.5*(q(ijq,l)+qd(ijq,l))*zsigd(ijq,l)
 
  673      s        +(zsig-zsigd(ijq,l))*(q(ijq,l)+zz*(qg(ijq,l)-q(ijq,l))) )
 
  679                      do while(-zu_m.gt.masse(ijq,l))
 
  680                         u_mq(ij,l)=u_mq(ij,l)-q(ijq,l)*masse(ijq,l)
 
  681                         zu_m=zu_m+masse(ijq,l)
 
  687              zsig=-zu_m/masse(ij+1,l)
 
  688              if(zsig.le.zsigg(ijq,l)) 
then 
  689                 u_mq(ij,l)=u_mq(ij,l)+zu_m*(qg(ijq,l)
 
  690      s          -0.5*zsig/zsigg(ijq,l)*(qg(ijq,l)-q(ijq,l)))
 
  694                 zz=0.5*(zsig-zsigg(ijq,l))/zsigd(ijq,l)
 
  695                 if(.not.(zz.gt.0..and.zz.le.0.5)) 
then 
  696                      WRITE(
lunout,*)
'probleme22 au point ij=',ij
 
  701                 u_mq(ij,l)=u_mq(ij,l)-masse(ijq,l)*(
 
  702      s          0.5*(q(ijq,l)+qg(ijq,l))*zsigg(ijq,l)
 
  703      s          +(zsig-zsigg(ijq,l))*
 
  704      s           (q(ijq,l)+zz*(qd(ijq,l)-q(ijq,l))) )
 
  715         do ij=iip1+iip1,
ip1jm,iip1
 
  716            u_mq(ij,l)=u_mq(ij-
iim,l)
 
  726             new_m=masse(ij,l)+u_m(ij-1,l)-u_m(ij,l)
 
  727             q(ij,l)=(q(ij,l)*masse(ij,l)+
 
  728      &      u_mq(ij-1,l)-u_mq(ij,l))
 
  733          do ij=iip1+iip1,
ip1jm,iip1
 
  735             masse(ij-
iim,l)=masse(ij,l)
 
  741       SUBROUTINE advny(q,qs,qn,masse,v_m)
 
  754 #include "dimensions.h" 
  757 #include "iniprint.h" 
  774       real convpn,convps,convmpn,convmps,massen,masses
 
  775       real zm,zq,zsigm,zsigp,zqm,zqp
 
  787                zdq=qn(ij,l)-qs(ij,l)
 
  794                if(abs(zdq).gt.prec) 
then 
  795                   zsign(ij)=(q(ij,l)-qs(ij,l))/zdq
 
  796                   zsigs(ij)=1.-zsign(ij)
 
  812           if (v_m(ij,l).ge.0.) 
then 
  827           zsig=abs(v_m(ij,l))/zm
 
  828           if(zsig.eq.0.) zsigp=0.1
 
  829           if (zsig.le.zsigp) 
then 
  830               v_mq(ij,l)=v_m(ij,l)*(zqp-0.5*zsig/zsigp*(zqp-zq))
 
  832               zz=0.5*(zsig-zsigp)/zsigm
 
  833               v_mq(ij,l)=sign(zm,v_m(ij,l))*( 0.5*(zq+zqp)*zsigp 
 
  834      s        +(zsig-zsigp)*(zq+zz*(zqm-zq)) )
 
  842      &      +v_m(ij,l)-v_m(ij-iip1,l)
 
  843             q(ij,l)=(q(ij,l)*masse(ij,l)+v_mq(ij,l)-v_mq(ij-iip1,l))
 
  848          convpn=ssum(
iim,v_mq(1,l),1)
 
  849          convmpn=ssum(
iim,v_m(1,l),1)
 
  850          massen=ssum(
iim,masse(1,l),1)
 
  852          q(1,l)=(q(1,l)*massen+convpn)/new_m
 
  862          q(
ip1jm+1,l)=(q(
ip1jm+1,l)*masses+convps)/new_m
 
  871       SUBROUTINE advnz(q,qh,qb,masse,w_m)
 
  885 #include "dimensions.h" 
  888 #include "iniprint.h" 
  906       real zm,zq,zsigm,zsigp,zqm,zqp
 
  918                zdq=qb(ij,l)-qh(ij,l)
 
  926                if(abs(zdq).gt.prec) 
then 
  927                   zsigb(ij,l)=(q(ij,l)-qh(ij,l))/zdq
 
  928                   zsigh(ij,l)=1.-zsigb(ij,l)
 
  929                   zsigb(ij,l)=min(max(zsigb(ij,l),0.),1.)
 
  941           if (w_m(ij,l).ge.0.) 
then 
  956           zsig=abs(w_m(ij,l))/zm
 
  957           if(zsig.eq.0.) zsigp=0.1
 
  958           if (zsig.le.zsigp) 
then 
  959               w_mq(ij,l)=w_m(ij,l)*(zqp-0.5*zsig/zsigp*(zqp-zq))
 
  961               zz=0.5*(zsig-zsigp)/zsigm
 
  962               w_mq(ij,l)=sign(zm,w_m(ij,l))*( 0.5*(zq+zqp)*zsigp
 
  963      s        +(zsig-zsigp)*(zq+zz*(zqm-zq)) )
 
  975             new_m=masse(ij,l)+w_m(ij,l+1)-w_m(ij,l)
 
  976             q(ij,l)=(q(ij,l)*masse(ij,l)+w_mq(ij,l+1)-w_mq(ij,l))
 
subroutine advny(q, qs, qn, masse, v_m)
 
subroutine advnqz(q, qh, qb)
 
!$Header llmm1 INTEGER ip1jmp1
 
!$Header!CDK comgeom COMMON comgeom apols
 
!$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
 
subroutine advn(q, masse, w, pbaru, pbarv, pdt, mode)
 
!$Header!CDK comgeom COMMON comgeom aire
 
!$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
 
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
 
!$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 advnx(q, qg, qd, masse, u_m, mode)
 
subroutine advnqy(q, qs, qn)
 
c c zjulian c cym CALL iim cym klev iim
 
subroutine advnz(q, qh, qb, masse, w_m)
 
subroutine advnqx(q, qg, qd)
 
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout