!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer, 
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms 
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer 
!version 3 or (at your option) any later version that should be found at: 
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html 
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software; 
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), 
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
***s/r nes3s_ad -- ADJ of nes3s 
*
#include "model_macros_f.h"
*

      subroutine nes3s_ad (F_fn, F_fd, DIST_DIM, Nk, F_is, F_js,  1,1
     $                                      F_ndavx, F_ndavy)
*
      implicit none
*
      integer DIST_DIM, NK, F_is, F_js, F_ndavx, F_ndavy
      real F_fn(DIST_SHAPE,Nk), F_fd(DIST_SHAPE,Nk)
*
*author
*     M.Tanguay
*
*revision
* v3_03 - Tanguay M.        - initial MPI version
* v3_30 - Tanguay M.        - correction of starting/ending point for blend
*
*object
*     see id section
*
*ADJ of
*arguments
*  Name        I/O                 Description
*----------------------------------------------------------------
*  F_fn         O           field to be blended
*  F_fd         I           blending field
*  F_is         I           staggering parameter along x
*  F_js         I           staggering parameter along y
*  F_ndavx      I           thichness of sponge layer along x
*  F_ndavy      I           thichness of sponge layer along y
*----------------------------------------------------------------
*
*implicit
#include "glb_ld.cdk"
#include "hblen.cdk"
*
**
      integer i,j,k,nit,njt,il,ih,jl,jh
      real*8 ZERO_8,ONE_8,PT5_8,lx_8,ly_8,p_8,pis2_8
      parameter (ZERO_8=0.d0, ONE_8=1.d0, PT5_8=0.5d0)
*
*----------------------------------------------------------------------
      if (Hblen_wfct_S .eq. "const") call gem_stop ('NOT DONE NES3S_AD',-1)
*----------------------------------------------------------------------
*
*     * ndavx et ndavy: nombre de points de grille dans la bande de 
*     *                 pilotage (eponge) excluant les frontieres.
*
      nit  = l_ni-F_is-pil_e
      njt  = l_nj-F_js-pil_n
*
      il   = 1   + F_ndavx + pil_w -1
      ih   = nit - F_ndavx + 1
      jl   = 1   + F_ndavy + pil_s -1
      jh   = njt - F_ndavy + 1
*
      lx_8 = dble(F_ndavx) - PT5_8
      ly_8 = dble(F_ndavy) - PT5_8
*
      pis2_8 = acos(ZERO_8)
*
      if (l_north.and.l_south) then
*
      if (l_east) then
      do k=1,Nk
*north-east
         do i=ih+1,nit
         do j=jh+1,njt
            p_8 = (cos(pis2_8*(ONE_8-min(ONE_8,
     $           sqrt(((i-nit+lx_8)/lx_8)**2+((j-njt+ly_8)/ly_8)**2)))))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*south-east
         do i=ih+1,nit
         do j=1+pil_s,jl-1
            p_8 = (cos(pis2_8*(ONE_8-min(ONE_8,
     $           sqrt(((i-nit+lx_8)/lx_8)**2+((ly_8-j+1+pil_s)/ly_8)**2)))))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*north
         do j=jh+1,njt
         do i=1,ih
            p_8 = (cos(pis2_8*(njt-j)/ly_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*south
         do j=1+pil_s,jl-1
         do i=1,ih
            p_8 = (cos(pis2_8*(j-pil_s-1)/ly_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*east
         do i=ih+1,nit
         do j=jl,jh
            p_8 = (cos(pis2_8*(nit-i)/lx_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
      end do
      endif
*
      if (l_west) then
      do k=1,Nk
*north-west
         do i=1+pil_w,il-1
         do j=jh+1,njt
            p_8 = (cos(pis2_8*(ONE_8-min(ONE_8,
     $           sqrt(((lx_8-i+1+pil_w)/lx_8)**2+((j-njt+ly_8)/ly_8)**2)))))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*south-west
         do i=1+pil_w,il-1
         do j=1+pil_s,jl-1
            p_8 = (cos(pis2_8*(ONE_8-min(ONE_8,
     $        sqrt(((lx_8-i+1+pil_w)/lx_8)**2+((ly_8-j+1+pil_s)/ly_8)**2)))))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*north
         do j=jh+1,njt
         do i=il,l_ni
            p_8 = (cos(pis2_8*(njt-j)/ly_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*south
         do j=1+pil_s,jl-1
         do i=il,l_ni
            p_8 = (cos(pis2_8*(j-pil_s-1)/ly_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*west
         do i=1+pil_w,il-1
         do j=jl,jh
            p_8 = (cos(pis2_8*(i-pil_w-1)/lx_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
      end do
      endif

      else
*
      if (l_south) then
      do k=1,Nk
*south-east
         do i=ih+1,nit
         do j=1+pil_s,jl-1
            p_8 = (cos(pis2_8*(ONE_8-min(ONE_8,
     $           sqrt(((i-nit+lx_8)/lx_8)**2+((ly_8-j+1+pil_s)/ly_8)**2)))))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*south-west
         do i=1+pil_w,il-1
         do j=1+pil_s,jl-1
            p_8 = (cos(pis2_8*(ONE_8-min(ONE_8,
     $        sqrt(((lx_8-i+1+pil_w)/lx_8)**2+((ly_8-j+1+pil_s)/ly_8)**2)))))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*south
         do j=1+pil_s,jl-1
         do i=il,ih
            p_8 = (cos(pis2_8*(j-pil_s-1)/ly_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*east
         do i=ih+1,nit
         do j=jl,l_nj
            p_8 = (cos(pis2_8*(nit-i)/lx_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*west
         do i=1+pil_w,il-1
         do j=jl,l_nj
            p_8 = (cos(pis2_8*(i-pil_w-1)/lx_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
      end do
      endif
*
      if (l_north) then
      do k=1,Nk
*north-east
         do i=ih+1,nit
         do j=jh+1,njt
            p_8 = (cos(pis2_8*(ONE_8-min(ONE_8,
     $           sqrt(((i-nit+lx_8)/lx_8)**2+((j-njt+ly_8)/ly_8)**2)))))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*north-west
         do i=1+pil_w,il-1
         do j=jh+1,njt
            p_8 = (cos(pis2_8*(ONE_8-min(ONE_8,
     $           sqrt(((lx_8-i+1+pil_w)/lx_8)**2+((j-njt+ly_8)/ly_8)**2)))))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*north
         do j=jh+1,njt
         do i=il,ih
            p_8 = (cos(pis2_8*(njt-j)/ly_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*east
         do i=ih+1,nit
         do j=1,jh
            p_8 = (cos(pis2_8*(nit-i)/lx_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
*west
         do i=1+pil_w,il-1
         do j=1,jh
            p_8 = (cos(pis2_8*(i-pil_w-1)/lx_8))**2
            F_fd(i,j,k) =        p_8 *F_fn(i,j,k) + F_fd(i,j,k)
            F_fn(i,j,k) = (ONE_8-p_8)*F_fn(i,j,k)
         end do
         end do
      end do
      endif
*
      endif
*
*----------------------------------------------------------------------
      return
      end