C OTTOXF    SOURCE    CHAT      05/01/13    02:08:01     5004
      SUBROUTINE OTTOXF(SIG0,DSIGT,XINVL,XLTR,NFISSU,NVF,
     &                  XXF,PRECIZ,KERRE)
*
C==========================================================================
C
C  ENTREES :
C    SIG0,DSIGT,NFISSU,NVF,XLTR,XINVL
C
C  SORTIES :
C    XXF
C==========================================================================
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)

-INC PPARAM
-INC CCOPTIO
C
      PARAMETER (XZER=0.D0,UN=1.D0)
C
      DIMENSION SIG0(6),DSIGT(6),XLTR(3),XINVL(3)
*
      DIMENSION A3(3,3),B3(3,3),D3(3),XXF(3)
*
      DO IC=1,3
         XXF(IC)=1.D4
      ENDDO
C
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C            LES TROIS DIRECTIONS SONT DEJA FISSUREES
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C
      IF (NFISSU.EQ.3) THEN
         RETURN
      ENDIF
C
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C            DEUX DIRECTIONS SONT DEJA FISSUREES
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C
      IF (NFISSU.EQ.2) THEN
C
C        SEULE LA DIRECTION no IFIS N EST PAS FISSUREE
C
         IF ((XINVL(1)*XINVL(2)).NE.XZER) IFIS=3
         IF ((XINVL(1)*XINVL(3)).NE.XZER) IFIS=2
         IF ((XINVL(2)*XINVL(3)).NE.XZER) IFIS=1
*
         IF (DSIGT(IFIS).NE.XZER) THEN
            XXF(IFIS)=(XLTR(IFIS)-SIG0(IFIS))/DSIGT(IFIS)
         ENDIF
      ENDIF
C
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C            UNE DIRECTION EST DEJA FISSUREE
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C
      IF (NFISSU.EQ.1) THEN
C
C        SEULE LA DIRECTION no IFIS EST FISSUREE
C
         IF (XINVL(1).NE.XZER) IFIS=1
         IF (XINVL(2).NE.XZER) IFIS=2
         IF (XINVL(3).NE.XZER) IFIS=3
*
*         IF(IIMPI.EQ.42) THEN
*            WRITE(IOIMP,77004) IFIS
*77004       FORMAT( 2X, 'OTTOXF - IFIS =',I4/)
*         ENDIF
C
C    CAS 1 :
C       DEUX DIRECTIONS DE FAIBLESSE NON FISSUREE, UNE DIRECTION FISSUREE
C
C remarque : ce cas est identique a une direction de faiblesse
C            non fissuree et une direction de fissuration.
C
         IF (NVF.EQ.2.OR.NVF.EQ.1) THEN
C
C         direction 1 fissuree
C

            IF (IFIS.EQ.1) THEN
               IF (DSIGT(2).NE.XZER) THEN
                 XXF(2)=(XLTR(2)-SIG0(2))/DSIGT(2)
               ENDIF
               IF (DSIGT(3).NE.XZER) THEN
                 XXF(3)=(XLTR(3)-SIG0(3))/DSIGT(3)
               ENDIF
            ENDIF
C
C         direction 2 fissuree
C
            IF (IFIS.EQ.2) THEN
               IF (DSIGT(1).NE.XZER) THEN
                 XXF(1)=(XLTR(1)-SIG0(1))/DSIGT(1)
               ENDIF
               IF (DSIGT(3).NE.XZER) THEN
                 XXF(3)=(XLTR(3)-SIG0(3))/DSIGT(3)
               ENDIF
            ENDIF
C
C         direction 3 fissuree
C
C  remarque : ce cas est impossible s il n y a qu une direction imposee
C             et une direction de fissuration.
C
            IF (IFIS.EQ.3) THEN
               IF (DSIGT(1).NE.XZER) THEN
                 XXF(1)=(XLTR(1)-SIG0(1))/DSIGT(1)
               ENDIF
               IF (DSIGT(2).NE.XZER) THEN
                 XXF(2)=(XLTR(2)-SIG0(2))/DSIGT(2)
               ENDIF
            ENDIF
         ENDIF
