C TRJMA2    SOURCE    PV        08/09/11    21:17:12     6150
      SUBROUTINE TRJMA2(XARI,XDEP,UELEM,DTINT,
     *                  IDIM,ICONT,ITYEL,IART,INOEU)
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C     CALCUL DES TRAJECTOIRES ET
C     INTERSECTION TRAJECTOIRE-ELEMENT ( calcul analytique pour une
C     formulation EFMH)
C
C   ENTREES
C     XDEP POSITION INITIALE
C     UELEM FLUX AUX FACES
C     IDIM DIMENSION DE L ESPACE
C     ITYEL TYPE DE L ELEMENT
C
C   SORTIES
C     XARI POSITION A L INTERSECTION
C     DTINT TEMPS ECOULE JUSQU A LA SORTIE
C     ICONT NUMERO DE LA PORTE DE SORTIE
C     IART   DIFFERENT DE 0 ON EST SORTI DE L ELEMENT 3D PAR UNE ARETE
C     INOEU   DIFFERENT DE 0 ON EST SORTI DE L ELEMENT NOEUD
C
C   TYPES D ELEMENTS CONSIDERES
C         TRI3  QUA4  CUB8 PRI6 TET
C         4     8     14   16    23
C
C         Auteur Patrick Meyniel
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
      LOGICAL TEST
C
      DIMENSION IJ(2),ZI(2),IFAT3(3),YI(3)
      DIMENSION IFAQ4(4),IJKL(3,3),IJT4(2,3),IFAT4(4),IFAC6(4),IFAC8(6)
      DIMENSION XARI(3),XDEP(3),UELEM(6),X(3),Y(3)
C
      TEST(DTINT,DTI)=(DTINT*DTI*(DTINT-DTI).GE.0.D0)
      DATA IJKL/1,2,3,2,1,3,3,2,1/
      DATA IJ /2,1/
      DATA IJT4 /2,3, 1,3, 1,2/
      DATA IFAT3 /3,1,2/
      DATA IFAQ4 /1,3,4,2/
      DATA IFAC6 /6,4,1,2/
      DATA IFAC8 /6,4,3,5,1,2/
      DATA IFAT4 /4,1,2,3/
      DATA YI/5.D-1,5.D-1,-1.D0/
      DATA ZI/-1.D0,1.D0/

C
      ICONT=0
      IART=0
      INOEU=0
      ITEST=0
      EPS=1.D-14
      DTINT=1.D30
      DO 50 I=1,IDIM
      XARI(I)=XDEP(I)
   50 CONTINUE

C
C***  TRIANGLES TRI3                       *
C                                          * *
C                               FACES    3 *  * 2
C                                          *   *
C                                          ******
C                                            1
       IF(ITYEL.EQ.4)THEN
         IDIM=2
C
C             A PARTIR DES FLUX ON RECHERCHE LE POINT DE SORTIE DE
C             LA TRAJECTOIRE DANS L'ELEMENT
C
C             ON TESTE L'INTERSECTION AVEC LA FACE 2 ET TOUTES LES
C                        FACES AYANT UN FLUX POSITIF
C  FACE 2
C
                IF(UELEM(2).GT.0.D0)THEN
                   DTINT=(XDEP(2)+XDEP(1)-1)/(UELEM(1)+UELEM(3))
                   XARI(1)=XDEP(1)-(UELEM(3)*DTINT)
                   XARI(2)=XDEP(2)-(UELEM(1)*DTINT)
                   ICONT=2
                ENDIF
C
C  FACE 1 ET 3
C
                DO 1 I=1,IDIM
C
                   IF(UELEM(IFAT3(I)).GT.0.D0)THEN
                      DTI=XDEP(I)/UELEM(IFAT3(I))
C
C      ON NE GARDE QUE LE PLUS PETIT TEMPS POSITIF
C
                      IF(TEST(DTINT,DTI))THEN
                         DTINT=DTI
C       ON GARDE LES COORD DU POINT ET LA FACE DE SORTIE
C       CORRESPONDANTS AU TEMPS LE PLUS PETIT
                         XARI(IJ(I))=XDEP(IJ(I))-(UELEM(IFAT3(IJ(I)))
     *                        *DTINT)
                         XARI(I)=0.D0
                         ICONT=IFAT3(I)
                      ENDIF
                   ENDIF
 1              CONTINUE
