      SUBROUTINE ELISO(IRC)
C
      INCLUDE 'com_coor.f'
      INCLUDE 'com_faces.f'
      INCLUDE 'com_options.f'
C
      DO I=NUMBIS,3*NPMAX
        ITOUCH(I) = 0
      ENDDO
      IF (EPSISO.EQ.0.) THEN
        EPS = 1.E-4
      ELSE
        EPS = EPSISO
      ENDIF
      N = NUMBIS
      IF (XIS(3,1).NE.XIS(4,1).OR.YIS(3,1).NE.YIS(4,1)
     &.OR.ZIS(3,1).NE.ZIS(4,1)) THEN
        NTOT = 4
      ELSE
        NTOT = 3
      ENDIF
      DO K=1,NTOT
        N = N+1
        X(N) = XIS(K,1)
        Y(N) = YIS(K,1)
        Z(N) = ZIS(K,1)
        NFIS(K,1) = N
      ENDDO
      IF (NTOT.EQ.3) NFIS(4,1) = NFIS(3,1)
C
      IF (ISTDOUT.EQ.0) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,'Détermination des connections de l''isosurface.....'
        ELSE
          PRINT*,'Computing isosurface''s connections.................'
        ENDIF
      ENDIF
      NMODP = MAX(1,NSURF/50)
      IF (NMODP.EQ.1) NMODP = NFMAX
      DO I=2,NSURF
        IF (MOD(I,NMODP).EQ.0.AND.ISTDOUT.EQ.0)
     &       CALL MYFLUSH(100.*REAL(I)/REAL(NSURF))
        IF (NFIS(5,I).EQ.0) THEN
          IF (XIS(3,I).NE.XIS(4,I).OR.YIS(3,I).NE.YIS(4,I)
     &    .OR.ZIS(3,I).NE.ZIS(4,I)) THEN
            NSOM = 4
          ELSE
            NSOM = 3
          ENDIF
          NTOT = NTOT+NSOM
          DO K=1,NSOM
            JJJ = 0
            DO J=N,NUMBIS+1,-1
              IF (ITOUCH(J).EQ.0) THEN
                IF (ABS(XIS(K,I)-X(J)).LT.EPS) THEN
                  IF (ABS(YIS(K,I)-Y(J)).LT.EPS
     &           .AND.ABS(ZIS(K,I)-Z(J)).LT.EPS) THEN
                    JJJ = J
                    GOTO 10
                  ENDIF
                ENDIF
              ENDIF
            ENDDO
  10        IF (JJJ.EQ.0) THEN
              N = N+1
              IF (N.GT.3*NPMAX) THEN
                IF (ISTDOUT.EQ.0) CALL ENDFLUSH
                IF (ILANG.EQ.0) THEN
                  PRINT*,'*** Trop de noeuds. Echec.....'
                ELSE
                  PRINT*,'*** Too many nodes. Cancelled.....'
                ENDIF
                IRC = 1
                RETURN
              ENDIF
              X(N) = XIS(K,I)
              Y(N) = YIS(K,I)
              Z(N) = ZIS(K,I)
              NFIS(K,I) = N
            ELSE
              NFIS(K,I) = JJJ
            ENDIF
          ENDDO
          IF (NSOM.EQ.3) NFIS(4,I) = NFIS(3,I)
        ENDIF
      ENDDO
      DO I=2,NSURF
        IF (NFIS(5,I).GT.0) THEN
          IF (XIS(3,I).NE.XIS(4,I).OR.YIS(3,I).NE.YIS(4,I)
     &    .OR.ZIS(3,I).NE.ZIS(4,I)) THEN
            NSOM = 4
          ELSE
            NSOM = 3
          ENDIF
          NTOT = NTOT+NSOM
          DO K=1,NSOM
            N = N+1
            IF (N.GT.3*NPMAX) THEN
              IF (ISTDOUT.EQ.0) CALL ENDFLUSH
              IF (ILANG.EQ.0) THEN
                PRINT*,'*** Trop de noeuds. Echec.....'
              ELSE
                PRINT*,'*** Too many nodes. Cancelled.....'
              ENDIF
              IRC = 1
              RETURN
            ENDIF
            X(N) = XIS(K,I)
            Y(N) = YIS(K,I)
            Z(N) = ZIS(K,I)
            NFIS(K,I) = N
            ITOUCH(N) = 1
          ENDDO
          IF (NSOM.EQ.3) NFIS(4,I) = NFIS(3,I)
        ENDIF
      ENDDO
      IF (ISTDOUT.EQ.0) THEN
        CALL ENDFLUSH
        IF (ILANG.EQ.0) THEN
          PRINT*,N-NUMBIS,' noeuds d''isosurface au lieu de',NTOT
        ELSE
          PRINT*,N-NUMBIS,' isosurface-nodes instead of',NTOT
        ENDIF
      ENDIF
      NUMTER = N
      IRC = 0
      END
