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

