C NUNONU    SOURCE    CHAT      06/03/29    21:28:36     5360
C
C     *****************************************************************
C     MODULE  : ST (STRUCTURE DES DONNEES)
C     FICHIER : ST_NOEUD.F
C     OBJET   : RENUMEROTE LES NOEUDS D'UN MAILLAGE 2D OU 3D
C     FONCT.  :
C
C     OBJET NUNONU : RENUMEROTE LES NOEUDS D'UN MAILLAGE
C     OBJET NUNOCP : COMPRIME LES NUMEROS DES NOEUDS D'UN MAILLAGE
C     OBJET          EN DEBUT : DE 1 A "NBNUM"
C     OBJET NUNISO : RENUMEROTATION, LES NOEUDS ISOLES SONT MIS EN FIN
C     OBJET NUENUL : RENUMEROTATION, LES ELEMENTS NULS SONT MIS EN FIN
C     OBJET NUGCNU : GARBAGE COLLECTOR ELEMENTS ET POINTS
C
C     AUTEUR  : O. STAB
C     DATE    : 08.96
C     TESTS   :
C     MODIFICATIONS :
C      AUTEUR, DATE, OBJET :
C
C
C     *****************************************************************
C
C
      SUBROUTINE NUNONU(ITRNOE,NBNMAX,NOETRI,NOEMAX,NBE,
     >                  COORD,IDIMC,
     >                  NUM,NBNUM,ITRAMA,iarr)
C     *****************************************************************
C     OBJET NUNONU : RENUMEROTE LES NOEUDS D'UN MAILLAGE
C
C     EN ENTREE:
C      ITRNOE,NBNMAX,NBE,NOETRI,NOEMAX :  LE MAILLAGE
C      NBNMAX: SI NBNMAX = 0 ALORS ITRNOE N'EST PAS CONSIDERE
C      NOEMAX: SI NOEMAX = 0 ALORS NOETRI N'EST PAS CONSIDERE
C
C
C      COORD,IDIMC : COORDONNEES DES NOEUDS
C      IDIMC : SI IDIMC = 0 ALORS COORD N'EST PAS CONSIDERE
C
C      NUM    :  NUM(I) EST NUMERO DE L'ELEMENT QUI DOIT ETRE MIS EN I
C                ATTENTION !! NUM DOIT ETRE TRIE AVEC ENSTRI
C      NBNUM  :  NOMBRE DE NOEUDS A RENUMEROTER
C      ITRAMA :  TABLEAU DE TRAVAIL DE TAILLE = MAX(NUM(I))
C
C     EN SORTIE:
C       ITRNOE : MIS A JOUR
C       NOETRI : MIS A JOUR
C       COORD  : MIS A JOUR
C
C     CONDITION D'APPLICATION : TOUT MAILLAGE
C     REMARQUE : COPIE DE IORDRE DE S.M. TIJANI
C     *****************************************************************
      IMPLICIT INTEGER(I-N)
      INTEGER    ITRNOE(*),NBNMAX,NOETRI(*),NBE
      REAL*8       COORD(*)
      INTEGER    IDIMC
      INTEGER    NOEMAX, NUM(*), NBNUM, ITRAMA(*), iarr
C
C     ---- COPIE DE IORDRE (S.M.TIJANI )----
C
      INTEGER I,J,LI,MI
      INTEGER NUMOLD,ITAMPO
      REAL*8    RTAMPO
C
C     ON N'A RIEN A FAIRE
C
      iarr = 0
      IF(NBNUM.LE.1) GOTO 9999
C
      DO 20 I=1,NBE
C           -----------------------------------
C       --- MISE A JOUR DES NOEUDS DES ELEMENTS ---
C           -----------------------------------
        DO 10 J=1,NBNMAX
          NUMOLD = ITRNOE((I-1)*NBNMAX + J)
          IF((NUMOLD.GT.0 ).AND.(NUMOLD.LE.NBNUM))THEN
            ITRNOE((I-1)*NBNMAX + J) = NUM(NUMOLD)
          ENDIF
   10   CONTINUE
   20 CONTINUE
C
C     PERMUTATION M INVERSE DE L :
C
      DO 30 I=1,NBNUM
        ITRAMA(NUM(I))=I
   30 CONTINUE
C
C     IMPOSER A NARG L'ORDRE DEFINI PAR L.
C     LES TABLEAUX L ET M SONT CASSES.
C
      DO 50 I=1,NBNUM
        LI=NUM(I)
        MI=ITRAMA(I)
C           ----------------------
C       --- PERMUTATION DES NOEUDS ---
C           ----------------------
          IF( NOEMAX.NE.0)THEN
            ITAMPO         = NOETRI(I)
            NOETRI(I)      = NOETRI(LI)
            NOETRI(LI) = ITAMPO
          ENDIF
          DO 40 J=1,IDIMC
            RTAMPO                = COORD((I-1)*IDIMC+J)
            COORD((I-1)*IDIMC+J)  = COORD((LI-1)*IDIMC+J)
            COORD((LI-1)*IDIMC+J) = RTAMPO
   40     CONTINUE
C
C       LE NOUVEAU NUMERO DE LI EST I
C       LE NOUVEAU NUMERO DE MI A CHANGE, C'EST DEVENU LI
C
        NUM(MI)=LI
        ITRAMA(LI)=MI
   50 CONTINUE
C
C     RESTAURATION DES TABLEAUX L (INITIAL) ET M (SON INVERSE).
C
      DO 60 I=1,NBE
        LI=NUM(I)
        MI=ITRAMA(I)
        NUM(MI)=I
        ITRAMA(LI)=I
   60 CONTINUE
 9999 END



