Download ifilsf.eso

Back to the list

   1 : C IFILSF    SOURCE    CHAT      05/01/13    00:32:54     5004           
   2 : C**************************************************************************
   3 : C**************************************************************************
   4 : C****************************                   ***************************
   5 : c************************          IFILSFRE          ***********************
   6 : c****************************                   ***************************
   7 : C**************************************************************************
   8 : C**************************************************************************             
   9 : C       IFILS FREres.
  10 : 
  11 : C       cree une "arborescence" a partir de la racine, de gd,
  12 : C       de l'ordre d'elimination des noeuds.
  13 : 
  14 :         SUBROUTINE  IFILSF(MPVOIS,MVOIS,IORDRE,COMPT,
  15 :      *                       IFILS,IFRERE,RACINE,NBENS)
  16 : 
  17 : 
  18 :       IMPLICIT INTEGER(I-N)
  19 :         
  20 : 
  21 :         SEGMENT MPVOIS(0),MVOIS(0)
  22 :         SEGMENT IORDRE(0)
  23 :         INTEGER COMPT,RACINE
  24 :         SEGMENT IFILS(0),IFRERE(0)
  25 : 
  26 :         LOGICAL B,B2,BOOL
  27 :         INTEGER NOEUD,R,PERE,Y,FILLE    
  28 :         SEGMENT  IENS(NBENS)    
  29 : 
  30 : 
  31 :         SEGINI IENS
  32 : 
  33 : C       construction de l'arbre
  34 :         DO 10 I=1,NBENS
  35 :           IFRERE(I)=0
  36 :           IFILS(I)=0
  37 : 10      CONTINUE
  38 : C       chaque noeud n'a ni fils, ni frere.
  39 :         
  40 : 
  41 :         
  42 :         RACINE=IORDRE(COMPT)
  43 : C       la racine est toujours le dernier noeud elimine 
  44 : C       car il n'a pas de pere.
  45 : 
  46 : 
  47 :         DO 200 I=1,COMPT-1
  48 : 
  49 :            NOEUD=IORDRE(I)
  50 : C          noeud est dans l'ancienne numerotation.
  51 : 
  52 : 
  53 :            L=0
  54 :            DO 220 J=MPVOIS(NOEUD),MPVOIS(NOEUD+NBENS)
  55 : 
  56 :                 B2=(IORDRE(MVOIS(J)+NBENS).GT.IORDRE(NOEUD+NBENS))
  57 : C               B2 est vrai si le voisin de NOEUD possede un nouveau 
  58 : C               numero superieur au nouveau numero de NOEUD.
  59 : 
  60 :                 IF (B2) THEN
  61 :                     L=L+1       
  62 :                     IENS(L)=MVOIS(J)
  63 : C                   si b2 vrai, alors le voisin considere est un pere
  64 : C                   possible.
  65 :                     ENDIF
  66 : 220             CONTINUE
  67 : 
  68 :                 PERE=IENS(1)
  69 : C               PERE est initialise a IENS(1)
  70 : 
  71 :                 DO 230 J=2,L
  72 :                       B=(IORDRE(IENS(J)+NBENS).LT.IORDRE(PERE+NBENS))
  73 :                       IF(B) PERE=IENS(J)
  74 : C                     s'il existe un element de ens ayant un nouveau numero
  75 : C                     inferieur a celui de pere alors il devient le veritable
  76 : C                     pere(l'autre n'est qu'un grand pere).
  77 : C               pere est dans l'ancienne numerotation.  
  78 : 230             CONTINUE
  79 :         
  80 :                 FILLE=IFILS(PERE)
  81 : 
  82 :                 IF (FILLE.EQ.0) THEN
  83 : C               s'il n'existe pas d'autre fils de pere,alors 
  84 : C               noeud n'a pas de frere.
  85 :                     IFILS(PERE)=NOEUD
  86 :                     IFRERE(NOEUD)=0
  87 :                 ELSE
  88 : C               si pere a un autre fils que noeud,
  89 : 240                IF(IFRERE(FILLE).EQ.0) THEN
  90 :                         IFRERE(FILLE)=NOEUD
  91 : C                       et si cet autre fils n'a pas de frere,noeud devient
  92 : C                        ce frere.                              
  93 :                    ELSE
  94 : C                  sinon on prend le frere de cet autre fils du pere,
  95 : C                  on recherche si lui-meme a un frere jusqu'a aboutir
  96 : C                  a ne plus avoir de frere,et on met noeud a cette
  97 : C                  position.
  98 :                         FILLE=IFRERE(FILLE)
  99 :                         GOTO 240
 100 :                    ENDIF
 101 :                 ENDIF              
 102 : 
 103 : 200     CONTINUE
 104 : 
 105 :         SEGSUP IENS
 106 : 
 107 : 
 108 :         RETURN  
 109 :         END
 110 :  

© Cast3M 2003 - All rights reserved.
Disclaimer