copyright (C) 2001 MSC-RPN COMM %%%MC2%%%
***s/r adveul
*

      subroutine adveul ( ua,va,wa,ba,pa,hua,tra, 1,1
     $                                   lminx,lmaxx,lminy,lmaxy,lnk )
      implicit none
*
      integer lminx, lmaxx, lminy, lmaxy, lnk
      real 
     $ ua(lminx:lmaxx,lminy:lmaxy,*),     va(lminx:lmaxx,lminy:lmaxy,*),
     $ wa(lminx:lmaxx,lminy:lmaxy,*),     ba(lminx:lmaxx,lminy:lmaxy,*),
     $ pa(lminx:lmaxx,lminy:lmaxy,0:lnk),hua(lminx:lmaxx,lminy:lmaxy,*),
     $ tra(lminx:lmaxx,lminy:lmaxy,lnk,*)
*
*
#include "grd.cdk"
#include "consdyn_8.cdk"
#include "yomdyn.cdk"
#include "yomdyn1.cdk"
#include "dynpar.cdk"
#include "dynmem.cdk"
#include "topo.cdk"
#include "nbcpu.cdk"
*
      integer i, j, k, n, kp1, kkk, km1, id, jd, iff, jf
      real*8 ken(minx:maxx,miny:maxy),
     $       vor(minx:maxx,miny:maxy),
     $       udw(minx:maxx,miny:maxy),
     $       udb(minx:maxx,miny:maxy),
     $       udh(minx:maxx,miny:maxy),
     $       vdw(minx:maxx,miny:maxy),
     $       vdb(minx:maxx,miny:maxy),
     $       vdh(minx:maxx,miny:maxy),
     $       wdu(minx:maxx,miny:maxy,gnk),
     $       wdv(minx:maxx,miny:maxy,gnk),
     $       wdp(minx:maxx,miny:maxy,gnk)
      real w0(minx:maxx,miny:maxy,gnk)
      real*8  p25, pt5, frtsvn, uu0b, vv0b, ubarz, vbarz, coe
      parameter (p25=0.25d0, pt5=0.5d0, frtsvn=4.d0/7.d0 )
*
*----------------------------------------------------------------------
*
      if (flextop) print*,'not a valid option yet'
      if (flextop) stop
*
      id  = 1
      jd  = 1
      iff = ldni-east
      jf  = ldnj-north
*
      call sw2w3(w0,uu0,vv0,ww0,sbxy,gg1,gg2,g0wr,dhdt,
     $                        minx,maxx,miny,maxy,gnk)
*
      do k = gnk, 0, -1
      kp1  = min( k+1, gnk)
      kkk  = min( max(k,1), gnk-1)
      km1  = max( k-1, 1 )
      coe  = pt5
ccccc encore en doute cccc
ccc   if (k.eq.gnk-1 .or. k.eq.2 ) coe = frtsvn
ccccc encore en doute cccc
*
      if (k.eq.gnk) then
         do j = jd,jf
         do i = id,iff
            wdu(i,j,gnk) = 0.
            wdv(i,j,gnk) = 0.
         end do
         end do
      endif
*
*     horizontal wind components
*
      if (k.gt.0 .and. k.lt.gnk) then
*
         do j = jd+south-1,jf
         do i = id+west-1,iff
            ken(i,j) = p25 * ( uu0(i+1,j,k)**2 + uu0(i,j,k)**2
     $                       + vv0(i,j+1,k)**2 + vv0(i,j,k)**2 )
         end do
         end do
*
         do j = jd,jf+1
         do i = id,iff+1
            vor(i,j) = (vv0(i,j,k)-vv0(i-1,j,k))*odxu(1)
     $               - (uu0(i,j,k)-uu0(i,j-1,k))*odyv(j)
         end do
         end do
*
         do j = jd, jf
         do i = id+west, iff
            vv0b = p25 * ( vv0(i,j+1,k) + vv0(i-1,j+1,k)
     $                   + vv0(i,j  ,k) + vv0(i-1,j  ,k) )
            wdu(i,j,k) = pt5 * (  w0(i,j,k) +  w0(i-1,j,k) )
     $                       * ( uu0(i,j,k) - uu0(i,j,km1) )
            ua(i,j,k)  = - sby(i,j) *
     $                    ( ( ken(i,j) - ken(i-1,j) ) * odxu(1)
     $                    - ( vor(i,j) + vor(i,j+1) ) * pt5 * vv0b )
     $                   - pt5 * ( wdu(i,j,k+1) + wdu(i,j,k) )
         end do
         end do
*
         do j = jd+south, jf
         do i = id, iff
            uu0b = p25 * ( uu0(i+1,j,k) + uu0(i+1,j-1,k)
     $                   + uu0(i  ,j,k) + uu0(i  ,j-1,k) )
            wdv(i,j,k) = pt5 * (  w0(i,j,k) +  w0(i,j-1,k) )
     $                       * ( vv0(i,j,k) - vv0(i,j,km1) )
            va(i,j,k)  = - sbx(i,j) *
     $                    ( ( ken(i,j) - ken(i,j-1) ) * odyv(j)
     $                    + ( vor(i,j) + vor(i+1,j) ) * pt5 * uu0b )
     $                   - pt5 * ( wdv(i,j,k+1) + wdv(i,j,k) )
         end do
         end do
