C TUFEPS    SOURCE    CHAT      05/01/13    03:55:05     5004
      SUBROUTINE TUFEPS(XDDL,CAR,EPS,KERRE)
C----------------------------------------------------------------------
C     DEFORMATIONS POUR L ELEMENT TUYAU FISSURE
C
C ENTREES
C     XDDL(12)    = LES DDL AUX 2 NOEUDS
C     CAR(9)      = LES CARACTERISTIQUES
C                      CAR(1) = RAYON  EXTERIEUR DU TUYAU
C                      CAR(2) = EPAISSEUR DU TUYAU
C                      CAR(3),CAR(4),CAR(5)  AXE DU TUYAU
C                      CAR(6),CAR(7),CAR(8)  DIRECTION DE LA FISSU
C                      CAR(9)  = ANGLE DE LA FISSURE
C  TABLEAU DE TRAVAIL
C  SORTIES
C     EPS(8)     = DEFORMATIONS
C
C     KERRE = CODE D'ERREUR
C             0 SI PAS DE PROBLEME, SINON :
C             1 SI V2 EST NUL OU SI V1 ET V2 SONT COLINEAIRES
C             2 SI V1 EST NUL
C             3 SI TUYAU TROP EPAIS
C----------------------------------------------------------------------
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
C    Include contenant quelques constantes dont XPI :
-INC CCREEL
      PARAMETER(UN=1.D0,XEPS=1.D-10)
      DIMENSION CAR(*),EPS(*),XDDL(*)
      DIMENSION XDDLOC(12),V1(3),V2(3),BV1(3),BV2(3),BPSS(3,3)
      KERRE=0
C
      V1(1)=CAR(3)
      V1(2)=CAR(4)
      V1(3)=CAR(5)
      V2(1)=CAR(6)
      V2(2)=CAR(7)
      V2(3)=CAR(8)
C
C     NORMALISATION DES VECTEURS V1 ET V2.
C
      XNV1 = XZERO
      XNV2 = XZERO
      DO 5 I=1,3
         XNV1 = XNV1 + (V1(I)*V1(I))
         XNV2 = XNV2 + (V2(I)*V2(I))
 5    CONTINUE
      IF (XNV1.LT.XEPS) THEN
         KERRE = 2
         GOTO 666
      ENDIF
      IF (XNV2.LT.XEPS) THEN
         KERRE = 1
         GOTO 666
      ENDIF
      XNV1 = UN/SQRT(XNV1)
      XNV2 = UN/SQRT(XNV2)
      DO 10 I=1,3
         BV1(I) = V1(I)*XNV1
         BV2(I) = V2(I)*XNV2
 10   CONTINUE
C
C     ORTHOGONALISATION ET RENORMALISATION DE V2.
C
      PS = (BV1(1)*BV2(1))+(BV1(2)*BV2(2))+(BV1(3)*BV2(3))
C
C     TEST SUR LA COLINEARITE DE V1 ET V2.
C
      IF(ABS(PS).GE.(.99D0)) THEN
         KERRE = 1
         GOTO 666
      ELSE
         XNV2 = UN/SQRT(UN-(PS**2))
         DO 15 I=1,3
            BV2(I) = XNV2*(BV2(I)-(PS*BV1(I)))
 15      CONTINUE
      ENDIF
C
C     CALCUL DE LA MATRICE DE PASSAGE
C      LOCAL = BPSS * GLOBAL
C     V1 REPRESENTE L'AXE LOCAL DES Z
C     V2 REPRESENTE L'AXE LOCAL DES Y
C
      DO 20 I=1,3
         BPSS(1,I) =BV1(I)
         BPSS(2,I) =BV2(I)
 20   CONTINUE
      BPSS(3,1) = (BPSS(1,2)*BPSS(2,3))-(BPSS(1,3)*BPSS(2,2))
      BPSS(3,2) = (BPSS(1,3)*BPSS(2,1))-(BPSS(1,1)*BPSS(2,3))
      BPSS(3,3) = (BPSS(1,1)*BPSS(2,2))-(BPSS(1,2)*BPSS(2,1))
C
C     TRANSFORMATION DES DDL GLOBAUX EN DDL LOCAUX X AXE TUYAU
C                                                  Y POSITION FISSURE
C                                                  Z COMPLEMENT
      CALL MATVEC(XDDL,XDDLOC,BPSS,4)
C
      EPS(1)=XDDLOC(7)-XDDLOC(1)
      EPS(2)=XDDLOC(8 )-XDDLOC(2)
      EPS(3)=XDDLOC(9 )-XDDLOC(3)
      EPS(4)=XDDLOC(10)-XDDLOC(4)
      EPS(5)=XDDLOC(11)-XDDLOC(5)
      EPS(6)=XDDLOC(12)-XDDLOC(6)
      EPS(7)=0.D0
      EPS(8)=0.D0
C
 666  CONTINUE
      RETURN
      END