C
C        ON CHERCHE SI ON A AFFAIRE A UN NOEUD DU MAILLAGE
C

             DO 30 I=1,IDIM
             IF(ABS(XARI(I)).LT.EPS)ITEST=ITEST+1
             IF(ABS(1.D0-XARI(I)).LT.EPS)ITEST=ITEST+1
   30        CONTINUE
C
C
C
C***  QUADRANGLE       QUA4 QUA9             3
C                                           *****
C                                           *   *
C                                 FACES  4  *   * 2
C                                           *****
C                                             1
       ELSEIF(ITYEL.EQ.8)THEN
       IDIM=2
        Q=MAX(ABS(UELEM(1)),ABS(UELEM(2)),ABS(UELEM(3)),ABS(UELEM(4)))
C        SI LES FLUX OPPOSES NE SE COMPENSENT PAS
C
        X(1)=UELEM(3)+UELEM(1)
        X(2)=UELEM(2)+UELEM(4)
        Y(1)=UELEM(3)-UELEM(1)
        Y(2)=UELEM(2)-UELEM(4)
C
        IF(ABS(X(1))/Q.GT.1D-10)THEN
C             ON TESTE TOUTES LES FACES DE SORTIE QUI ONT UN FLUX POSITIF

          DO 2 I=1,IDIM
             DO 3 I1=1,IDIM
                IF(UELEM(IFAQ4(2*I+I1-2)).GT.0.D0)THEN
                   VAR1=ZI(I1)+(Y(I)/X(I))
                   VAR2=XDEP(IJ(I))+(Y(I)/X(I))
C       ON ELIMINE LES CAS OÙ LE LOG EST NEG OU NON DEFINI
                   IF((VAR1/VAR2).LE.0.D0)GOTO 7
                   DTI=(4.D0/X(I))*LOG(VAR1/VAR2)
                   IF(ABS(LOG(VAR1/VAR2)).LT.1.D-15)DTI=0.D0
C             ON GARDE LE PLUS PETIT PAS DE TEMPS
                   IF(TEST(DTINT,DTI))THEN
                      DTINT=DTI
                      I2=I
                      I3=I1
                   ENDIF
                ENDIF
 7              CONTINUE
 3           CONTINUE
 2        CONTINUE
C
C        ON EXHIBE LES COORDONNEES CORRESPONDANT AU PLUS PETIT TEMPS
          XARI(I2)=(XDEP(I2)*EXP(25.D-2*X(IJ(I2))*DTINT))-
     *         ((Y(IJ(I2))/X(IJ(I2)))*(1.-EXP(25.D-2*X(IJ(I2))*DTINT)))
C
C         SINON (LES FLUX OPPOSES SE COMPENSENT)
C
       ELSE
C
C
C           ON TESTE TOUTES LES FACES AYANT UN FLUX POSITIF
C
          DO 4 I=1,IDIM
             DO 5 I1=1,IDIM
                IF(UELEM(IFAQ4(2*I+I1-2)).GT.0.D0)THEN
C
                   DTI=(ZI(I1)-XDEP(IJ(I)))/(25.D-2*Y(I))
C           ON GARDE LE PLUS PETIT TEMPS POSITIF
                   IF(TEST(DTINT,DTI))THEN
                      DTINT=DTI
                      I2=I
                      I3=I1
                   ENDIF
                ENDIF
 5           CONTINUE
 4        CONTINUE
C
C     ON GARDE LES COORDONNEES CORRESPONDANT AU PLUS PETIT TEMPS
          XARI(I2)=XDEP(I2)+25.D-2*Y(IJ(I2))*DTINT
       ENDIF
       XARI(IJ(I2))=ZI(I3)
C     ON EXHIBE LE NUMERO DE LA FACE DE SORTIE
       ICONT=IFAQ4((2*I2)+I3-2)
C
C        ON CHERCHE SI ON A AFFAIRE    A UN NOEUD DU MAILLAGE

       DO 35 I=1,IDIM
          IF(ABS(1.D0-XARI(I)).LT.EPS)ITEST=ITEST+1
          IF(ABS(1.D0+XARI(I)).LT.EPS)ITEST=ITEST+1
 35    CONTINUE
