separ
C SEPAR SOURCE CHAT 05/01/13 03:14:02 5004 C**************************************************************************** C**************************************************************************** C***************SEPAR...trouve separation************************************ C**************************************************************************** C**************************************************************************** C SEPAR trouve la separation a partir du domaine defini par C MASQ=.TRUE. et du noeud appele PIVOT, renvoie DIMSEP,le nombre de C noeuds contenant dans la separation, MASK=.FALSE. pour les noeuds C appartenant a la separation, renumerote celle-ci dans IADJ, & NODES) IMPLICIT INTEGER(I-N) SEGMENT IADJ(0) SEGMENT IVOIS(0) INTEGER PIVOT SEGMENT MASQUE ENDSEGMENT SEGMENT IPOS(0) INTEGER NODES INTEGER DIMSEP,N INTEGER LONG,LONG2,L,DIMLON SEGMENT NRELONG(NODES),NOELON(NODES) LOGICAL BOOL C initialisation des segments de travail. SEGINI NRELONG,NOELON * DIMLON,MASQUE,IPOS,NODES) C recherche la distance maximale de PIVOT a un tout autre noeud, renvoie C le resultat dans LONG. DIMLON contient le nombre des noeuds de longueur C LONG,ces derniers sont MASQues,et on leur associe une (I)POSition. C NRELONG(I) contient la profondeur du noeud I. C NOELON contient les noeuds de longueur LONG. C on recherche le noeud de minimum degre parmi les noeuds de profondeur C LONG (contenu dans NOELON). C ON renvoie le resultat dans PIVOT. * DIMLON,MASQUE,IPOS,NODES) C on recommence la procedure NOEPERI avec le nouveau PIVOT pour etre sur C d'avoir trouve la LONGueur maximale. C Si ce n'est pas le cas,on met LONG2 dans LONG. LONG=LONG2 GOTO 10 ENDIF C PIVOT correspond au noeud pseudo-peripherique. C LONG2 correspond au pseudo-diametre. DIMSEP=0 C pour l'instant,aucun noeud n'appartient a la separation. L=INT(LONG2/2) C L correspond a la distance moyenne pour aller d'un bout a l'autre C du domaine. C on arrete de separer si LONG < = 5. C on masque alors tous les noeuds repondant a cette condition. IF(LONG2.LE.5) THEN DO 30 J=1,LONG2 DO 40 I=1,NODES DIMSEP=DIMSEP+1 ENDIF 40 CONTINUE 30 CONTINUE GOTO 50 ENDIF C On calcule la position de chaque noeud I. C si I a une profondeur L, I appartient a la separation. DO 20 I=1,NODES IF((NRELONG(I).LT.L).AND.(NRELONG(I).GT.0)) THEN IPOS(I+NODES)=IPOS(I+NODES)*3+1 IPOS(I)=IPOS(I)+1 ENDIF IF(NRELONG(I).EQ.L) THEN IF (IPOS(I+NODES).GT.42946799) THEN DO 5 J=1,NODES 5 CONTINUE GOTO 50 ENDIF DIMSEP=DIMSEP+1 ENDIF IF(NRELONG(I).GT.L) THEN IPOS(I+NODES)=IPOS(I+NODES)*3+2 IPOS(I)=IPOS(I)+1 ENDIF ENDIF 20 CONTINUE 50 SEGSUP NRELONG,NOELON RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales