      SUBROUTINE EGNVAL(H,M,ZZ,MX)
C
C     THE FOLLOWING SUBROUTINE FINDS THE FIRST M ZEROES (EIGENVALUES)
C     OF THE REAL CHARAC. FUNCT. RCF(H,Z) USING THE HALF INTERVAL
C     METHOD. IT IS TAKEN FROM CARNAHAN,LUTHER AND WILKES PAGE 185.
C     IT IS ASSUMED THAT HB IS .GT. H.
C
      IMPLICIT REAL*8 (A-H,O-Z)
      REAL*8 ZZ(MX),ZERO,TWO,PROD
      REAL*8 ESP,DZP,DZ,ZR,ZL,RCF,FZHALF,ZHALF,FZL
      COMMON /BLKEVN/ HB,CW,CB,FKW,FKB,ROHW,ROHB,ATEN
      DATA ESP /.1D-14/
      PI=2.*ACOS(0.0)
      ZERO=DBLE(0.0)
      TWO=DBLE(2.0)
C
C     THE SEARCH INCREMENT IS CHOSEN BASED ON THE MINIMUM SPACING OF
C     ASYMPTOTES IN THE TANGENT FORM OF THE REAL CHARACTERISTIC
C     FUNCTION
C
      DZP=(PI/(2.*H*FKB))**2
      DZ=(PI/(2.*(HB-H)*FKB))**2
      DZ=DMIN1(DZP,DZ)
      ITER=DLOG(DZ/ESP)/DLOG(TWO) +1.0
C
C     ESTABLISH INTERVAL WITHIN WHICH ROOT LIES
C
      ZR=1.-(FKW/FKB)**2+ESP**2
C
      DO 700 I=1,M
      ZL=ZR
C
  100 CONTINUE
      PROD=RCF(H,ZL)*RCF(H,ZL+DZ)
      IF(PROD .LT. ZERO) GO TO 300
      ZL=ZL+DZ
      GO TO 100
C
  300 CONTINUE
      ZR=ZL+DZ
      FZL=RCF(H,ZL)
C
C     BEGIN HALF INTERVAL ITERATION
C
      DO 600 J=1,ITER
      ZHALF=(ZL+ZR)/2.0
      FZHALF=RCF(H,ZHALF)
C
C     CHOOSE THE SUB INTERVAL CONTAINING THE ROOT
C
      IF(FZHALF*FZL .LE. ZERO) GO TO 500
      ZL=ZHALF
      FZL=FZHALF
      GO TO 600
C
  500 CONTINUE
      ZR=ZHALF
C
  600 CONTINUE
C
      ZZ(I)=(ZR+ZL)/2.0
  700 CONTINUE
C
      RETURN
      END
