c@a
c@versb
C-----------------------------------------------------------------------
C
CVERS                  Code_Saturne version 1.3
C                      ------------------------
C
C     This file is part of the Code_Saturne Kernel, element of the
C     Code_Saturne CFD tool.
C
C     Copyright (C) 1998-2008 EDF S.A., France
C
C     contact: saturne-support@edf.fr
C
C     The Code_Saturne Kernel is free software; you can redistribute it
C     and/or modify it under the terms of the GNU General Public License
C     as published by the Free Software Foundation; either version 2 of
C     the License, or (at your option) any later version.
C
C     The Code_Saturne Kernel is distributed in the hope that it will be
C     useful, but WITHOUT ANY WARRANTY; without even the implied warranty
C     of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
C     GNU General Public License for more details.
C
C     You should have received a copy of the GNU General Public License
C     along with the Code_Saturne Kernel; if not, write to the
C     Free Software Foundation, Inc.,
C     51 Franklin St, Fifth Floor,
C     Boston, MA  02110-1301  USA
C
C-----------------------------------------------------------------------
c@verse
                        SUBROUTINE RESMGR
C                       *****************
C     -------------------------------------------------------------
     & ( CNOM   , IDBIA0 , IDBRA0 , NGR    , NCELET , NCEL   , NFAC   ,
     &   ISYM   , IPOL   , IRESMO , NITSMO , NCYMXP , IINVPE ,
     &   IWARNP , NFECRA , ICYCLE ,
     &   EPSILP , RNORM  , RESIDU ,
     &   IFACEL , IRESPR , IFACEW ,
     &   DAF    , XAF    , DAW    , XAW    , BF     , BW     ,
     &   XF     , XW     , W1     , W2     , W3     , W4     ,
     &   W5     , W6     ,
     &   IA     , RA     )
