C TRIFUS    SOURCE    GOUNAND   25/04/30    21:15:39     12258          
C****************************************************************************
C****************************************************************************
C*************TRIFUS....TRI par FUSion**************************************
C****************************************************************************
C****************************************************************************



      SUBROUTINE TRIFUS(NODES,IKA,JNT,IKB,KNT)
      IMPLICIT INTEGER(I-N)

      INTEGER IKA(NODES)
      INTEGER IKB(NODES)

      INTEGER JNT(NODES)
      INTEGER KNT(NODES)
      INTEGER IAX,IBX


C  EN ENTREE : IKA TABLEAU A TRIER
C  EN SORTIE : IKA TABLEAU TRIE EN ORDRE CROISSANT

      N=NODES

      IF(N.EQ.1) GOTO 999
C
C   ON FAIT UNE PREMIERE BOUCLE POUR LES ORDONNES 2 A 2 .CECI PERMET
C   DE SAUVER 3*N/2 TESTS.
C

      NC=N/2
      DO 4 I=1,NC
         J=2*I-1
         J1=J+1
         IF (IKA(J).LE.IKA(J1)) GO TO 4
         IAX=IKA(J1)
         IKA(J1)=IKA(J)
         IKA(J)=IAX

         IBX=JNT(J1)
         JNT(J1)=JNT(J)
         JNT(J)=IBX
   4  CONTINUE
      IF(N.EQ.2) GOTO 999
C
C  ON CONTINUE A LES ORDONNNES NI PAR NI
C
      NI=2
 1    CONTINUE
      ND=NI
      NI=NI*2
      NC=N/NI
      NE=MOD(N,NI)
      IF(NE.GT.ND) NC=NC+1
      NF2=0
      INC=0
      DO 2 I=1,N
         IKB(I)=IKA(I)
         KNT(I)=JNT(I)
2     CONTINUE
C
C  BOUCLE SUR LES NC COUPLES DE ND VALEURS
C
      DO 30 JJ=1,NC
         N1=NF2+1
         N2=N1+ND
         NF1=NF2+ND
         NF2=NF1+ND
         NF2=MIN(NF2,N)
 13      CONTINUE
         INC=INC+1
         IF (IKB(N1).GE.IKB(N2)) GO TO 14
         IKA(INC)=IKB(N1)
         JNT(INC)=KNT(N1)

         IF(N1.GE.NF1) GO TO 17
         N1=N1+1
         GO TO 13
 14      CONTINUE
         IKA(INC)=IKB(N2)
         JNT(INC)=KNT(N2)
         IF(N2.GE.NF2) GO TO 18
         N2=N2+1
         GO TO 13
 17      CONTINUE
         DO 20 I=N2,NF2
            IKA(I)=IKB(I)
            JNT(I)=KNT(I)
 20      CONTINUE

         INC=NF2
         GO TO 30
 18      CONTINUE
         DO 21 I=N1,NF1
            INC=INC+1
            IKA(INC)=IKB(I)
            JNT(INC)=KNT(I)
 21      CONTINUE
 30   CONTINUE
      IF(NI.GE.N) GOTO 999
      GO TO 1

 999  CONTINUE
      RETURN
      END
 