C
C
C***   CUBE      CUB8
      ELSEIF(ITYEL.EQ.14)THEN
         IDIM=3
         Q=MAX(ABS(UELEM(1)),ABS(UELEM(2)),ABS(UELEM(3)),
     *        ABS(UELEM(4)),ABS(UELEM(5)),ABS(UELEM(6)))
        X(1)=125.D-3*(UELEM(4)+UELEM(6))
        X(2)=125.D-3*(UELEM(3)+UELEM(5))
        X(3)=125.D-3*(UELEM(2)+UELEM(1))
C
        Y(1)=125.D-3*(UELEM(6)-UELEM(4))
        Y(2)=125.D-3*(UELEM(3)-UELEM(5))
        Y(3)=125.D-3*(UELEM(1)-UELEM(2))
C
C    SI LES FLUX NE SECOMPENSENT PAS DEUX A DEUX
C
        IF(ABS(X(1))/Q.GT.1.D-11)THEN
           IF(ABS(X(2))/Q.GT.1.D-11)THEN
               IF(ABS(X(3))/Q.GT.1.D-11)THEN
C
C             ON TESTE TOUTES LES FACES DE SORTIE
C
                  DO 17 I=1,IDIM
                     DO 18 I1=1,2
C             ON TESTE TOUTES LES FACES QUI ONT UN FLUX POSITIF
                        IF(UELEM(IFAC8(2*I+I1-2)).GT.0.D0)THEN
                           VAR1=ZI(I1)-(Y(I)/X(I))
                           VAR2=XDEP(I)-(Y(I)/X(I))
C             ON ELIMINE LES CAS OÙ LE LOG EST NEG OU NON DEFINI
                           IF((VAR1/VAR2).LE.0.D0)GOTO 6
                           DTI=(1.D0/X(I))*LOG(VAR1/VAR2)
                           IF(ABS(LOG(VAR1/VAR2)).LT.1.D-15)DTI=0.D0
C             ON GARDE LE PLUS PETIT TEMPS POSITIF
                           IF(TEST(DTINT,DTI))THEN
                              DTINT=DTI
                              I2=I
                              I3=I1
                              I4=IJT4(1,I)
                              I5=IJT4(2,I)
                           ENDIF
                        ENDIF
 6                      CONTINUE
 18                 CONTINUE
 17               CONTINUE
C    ON GARDE LES COORDONNEES CORRESPONDANT AU TEMPS LE PLUS PETIT
                  XARI(I2)=ZI(I3)
                  XARI(I4)=(XDEP(I4)*EXP(X(I4)*DTINT))+
     *                 ((Y(I4)/X(I4))*(1-EXP(X(I4)*DTINT)))
                  XARI(I5)=(XDEP(I5)*EXP(X(I5)*DTINT))+
     *                 ((Y(I5)/X(I5))*(1-EXP(X(I5)*DTINT)))
                  ICONT=IFAC8((2*I2)+I3-2)

               ELSE
C      ON TESTE TOUTES LES FACES MAIS L'EQUATION SUIVANT Z DIFFERE
C                                (Q1+Q2=O)
                  DO 21 I=1,2
                     DO 19 I1=1,2
                        IF(UELEM(IFAC8(2*I+I1-2)).GT.0.D0)THEN
                           VAR1=ZI(I1)-(Y(I)/X(I))
                           VAR2=XDEP(I)-(Y(I)/X(I))
C              ON ELIMINE LES CAS OÙ LE LOG EST NEG OU NON DEFINI
                      IF((VAR1/VAR2).LE.0.D0)GOTO 9
                           DTI=(1.D0/X(I))*LOG(VAR1/VAR2)
                           IF(ABS(LOG(VAR1/VAR2)).LT.1.D-15)DTI=0.D0
c              ON GARDE LE PLUS PETIT TEMPS POSITIF
                           IF(TEST(DTINT,DTI))THEN
                              DTINT=DTI
                              I2=I
                              I3=I1
                              I4=IJT4(1,I)
                           ENDIF
                        ENDIF
 9                      CONTINUE
 19                  CONTINUE
 21               CONTINUE
