C CHGELE    SOURCE    PV        09/03/12    21:17:02     6325
      SUBROUTINE CHGELE(EPSILO,NDIM,JREBO,XNREB
     $     ,TARI,XARI2,DTREEL,IVPT,MELEME,IFACEL,IZCENT
     $     ,IELTFA,IZVIT,IZUN,IEL1,TDEP,XDEP2,JFACE,ICHGZ,IZSH)

****************************************************************************
*** SP 'CHGELE' : permet de determiner le prochain élément traversé par la
*** particule, les donnees de sortie de la particule deviennent alors les
*** données d'entrée. 'CHGELE' traite le cas particulier de passage de la
*** particule aux noeuds ou aux aretes des elements traversés.
***
*** APPELES 1 = 'TRJIEL', 'TRJFAC'
*** APPELES 2 = 'EXCEPT'
***
*** E = 'EPSILO' marge relative acceptée position pt % element
***     'NDIM' dimension de l'espace
***     'JREBO' n° local face impermeable ou se trouve particule
***     'XNREB' vecteur normal à la face impermeable
***     'TARI' tps réel d'arrivée à l'interface de sortie
***     'XARI2' coords réelles d'arrivée à interface de sortie
***     'DTREEL' pas de tps reel de calcul
***     'IVPT' entier valant 1 en regime permanent
***     'MELEME' pteur sur le maillage du domaine etudié
***     'IFACEL' pteur sur la table " DOMAINE.FACEL"
***     'IZCENT' pteur sur la table "DOMAINE.CENTRE"
***     'IELTFA' pteur sur la table "DOMAINE.ELTFA"
***     'IZVIT' segment decrivant les vitesses (<- 'TRJVIT' OU 'TRJFLU')
***     'IZUN' segmt content flux aux faces % ss-maillage de 'IEL1'
***
*** E/S = 'IEL1' n° global de l'élément suivant contenant particule
***       'TDEP' tps réel écoulé jusqu' au pt de départ de l'élémt suivant
***       'XDEP2' coords réelles départ ds élémt suivant
***       'JFACE' n° local interface de l'element suivant
***       'ICHGZ' vaut 1 si saut précédent effectif et 0 sinon
***       'IZSH' segment content coord reelles noeuds, fcts forme et base
***
*** Rq : on considere que le vecteur aleatoire z est à retirer dans tous
***      les cas apres chgt d'element meme si le saut précédent n'est pas
***      effectif (diffusion compense convection, pas d'element voisin,...)
***
***             Auteur Cyril Nou
***************************************************************************


      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
-INC SMELEME
-INC SMCHAML
      POINTEUR IZCENT.MELEME,IELTFA.MELEME,IFACEL.MELEME
      SEGMENT IZVIT
         REAL*8 TEMTRA(NVIPT)
         INTEGER IPUN(NBS),IDUN(NBS),IPVPT(NVIPT),IFORML
      ENDSEGMENT
      SEGMENT IZVPT
         INTEGER IPUN1(NBS),IPUMAX
      ENDSEGMENT
      SEGMENT IZUN
         REAL*8 UN(I1,I2,I3)
      ENDSEGMENT
      SEGMENT IZUMAX
           REAL*8 UMAX(NBREL)
      ENDSEGMENT
      SEGMENT IZSH
          REAL*8 SHP(6,MNO9),SHY(12,MNO9),XYZL(3,MNO9)
      ENDSEGMENT
      DIMENSION XDEP2(3),XARI2(3),Z(3),XNREB(3)

***   l'arrivée devient l'entrée pour l'élément suivant
      TDEP=TARI
      DO 10 I=1,NDIM
         XDEP2(I)=XARI2(I)
 10   CONTINUE
***   test position pt % noeuds/aretes avec renvoi 'IEL2' ou traj a lieu
      NVOISI=0
      CALL EXCEPT(EPSILO,NDIM,JREBO,XNREB,MELEME,IZCENT,IELTFA
     $     ,IZVIT,IVPT,IEL1,TDEP,DTREEL,XDEP2,IZSH,IZUN,IEL2,NVOISI)
***   chgt element classique a partir d'une face
      IF (NVOISI.EQ.0) THEN
         IF (JREBO.LE.0) THEN
***         cherche n° 'IEL2' qui a avec 'IEL1' face commune (globale) 'NF'
            CALL TRJIEL(IEL1,IEL2,JFACE,NF,IFACEL,IZCENT,IELTFA)
            IEL1=IEL2
***         'JFACE' n° local dans 'IEL1' associé à face de n° global 'NF'
            CALL TRJFAC(IEL1,NF,JFACE,IELTFA)
         ENDIF
***   chgt element via noeud ou arete (pas de face traversee)
      ELSEIF (NVOISI.GT.0) THEN
         IEL1=IEL2
         JFACE=0
      ENDIF
***   chgt vecteur aleatoire saut suivant (m si saut precedent non effectif)
      ICHGZ=1

      RETURN
      END





