racli1
C RACLI1 SOURCE GOUNAND 24/10/09 21:15:08 12031 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) ************************************************************************ * * R A C L I 1 * ----------- * * FONCTION: * --------- * * CREER UNE LIGNE 'NL1' S'APPUYANT SUR LA LIGNE 'L1' * ET FINISSANT EN UN POINT E * L'ORIENTATION EST LIGNE-POINT * * MODULES UTILISES: * ----------------- * -INC CCGEOME -INC PPARAM -INC CCREEL -INC CCOPTIO -INC SMELEME * * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN) * ----------- * * L1 (E) LIGNE * IPE (E) POINT * (S) ATTENTION: LA DENSITE DU POINT PEUT ETRE MODIFIEE * (EN FONCTION DE LA DENSITE SUR "L1"). * NL1 (S) LIGNE DE RACCORDEMENT LIGNE-POINT * * CONSTANTES: * ----------- * PARAMETER (DEMI=0.5D0) * * VARIABLES: * ---------- * * NBNOEU = NOMBRE DE NOEUD * NBELEM = NOMBRE D'ELEMENT * INTEGER NBNOEU,NBELEM,NL,N, & ITYPLM,NBSOUS,NBREF,NBNN * * AUTEUR, DATE DE CREATION: * ------------------------- * * LIONEL VIVAN 23 NOVEMBRE 1987 * * LANGAGE: * -------- * * ESOPE + FORTRAN77 * ************************************************************************ * MELEME=L1 SEGACT,MELEME NL=LISOUS(/1) IF (NL.NE.0) THEN RETURN END IF IF (ILCOUR.EQ.0) THEN RETURN END IF ITYPLM=KDEGRE(ILCOUR) IF (ITYPLM.EQ.0) THEN RETURN END IF NBNN=NBNNE(ITYPLM) IF (NBNN.NE.2.AND.NBNN.NE.3) THEN RETURN END IF NBSOUS=0 NBREF=0 NBNOEU=NUM(/1) NBELEM=NUM(/2) IP8=NUM(1,NBELEM) IP9=NUM(NBNOEU,NBELEM) * * write(ioimp,*) 'XE,X8,X9=',XE,X8,X9 PS=(X9-X8)*(XE-X9)+(Y9-Y8)*(YE-Y9)+(Z9-Z8)*(ZE-Z9) DE9=SQRT((X9-XE)**2+(Y9-YE)**2+(Z9-ZE)**2) D98=SQRT((X8-X9)**2+(Y8-Y9)**2+(Z8-Z9)**2) * write(ioimp,*) 'PS,DE9,D98=',PS,DE9,D98 IF (PS.GE.0.D0) THEN * * POINT E HORS DE LA DROITE * IF (DE9 .GT. (D98/2.D0) ) THEN * * ON CREE UNE DROITE NL1 = L1 + DROITE(P9,PE) * IF (ABS(D9).LT.XPETIT) THEN DE=D98 ELSE DE=D9 ENDIF IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN ELSE * * ON RALLONGE LE DERNIER ELEMENT * IF (ABS(D9).LT.XPETIT) THEN DE=D98 ELSE DE=D9 ENDIF SEGINI,IPT1 IPT1.ITYPEL=ITYPLM NL1=IPT1 IPT1.NUM(NBNOEU,NBELEM)=IPE IPT1.NUM(1,NBELEM)=NUM(1,NBELEM) IPT1.ICOLOR(NBELEM)=IDCOUL IF (NBNOEU.EQ.3) THEN X7=(XE+X8)*DEMI Y7=(YE+Y8)*DEMI Z7=(ZE+Z8)*DEMI D7=(DE+D8)*DEMI IPT1.NUM(2,NBELEM)=IP7 END IF DO 12 I=1,(NBELEM-1) IPT1.ICOLOR(I)=IDCOUL DO 121 J=1,NBNOEU IPT1.NUM(J,I)=NUM(J,I) 121 CONTINUE 12 CONTINUE SEGDES,IPT1 END IF ELSE * * LE POINT E SE SITUE SUR LA DROITE * * RECHERCHE DE L'ELEMENT I OU SE TROUVE LE POINT E * 105 CONTINUE IF (DE9.GT.D98) THEN NBELEM=NBELEM-1 IF (NBELEM.EQ.0) THEN * Rayon du conge trop grand RETURN END IF IP9=NUM(NBNOEU,NBELEM) IP8=NUM(1,NBELEM) DE9=SQRT((X9-XE)**2+(Y9-YE)**2+(Z9-ZE)**2) D98=SQRT((X8-X9)**2+(Y8-Y9)**2+(Z8-Z9)**2) GOTO 105 END IF IF (DE9 .LE. (D98/2.D0) ) THEN * * LE POINT E EST PROCHE DU POINT 9 * *gounand DE = D9 IF (ABS(D9).LT.XPETIT) THEN IF (ABS(D8).LT.XPETIT) THEN DE=D98-DE9 ELSE DE=D8 ENDIF ELSE DE=D9 ENDIF SEGINI,IPT1 IPT1.ITYPEL=ITYPLM NL1=IPT1 IPT1.NUM(NBNOEU,NBELEM)=IPE IPT1.NUM(1,NBELEM)=NUM(1,NBELEM) IPT1.ICOLOR(NBELEM)=IDCOUL IF (NBNOEU.EQ.3) THEN X7=(X8+XE)*DEMI Y7=(Y8+YE)*DEMI Z7=(Z8+ZE)*DEMI D7=(D8+DE)*DEMI IPT1.NUM(2,NBELEM)=IP7 END IF DO 22 I=1,(NBELEM-1) IPT1.ICOLOR(I)=IDCOUL DO 221 J=1,NBNOEU IPT1.NUM(J,I)=NUM(J,I) 221 CONTINUE 22 CONTINUE SEGDES,IPT1 ELSE * * LE POINT E EST PROCHE DU POINT 8 * NBELEM = NBELEM - 1 IF (NBELEM.LE.0) THEN * RAYON TROP GRAND RETURN END IF * * gounand DE = D8 IF (ABS(D8).LT.XPETIT) THEN DE=D98-DE9 ELSE DE=D8 ENDIF * SEGINI,IPT1 IPT1.ITYPEL=ITYPLM NL1=IPT1 IPT1.NUM(NBNOEU,NBELEM)=IPE IPT1.NUM(1,NBELEM)=NUM(1,NBELEM) IPT1.ICOLOR(NBELEM)=IDCOUL IF (NBNOEU.EQ.3) THEN IP6=NUM(1,NBELEM) X7=(XE+X6)*DEMI Y7=(YE+Y6)*DEMI Z7=(ZE+Z6)*DEMI D7=(DE+D6)*DEMI IPT1.NUM(2,NBELEM)=IP7 END IF DO 32 I=1,(NBELEM-1) IPT1.ICOLOR(I)=IDCOUL DO 321 J=1,NBNOEU IPT1.NUM(J,I)=NUM(J,I) 321 CONTINUE 32 CONTINUE SEGDES,IPT1 END IF END IF SEGDES,MELEME * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales