      !***********************************************************************!
      SUBROUTINE  cree_type(  ip_xy,  ip_xz,  ip_yz  )
      !***********************************************************************!
!
      USE MPI
!
      USE numerics
!
      IMPLICIT  NONE
!
!--Declaration des arguments
!
!Types  type_plan
      INTEGER,  INTENT(OUT)  ::  ip_xy
      INTEGER,  INTENT(OUT)  ::  ip_xz
      INTEGER,  INTENT(OUT)  ::  ip_yz
!
!--Declaration des variales locales
!
!Constantes  MPI
      INTEGER,  DIMENSION(MPI_STATUS_SIZE)  ::  status
      INTEGER   ::  type_y
!
      INTEGER   ::  i,  j,  k, taille_real
!
      !***********************************************************************!
!
!Envoi  au  voisin  N  et  reception  du  voisin  S
!en  utilisant  le  type  predefini  ip_xz,  plan  xOz
      CALL  MPI_TYPE_VECTOR( &
            ez-sz+1, &             ! nombre de blocs
            ex-sx+1, &             ! longueur d'un bloc
            (ex-sx+3)*(ey-sy+3), & ! pas entre le debut de
            ITYPE_REAL, &          ! deux blocs consecutifs
            ip_xz, ierr  )
      CALL  MPI_TYPE_COMMIT(  ip_xz,  ierr  )
!
!===
!===
!
!Envoi  au  voisin  W  et  reception  du  voisin  E
!en  utilisant  le  type  predefini  ip_yz,  plan  yOz
!
!extraction des "x" dans les "y"
      CALL MPI_TYPE_SIZE (ITYPE_REAL,  taille_real, ierr )
      CALL MPI_TYPE_HVECTOR ( &
            ey-sy+1, &             ! nombre de blocs
            1, &                   ! longueur d'un bloc
            (ex-sx+3)*taille_real,&! pas entre le debut de
            ITYPE_REAL, &          ! deux blocs consecutifs
            type_y, ierr  )
      CALL MPI_TYPE_COMMIT (  type_y, ierr )
!
!extraction des "y" dans les "z"
      CALL  MPI_TYPE_HVECTOR ( &
            ez-sz+1, &             ! nombre de blocs
            1, &                   ! longueur d'un bloc
            (ey-sy+3)*(ex-sx+3)*taille_real, & ! pas entre le debut de
            type_y,    &           ! deux blocs consecutifs
            ip_yz, ierr  )
      CALL MPI_TYPE_COMMIT (  ip_yz,  ierr  )
!
!===
!===
!
!Envoi  au  voisin  AV  et  reception  du  voisin  AR
!en  utilisant  le  type  predefini  ip_xy,  plan  xOy
      CALL  MPI_TYPE_VECTOR( &
            ey-sy+1, &             ! nombre de blocs
            ex-sx+1, &             ! longueur d'un bloc
            (ex-sx+3), &           ! pas entre le debut de
            ITYPE_REAL, &          ! deux blocs consecutifs
            ip_xy, ierr  )
      CALL  MPI_TYPE_COMMIT(  ip_xy,  ierr  )
!
      RETURN
      END  SUBROUTINE  cree_type

