ccon1
C CCON1 SOURCE PV 20/03/30 21:15:43 10567 IMPLICIT INTEGER(I-N) -INC SMCOORD -INC SMELEME -INC PPARAM -INC CCOPTIO -INC SMLENTI REAL*8 XDE CHARACTER*1 CHE LOGICAL LOGE SEGMENT ICPR(nbpts) SEGMENT INUINV(nbpts) SEGMENT JMEM(NODES) SEGMENT MEMJT(NKON) SEGMENT IPOME(NODES+1) SEGMENT ICONC(NODES) SEGMENT IDEJ(NODES) SEGMENT IPRI(NODES) *** SEGACT MELEME * * LOGIQUE : ON PREND UN POINT PUIS TOUS LES ELEMENTS TOUCHANT * POINT PUIS ON DIT LE S NOEUDS VOISINS ET ON BOUCLE SUR LES NOEUDS * CONCERNEES NON DEJA TRAITES * * ON REGARDE L'ENSEMBLE DES NOEUDS DES NOEUDS DE MELEME ET ON CONSTRUIT * LE TABLEAU DONNANT LES ELEMENTS TOUCHANT CHAQUE NOEUD * SEGINI ICPR,INUINV SEGACT MELEME*MOD IPT1=MELEME IRETO=0 IKOU=0 DO 202 IO=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) THEN IPT1=LISOUS(IO) SEGACT IPT1*MOD ENDIF DO 203 I=1,IPT1.NUM(/1) DO 203 J=1,IPT1.NUM(/2) IJ=IPT1.NUM(I,J) IF (ICPR(IJ).NE.0) GOTO 203 IKOU=IKOU+1 ICPR(IJ)=IKOU INUINV(IKOU)=IJ 203 CONTINUE 202 CONTINUE NODES=IKOU SEGINI JMEM ,IPOME IPT1=MELEME NGRAND=0 NMAX=0 DO 3 IO=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) IPT1=LISOUS(IO) DO 4 I=1,IPT1.NUM(/1) DO 4 J=1,IPT1.NUM(/2) JMEM(ICPR(IPT1.NUM(I,J)))=JMEM(ICPR(IPT1.NUM(I,J)))+1 4 CONTINUE NGRAND=MAX(NGRAND,IPT1.NUM(/2)) NMAX=NMAX+IPT1.NUM(/2) 3 CONTINUE NGRAND=NGRAND+1 IPOME(1)=0 DO 6 I=1,NODES IPOME(I+1)=IPOME (I) + JMEM(I) 6 CONTINUE DO 7 I=1,NODES JMEM(I)=0 7 CONTINUE NKON=IPOME(NODES+1) SEGINI MEMJT IPT1=MELEME DO 101 IO=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) IPT1=LISOUS(IO) DO 100 I=1,IPT1.NUM(/2) DO 100 J=1,IPT1.NUM(/1) IND=ICPR(IPT1.NUM(J,I)) JMEM(IND)=JMEM(IND)+1 MEMJT(IPOME(IND)+JMEM(IND))=I+NGRAND*IO 100 CONTINUE 101 CONTINUE * * quelques initialisations * * WRITE(6,FMT='('' NODES '' ,I5)') NODES SEGINI IDEJ,ICONC,IPRI INDE=0 * * debut de tourner en rond. * 50 CONTINUE DO 51 I=1,NODES ICONC(I)=0 IPRI(I)=0 51 CONTINUE DO 52 I=1,NODES IF(IDEJ(I).EQ.0) GO TO 54 52 CONTINUE GO TO 59 54 CONTINUE IDEP=I * WRITE(6,FMT='('' POINT DE DEPART '',I5)') IDEP INC=1 INA=1 ICONC(INC)=IDEP IPRI(IDEP)=1 55 CONTINUE INO=INC DO 57 I=INA,INO INU=ICONC(I) IF(IDEJ(INU).NE.0) THEN ELSE IDEJ(INU)=1 ENDIF K4=JMEM(INU) JSUB=IPOME(INU) * WRITE(6,FMT='('' NOEUD NBVOIS DDEB'',3I5)')INUINV(INU), * $ K4,JSUB DO 40 JJ=1,K4 IND=JSUB+JJ K6=MEMJT(IND) IAIA= K6/NGRAND IF(LISOUS(/1).NE.0) IPT1=LISOUS(IAIA) SEGACT IPT1*MOD K6=MOD(K6,NGRAND) IF(IPT1.NUM(1,K6).LE.0) GO TO 40 IPT1.NUM(1,K6)=-IPT1.NUM(1,K6) * WRITE(6,FMT='('' ELEMENT NUMERO '',I5)') K6 DO 85 L=1,IPT1.NUM(/1) K5=ICPR(ABS(IPT1.NUM(L,K6))) IF (IPRI(K5).GT.0) GO TO 85 INC=INC+1 ICONC(INC)=K5 IPRI(K5)=1 * WRITE(6,FMT= '('' NOEUD NUMERO '',I5)') INUINV(K5) 85 CONTINUE 40 CONTINUE 57 CONTINUE IF(INO.NE.INC) THEN * WRITE(6,FMT='('' ON BOUCLE INA INO INC'',3I5)') INA,INO,INC INA=INO+1 GO TO 55 ENDIF * * on vient de trouver une composante connexe * 59 CONTINUE * WRITE(6,FMT=' ('' UNE COMPOSANTE CONNEXES TROUVEE '')') * * on cree une table si pas deja fait puis remise de meleme en positif * IF(IRETO.EQ.0) THEN JG=1 SEGINI MLENTI IRETO=MLENTI ELSE SEGACT MLENTI JG=JG+1 SEGADJ MLENTI ENDIF DO 71 K=1,MAX(1,LISOUS(/1)) IF(LISOUS(/1).NE.0) IPT1=LISOUS(K) DO 73 KI=1,IPT1.NUM(/2) IPT1.NUM(1,KI)=ABS(IPT1.NUM(1,KI)) 73 CONTINUE 71 CONTINUE NBNN=1 NBELEM=INO NBSOUS=0 NBREF=0 SEGINI IPT2 DO 70 I=1,INO IPT2.NUM(1,I)=INUINV(ICONC(I)) 70 CONTINUE IPT2.ITYPEL=1 SEGDES IPT2 SEGSUP IPT2 IF(IERR.NE.0) THEN RETURN ENDIF SEGACT MELEME*MOD DO 2020 IO=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) THEN IPT1=LISOUS(IO) SEGACT IPT1*MOD ENDIF 2020 CONTINUE LECT(JG)=IPT INDE=INDE+INO IF(INDE.NE.NODES) GO TO 50 1000 CONTINUE SEGDES MLENTI IF(LISOUS(/1).NE.0) THEN DO 74 K=1,LISOUS(/1) IPT1=LISOUS(K) SEGDES IPT1 74 CONTINUE ENDIF SEGDES MELEME SEGSUP ICPR,ICONC,IDEJ,IPRI,MEMJT,JMEM,INUINV,IPOME RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales