      SUBROUTINE LIISO2S(BIDON,IRC)
C
      INCLUDE 'com_coor.f'
      INCLUDE 'com_faces.f'
      INCLUDE 'com_options.f'
      REAL*8 V1
      DIMENSION BIDON(*),BIDON2(2)
      INTEGER   IBIDON(2)
      LOGICAL*4 LA
      EQUIVALENCE (BIDON2,IBIDON)
C
      IF (ILANG.EQ.0) THEN
        PRINT*,'*** Comparaison de deux fichiers de résultats ***'
      ELSE
        PRINT*,'*** Data file comparison ***'
      ENDIF
C
 1000 IF (ILANG.EQ.0) THEN
        CALL LIFICHTAB
     &('Nom du premier fichier de valeurs (return -> abandon) ?'
     &     ,0,NOM_ISO,LONISO,0)
      ELSE
        CALL LIFICHTAB
     &('Name of the first data file (return -> cancel) ?'
     &     ,0,NOM_ISO,LONISO,0)
      ENDIF
      IF (LONISO.LT.0) THEN
        IRC = -1
        RETURN
      ENDIF
Cfj      IF (NOM_ISO(LONISO:LONISO).EQ.CHAR(9)
Cfj     &.OR.NOM_ISO(LONISO:LONISO).EQ.CHAR(27)) THEN
Cfj        IF (LONISO.EQ.1) THEN
Cfj          PRINT*,'Les fichiers presents :'
Cfj          CALL EXEC('ls')
Cfj        ELSE
Cfj          CALL EXEC('ls '//NOM_ISO(1:LONISO-1)//'*')
Cfj        ENDIF
Cfj        PRINT*,' '
Cfj        GOTO 1000
Cfj      ENDIF
      INQUIRE(FILE=NOM_ISO(1:LONISO),EXIST=LA)
CC      OPEN (2,FILE=NOM_ISO(1:LONISO),STATUS='OLD',IOSTAT=IERR)
CC      IF (IERR.NE.0) THEN
      IF (.NOT.LA) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,'---> On n''a pas trouvé '//NOM_ISO(1:LONISO)
          PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
        ELSE
          PRINT*,'---> I did not find '//NOM_ISO(1:LONISO)
          PRINT*,
     &'---> To display the file list, type <esc> then <return>'
        ENDIF
        GOTO 1000
      ELSE
        IF (ISTDOUT.EQ.0) THEN
          CALL testtypebin(2,NOM_ISO(1:LONISO)//CHAR(0),8,IARCH1
     &                    ,1-2*ILANG)
        ELSE
          CALL testtypebin(2,NOM_ISO(1:LONISO)//CHAR(0),8,IARCH1,0)
        ENDIF
        IF (IARCH1.LT.0) THEN
          OPEN(2,FILE=NOM_ISO(1:LONISO),STATUS='OLD',IOSTAT=IERR)
          IF (IERR.NE.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT*,'---> Mauvais fichier : '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
            ELSE
              PRINT*,'---> Bad file '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> To display the file list, type <esc> then <return>'
            ENDIF
            GOTO 1000
          ENDIF
          CALL LITITRE(2,NUMNP2,IERR)
        ELSEIF(IARCH.EQ.1) THEN
          CALL ouvrebin(2,NOM_ISO(1:LONISO)//CHAR(0),0,IRC)
          CALL litrecbin(2,BIDON2,LLL,0)
          IF (LLL.NE.8) THEN
            IF (ILANG.EQ.0) THEN
              PRINT*,'---> Mauvais fichier : '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
            ELSE
              PRINT*,'---> Bad file '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> To display the file list, type <esc> then <return>'
            ENDIF
            CLOSE(2)
            GOTO 1000
          ENDIF
          NUMNP2 =  IBIDON(1)
        ELSE
          OPEN(2,FILE=NOM_ISO(1:LONISO),STATUS='OLD'
     &         ,FORM='UNFORMATTED',IOSTAT=IERR)
          IF (IERR.NE.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT*,'---> Mauvais fichier : '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
            ELSE
              PRINT*,'---> Bad file '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> To display the file list, type <esc> then <return>'
            ENDIF
            GOTO 1000
          ENDIF
          READ(2) NUMNP2
        ENDIF
      ENDIF
      LONC1 = LONISO
      NOM_C1(1:LONC1) = NOM_ISO(1:LONISO)
 1001 IF (ILANG.EQ.0) THEN
        CALL LIFICHTAB
     &('Nom du second fichier de valeurs (return -> abandon) ?'
     &       ,0,NOM_ISO,LONISO,0)
      ELSE
        CALL LIFICHTAB
     &('Name of the second data file (return -> cancel) ?'
     &     ,0,NOM_ISO,LONISO,0)
      ENDIF
      IF (LONISO.LT.0) THEN
        IRC = -2
        RETURN
      ENDIF
Cfj      IF (NOM_ISO(LONISO:LONISO).EQ.CHAR(9)
Cfj     &.OR.NOM_ISO(LONISO:LONISO).EQ.CHAR(27)) THEN
Cfj        IF (LONISO.EQ.1) THEN
Cfj          PRINT*,'Les fichiers presents :'
Cfj          CALL EXEC('ls')
Cfj        ELSE
Cfj          CALL EXEC('ls '//NOM_ISO(1:LONISO-1)//'*')
Cfj        ENDIF
Cfj        PRINT*,' '
Cfj        GOTO 1001
Cfj      ENDIF
      INQUIRE(FILE=NOM_ISO(1:LONISO),EXIST=LA)
CC      OPEN (3,FILE=NOM_ISO(1:LONISO),STATUS='OLD',IOSTAT=IERR)
CC      IF (IERR.NE.0) THEN
      IF (.NOT.LA) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,'---> On n''a pas trouvé '//NOM_ISO(1:LONISO)
          PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
        ELSE
          PRINT*,'---> I did not find '//NOM_ISO(1:LONISO)
          PRINT*,
     &'---> To display the file list, type <esc> then <return>'
        ENDIF
        GOTO 1001
      ELSE
        IF (ISTDOUT.EQ.0) THEN
          CALL testtypebin(3,NOM_ISO(1:LONISO)//CHAR(0),8,IARCH2
     &                    ,1-2*ILANG)
        ELSE
          CALL testtypebin(3,NOM_ISO(1:LONISO)//CHAR(0),8,IARCH2,0)
        ENDIF
        IF (IARCH2.LT.0) THEN
          OPEN(3,FILE=NOM_ISO(1:LONISO),STATUS='OLD',IOSTAT=IERR)
          IF (IERR.NE.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT*,'---> Mauvais fichier : '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
            ELSE
              PRINT*,'---> Bad file '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> To display the file list, type <esc> then <return>'
            ENDIF
            GOTO 1001
          ENDIF
          CALL LITITRE(3,NUMNP3,IERR)
        ELSEIF(IARCH.EQ.1) THEN
          CALL ouvrebin(3,NOM_ISO(1:LONISO)//CHAR(0),0,IRC)
          CALL litrecbin(3,BIDON2,LLL,0)
          IF (LLL.NE.8) THEN
            IF (ILANG.EQ.0) THEN
              PRINT*,'---> Mauvais fichier : '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
            ELSE
              PRINT*,'---> Bad file '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> To display the file list, type <esc> then <return>'
            ENDIF
            CLOSE(3)
            GOTO 1001
          ENDIF
          NUMNP3 =  IBIDON(1)
        ELSE
          OPEN(3,FILE=NOM_ISO(1:LONISO),STATUS='OLD'
     &          ,FORM='UNFORMATTED',IOSTAT=IERR)
          IF (IERR.NE.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT*,'---> Mauvais fichier : '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
            ELSE
              PRINT*,'---> Bad file '//NOM_ISO(1:LONISO)
              PRINT*,
     &'---> To display the file list, type <esc> then <return>'
            ENDIF
            GOTO 1001
          ENDIF
          READ(3) NUMNP3
        ENDIF
      ENDIF
      IRC = 0
      IFISO   = 1
      LONC2 = LONISO
      NOM_C2(1:LONC2) = NOM_ISO(1:LONISO)
C
      ICENTR = 0
      IF ((NUMNP2.EQ.NF.AND.NUMNP3.EQ.NF).OR.
     &    (NUMNP2.EQ.NEL.AND.NUMNP3.EQ.NEL)) THEN
        ICENTR = 1
      ELSEIF(MIN(NUMNP2,NUMNP3).LT.NUMNP) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,'*** Fichiers pas compatibles. Il faut',NUMNP,
     &         ' noeuds et je n''en trouve que',MIN(NUMNP2,NUMNP3)
        ELSE
          PRINT*,'*** Non-compatible files. you need',NUMNP,
     &         ' nodes and I only find',MIN(NUMNP2,NUMNP3)
        ENDIF
        GOTO 1000
      ELSEIF(MAX(NUMNP2,NUMNP3).GT.NUMNP) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,'Bizarre :',NUMNP,' noeuds et'
     &         ,MAX(NUMNP2,NUMNP3),' valeurs'
        ELSE
          PRINT*,'Strange:',NUMNP,' nodes and'
     &         ,MAX(NUMNP2,NUMNP3),' values'
        ENDIF
      ENDIF
      IF (ICENTR.EQ.0) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,'Les valeurs lues sont prises aux noeuds'
        ELSE
          PRINT*,'Node datas'
        ENDIF
        IF (ISO.EQ.3) ISO = 1
        ICENTRISO = 0
      ELSE
        IF (ILANG.EQ.0) THEN
          PRINT*,'Les valeurs lues sont prises aux centres des cellules'
        ELSE
          PRINT*,'Piecewise constant datas'
        ENDIF
      ENDIF
      IF (ILANG.EQ.0) THEN
        PRINT*,'Types de comparaison possibles :'
        PRINT*,'   0 : Ecart absolu       --> (x1-x2)'
        PRINT*,'   1 : Ecart relatif      --> (1-x2/x1)'
        PRINT*,'   2 : abs(Ecart absolu)  --> |x1-x2|'
        PRINT*,'   3 : abs(Ecart relatif) --> |1-x2/x1|'
        CALL LIENTIER('Option de comparaison ?',0,IREP)
      ELSE
        PRINT*,'Comparison types available:'
        PRINT*,'   0 : Absolute difference --> (x1-x2)'
        PRINT*,'   1 : relative difference --> (1-x2/x1)'
        PRINT*,'   2 : abs(absolute diff)  --> |x1-x2|'
        PRINT*,'   3 : abs(relative diff)   --> |1-x2/x1|'
        CALL LIENTIER('Comparison option?',0,IREP)
      ENDIF
      IREP = MAX(0,MIN(3,IREP))
      IF (IREP.EQ.0) THEN
        IF (ILANG.EQ.0) THEN
          NOM_ISO = '$Comparaison (abs)'
          LONISO = 18
        ELSE
          NOM_ISO = '$Comparison (abs)'
          LONISO = 17
        ENDIF
      ELSEIF(IREP.EQ.1) THEN
        IF (ILANG.EQ.0) THEN
          NOM_ISO = '$Comparaison (rel)'
          LONISO = 18
        ELSE
          NOM_ISO = '$Comparison (rel)'
          LONISO = 17
        ENDIF
      ELSEIF(IREP.EQ.2) THEN
        IF (ILANG.EQ.0) THEN
          NOM_ISO = '$abs(Comparaison abs)'
          LONISO = 21
        ELSE
          NOM_ISO = '$abs(Comparison abs)'
          LONISO = 20
        ENDIF
      ELSE
        IF (ILANG.EQ.0) THEN
          NOM_ISO = '$abs(Comparaison rel)'
          LONISO = 21
        ELSE
          NOM_ISO = '$abs(Comparison rel)'
          LONISO = 21
        ENDIF
      ENDIF
C
      VMIN = BIG
      VMAX = -BIG
      IFBIG = 0
      IF (IARCH1.LT.0) THEN
        DO I=1,NUMNP2
          READ(2,*) V1
          CALL TRONQUE(V1,BIDON(I),IFBIG)
        ENDDO
      ELSEIF(IARCH1.EQ.1) THEN
        CALL litrecbin(2,BIDON,LLL,0)
      ELSE
        READ(2) (BIDON(I),I=1,NUMNP2)
      ENDIF
      IF (IARCH2.LT.0) THEN
        DO I=1,NUMNP3
          READ(3,*) V1
          CALL TRONQUE(V1,BIDON(I+NUMNP2),IFBIG)
        ENDDO
      ELSEIF(IARCH2.EQ.1) THEN
        CALL litrecbin(3,BIDON(1+NUMNP2),LLL,0)
      ELSE
        READ(3) (BIDON(I+NUMNP2),I=1,NUMNP3)
      ENDIF
      IF (ICENTR.EQ.0) THEN
        IF (IREP.EQ.0.OR.IREP.EQ.2) THEN
          DO I=1,NUMNP
            VALX(I) = BIDON(I) - BIDON(I+NUMNP2)
            IF (IREP.EQ.2) VALX(I) = ABS(VALX(I))
            VMIN = MIN(VMIN,VALX(I))
            VMAX = MAX(VMAX,VALX(I))
          ENDDO 
        ELSE
          DO I=1,NUMNP
            VM = BIDON(I)
            IF (VM.NE.0.) THEN
              VALX(I) = (BIDON(I) - BIDON(I+NUMNP2))/VM
            ELSE
              VALX(I) = BIDON(I) - BIDON(I+NUMNP2)
            ENDIF
            IF (IREP.NE.1) VALX(I) = ABS(VALX(I))
            VMIN = MIN(VMIN,VALX(I))
            VMAX = MAX(VMAX,VALX(I))
          ENDDO 
        ENDIF
      ELSE
        DO I=1,NUMNP
          ITOUCH(I) = 0
          VALX(I) = 0.
        ENDDO
        VM = 1.
        IF (NUMNP2.EQ.NF) THEN
          DO I=1,NF
            IF (IREP.EQ.1.OR.IREP.EQ.3) VM = BIDON(I)
            IF (VM.NE.0.) THEN
              VALF(5,I) = (BIDON(I) - BIDON(I+NUMNP2))/VM
            ELSE
              VALF(5,I) = BIDON(I) - BIDON(I+NUMNP2)
            ENDIF
            IF (IREP.EQ.2.OR.IREP.EQ.3) VALF(5,I) = ABS(VALF(5,I))
          ENDDO
        ELSE
          IF (NDSEL.EQ.9) THEN
            J = 1
            DO I=1,NEL
              IF (IREP.EQ.1.OR.IREP.EQ.3) VM = BIDON(I)
              IF (VM.NE.0.) THEN
                VALF(5,J) = (BIDON(I) - BIDON(I+NUMNP2))/VM
              ELSE
                VALF(5,J) = BIDON(I) - BIDON(I+NUMNP2)
              ENDIF
              IF (IREP.EQ.2.OR.IREP.EQ.3) VALF(5,J) = ABS(VALF(5,J))
              VALF(5,J+1) = VALF(5,J)
              VALF(5,J+2) = VALF(5,J)
              VALF(5,J+3) = VALF(5,J)
              J = J+4
              II = (I-1)*NDSEL
              DO K=1,NDSEL
                N = NODEL(II+K)
                VALX(N) = VALX(N) + VALF(5,J)
                ITOUCH(N) = ITOUCH(N) + 1
              ENDDO
            ENDDO
          ELSE
            JJMIN = 1
            DO I=1,NEL
              IF (IREP.EQ.1.OR.IREP.EQ.3) VM = BIDON(I)
              IF (VM.NE.0.) THEN
                BID = (BIDON(I) - BIDON(I+NUMNP2))/VM
              ELSE
                BID = BIDON(I) - BIDON(I+NUMNP2)
              ENDIF
              IF (IREP.EQ.2.OR.IREP.EQ.3) BID = ABS(BID)
              IF (ITAB(I).GT.0) THEN
                VALF(5,ITAB(I)) = BID
              ELSEIF(ITAB(I).LT.0) THEN
                IIII = 0
                JMIN = JJMIN
                DO J=JMIN,NF
                  IF (NNUMFA(J).EQ.I) THEN
                    IIII = IIII+1
                    VALF(5,J) = BID
                    IF (IIII.EQ.-ITAB(I)) GOTO 1111
                  ENDIF
                ENDDO
              ENDIF
 1111         CONTINUE
              II = (I-1)*NDSEL
              DO K=1,NDSEL
                N = NODEL(II+K)
                VALX(N) = VALX(N) + BID
                ITOUCH(N) = ITOUCH(N) + 1
              ENDDO
            ENDDO
          ENDIF
        ENDIF
        DO I=1,NF
          DO K=1,NDS
            N = NFAC(K,I)
            VALX(N) = VALX(N) + VALF(5,I)
            VMIN = MIN(VMIN,VALF(5,I))
            VMAX = MAX(VMAX,VALF(5,I))
            ITOUCH(N) = ITOUCH(N) + 1
          ENDDO          
        ENDDO
        DO I=1,NUMNP
          IF (ITOUCH(I).GT.0) VALX(I) = VALX(I)/REAL(ITOUCH(I))
        ENDDO
      ENDIF
      CLOSE(2)
      CLOSE(3)
      IF (IFBIG.NE.0) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,IFBIG,' valeurs tronquées'
        ELSE
          PRINT*,IFBIG,' values truncated'
        ENDIF
      ENDIF
      DO I=1,NF4
        IF (I.GT.3*NF) THEN
          VALF(5,I) = VALF(5,I-3*NF)
        ELSEIF(I.GT.2*NF) THEN
          VALF(5,I) = VALF(5,I-2*NF)
        ELSEIF(I.GT.NF) THEN
          VALF(5,I) = VALF(5,I-NF)
        ENDIF
        DO K=1,NDS
          VALF(K,I) = VALX( NFAC(K,I) )
        ENDDO
      ENDDO
      VMIN0 = VMIN
      VMAX0 = VMAX
      CALL METLEGNEW
      ISOBID = 0
C
      END
