racli1
C RACLI1 SOURCE BP208322 16/11/18 21:20:40 9177 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 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) * 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) IF (PS.GE.0.) THEN * * POINT E HORS DE LA DROITE * IF (DE9 .GT. (D98/2.D0) ) THEN * * ON CREE UNE DROITE NL1 = L1 + DROITE(P9,PE) * IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN ELSE * * ON RALLONGE LE DERNIER ELEMENT * DE = D9 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 12 J=1,NBNOEU IPT1.NUM(J,I)=NUM(J,I) 12 CONTINUE * END DO * END DO 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 IF (DE9.GT.D98) THEN NBELEM=NBELEM-1 IF (NBELEM.EQ.0) THEN 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 * DE = D9 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 22 J=1,NBNOEU IPT1.NUM(J,I)=NUM(J,I) 22 CONTINUE * END DO * END DO 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 * DE = D8 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 32 J=1,NBNOEU IPT1.NUM(J,I)=NUM(J,I) 32 CONTINUE * END DO * END DO SEGDES,IPT1 END IF END IF SEGDES,MELEME * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales