C RTENS5    SOURCE    CHAT      05/01/13    03:09:00     5004
      SUBROUTINE RTENS5(IMOT,ICAS,IGAU,NDIM,V1,CENTR1,CENTR2,BPSS,
     &                  SHPTOT,XEL,NBNN,NBPGAU,R,SIGFLX,IER1)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
*-----------------------------------------------------------------------*
*     Matrice de passage entre le repere local d'une coque en un point  *
*     d'integration et le repere obtenu par projection des axes d'un    *
*     repere global (spherique, cylindrique ou torique) sur cette coque *
*                                                                       *
*     IMOT    (e)    type du repere choisi                              *
*                    = 2 : repere cylindrique                           *
*                    = 3 : repere spherique                             *
*                    = 4 : repere torique circulaire                    *
*                    = 5 : repere torique cartesien                     *
*     ICAS    (e)    identification du module appelant                  *
*                    = 2 : module coques minces                         *
*                    = 3 : module coques epaisses                       *
*                    = 4 : module coques avec cisaillement transverse   *
*     IGAU    (e)    numero du point d'integration concerne             *
*     NDIM    (e)    dimension du probleme                              *
*     V1      (e)    |                                                  *
*     CENTR1  (e)    | points servant a la definition du repere         *
*     CENTR2  (e)    |                                                  *
*     BPSS    (e)    matrice de passage repere local / global           *
*     SHPTOT  (e)    fonctions de forme de l'element-fini               *
*     XEL     (e)    coordonnees des noeuds de l'element-fini           *
*     NBNN    (e)    nombre de noeuds dans un element                   *
*     NBPGAU  (e)    nombre de points d'integration dans un element     *
*     R       (s)    matrice de passage resultat                        *
*     SIGFLX  (s)                                                       *
*     IER1    (s)    code d'erreur                                      *
*                    = 1 : vecteur pas dans le plan de la coque         *
*                    = 2 : vecteur radial nul                           *
*                                                                       *
*     D.R.-M. le 1/4/94                                                 *
*-----------------------------------------------------------------------*
*
      DIMENSION BPSS(3,3),VECWRK(3),V1(3),UV1(3),UV2(3),UV3(3)
      DIMENSION XEL(3,NBNN),SHPTOT(6,NBNN,NBPGAU),R(NDIM,NDIM)
      DIMENSION CENTR1(3),CENTR2(3),AXEI1(3),VECX(3),VECY(3)
      DIMENSION UR(3),UTHETA(3),UPHI(3),UN(3),UT(3),XIGAU(3)
      DIMENSION BPST(3,3),A(3,3)
*
      PARAMETER (COS1D = 0.99985D0)
      PARAMETER (SIN1D = 0.01745D0)
*
      IER1 = 0
*
      DO 1100 IC=1,3
         XIGAU(IC)  = 0.D0
         UTHETA(IC) = 0.D0
         UPHI(IC)   = 0.D0
         UT(IC)     = 0.D0
         VECX(IC)   = 0.D0
         VECY(IC)   = 0.D0
         DO 1100 IL=1,NBNN
            XIGAU(IC)=XIGAU(IC)+(SHPTOT(1,IL,IGAU)*XEL(IC,IL))
 1100 CONTINUE
      DO 1110 IC=1,3
         UR(IC) = XIGAU(IC) - CENTR1(IC)
         UN(IC) = UR(IC)
 1110 CONTINUE
      SCAL = 0.D0
      DO 1120 IC=1,3
         SCAL = SCAL + UR(IC) * V1(IC)
 1120 CONTINUE
      DO 1130 IC=1,3
         UR(IC) = UR(IC) - SCAL * V1(IC)
 1130 CONTINUE
      SCAL = 0.D0
      DO 1140 IC=1,3
         SCAL = SCAL + UR(IC) ** 2
 1140 CONTINUE
      IF (SCAL.EQ.0.D0) THEN
         IER1 = 2
         RETURN
      ELSE
         CALL NORMER(UR)
         CALL NORMER(UN)
         CALL PROVEC(V1,UR,UTHETA)
      ENDIF
*
*     On projette les deux vecteurs formant un plan proche de
*     celui de la coque
*
      IF ((IMOT.EQ.2).OR.(IMOT.EQ.5)) THEN
*
*        >>> Repere CYLINDRIQUE       : plan UTHETA V1 <<<
*        >>> Repere TORIQUE CARTESIEN : plan UTHETA V1 <<<
*
         DO 20 II = 1,3
            UV1(II)=UTHETA(II)
            UV2(II)=V1(II)
 20      CONTINUE
      ENDIF
*
      IF (IMOT.EQ.3) THEN
*
*        >>> Repere SPHERIQUE : plan  UTHETA UPHI <<<
*
         UR(1) = UN(1)
         UR(2) = UN(2)
         UR(3) = UN(3)
         UPHI(1) = UTHETA(1)
         UPHI(2) = UTHETA(2)
         UPHI(3) = UTHETA(3)
         CALL PROVEC(UPHI,UR,UTHETA)
         DO 30 II = 1,3
            UV1(II)=UTHETA(II)
            UV2(II)=UPHI(II)
 30      CONTINUE
      ENDIF
*
      IF (IMOT.EQ.4) THEN
*
*        >>> Repere TORIQUE CIRCULAIRE : plan UTHETA UT <<<
*
         VECWRK(1) = CENTR2(1) - CENTR1(1)
         VECWRK(2) = CENTR2(2) - CENTR1(2)
         VECWRK(3) = CENTR2(2) - CENTR1(3)
         CALL NORME(VECWRK,SCAL)
         UN(1) = UN(1) - SCAL * UR(1)
         UN(2) = UN(2) - SCAL * UR(2)
         UN(3) = UN(3) - SCAL * UR(3)
         CALL NORMER(UN)
         CALL PROVEC(UN,UTHETA,UT)
         DO 40 II = 1,3
            UV1(II)=UTHETA(II)
            UV2(II)=UT(II)
 40      CONTINUE
      ENDIF
*
*     Projection selon BPSS
*
*     Projection du premier vecteur sur la coque
*
      UV11=BPSS(1,1)*UV1(1)+BPSS(1,2)*UV1(2)+BPSS(1,3)*UV1(3)
      UV12=BPSS(2,1)*UV1(1)+BPSS(2,2)*UV1(2)+BPSS(2,3)*UV1(3)
      UV1N=SQRT(UV11**2+UV12**2)
*
      IF (UV1N.EQ.0.D0) THEN
         IER1 = 1
         RETURN
      ENDIF
*
*     Projection du second vecteur sur la coque
*
      UV21=BPSS(1,1)*UV2(1)+BPSS(1,2)*UV2(2)+BPSS(1,3)*UV2(3)
      UV22=BPSS(2,1)*UV2(1)+BPSS(2,2)*UV2(2)+BPSS(2,3)*UV2(3)
      UV2N=SQRT(UV21**2+UV22**2)
*
* si l'axe de revolution est normal à l'element on choisit le repere
* utheta  (-ur).Le troisieme axe est celui defini par l'utilisateur
      IF ( UV2N.LT.1D-15) THEN
         DO 50 II = 1,3
            UV2(II)= -UR(II)
 50      CONTINUE

*
*     Projection du second vecteur sur la coque
*
      UV21=BPSS(1,1)*UV2(1)+BPSS(1,2)*UV2(2)+BPSS(1,3)*UV2(3)
      UV22=BPSS(2,1)*UV2(1)+BPSS(2,2)*UV2(2)+BPSS(2,3)*UV2(3)
      UV2N=SQRT(UV21**2+UV22**2)

      ENDIF
*
*     Vecteur normal a la coque
*
      WL33=(UV11*UV22-UV12*UV21)/(UV1N*UV2N)
*
*     WL2 est rendu orthogonal a la projection de UV1
*
      WL21=(-WL33*UV12)/UV1N
      WL22=( WL33*UV11)/UV1N
*
      R(1,1) =  UV11 / UV1N
      R(2,1) =  UV12 / UV1N
      R(1,2) =  WL21
      R(2,2) =  WL22
      IF (ICAS.EQ.2) SIGFLX = WL33
      IF (ICAS.EQ.3) R(3,3) = WL33
      IF (ICAS.EQ.4) THEN
         R(3,3) = WL33
         SIGFLX = WL33
      ENDIF
*
      RETURN
      END