C           ON GARDE LES COORDONNEES ET LA FACE CORRESPONDANT AU TEMPS
                  XARI(I2)=ZI(I3)
                  XARI(I4)=(XDEP(I4)*EXP(X(I4)*DTINT))+
     *                 ((Y(I4)/X(I4))*(1-EXP(X(I4)*DTINT)))
                  XARI(3)=XDEP(3)-(Y(3)*DTINT)
                  ICONT=IFAC8((2*I2)+I3-2)
C          ON TESTE MAINTENANT LES FACES  Z=1 ET Z=-1
                  IF(UELEM(2).GT.0.D0)THEN
                     DTI=(XDEP(3)-1.D0)/Y(3)
                     INT=2
                  ELSE
                     DTI=(XDEP(3)+1.D0)/Y(3)
                     INT=1
                  ENDIF
C                    ON TESTE LE TEMPS
                  IF(TEST(DTINT,DTI))THEN
                     DTINT=DTI
                     XARI(1)=(XDEP(1)*EXP(X(1)*DTINT))+
     *                    ((Y(1)/X(1))*(1-EXP(X(1)*DTINT)))
                     XARI(2)=(XDEP(2)*EXP(X(2)*DTINT))+
     *                    ((Y(2)/X(2))*(1-EXP(X(2)*DTINT)))
                     XARI(3)=ZI(INT)
                     ICONT=INT
                  ENDIF
               ENDIF
           ELSE
C
C   ON A OBLIGATOIREMENT Q1+Q2 NON NUL DONC ON PEUT RAISONNER
C                          COMME PRECEDEMMENT
C     ON TESTE TOUTES LES FACES MAIS L'EQUATION SUIVANT Y DIFFERE
C                         (Q3+Q5=0)
              DO 23 I=1,2
                 DO 22 I1=1,2
C
                    IF(UELEM(IFAC6(2*I+I1-2)).GT.0.D0)THEN
                       VAR1=ZI(I1)-(Y(I)/X(I))
                       VAR2=XDEP(I)-(Y(I)/X(I))
C
                      IF((VAR1/VAR2).LE.0.D0)GOTO 11
                      DTI=(1.D0/X(I))*LOG(VAR1/VAR2)
C
                      IF(ABS(LOG(VAR1/VAR2)).LT.1.D-15)DTI=0.D0
C
                      IF(TEST(DTINT,DTI))THEN
                         DTINT=DTI
                         I2=IFAQ4(I)
                         I3=I1
                         I4=IFAT3(I)
                      ENDIF
                   ENDIF
 11                CONTINUE
 22             CONTINUE
 23          CONTINUE
              XARI(I2)=ZI(I3)
              XARI(I4)=(XDEP(I4)*EXP(X(I4)*DTINT))+
     *             ((Y(I4)/X(I4))*(1-EXP(X(I4)*DTINT)))
              XARI(2)=XDEP(2)-(Y(2)*DTINT)
              ICONT=IFAC6((2*I2)+I3-2)
C
C           ON TESTE MAINTENANT LES FACES Y=1 ET Y=-1
C
              IF(UELEM(5).GT.0.D0)THEN
                 DTI=(XDEP(2)-1.D0)/Y(2)
                 INT=5
              ELSE
                 DTI=(XDEP(2)+1.D0)/Y(2)
                 INT=3
              ENDIF
              IF(TEST(DTINT,DTI))THEN
                 DTINT=DTI
                 XARI(1)=(XDEP(1)*EXP(X(1)*DTINT))+
     *                ((Y(1)/X(1))*(1-EXP(X(1)*DTINT)))
                 XARI(3)=(XDEP(3)*EXP(X(3)*DTINT))+
     *                ((Y(3)/X(3))*(1-EXP(X(3)*DTINT)))
                 XARI(2)=INT-4
                 ICONT=INT
              ENDIF
           ENDIF
C
        ELSE
C        ON TESTE TOUTE LES FACES MAIS L'EQUATION DE X DIFFERE
C                   (Q4+Q6 =0)
           IF(ABS(X(2))/Q.GT.1.D-11)THEN
              DO 24 I=2,3
                 DO 25 I1=1,2
