raccor
C RACCOR SOURCE BP208322 16/11/18 21:20:39 9177 C FABRIQUE LES ELEMENTS RACCORD ENTRE DEUX LIGNES C EXTRAIT DE COCO C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC CCREEL *- -INC SMELEME -INC SMCOORD SEGMENT MTRAV REAL*8 TA(NBELEM) INTEGER NP1(NBELE1),NP2(NBELE1) ENDSEGMENT C* DIMENSION ITEST(0:NBCOUL-1) - NBCOUL stocke dans CCGEOME DIMENSION ITEST(0:30) SEGACT,MCOORD IDIMP1 = IDIM+1 PREC3=3.*PREC TMAX=-XGRAND TMIN= XGRAND NB1=IPT1.NUM(/2) NB2=IPT2.NUM(/2) NBMAX=MIN(NB1,NB2) NBNN=IPT1.NUM(/1) IF (NBNN.NE.IPT2.NUM(/1)) THEN RETURN ENDIF DO 40 I=0,NBCOUL-1 40 ITEST(I)=0 DO 41 I=1,NB1 ITEST(IPT1.ICOLOR(I))=1 41 CONTINUE DO 42 I=1,NB2 ITEST(IPT2.ICOLOR(I))=1 42 CONTINUE ICHCOL=-1 DO 43 I=0,NBCOUL-1 IF (ITEST(I).EQ.1) THEN IF (ICHCOL.EQ.-1) THEN ICHCOL=I ELSE ICHCOL=ITABM(ICHCOL,I) ENDIF ENDIF 43 CONTINUE NBELEM=NB2 NBELE1=NBELEM+1 SEGINI MTRAV DO 11 I=1,NB2 Z=0. DO 12 J=1,NBNN IREF=IPT2.NUM(J,I)*IDIMP1-IDIM Z=Z+ABS(XCOOR(IREF))+ABS(XCOOR(IREF+1)) IF (IDIM.NE.2) Z=Z+ABS(XCOOR(IREF+2)) 12 CONTINUE Z=Z/NBNN TA(I)=Z IF(Z.GT.TMAX) TMAX=Z IF(Z.LT.TMIN) TMIN=Z 11 CONTINUE C C CLASSEMENT APPROXIMATIF PAR ' DISTANCE ' C IF ((ABS(TMAX).GE.XPETIT).AND.(TMAX-TMIN)/TMAX.GE.1E-6) GOTO 6 TMAX=TMAX+1. TMIN=TMIN-1. 6 CONTINUE TDEC=(TMAX-TMIN)/NBELEM*1.0001 N =int( PREC/TDEC) + 1 C* Boucle 3 redeondante avec SEGINI MTRAV C* DO 3 I=1,NBELE1 C* 3 NP1(I)=0 DO 4 I=1,NBELEM IPLA=int((TA(I)-TMIN)/TDEC)+1 4 NP1(IPLA)=NP1(IPLA)+1 DO 400 I=2,NBELE1 400 NP1(I)=NP1(I-1)+NP1(I) DO 5 I=1,NBELEM IPLA=int((TA(I)-TMIN)/TDEC)+1 IPLB=NP1(IPLA) NP1(IPLA)=NP1(IPLA)-1 NP2(IPLB)=I 5 CONTINUE C C DANS NP1 ADDRESSE DU DEBUT DE ZONE C DANS NP2 NUMERO DES ELEMENTS EN NUMEROTATION LOCALE C DANS TA DISTANCE DES ELEMENTS C C IL FAUT PREPARER LE SEGMENT TAMPON OU METTRE LES ELEMS CREES. NBREF=0 NBSOUS=0 NBNNOR=NBNN NBNN=2*NBNN NBELEM=NB1+NB2 SEGINI MELEME IPT4=MELEME NBT=NBELEM NBELEM=NB2 NUMELG=0 C C BOUCLE SUR TOUS LES ELEMENTS POUR CONNAITRE LEUR FACES ET REGARDER SI C LE CENTRE DE GRAVITE EST CONFONDU A PREC PRES DE CELUI D'UN ELEMENT C COQUE DO 20 I=1,NB1 ZAA=0. DO 21 J=1,NBNNOR IREF=IPT1.NUM(J,I)*IDIMP1-IDIM ZAA=ZAA+ABS(XCOOR(IREF))+ABS(XCOOR(IREF+1)) IF (IDIM.NE.2) ZAA=ZAA+ABS(XCOOR(IREF+2)) 21 CONTINUE ZAA=ZAA/NBNNOR IZO=int((ZAA-TMIN)/TDEC)+1 IZO1=IZO-N IZO2=IZO+N IF(IZO1.LT.1) IZO1=1 IF(IZO2.GT.NBELEM) IZO2=NBELEM IF (IZO.LT.0.OR.IZO.GT.NBELE1) GOTO 20 DO 28 IZO=IZO1,IZO2 IDEP=NP1(IZO)+1 IFIN=NP1(IZO+1) IF(IFIN.LT.IDEP) GO TO 28 DO 23 JFA=IDEP,IFIN IB=NP2(JFA) IF(ABS(TA(IB)-ZAA).GT.PREC3) GO TO 23 C ON VIENT D'IDENTIFIER UN ELEMENT DE RACCOR ON VA LE CREER IREFA=IPT1.NUM(1,I)*IDIMP1-IDIM DO 24 IK=1,NBNNOR IREFB=IPT2.NUM(IK,IB)*IDIMP1-IDIM IF (ABS(XCOOR(IREFA)-XCOOR(IREFB)).GT.PREC) GOTO 24 IF (ABS(XCOOR(1+IREFA)-XCOOR(1+IREFB)).GT.PREC) GOTO 24 IF (ABS(XCOOR(2+IREFA)-XCOOR(2+IREFB)).GT.PREC.AND.IDIM.NE.2) GOTO # 24 ISTA=IK GO TO 26 24 CONTINUE GO TO 23 26 CONTINUE ISENS=1 ISTA1=ISTA+1 ISTAA=ISTA IF (ISTA1.GT.NBNNOR) ISTA1=1 IREFA=IPT1.NUM(2,I)*IDIMP1-IDIM IREFB=IPT2.NUM(ISTA1,IB)*IDIMP1-IDIM Z=XCOOR(IREFA)-XCOOR(IREFB) IF(ABS(Z).GT.PREC) ISENS=-1 Z=XCOOR(IREFA+1)-XCOOR(IREFB+1) IF(ABS(Z).GT.PREC) ISENS=-1 IF (IDIM.NE.2) THEN Z=XCOOR(IREFA+2)-XCOOR(IREFB+2) IF (ABS(Z).GT.PREC) ISENS=-1 ENDIF DO 30 IJ=2,NBNNOR IREFA=IPT1.NUM(IJ,I)*IDIMP1-IDIM ISTAA=ISTAA+ISENS IF (ISTAA.EQ.0) ISTAA=NBNNOR IF (ISTAA.GT.NBNNOR) ISTAA=1 IREFB=IPT2.NUM(ISTAA,IB)*IDIMP1-IDIM DO 32 KLP=1,IDIM Z=XCOOR(IREFA+KLP-1)-XCOOR(IREFB+KLP-1) IF(ABS(Z).GT.PREC) GO TO 23 32 CONTINUE 30 CONTINUE C CREATION D'UN ELEM RACCORD NUMELG=NUMELG+1 IF (IERR.NE.0) GOTO 101 DO 27 IK=1,NBNNOR IP1=IPT1.NUM(IK,I) IP2=IPT2.NUM(ISTA,IB) NUM(IK,NUMELG)=IP1 NUM(NBNN-IK+1,NUMELG)=IP2 ISTA=ISTA+ISENS IF (ISTA.EQ.0) ISTA=NBNNOR IF (ISTA.GT.NBNNOR) ISTA=1 IF (IP1.NE.IP2) GOTO 27 INTERR(1)=NUMELG 27 CONTINUE 23 CONTINUE 28 CONTINUE 20 CONTINUE WRITE(IOIMP,29) NUMELG 29 FORMAT(//,' NOMBRE D''ELEMENTS DE RACCORD CREES : ',I5) NBELEM=NUMELG MELEME = 0 IF (NBELEM.EQ.0) THEN GOTO 101 ENDIF SEGINI MELEME IF (NBNN.EQ.4) ITYPEL=12 IF (NBNN.EQ.6) ITYPEL=13 DO 100 J=1,NBELEM ICOLOR(J)=ICHCOL DO 100 I=1,NBNN NUM(I,J)=IPT4.NUM(I,J) 100 CONTINUE 101 SEGSUP IPT4 SEGSUP MTRAV RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales