ZHEEVX  -  compute  selected  eigenvalues and, optionally,
       eigenvectors of a complex Hermitian matrix A


SYNOPSIS

       SUBROUTINE ZHEEVX( JOBZ, RANGE, UPLO, N, A, LDA,  VL,  VU,
                          IL,  IU,  ABSTOL,  M,  W, Z, LDZ, WORK,
                          LWORK, RWORK, IWORK, IFAIL, INFO )

           CHARACTER      JOBZ, RANGE, UPLO

           INTEGER        IL, INFO, IU, LDA, LDZ, LWORK, M, N

           DOUBLE         PRECISION ABSTOL, VL, VU

           INTEGER        IFAIL( * ), IWORK( * )

           DOUBLE         PRECISION RWORK( * ), W( * )

           COMPLEX*16     A( LDA, * ), WORK( * ), Z( LDZ, * )


PURPOSE

       ZHEEVX  computes  selected  eigenvalues  and,  optionally,
       eigenvectors  of a complex Hermitian matrix A. Eigenvalues
       and eigenvectors can be selected by  specifying  either  a
       range  of  values  or  a  range of indices for the desired
       eigenvalues.


ARGUMENTS

       JOBZ    (input) CHARACTER*1
               = 'N':  Compute eigenvalues only;
               = 'V':  Compute eigenvalues and eigenvectors.

       RANGE   (input) CHARACTER*1
               = 'A': all eigenvalues will be found.
               = 'V': all eigenvalues in the  half-open  interval
               (VL,VU]  will  be found.  = 'I': the IL-th through
               IU-th eigenvalues will be found.

       UPLO    (input) CHARACTER*1
               = 'U':  Upper triangle of A is stored;
               = 'L':  Lower triangle of A is stored.

       N       (input) INTEGER
               The order of the matrix A.  N >= 0.

       A       (input/output) COMPLEX*16 array, dimension (LDA,
               N)
               On  entry, the Hermitian matrix A.  If UPLO = 'U',
               the leading N-by-N upper triangular part of A con­
               tains  the  upper triangular part of the matrix A.
               If UPLO = 'L', the leading N-by-N lower triangular
               part  of  A  contains the lower triangular part of

               UPLO='L')  or  the upper triangle (if UPLO='U') of
               A, including the diagonal, is destroyed.

       LDA     (input) INTEGER
               The leading dimension of  the  array  A.   LDA  >=
               max(1,N).

       VL      (input) DOUBLE PRECISION
               VU      (input) DOUBLE PRECISION If RANGE='V', the
               lower and upper  bounds  of  the  interval  to  be
               searched for eigenvalues. VL < VU.  Not referenced
               if RANGE = 'A' or 'I'.

       IL      (input) INTEGER
               IU      (input) INTEGER If RANGE='I', the  indices
               (in  ascending  order) of the smallest and largest
               eigenvalues to be returned.  1 <= IL <= IU  <=  N,
               if  N > 0; IL = 1 and IU = 0 if N = 0.  Not refer­
               enced if RANGE = 'A' or 'V'.

       ABSTOL  (input) DOUBLE PRECISION
               The absolute error tolerance for the  eigenvalues.
               An approximate eigenvalue is accepted as converged
               when it is determined to lie in an interval  [a,b]
               of width less than or equal to

               ABSTOL + EPS *   max( |a|,|b| ) ,

               where  EPS is the machine precision.  If ABSTOL is
               less than or equal to zero, then  EPS*|T|  will be
               used  in its place, where |T| is the 1-norm of the
               tridiagonal  matrix  obtained  by  reducing  A  to
               tridiagonal form.

               Eigenvalues  will be computed most accurately when
               ABSTOL is set to  twice  the  underflow  threshold
               2*DLAMCH('S'),  not zero.  If this routine returns
               with INFO>0, indicating that some eigenvectors did
               not converge, try setting ABSTOL to 2*DLAMCH('S').

               See "Computing Small Singular Values of Bidiagonal
               Matrices  with Guaranteed High Relative Accuracy,"
               by Demmel and Kahan, LAPACK Working Note #3.

       M       (output) INTEGER
               The total number of eigenvalues found.  0 <= M  <=
               N.  If RANGE = 'A', M = N, and if RANGE = 'I', M =
               IU-IL+1.

       W       (output) DOUBLE PRECISION array, dimension (N)
               On normal exit, the first M elements  contain  the
               selected eigenvalues in ascending order.

               max(1,M))
               If JOBZ = 'V', then if  INFO  =  0,  the  first  M
               columns  of Z contain the orthonormal eigenvectors
               of the matrix  A  corresponding  to  the  selected
               eigenvalues, with the i-th column of Z holding the
               eigenvector associated with W(i).  If an eigenvec­
               tor  fails to converge, then that column of Z con­
               tains the latest approximation to the eigenvector,
               and  the  index  of the eigenvector is returned in
               IFAIL.  If JOBZ = 'N', then Z is  not  referenced.
               Note:  the user must ensure that at least max(1,M)
               columns are supplied in the array Z;  if  RANGE  =
               'V',  the exact value of M is not known in advance
               and an upper bound must be used.

       LDZ     (input) INTEGER
               The leading dimension of the array Z.  LDZ  >=  1,
               and if JOBZ = 'V', LDZ >= max(1,N).

       WORK    (workspace/output) COMPLEX*16 array, dimension
               (LWORK)
               On exit, if INFO = 0, WORK(1) returns the  optimal
               LWORK.

       LWORK   (input) INTEGER
               The   length   of   the   array  WORK.   LWORK  >=
               max(1,2*N-1).  For optimal  efficiency,  LWORK  >=
               (NB+1)*N, where NB is the max of the blocksize for
               ZHETRD and for ZUNMTR as returned by ILAENV.

               If LWORK = -1, then a workspace query is  assumed;
               the  routine  only  calculates the optimal size of
               the WORK array, returns this value  as  the  first
               entry  of  the  WORK  array,  and no error message
               related to LWORK is issued by XERBLA.

       RWORK   (workspace) DOUBLE PRECISION array, dimension
               (7*N)

       IWORK   (workspace) INTEGER array, dimension (5*N)

       IFAIL   (output) INTEGER array, dimension (N)
               If  JOBZ = 'V', then if INFO = 0, the first M ele­
               ments of IFAIL are zero.  If INFO > 0, then  IFAIL
               contains  the  indices  of  the  eigenvectors that
               failed to converge.  If JOBZ = 'N', then IFAIL  is
               not referenced.

       INFO    (output) INTEGER
               = 0:  successful exit
               < 0:  if INFO = -i, the i-th argument had an ille­
               gal value
               > 0:  if INFO = i, then i eigenvectors  failed  to

               IFAIL.


Man(1) output converted with man2html