C
                    IF(UELEM(IFAC8(2*I+I1-2)).GT.0.D0)THEN
C
                       VAR1=ZI(I1)-(Y(I)/X(I))
                       VAR2=XDEP(I)-(Y(I)/X(I))
C
                      IF((VAR1/VAR2).LE.0.D0)GOTO 13
C
                       DTI=(1.D0/X(I))*LOG(VAR1/VAR2)
                       IF(ABS(LOG(VAR1/VAR2)).LT.1.D-15)DTI=0.D0
C
                       IF(TEST(DTINT,DTI))THEN
                          DTINT=DTI
                          I2=I
                          I3=I1
                          I4=IJT4(2,I)
                       ENDIF
                    ENDIF
 13                 CONTINUE
 25              CONTINUE
 24           CONTINUE
              XARI(I2)=ZI(I3)
              XARI(I4)=(XDEP(I4)*EXP(X(I4)*DTINT))+
     *             ((Y(I4)/X(I4))*(1-EXP(X(I4)*DTINT)))
              XARI(1)=XDEP(1)-(Y(1)*DTINT)
              ICONT=IFAC8((2*I2)+I3-2)
C          ON TESTE MAINTENANT LES FACES X=1 ET X=-1
              IF(UELEM(6).GT.0.D0)THEN
                 DTI=(XDEP(1)+1.D0)/Y(1)
                 INT=6
              ELSE
                 DTI=(XDEP(1)-1.D0)/Y(1)
                 INT=4
              ENDIF
              IF(TEST(DTINT,DTI))THEN
                 DTINT=DTI
                 XARI(3)=(XDEP(3)*EXP(X(3)*DTINT))+
     *                ((Y(3)/X(3))*(1-EXP(X(3)*DTINT)))
                 XARI(2)=(XDEP(2)*EXP(X(2)*DTINT))+
     *                ((Y(2)/X(2))*(1-EXP(X(2)*DTINT)))
                 XARI(1)=ZI(INT-5)
                 ICONT=INT
              ENDIF
           ELSE
C
C            Q3+Q5  NEGLIGEABLE (DONC Q1+Q2  NEG)
C                     ON CALCULE POUR TOUTES LES FACES
              DO 31 I=1,3
                 DO 32 I1=1,2
                    IF(UELEM(IFAC8(2*I+I1-2)).GT.0.D0)THEN
C
                       DTI=(XDEP(I)-ZI(I1))/Y(I)
C
                       IF(TEST(DTINT,DTI))THEN
                          DTINT=DTI
                          I2=I
                          I3=I1
                          I4=IJT4(1,I)
                          I5=IJT4(2,I)
                       ENDIF
                    ENDIF
 32              CONTINUE
 31           CONTINUE
              XARI(I2)=ZI(I3)
              XARI(I4)=XDEP(I4)-(Y(I4)*DTINT)
              XARI(I5)=XDEP(I5)-(Y(I5)*DTINT)
              ICONT=IFAC8((2*I2)+I3-2)
           ENDIF
        ENDIF
C
C        ON CHERCHE SI ON A AFFAIRE A UN NOEUD DU MAILLAGE
C
        DO 45 I=1,IDIM
           IF(ABS(1.D0+XARI(I)).LT.EPS)ITEST=ITEST+1
           IF(ABS(1.D0-XARI(I)).LT.EPS)ITEST=ITEST+1
 45     CONTINUE
CC
CC
CC***  PRISME    PRI6
CC
      ELSEIF(ITYEL.EQ.16)THEN
         IDIM=3
         Q=MAX(ABS(UELEM(1)),ABS(UELEM(2)),ABS(UELEM(3)),
     *        ABS(UELEM(4)),ABS(UELEM(5)))
         VAR=(UELEM(3)+UELEM(4)+UELEM(5))/2.D0
         X(1)=UELEM(5)/2.D0
         X(2)=UELEM(3)/2.D0
         X(3)=(UELEM(2)-UELEM(1))/2.D0
C
         IF(ABS(VAR)/Q.GT.1.D-10)THEN
