      !***********************************************************************!
      SUBROUTINE  voisinage(  nbdims,  dims,  coords,  periods,  voisin  )
      !***********************************************************************!
!
      USE numerics
!
      IMPLICIT  NONE
!
      INCLUDE 'comthd.h'
!
INTERFACE
!
      INCLUDE 'i_gm_cart_shift.h'
!
END INTERFACE
!
!--Declaration  des  arguments
!
! Nombre de directions spatiales
      INTEGER,                        INTENT(IN)   ::  nbdims
!
! Nombre de processus par direction spatiale
      INTEGER,  DIMENSION(1:nbdims),  INTENT(IN)   ::  dims
!
! Coordonnees du processus courant dans la topologie cartesienne
      INTEGER,  DIMENSION(1:nbdims),  INTENT(IN)   ::  coords
!
! Periodicite des directions spatiales
      LOGICAL,  DIMENSION(1:nbdims),  INTENT(IN)   ::  periods

!Tableau  contenant  les  voisins  du  domaine  courant
      INTEGER,  PARAMETER              ::  NB_VOISINS  =  6
!
      INTEGER,  PARAMETER              ::  N=1,  E=2,   S=3
      INTEGER,  PARAMETER              ::  W=4,  AV=5,  AR=6
      INTEGER,  DIMENSION(NB_VOISINS),  INTENT(OUT)  ::  voisin
!
      !***********************************************************************!
!
!Initialisation  du  tableau  voisin
      voisin(1:NB_VOISINS)  =  -1
!
!Recherche  des  voisins  Ouest  et  Est
       CALL  gm_cart_shift ( 1,  nbdims,  dims,  coords,  periods,  &
                             voisin(W),  voisin(E) )
!
!Recherche  des  voisins  Nord  et  Sud
       CALL  gm_cart_shift ( 2,  nbdims,  dims,  coords,  periods,  &
                             voisin(S),  voisin(N) )
!
!Recherche  des  voisins  Avant  et  Arriere
       CALL  gm_cart_shift ( 3,  nbdims,  dims,  coords,  periods,  &
                             voisin(AR),  voisin(AV) )
!
      RETURN
      END  SUBROUTINE  voisinage