C
C    CAS 2 :  PAS DE DIRECTION DE FAIBLESSE
C
C---------rq XLTR(2)=XLTR(3) puisque l on n a pas fissure---------
C-----------et qu il n y a pas de direction de faiblesse----------
C
         IF (NVF.EQ.0) THEN
C
            CALL ZERO(A3,3,3)
            CALL ZERO(B3,3,3)
            A3(1,1)=SIG0(2)-XLTR(2)
            A3(1,2)=SIG0(6)
            A3(2,1)=SIG0(6)
            A3(2,2)=SIG0(3)-XLTR(2)
*
            B3(1,1)=DSIGT(2)
            B3(1,2)=DSIGT(6)
            B3(2,1)=DSIGT(6)
            B3(2,2)=DSIGT(3)
            CALL OTTOB3(A3,B3,2,D3,KERRE)
            IF(KERRE.NE.0) RETURN
C
            XXF(2)=D3(1)
            XXF(3)=D3(2)
          ENDIF
          RETURN
      ENDIF
C
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C               AUCUNE DIRECTION DEJA FISSUREE
C- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
C
      IF (NFISSU.EQ.0) THEN
C
C    CAS 1 : DEUX OU TROIS DIRECTIONS DE FAIBLESSE
C

         IF (NVF.EQ.2.OR.NVF.EQ.3) THEN
            IF (DSIGT(1).NE.XZER) THEN
              XXF(1)=(XLTR(1)-SIG0(1))/DSIGT(1)
            ENDIF
            IF (DSIGT(2).NE.XZER) THEN
              XXF(2)=(XLTR(2)-SIG0(2))/DSIGT(2)
            ENDIF
            IF (DSIGT(3).NE.XZER) THEN
              XXF(3)=(XLTR(3)-SIG0(3))/DSIGT(3)
            ENDIF
         ENDIF
C
C    CAS 2 : UNE DIRECTION DE FAIBLESSE
C
         IF (NVF.EQ.1) THEN
            IF (DSIGT(1).NE.XZER) THEN
              XXF(1)=(XLTR(1)-SIG0(1))/DSIGT(1)
            ENDIF
C
            CALL ZERO(A3,3,3)
            CALL ZERO(B3,3,3)
*
            A3(1,1)=SIG0(2)-XLTR(2)
            A3(1,2)=SIG0(6)
            A3(2,1)=SIG0(6)
            A3(2,2)=SIG0(3)-XLTR(2)
*
            B3(1,1)=DSIGT(2)
            B3(1,2)=DSIGT(6)
            B3(2,1)=DSIGT(6)
            B3(2,2)=DSIGT(3)
*
            CALL OTTOB3(A3,B3,2,D3,KERRE)
            IF(KERRE.NE.0) RETURN
*
            XXF(2)=D3(1)
            XXF(3)=D3(2)
         ENDIF
C
C    CAS 3 : PAS DE DIRECTION DE FAIBLESSE
C
         IF (NVF.EQ.0) THEN
*
            A3(1,1)=SIG0(1)-XLTR(1)
            A3(1,2)=SIG0(4)
            A3(1,3)=SIG0(5)
            A3(2,1)=SIG0(4)
            A3(2,2)=SIG0(2)-XLTR(1)
            A3(2,3)=SIG0(6)
            A3(3,1)=SIG0(5)
            A3(3,2)=SIG0(6)
            A3(3,3)=SIG0(3)-XLTR(1)
*
            B3(1,1)=DSIGT(1)
            B3(1,2)=DSIGT(4)
            B3(1,3)=DSIGT(5)
            B3(2,1)=DSIGT(4)
            B3(2,2)=DSIGT(2)
            B3(2,3)=DSIGT(6)
            B3(3,1)=DSIGT(5)
            B3(3,2)=DSIGT(6)
            B3(3,3)=DSIGT(3)
*
            CALL OTTOB3(A3,B3,3,D3,KERRE)
            IF(KERRE.NE.0) RETURN
*
            XXF(1)=D3(1)
            XXF(2)=D3(2)
            XXF(3)=D3(3)

         ENDIF
      ENDIF

      RETURN
      END