C     -------------------------------------------------------------
C***********************************************************************
C FONCTION :
C ----------
c@foncb
CFONC
CFONC   MULTIGRILLE :
CFONC RESOLUTION DU SYSTEME (DAF+ XAF).XF = BF PAR UN ALGORITHME
CFONC MULTIGRILLE ALGEBRIQUE A PLUSIEURS NIVEAUX
CFONC
c@fonce
C-----------------------------------------------------------------------
C                             ARGUMENTS
c@argub
CARGU .______________.____._____.______________________________________.
CARGU !    NOM       !TYPE!MODE !                   ROLE               !
CARGU !______________!____!_____!______________________________________!
CARGU ! CNOM         ! A  !  -> ! NOM DE LA VARIABLE                   !
CARGU ! NGR          ! E  !  -> ! NOMBRE DE NIVEAUX DE GRILLES         !
CARGU ! NCELET       ! E  !  -> ! NOMBRE D'ELEMENTS HALO COMPRIS       !
CARGU ! NCEL         ! E  !  -> ! NOMBRE D'ELEMENTS ACTIFS             !
CARGU ! NFAC         ! E  !  -> ! NOMBRE DE FACES INTERNES             !
CARGU ! ISYM         ! E  !  -> ! INDICATEUR = 1 MATRICE SYM           !
CARGU !              !    !     !            = 2 MATRICE NON SYM       !
CARGU ! IPOL         ! E  !  -> ! DEGRE DU POLYNOME POUR PRECOND       !
CARGU !              !    !     !         (0 -> DIAGONAL)              !
CARGU ! IRESMO(0:NGR)! E  !  -> ! INDICATEUR = 0 GRADCO                !
CARGU !              !    !     !            = 1 JACOBI                !
CARGU ! NITSMO       ! E  !  -> ! NOMBRE MAX D'ITER POUR RESOL ITERATIV!
CARGU !  (2,0:NGR)   !    !     !                                      !
CARGU ! IINVPE       ! E  !  -> ! INDICATEUR POUR ANNULER LES INCREMENT!
CARGU !              !    !     ! EN PERIODICITE DE ROTATION (=2) OU   !
CARGU !              !    !     ! POUR LES ECHANGER NORMALEMENT DE     !
CARGU !              !    !     ! MANIERE SCALAIRE (=1)                !
CARGU ! IWARNP       ! E  !  -> ! NIVEAU D'IMPRESSION                  !
CARGU ! NFECRA       ! E  !  -> ! UNITE DU FICHIER SORTIE STD          !
CARGU ! ICYCLE       ! E  ! <-  ! NOMBRE DE CYCLES EFFECTUES MOINS 1   !
CARGU ! EPSILP       ! R  !  -> ! PRECISION POUR RESOL ITER            !
CARGU ! RNORM        ! R  !  -> ! NORMALISATION DU RESIDU              !
CARGU ! RESIDU       ! R  ! <-  ! RESIDU FINAL NON NORME               !
CARGU ! IFACEL(2,NFAC! TE !  -> ! No DES ELTS VOISINS D'UNE FACE INTERN!
CARGU ! IRESPR(NCEL) ! TE !  -> ! RESTR. DES RESIDUS ET PROL. DES SOL  !
CARGU ! IFACEW       ! TE !  -> ! NUMERO DES MACROS VOISINS D'UNE      !
CARGU !      (2,NFAC)!    !     !  MACRO FACE                          !
CARGU ! DAF(NCEL)    ! TR !  -> ! DIAGONALE MAILLAGE FIN               !
CARGU ! XAF(NFAC,ISYM! TR !  -> ! EXTRADIAGONALE MAILLAGE FIN          !
CARGU ! DAW(NCEG)    ! TR !  -  ! DIAGONALE MAILLAGE GROSSIER          !
CARGU ! XAW(NFAC,ISYM! TR !  -  ! EXTRADIAGONALE MAILLAGE GROSSIER     !
CARGU ! BF   (NCEL)  ! TR !  -> ! SECOND MEMBRE MAILLAGE FIN           !
CARGU ! BW   (NCEL)  ! TR !  -  ! SECOND MEMBRE MAILLAGE GROSSIER      !
CARGU ! XF   (NCEL)  ! TR ! <-> ! SOLUTION      DU SYSTEME             !
CARGU ! XW   (NCEL)  ! TR !  -  ! TABLEAU DE TRAVAIL MAILLAGE GROSSIER !
CARGU ! W?(NCEL)     ! TR !  -  ! AUXILIAIRES DE TRAVAIL               !
CARGU !______________!____!_____!______________________________________!
c@argue
C
c@commb
CCOMM                             COMMONS
CCOMM .______________.____._____.______________________________________.
CCOMM !    NOM       !TYPE!MODE !                   ROLE               !
CCOMM !______________!____!_____!______________________________________!
CCOMM !______________!____!_____!______________________________________!
c@comme
C
C     TYPE : E (ENTIER), R (REEL), A (ALPHANUMERIQUE), T (TABLEAU)
C            L (LOGIQUE)   .. ET TYPES COMPOSES (EX : TR TABLEAU REEL)
C     MODE : -> DONNEE, <- RESULTAT, <-> DONNEE MODIFIEE,
C            - TABLEAU DE TRAVAIL
C***********************************************************************
C
      IMPLICIT NONE
C
C***********************************************************************
C     DONNEES EN COMMON
C***********************************************************************
C
      INCLUDE "paramx.h"
      INCLUDE "cstnum.h"
C
C***********************************************************************
C
      CHARACTER*8      CNOM
      INTEGER          IDBIA0 , IDBRA0
      INTEGER          NGR , NCELET , NCEL , NFAC
      INTEGER          ISYM , IPOL , NCYMXP , IINVPE, IWARNP , NFECRA
      INTEGER          ICYCLE
      DOUBLE PRECISION EPSILP , RNORM  , RESIDU
C
      INTEGER          IRESMO(0:NGR) , NITSMO(2,0:NGR)
      INTEGER          IFACEL(2,NFAC) , IRESPR(NCEL) , IFACEW(2,NFAC)
      INTEGER          IA(*)
      DOUBLE PRECISION DAF(NCEL), XAF(NFAC,ISYM), BF(NCEL)
      DOUBLE PRECISION DAW(NCEL), XAW(NFAC,ISYM), BW(NCEL)
      DOUBLE PRECISION XF(NCEL) , XW(NCEL)
      DOUBLE PRECISION W1(NCEL) , W2(NCEL) , W3(NCEL) , W4(NCEL)
      DOUBLE PRECISION W5(NCEL) , W6(NCEL)
      DOUBLE PRECISION RA(*)
C
C VARIABLES LOCALES
C
      INTEGER          IDEBIA , IDEBRA
      INTEGER          IFIN , IEL , ISQRT , IWARMG
      INTEGER          NITFIN
C
C***********************************************************************
C
C=======================================================================
C 1.  CALCULS PRELIMINAIRES
C=======================================================================
C
      IDEBIA = IDBIA0
      IDEBRA = IDBRA0
C
      ICYCLE = 0
      NITFIN = 0
C
      ISQRT = 1
      CALL PRODSC(NCELET,NCEL,ISQRT,BF,BF,RESIDU)
      IF( RNORM.LE.EPZERO .OR. RESIDU.LE.EPZERO ) THEN
        IF(IWARNP.GE.2) THEN
          WRITE (NFECRA,1000) RNORM, RESIDU
        ENDIF
        RETURN
      ENDIF
C
      IWARMG = IWARNP
C
      DO IEL = 1, NCEL
        W1(IEL) = 0.D0
        W2(IEL) = 0.D0
        W3(IEL) = 0.D0
        W4(IEL) = 0.D0
        W5(IEL) = 0.D0
        W6(IEL) = 0.D0
        XW(IEL) = 0.D0
        BW(IEL) = 0.D0
      ENDDO
C
      IF (IWARNP.GE.2) THEN
        WRITE( NFECRA,1100) CNOM
      ENDIF
C
C=======================================================================
C 2.  CYCLES EN V
C=======================================================================
C
 100  CONTINUE
      ICYCLE = ICYCLE +1
      IFIN = 0
C
      IF (IWARNP.GE.2) THEN
        WRITE( NFECRA,1110) ICYCLE
      ENDIF
C
      CALL CYCMGR
C     ===========
     & ( CNOM   , IDEBIA , IDEBRA ,
     &   NGR    , NCELET , NCEL   , NFAC   , ISYM   , IPOL   ,
     &   IINVPE , IWARMG , NFECRA , ICYCLE , IFIN   ,
     &   IRESMO , NITSMO , NCYMXP ,
     &   NITFIN ,
     &   EPSILP , RNORM  , RESIDU ,
     &   IFACEL , IRESPR , IFACEW ,
     &   DAF    , XAF    , DAW    , XAW    , BF     , BW     ,
     &   XF     , XW     , W1     , W2     , W3     , W4     ,
     &   W5     , W6     ,
     &   IA     , RA      )
C
      IF (IFIN.NE.0) RETURN
C
      GOTO 100
C
C--------
C FORMATS
C--------
C
#if defined(_CS_LANG_FR)
C
 1000 FORMAT(1X,A8,
     & ' RESMGR : SORTIE IMMEDIATE: RNORM: ', E11.4,' RESIDU: ',E11.4)
C
 1100  FORMAT(/,1X,A8,' : RESMGR')
 1110  FORMAT(/,10X,'CYCLE NUMERO : ',I5)
C
#else
C
 1000 FORMAT(1X,A8,
     & ' RESMGR: IMMEDIATE EXIT: RNORM: ', E11.4,' RESIDUAL: ',E11.4)
C
 1100  FORMAT(/,1X,A8,': RESMGR')
 1110  FORMAT(/,10X,'CYCLE NUMBER: ',I5)
C
#endif
C
C----
C FIN
C----
C
      END
c@z