C     ON TESTE TOUTES LES FACES QUI ONT UN FLUX POSITIF
C          ET ON GARDE LE PLUS PETIT TEMPS POSITIF
C          ON TESTE LES FACES TRIANGULAIRES: FACE 4
            IF(UELEM(4).GT.0.D0)THEN
               A1=((1.D0-((X(1)+X(2))/VAR)))
               A2=(XDEP(1)+XDEP(2)-((X(1)+X(2))/VAR))
               IF (A1/A2.LE.0.D0)GOTO 15
               DTINT=(1.D0/VAR)*LOG(A1/A2)
                  XARI(2)=(XDEP(2)*EXP(VAR*DTINT))+((X(1)/VAR)*
     *                 (1.D0-EXP(VAR*DTINT)))
                  XARI(3)=(XDEP(3)*EXP(-1.D0*VAR*DTINT))+((X(3)/VAR)*
     *                 (1.D0-EXP(-1.D0*VAR*DTINT)))
               XARI(1)=1.D0-XARI(2)
               ICONT=4
 15            CONTINUE
            ENDIF
C
            DO 8 I=1,IDIM-1
C                        FACE 3 ET FACE 5
               IF(X(I).GT.0.D0)THEN
                 A3=(-1.D0*X(I)/VAR)
                  A4=(XDEP(I)-(X(I)/VAR))
                  IF(A3/A4.LE.0.D0)GOTO 16
                  DTI=(1.D0/VAR)*LOG(A3/A4)
C
C              ON NE GARDE QUE LE PLUS PETIT TEMPS POSITIF
C
                  IF(TEST(DTINT,DTI))THEN
                     DTINT=DTI
                     XARI(IJ(I))=(XDEP(IJ(I))*EXP(VAR*DTINT))+
     *                    ((X(IJ(I))/VAR)*(1.D0-EXP(VAR*DTINT)))
                     XARI(3)=(XDEP(3)*EXP(VAR*DTINT))+
     *                    ((X(3)/VAR)*(1.D0-EXP(-1.D0*VAR*DTINT)))
                     XARI(I)=0.D0
                     ICONT=IFAT3(I)+2
                  ENDIF
 16               CONTINUE
               ENDIF
C              ON TESTE LES FACES OPPOSEES
               IF(UELEM(I).GT.0.D0)THEN
                  A5=(ZI(I)-(X(3)/VAR))
                  A6=(XDEP(3)-(X(3)/VAR))
                   IF(A5/A6.LE.0.D0)GOTO 26
                   DTI=(-5.D-1/VAR)*LOG(A5/A6)
C
C              ON NE GARDE QUE LE PLUS PETIT TEMPS POSITIF
C
                  IF(TEST(DTINT,DTI))THEN
                     DTINT=DTI
                     XARI(I)=(XDEP(I)*EXP(VAR*DTINT))+
     *                    ((X(I)/VAR)*(1.D0-EXP(VAR*DTINT)))
                     XARI(IJ(I))=(XDEP(IJ(I))*EXP(VAR*DTINT))+
     *                  ((X(IJ(I))/VAR)*(1.D0-EXP(VAR*DTINT)))
                     XARI(3)=ZI(I)
                     ICONT=I
                  ENDIF
 26                CONTINUE
                ENDIF
 8          CONTINUE
C
         ELSE
C
C      Q3 NON NEGLIGEABLE ON VA TESTER LES FACES TRIANGULAIRES
C                 FACE 4
            IF(UELEM(4).GT.0.D0)THEN
               DTINT=(2.D0/UELEM(4))*(1.D0-XDEP(1)-XDEP(2))
               XARI(2)=XDEP(2)-(X(2)*DTINT)
               XARI(1)=1.D0-XARI(2)
               ICONT=4
            ENDIF
C
            DO 12 I=1,IDIM-1
               IF(X(I).GT.0.D0)THEN
                  DTI=XDEP(I)/X(I)
C      ON NE GARDE QUE LE PLUS PETIT TEMPS POSITIF
                  IF(TEST(DTINT,DTI))THEN
                     DTINT=DTI
                     XARI(IJ(I))=XDEP(IJ(I))-(X(IJ(I))*DTINT)
                     XARI(I)=0.D0
                     ICONT=IFAT3(I)+2
                  ENDIF
               ENDIF
 12         CONTINUE
            XARI(3)=XDEP(3)+(2.D0*X(3)*DTINT)
