ZHPGVX(3)             LAPACK driver routine (version 3.1)            ZHPGVX(3)



NAME
       ZHPGVX  -  selected eigenvalues and, optionally, eigenvectors of a com-
       plex  generalized  Hermitian-definite   eigenproblem,   of   the   form
       A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x

SYNOPSIS
       SUBROUTINE ZHPGVX( ITYPE, JOBZ, RANGE, UPLO, N, AP, BP, VL, VU, IL, IU,
                          ABSTOL, M, W, Z, LDZ,  WORK,  RWORK,  IWORK,  IFAIL,
                          INFO )

           CHARACTER      JOBZ, RANGE, UPLO

           INTEGER        IL, INFO, ITYPE, IU, LDZ, M, N

           DOUBLE         PRECISION ABSTOL, VL, VU

           INTEGER        IFAIL( * ), IWORK( * )

           DOUBLE         PRECISION RWORK( * ), W( * )

           COMPLEX*16     AP( * ), BP( * ), WORK( * ), Z( LDZ, * )

PURPOSE
       ZHPGVX computes selected eigenvalues and, optionally, eigenvectors of a
       complex  generalized  Hermitian-definite  eigenproblem,  of  the   form
       A*x=(lambda)*B*x,  A*Bx=(lambda)*x,  or B*A*x=(lambda)*x.  Here A and B
       are assumed to be Hermitian, stored in packed format,  and  B  is  also
       positive  definite.   Eigenvalues  and  eigenvectors can be selected by
       specifying either a range of values or  a  range  of  indices  for  the
       desired eigenvalues.


ARGUMENTS
       ITYPE   (input) INTEGER
               Specifies the problem type to be solved:
               = 1:  A*x = (lambda)*B*x
               = 2:  A*B*x = (lambda)*x
               = 3:  B*A*x = (lambda)*x

       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 triangles of A and B are stored;
               = 'L':  Lower triangles of A and B are stored.

       N       (input) INTEGER
               The order of the matrices A and B.  N >= 0.

       AP      (input/output) COMPLEX*16 array, dimension (N*(N+1)/2)
               On  entry,  the upper or lower triangle of the Hermitian matrix
               A, packed columnwise in a linear array.  The j-th column  of  A
               is  stored  in  the  array AP as follows: if UPLO = 'U', AP(i +
               (j-1)*j/2) =  A(i,j)  for  1<=i<=j;  if  UPLO  =  'L',  AP(i  +
               (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

               On exit, the contents of AP are destroyed.

       BP      (input/output) COMPLEX*16 array, dimension (N*(N+1)/2)
               On  entry,  the upper or lower triangle of the Hermitian matrix
               B, packed columnwise in a linear array.  The j-th column  of  B
               is  stored  in  the  array BP as follows: if UPLO = 'U', BP(i +
               (j-1)*j/2) =  B(i,j)  for  1<=i<=j;  if  UPLO  =  'L',  BP(i  +
               (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.

               On exit, the triangular factor U or L from the Cholesky factor-
               ization B = U**H*U or B = L*L**H, in the same storage format as
               B.

       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
               referenced if RANGE = 'A' or 'V'.

       ABSTOL  (input) DOUBLE PRECISION
               The absolute error tolerance for the eigenvalues.  An  approxi-
               mate  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  reduc-
               ing AP 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 eigen-
               vectors did not converge, try setting ABSTOL to  2*DLAMCH('S').

       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.

       Z       (output) COMPLEX*16 array, dimension (LDZ, N)
               If  JOBZ  = 'N', then Z is not referenced.  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).  The eigenvectors are normalized as fol-
               lows: if ITYPE  =  1  or  2,  Z**H*B*Z  =  I;  if  ITYPE  =  3,
               Z**H*inv(B)*Z = I.

               If an eigenvector 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.  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) COMPLEX*16 array, dimension (2*N)

       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 elements 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 illegal value
               > 0:  ZPPTRF or ZHPEVX returned an error code:
               <= N:  if INFO = i, ZHPEVX failed to converge;  i  eigenvectors
               failed  to  converge.  Their indices are stored in array IFAIL.
               > N:   if INFO = N + i, for 1 <= i <= n, then the leading minor
               of order i of B is not positive definite.  The factorization of
               B could not be completed and  no  eigenvalues  or  eigenvectors
               were computed.

FURTHER DETAILS
       Based on contributions by
          Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA




 LAPACK driver routine (version 3.N1o)vember 2006                       ZHPGVX(3)