liaiso
C LIAISO SOURCE BP208322 16/11/18 21:18:44 9177 C FABRIQUE LES ELEMENTS LIAISON ENTRE DEUX SURFACES C D'APRES 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) IDIMP1 = IDIM+1 SEGACT MCOORD PREC3=3.*PREC TMAX=-XGRAND TMIN=XGRAND NB1=IPT1.NUM(/2) NB2=IPT2.NUM(/2) NBPOS=MIN(NB1,NB2) NBNN=IPT1.NUM(/1) IF (NBNN.NE.IPT2.NUM(/1)) THEN RETURN ENDIF DO 40 I=0,NBCOUL-1 ITEST(I)=0 40 CONTINUE DO 41 I=1,NB1 ITEST(min(22,IPT1.ICOLOR(I)))=1 41 CONTINUE DO 42 I=1,NB2 ITEST(min(22,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 ITYP=0 IF(IPT1.ITYPEL.EQ.4) ITYP=18 IF(IPT1.ITYPEL.EQ.8) ITYP=19 IF(IPT1.ITYPEL.EQ.6) ITYP=20 IF(IPT1.ITYPEL.EQ.10) ITYP=21 IF (ITYP.EQ.0) RETURN NBELEM=NB2 NBELE1=NBELEM+1 SEGINI,MTRAV DO 11 I=1,NB2 Z=0.D0 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 TMAX=MAX(Z,TMAX) TMIN=MIN(Z,TMIN) 11 CONTINUE C on recommence avec ipt1 pour avoir les vrais TMAX et TMIN DO 110 I=1,NB1 Z=0. DO 120 J=1,NBNN IREF=IPT1.NUM(J,I)*IDIMP1-IDIM Z=Z+ABS(XCOOR(IREF))+ABS(XCOOR(IREF+1)) IF (IDIM.NE.2) Z=Z+ABS(XCOOR(IREF+2)) 120 CONTINUE Z=Z/NBNN TMAX=MAX(Z,TMAX) TMIN=MIN(Z,TMIN) 110 CONTINUE C C CLASSEMENT APPROXIMATIF PAR ' DISTANCE ' C IF ((TMAX-TMIN)/TMAX.GE.1E-6) GOTO 6 TMAX=TMAX+1. TMIN=TMIN-1. 6 CONTINUE TDEC=(TMAX-TMIN)/NBELEM*1.0001 IF (TDEC.EQ.0.) TDEC=1. C* Boucle 3 redondante 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 ittes=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 zaami= zaa - idim*prec zaama= zaa + idim *prec IZO=(ZAA-TMIN)/TDEC+1. IZO1=IZO-1 IZO2=IZO+1 izo1= (ZAAmi-TMIN)/TDEC -1 izo2= (ZAAma-TMIN)/TDEC+2 IF(IZO1.LT.1) IZO1=1 IF(IZO2.GT.NBELEM) IZO2=NBELEM 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 RACCORD 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 (NUMELG.GT.NBPOS) THEN GOTO 101 ENDIF DO 27 IK=1,NBNNOR IP1=IPT1.NUM(IK,I) IP2=IPT2.NUM(ISTA,IB) NUM(IK,NUMELG)=IP1 NUM(NBNNOR+IK,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 IF (IIMPI.NE.0) WRITE(IOIMP,29) NUMELG 29 FORMAT(///,39H NOMBRE D'ELEMENTS DE LIAISON CREES : ,I5 ) NBELEM=NUMELG MELEME=0 IF (NBELEM.EQ.0) GOTO 101 SEGINI MELEME ITYPEL=ITYP 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