C
C   SI Q1 NON NEGLIGEABLE  ON TESTE  LES FACES OPPOSEES A FLUX POSITIF
            IF(UELEM(1).GT.0.D0)THEN
               DTI=(-1.D0-XDEP(3))/(2.D0*X(3))
               IND=1
            ELSE
               DTI=(1.D0-XDEP(3))/(2.D0*X(3))
               IND=2
            ENDIF
            IF(TEST(DTINT,DTI))THEN
               DTINT=DTI
               DO 14 I1=1,IDIM-1
                  XARI(I1)=XDEP(I1)-(X(I1)*DTINT)
 14            CONTINUE
               XARI(3)=ZI(IND)
               ICONT=IND
            ENDIF
         ENDIF
C
C        ON CHERCHE SI ON A AFFAIRE    A UN NOEUD DU MAILLAGE
C
         IF((ABS(XARI(3)-1.D0).LT.EPS).OR.
     *                 (ABS(XARI(3)+1.D0).LT.EPS))ITEST=ITEST+1
         DO 41 I=1,2
            IF(ABS(XARI(I)).LT.EPS)ITEST=ITEST+1
            IF(ABS(1.D0-XARI(I)).LT.EPS)ITEST=ITEST+1
 41       CONTINUE
C
C
C ******************            TETRAEDRE
C *               FACE 1 Y=0
C *               FACE 2 Z=0
C *               FACE 4 X=0
C *               FACE 3 1-X-Y-Z=0
      ELSEIF(ITYEL.EQ.23)THEN
         IDIM=3
C***  FACES 1  2 ET 4
C
C**                 ON TESTE L'INTERSECTION AVEC LA FACE 3 ET TOUTES LES
C                        FACES AYANT UN FLUX POSITIF
C
         IF(UELEM(3).GT.0.D0)THEN
            DTINT=(1-XDEP(3)-XDEP(2)-XDEP(1))/(2.D0*UELEM(3))
            DO 56  I=1,IDIM
               XARI(I)=XDEP(I)-(2.D0*UELEM(IFAT4(I))*DTINT)
 56         CONTINUE
            ICONT=3
         ENDIF
C
         DO 55 I=1,IDIM
C
            IF(UELEM(IFAT4(I)).GT.0.D0)THEN
               DTI=XDEP(I)/(2.D0*UELEM(IFAT4(I)))
C
C              ON NE GARDE QUE LE PLUS PETIT TEMPS POSITIF
C
               IF(TEST(DTINT,DTI))THEN
                  DTINT=DTI
                  I2=IJT4(1,I)
                  I3=IJT4(2,I)
C       ON GARDE LES COORDONNES CORRESPONDANT AUPLUS PETIT TEMPS
                  XARI(I2)=XDEP(I2)-(2.D0*UELEM(IFAT4(I2))*DTINT)
                  XARI(I3)=XDEP(I3)-(2.D0*UELEM(IFAT4(I3))*DTINT)
                  XARI(I)=0.D0
                  ICONT=IFAT4(I)
               ENDIF
            ENDIF
 55      CONTINUE
C

C         ON CHERCHE LE NUMERO DU NOEUD OU DE L'ARETE
C
         DO 51 I=1,IDIM
            IF(ABS(XARI(I)).LT.EPS)ITEST=ITEST+1
            IF(ABS(1.D0-XARI(I)).LT.EPS)ITEST=ITEST+1

 51      CONTINUE
      ENDIF
C
C              TRAITEMENT DES CAS PARTICULIERS (NOEUDS/ARETES)
C

C      SI LE POINT DE SORTIE EST UN NOEUD
      IF(ITEST.EQ.IDIM)THEN
         CALL NUMNOE(XARI,ITYEL,INOEU)
      ELSE
C       SINON ON VERIFIE EN 3D QU'ON TOMBE PAS SUR UNE ARETE
         IF(IDIM.EQ.3)THEN
            CALL ARTREF(XARI,ITYEL,IART)
         ENDIF
      ENDIF
      END





