conge2
C CONGE2 SOURCE CHAT 05/01/12 22:17:07 5004 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) ************************************************************************ * * C O N G E 2 * ----------- * * FONCTION: * --------- * * CREER UN CONGE DE RACCORDEMENT ENTRE DEUX LIGNES * * TYPE DU CONGE : CIRCULAIRE * * MODULES UTILISES: * ----------------- * -INC PPARAM -INC CCOPTIO -INC SMELEME * * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN) * ----------- * * L1 (E) PREMIERE LIGNE A RACCORDER * L2 (E) DEUXIEME LIGNE A RACCORDER * RCONGE (E) RAYON DU CONGE DU RACCORDEMENT * NCONGE (E) FACTEUR DE DECOUPAGE DU CONGE (CONVENTIONS * CLASSIQUES SUR SON SIGNE) * = 0 SI NON FOURNI * NL1 (S) LIGNE APPUYEE SUR L1 ET ABOUTISSANT SUR LE CONGE * LRAC (S) CONGE DE RACCORDEMENT * NL2 (S) LIGNE APPUYEE SUR L2 ET COMMENCANT SUR LE CONGE * INTEGER NCONGE * * CONSTANTES: * ----------- * PARAMETER (DEMI=0.5D0) * * VARIABLES: * ---------- * * ANG = DEMI ANGLE AU SOMMET DES DEUX DROITES * DID = DISTANCE DU PT D'INTERSECTION AU PT D'UNE DROITE * DIC = DISTANCE DU PT D'INTERSECTION AU CENTRE DU CERCLE * RESULT = 'OK ' OU 'PARA' OU 'NON ' * NBNOEU = NOMBRE DE NOEUD DE L'ELEMENT * NBELEM = NOMBRE D'ELEMENT * INTEGER N,NBNOEU,NBELEM,NL CHARACTER*4 RESULT * * AUTEUR, DATE DE CREATION: * ------------------------- * * LIONEL VIVAN 20 NOVEMBRE 1987 * * LANGAGE: * -------- * * ESOPE + FORTRAN77 * ************************************************************************ * MELEME=L1 SEGACT,MELEME NL=LISOUS(/1) IF (NL.NE.0) THEN RETURN END IF NBNOEU=NUM(/1) NBELEM=NUM(/2) IP9=NUM(NBNOEU,NBELEM) IP8=NUM(1,NBELEM) SEGDES,MELEME * MELEME=L2 SEGACT,MELEME NL=LISOUS(/1) IF (NL.NE.0) THEN RETURN END IF NBNOEU=NUM(/1) IP1=NUM(1,1) IP2=NUM(NBNOEU,1) SEGDES,MELEME * * TEST DE LA VALEUR DE RESULT * IF (IERR.NE.0) RETURN IF (RESULT.EQ.'PARA') THEN RETURN ELSE IF (RESULT.EQ.'NON ') THEN RETURN END IF * * * CONSTRUCTION DES VECTEURS P1P2 P9P8 P1P21=X2-X1 P1P22=Y2-Y1 P1P23=Z2-Z1 P9P81=X8-X9 P9P82=Y8-Y9 P9P83=Z8-Z9 * PSA=(P1P21*P9P81)+(P1P22*P9P82)+(P1P23*P9P83) XN1=SQRT(P1P21**2+P1P22**2+P1P23**2) XN8=SQRT(P9P81**2+P9P82**2+P9P83**2) * * DEMI-ANGLE AU SOMMET DES DEUX DROITES ANG=(ACOS(PSA/(XN1*XN8)))*DEMI * * DISTANCE PT D'INTERSECTION - PT D'EXTREMITE DE LA DROITE DID=RCONGE/TAN(ANG) * * DISTANCE PT D'INTERSECTION - PT CENTRE DU CERCLE DIC=SQRT(RCONGE**2+DID**2) * * DETERMINATION DU POINT E (OU DEBUTERA LE CONGE) * XE=(DID/XN8)*P9P81+XI YE=(DID/XN8)*P9P82+YI ZE=(DID/XN8)*P9P83+ZI * * DETERMINATION DU POINT F (OU FINIRA LE CONGE) * XF=(DID/XN1)*P1P21+XI YF=(DID/XN1)*P1P22+YI ZF=(DID/XN1)*P1P23+ZI * * DETERMINATION DU POINT O (CENTRE DU CERCLE OU S'APPUIERA LE CONGE) * XEF=XE+XF-2.D0*XI YEF=YE+YF-2.D0*YI ZEF=ZE+ZF-2.D0*ZI PRO=DIC/SQRT(XEF**2+YEF**2+ZEF**2) XO=PRO*XEF+XI YO=PRO*YEF+YI ZO=PRO*ZEF+ZI * * CREATION DES EXTREMITES DES LIGNES A RACCORDER * IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN * * CREATION ARC DE CERCLE (COMMENCANT EN E, FINISSANT EN F) * IF (NCONGE.NE.0) THEN END IF IF (IERR.NE.0) RETURN IF (IERR .NE. 0) RETURN IF (NCONGE.GT.0) THEN MELEME=LRAC SEGACT,MELEME NBNOEU=NUM(/1) NBELEM=NUM(/2) IP1C=NUM(NBNOEU,1) IP2C=NUM(1,NBELEM) SEGDES,MELEME END IF * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales