C POULOC SOURCE CHAT 05/01/13 02:19:14 5004 SUBROUTINE POULOC(XEPOU,VECT,KERRE) C----------------------------------------------------------------------- C CALCUL DU VECTEUR LOCAL DE LA POUTRE PAR DEFAUT C C ENTREE C XEPOU COORDONNEES DES 2 NOEUDS C SORTIE C VECT VECTEUR DEFINISSANT LE REPERE LOCAL DE LA POUTRE C KERRE = 0 SI PAS DE PB C = 1 SI POINTS CONFONDUS C C----------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) DIMENSION XEPOU(3,*),P(3),VECT(*),A(3) C KERRE=0 A(1)=XEPOU(1,2)-XEPOU(1,1) A(2)=XEPOU(2,2)-XEPOU(2,1) A(3)=XEPOU(3,2)-XEPOU(3,1) XL=SQRT(A(1)**2+A(2)**2+A(3)**2) IF(XL.EQ.0.D0) THEN KERRE=1 RETURN ENDIF RL=1.D00/XL C C DEFINITION DU VECTEUR LOCAL PAR DEFAUT ( NON NORME ) C VECT(1)=-A(2)*RL VECT(2)=A(1)*RL VECT(3)=0.D00 DO 7 I=1,3 7 P(I)=A(I)*RL RLP=0.D0 DO 1 I=1,3 1 RLP=RLP+VECT(I)**2 RLP= SQRT(RLP) C C TEST DE COLINEARITE C PROD=0.D00 DO 4 I=1,3 4 PROD=PROD+VECT(I)*P(I) IF(ABS(PROD).LT.0.99D00*RLP) GO TO 5 VECT(1)= 0.D0 VECT(2)= -A(3)*RL VECT(3)= A(2)*RL C C ORTHOGONALISATION C 5 CONTINUE RLP=0.D00 DO 6 I=1,3 VECT(I)=VECT(I)-PROD*P(I) 6 RLP=RLP+VECT(I)**2 RLP=1.D00/SQRT(RLP) DO 2 I=1,3 2 VECT(I)=VECT(I)*RLP RETURN END