*
      endif
*
*     vertical motion, buoyancy, humidity and tracers
*
      if(k.gt.0) then
*
         do j = jd,jf+1
         do i = id,iff+1
            ubarz    = pt5 * ( uu0(i,j,kkk) + uu0(i,j,km1) )
            udw(i,j) =    ubarz *( ww0(i,j,k)- ww0(i-1,j,k) )*odxu(1)
            udb(i,j) =    ubarz *( bb0(i,j,k)- bb0(i-1,j,k) )*odxu(1)
            udh(i,j) =    ubarz *( hu0(i,j,k)- hu0(i-1,j,k) )*odxu(1)
            vbarz    = pt5 * ( vv0(i,j,kkk) + vv0(i,j,km1) )
            vdw(i,j) =    vbarz *( ww0(i,j,k)- ww0(i,j-1,k) )*odyv(j)
            vdb(i,j) =    vbarz *( bb0(i,j,k)- bb0(i,j-1,k) )*odyv(j)
            vdh(i,j) =    vbarz *( hu0(i,j,k)- hu0(i,j-1,k) )*odyv(j)
         end do
         end do
*
         do j = jd,jf
         do i = id,iff
            wdp(i,j,k) = w0(i,j,k) * ( pp0(i,j,k) - pp0(i,j,k-1) )
            wa(i,j,k)  = - sbxy(i,j) * pt5 * ( udw(i+1,j) + udw(i,j) 
     $                                       + vdw(i,j+1) + vdw(i,j) )
     $             - pt5 * w0(i,j,k) * ( ww0(i,j,kp1) - ww0(i,j,km1) )
            ba(i,j,k)  = - sbxy(i,j) * pt5 * ( udb(i+1,j) + udb(i,j) 
     $                                       + vdb(i,j+1) + vdb(i,j) )
     $             - coe * w0(i,j,k) * ( bb0(i,j,kp1) - bb0(i,j,km1) )
            hua(i,j,k) = - sbxy(i,j) * pt5 * ( udh(i+1,j) + udh(i,j) 
     $                                       + vdh(i,j+1) + vdh(i,j) )
     $             - coe * w0(i,j,k) * ( hu0(i,j,kp1) - hu0(i,j,km1) )
         end do
         end do
*
         do n=1,ntr
         do j = jd,jf+1
         do i = id,iff+1
            ubarz    = pt5 * ( uu0(i,j,kkk) + uu0(i,j,km1) )
            udh(i,j) = ubarz *( tr0(i,j,k,n)- tr0(i-1,j,k,n) )*odxu(1)
            vbarz    = pt5 * ( vv0(i,j,kkk) + vv0(i,j,km1) )
            vdh(i,j) = vbarz *( tr0(i,j,k,n)- tr0(i,j-1,k,n) )*odyv(j)
         end do
         end do
         do j=jd,jf
         do i=id,iff
            tra(i,j,k,n) = - sbxy(i,j) * pt5 * ( udh(i+1,j) + udh(i,j) 
     $                                         + vdh(i,j+1) + vdh(i,j) )
     $           - coe * w0(i,j,k) * ( tr0(i,j,kp1,n) - tr0(i,j,km1,n) )
         end do
         end do
         end do
*
      endif
*
*     pressure (horizontal advection)
*
         do j = jd,jf+1
         do i = id,iff+1
            udh(i,j) = uu0(i,j,kkk)*( pp0(i,j,k) - pp0(i-1,j,k))*odxu(1)
            vdh(i,j) = vv0(i,j,kkk)*( pp0(i,j,k) - pp0(i,j-1,k))*odyv(j)
         end do
         end do
*
         do j = jd,jf
         do i = id,iff
            pa(i,j,k)  = - sbxy(i,j) * pt5 * ( udh(i+1,j) + udh(i,j) 
     $                                       + vdh(i,j+1) + vdh(i,j) )
         end do
         end do
*
      end do
*
*     thermodynamic variable and generalized pressure
*
      do k = 1, gnk
      if (k.eq.1) then
         do j = jd,jf
         do i = id,iff
            ba(i,j,k) = ba(i,j,k) - gama_star * ( - wdp(i,j,k)
     $                   + pt5 * (  pa(i,j,k) +  pa(i,j,k-1) ) )
         end do
         end do
      else
         do j = jd,jf
         do i = id,iff
            ba(i,j,k) = ba(i,j,k) - gama_star * ( - wdp(i,j,k)
     $                   + pt5 * (  pa(i,j,k) +  pa(i,j,k-1) ) )
            pa(i,j,k-1) =           c2r_star * ( pa(i,j,k-1)
     $                   - pt5 * ( wdp(i,j,k) + wdp(i,j,k-1) ) )
         end do
         end do
      endif
      end do
*
*----------------------------------------------------------------------
      return
      end