C MINDEG    SOURCE    CHAT      05/01/13    01:45:16     5004
C**************************************************************************
C**************************************************************************
C**************************************************************************
C*****************************               ******************************
C*************************                      ***************************
c*******************              MINIDEG             *********************
c**************************                     ***************************
C****************************                ******************************
C**************************************************************************
C**************************************************************************
C**************************************************************************







        SUBROUTINE MINDEG(NPVOIS,NVOIS,NBENS,IORDRE)
C*****************************************************************************


C       Cette procedure permet:
C       - tout d'abord, de renumeroter les noeuds a partir
C          du minimum degre.
C       - ensuite,a partir de cette nouvelle renumerotation,d'obtenir
C          une matrice par blocs par le biais de la methode multifrontale.


C       domaine d'etude.
C***********************

      IMPLICIT INTEGER(I-N)
        SEGMENT NPVOIS(0),NVOIS(0)
        INTEGER NBENS

        SEGMENT MPVOIS(NBENS*2),MVOIS(0)
C       MVOIS contient pour chaque noeud:
C          tous les voisins de noeud contenus dans NVOIS.
C          des nouveaux voisins qui apparaissent lors de l'elimination
C          d'un voisin (appartenant a MVOIS) de noeud.
C          le nombre de voisins total du noeud X= MPVOIS(X,2)-MPVOIS(X,1)

        SEGMENT NOERES(NBENS+1)
C       NOERES=tableau des noeuds non elimines.
C       NOERES(1)=dimension de NOERES

        SEGMENT IORDRE(NBENS*2)

        INTEGER COMPT,RACINE,NOEUD
        SEGMENT IFILS(NBENS),IFRERE(NBENS)
C       RACINE,IFILS,IFRERE servent a la confection du graphe de
C       renumerotation.






C       initialisation :
C************************
        SEGINI NOERES,MPVOIS,MVOIS,IORDRE
        DO 10 I=1,NBENS
                NOERES(I+1)=I
                MPVOIS(I)=NPVOIS(I)
                IORDRE(I)=0
                IORDRE(I+NBENS)=0
                MPVOIS(I+NBENS)=NPVOIS(I+NBENS)
                DO 20 J=NPVOIS(I),NPVOIS(I+NBENS)
                        MVOIS(**)=NVOIS(J)
20              CONTINUE
10      CONTINUE
        NOERES(1)=NBENS
C       tous les noeuds sont des noeuds restants.
        COMPT=0
C       le compteur est initialise a 0.


C       Boucle principale :
C**************************

100     IF (NOERES(1).NE.0) THEN
C       si le nombre de noeuds restants n'est pas nul,

          CALL CHDEG(NPVOIS,NVOIS,NOERES,NOEUD,NBENS)
C         on cherche alors le NOEUD de degre minimum.

          CALL FUSION(NPVOIS,NVOIS,NOEUD,NBENS)
C         on elimine ce NOEUD de la gestion de donnees de
C         ses voisins .
C         on rajoute a la gestion de donnees des voisins de NOEUD
C         tous les voisins de NOEUD qui ne leur sont pas deja
C         voisins et differents d'eux-memes.
C         dans MGD, on ne fait que rajouter;on n'elimine pas.
C         CALL MFUSIO(MPVOIS,MVOIS,NOEUD,NPVOIS,NVOIS,NBENS)

          CALL DELIMI(NOEUD,NOERES)
C         on elimine NOEUD de NOERES.

          COMPT=COMPT+1
C         COMPT correspond au nombre de noeuds elimines.


          IORDRE(NOEUD+NBENS)=COMPT
          IORDRE(COMPT)=NOEUD
C         IORDRE(NOEUD+NBENS)=ordre d'elimination de noeud.
C                            = nouvelle numerotation.
C          IORDRE(NOEUD)=ancienne numerotation.

        GOTO 100
        ENDIF

        SEGINI IFILS,IFRERE

        CALL IFILSF(MPVOIS,MVOIS,IORDRE,COMPT,IFILS,
     &               IFRERE,RACINE,NBENS)
C       cree les liens de parente entre noeuds.

        SEGSUP MPVOIS,MVOIS
C       suppression des segments inutiles.

        CALL NUMO(IFILS,IFRERE,RACINE,IORDRE,NBENS)
C       renumerote les noeuds a partir des liens de parente.

        SEGSUP NOERES,IFILS,IFRERE
C       suppression des segments.

        RETURN
        END

