# chiev.f

          SUBROUTINE CHIEV (A, LDA, N, E, V, LDV, WORK, JOB, INFO)
    C***BEGIN PROLOGUE  CHIEV
    C***PURPOSE  Compute the eigenvalues and, optionally, the eigenvectors
    C            of a complex Hermitian matrix.
    C***LIBRARY   SLATEC
    C***CATEGORY  D4A3
    C***TYPE      COMPLEX (SSIEV-S, CHIEV-C)
    C***KEYWORDS  COMPLEX HERMITIAN, EIGENVALUES, EIGENVECTORS, MATRIX,
    C             SYMMETRIC
    C***AUTHOR  Kahaner, D. K., (NBS)
    C           Moler, C. B., (U. of New Mexico)
    C           Stewart, G. W., (U. of Maryland)
    C***DESCRIPTION
    C
    C     David Kahaner, Cleve Moler, G. W. Stewart,
    C       N.B.S.         U.N.M.      N.B.S./U.MD.
    C
    C     Abstract
    C      CHIEV computes the eigenvalues and, optionally,
    C      the eigenvectors of a complex Hermitian matrix.
    C
    C     Call Sequence Parameters-
    C       (the values of parameters marked with * (star) will be changed
    C         by CHIEV.)
    C
    C        A*      COMPLEX(LDA,N)
    C                complex Hermitian input matrix.
    C                Only the upper triangle of A need be
    C                filled in.  Elements on diagonal must be real.
    C
    C        LDA     INTEGER
    C                set by the user to
    C                the leading dimension of the complex array A.
    C
    C        N       INTEGER
    C                set by the user to
    C                the order of the matrices A and V, and
    C                the number of elements in E.
    C
    C        E*      REAL(N)
    C                on return from CHIEV E contains the eigenvalues of A.
    C                See also INFO below.
    C
    C        V*      COMPLEX(LDV,N)
    C                on return from CHIEV if the user has set JOB
    C                = 0        V is not referenced.
    C                = nonzero  the N eigenvectors of A are stored in the
    C                first N columns of V.  See also INFO below.
    C
    C        LDV     INTEGER
    C                set by the user to
    C                the leading dimension of the array V if JOB is also
    C                set nonzero.  In that case N must be .LE. LDV.
    C                If JOB is set to zero LDV is not referenced.
    C
    C        WORK*   REAL(4N)
    C                temporary storage vector.  Contents changed by CHIEV.
    C
    C        JOB     INTEGER
    C                set by the user to
    C                = 0        eigenvalues only to be calculated by CHIEV.
    C                           Neither V nor LDV are referenced.
    C                = nonzero  eigenvalues and vectors to be calculated.
    C                           In this case A and V must be distinct arrays
    C                           also if LDA .GT. LDV CHIEV changes all the
    C                           elements of A thru column N.  If LDA < LDV
    C                           CHIEV changes all the elements of V through
    C                           column N.  If LDA = LDV only A(I,J) and V(I,
    C                           J) for I,J = 1,...,N are changed by CHIEV.
    C
    C        INFO*   INTEGER
    C                on return from CHIEV the value of INFO is
    C                = 0  normal return, calculation successful.
    C                = K  if the eigenvalue iteration fails to converge,
    C                     eigenvalues (and eigenvectors if requested)
    C                     1 through K-1 are correct.
    C
    C      Error Messages
    C           No. 1  recoverable  N is greater than LDA
    C           No. 2  recoverable  N is less than one.
    C           No. 3  recoverable  JOB is nonzero and N is greater than LDV
    C           No. 4  warning      LDA > LDV,  elements of A other than the
    C                               N by N input elements have been changed
    C           No. 5  warning      LDA < LDV,  elements of V other than the
    C                               N by N output elements have been changed
    C           No. 6  recoverable  nonreal element on diagonal of A.
    C
    C***REFERENCES  (NONE)
    C***ROUTINES CALLED  HTRIBK, HTRIDI, IMTQL2, SCOPY, SCOPYM, TQLRAT,
    C                    XERMSG
    C***REVISION HISTORY  (YYMMDD)
    C   800808  DATE WRITTEN
    C   890531  Changed all specific intrinsics to generic.  (WRB)
    C   890531  REVISION DATE from Version 3.2
    C   891214  Prologue converted to Version 4.0 format.  (BAB)
    C   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
    C***END PROLOGUE  CHIEV