      !***********************************************************************!
      SUBROUTINE  equilibrage(  nt,  mon_numproc,  mon_rang,  deb,  fin)
      !***********************************************************************!
!
      USE numerics
!
      IMPLICIT  NONE
!
!--Declaration  des  variables
!
!Nombre  total  de  points
      INTEGER,  INTENT(IN)   ::  nt
!
!Indice  de  debut  et  de  fin
      INTEGER,  INTENT(OUT)  ::  deb,  fin
!
!Nombre  de  domaines  suivant  une  direction
      INTEGER,  INTENT(IN)   ::  mon_numproc
!
!Coordonnees  suivant  une  direction
      INTEGER,  INTENT(IN)   ::  mon_rang
!
!--Declaration des variales locales
!
!Nombre  de  points  pour  un  sous-domaine
      INTEGER   ::  nlocal
!
!Deficit  en  points
      INTEGER   ::  deficit
!
      !***********************************************************************!
!
!Calcul  du  nombre  de  points  dans  chaque  domaine
      nlocal  =  nt  /  mon_numproc
!
!Calcul  de  la  borne  inferieure
      deb      =  mon_rang  *  nlocal  +  1
      deficit  =  MOD(  nt,  mon_numproc)
      deb      =  deb +  MIN(  mon_rang,  deficit)
!
!reequilibrage  des  points  dans  les  domaines
      IF(  mon_rang  <  deficit  )  THEN
           nlocal  =  nlocal  +  1
      END  IF
!
!Calcul  de  la  borne  superieure
      fin  =  deb  +  nlocal  -  1
!
!Calcul  de  la  borne  superieure  pour  le  dernier  domaine
      IF( ( fin  >  nt )  .OR.  ( mon_rang  ==  mon_numproc - 1 ) ) fin  =  nt
!
      RETURN
      END  SUBROUTINE  equilibrage
