C TRIHI2    SOURCE    CHAT      05/01/13    03:47:03     5004
C=======================================================================
C
      SUBROUTINE TRIHI2(ilent1,NHIST,IT,JINF,TP0,ZA0)
C
C=======================================================================
C
C    Calcul de transformations de phases
C    appelee par VOISI2
C
C    nhist     nombre d'histoires thermiques
C    it        temperature
C    jinf      indice du premier point trouve
C    tp0,za0   coordonnees du point a interpoler
C
C    RECHERCHE DES 4 POINTS LES PLUS PETITS D'UNE LISTE
C    AYANT UN MINIMUM UNIQUE, AVEC UTILISATION D'UNE SOLUTION
C    INITIALE ET RECHERCHE FINALE PAR BISSECTION,
C    INSPIRE DES NUMERICAL RECIPES IN FORTRAN (p 110),
C
C    routines appelees
C       DIST    norme euclidienne
C
C    MM, LE 10/07/1998
C
C=======================================================================
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
C
C
C
      JOB=JINF
      INC=1
      JOBS=JOB+3
      IF (JOB.LT.1.OR.JOBS.GT.NHIST) THEN
         JINF=1
         JSUP=NHIST-3
         GOTO 3
      ENDIF
C
      DJOB=DIST9(ILENT1,IT,JOB,TP0,ZA0)
      DJOBS=DIST9(ILENT1,IT,JOBS,TP0,ZA0)
      IF (DJOBS.EQ.DJOB) THEN
         JINF=JOB
         RETURN
      ENDIF
C
      IF (DJOBS.LT.DJOB) THEN
 1       JOB=JOB+INC
         JOBS=JOB+3
         IF (JOBS.GT.NHIST) THEN
            JINF=JOB-INC
            JSUP=NHIST-3
            GOTO 3
         ENDIF
         DJOB=DIST9(ILENT1,IT,JOB,TP0,ZA0)
         DJOBS=DIST9(ILENT1,IT,JOBS,TP0,ZA0)
         IF (DJOBS.LT.DJOB) THEN
            INC=INC+INC
            GOTO 1
         ENDIF
         JINF=JOB-INC
         JSUP=JOB
C
      ELSE
 2       JOB=JOB-INC
         JOBS=JOB+3
         IF (JOB.LT.1) THEN
            JINF=1
            JSUP=JOB+INC
            GOTO 3
         ENDIF
         DJOB=DIST9(ILENT1,IT,JOB,TP0,ZA0)
         DJOBS=DIST9(ILENT1,IT,JOBS,TP0,ZA0)
         IF (DJOBS.GT.DJOB) THEN
            INC=INC+INC
            GOTO 2
         ENDIF
         JINF=JOB
         JSUP=JOB+INC
      ENDIF
C
 3    JD=JSUP-JINF
      IF (JD.LE.1) THEN
         DINF=DIST9(ILENT1,IT,JINF,TP0,ZA0)
         JSUPS=JSUP+3
         DSUPS=DIST9(ILENT1,IT,JSUPS,TP0,ZA0)
         IF (DINF.GE.DSUPS) JINF=JSUP
         RETURN
      ENDIF
      JM=(JINF+JSUP)/2
      JMS=JM+3
      DJM=DIST9(ILENT1,IT,JM,TP0,ZA0)
      DJMS=DIST9(ILENT1,IT,JMS,TP0,ZA0)
      IF (DJMS.GT.DJM) THEN
         JSUP=JM
      ELSE
         JINF=JM
      ENDIF
      GOTO 3
      END


