1ZHPGVD(1)             LAPACK driver routine (version 3.1)            ZHPGVD(1)
2
3
4

NAME

6       ZHPGVD  -  all  the  eigenvalues and, optionally, the eigenvectors of a
7       complex  generalized  Hermitian-definite  eigenproblem,  of  the   form
8       A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x
9

SYNOPSIS

11       SUBROUTINE ZHPGVD( ITYPE,  JOBZ,  UPLO,  N,  AP,  BP,  W, Z, LDZ, WORK,
12                          LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO )
13
14           CHARACTER      JOBZ, UPLO
15
16           INTEGER        INFO, ITYPE, LDZ, LIWORK, LRWORK, LWORK, N
17
18           INTEGER        IWORK( * )
19
20           DOUBLE         PRECISION RWORK( * ), W( * )
21
22           COMPLEX*16     AP( * ), BP( * ), WORK( * ), Z( LDZ, * )
23

PURPOSE

25       ZHPGVD computes all the eigenvalues and, optionally,  the  eigenvectors
26       of  a  complex generalized Hermitian-definite eigenproblem, of the form
27       A*x=(lambda)*B*x,  A*Bx=(lambda)*x,  or B*A*x=(lambda)*x.  Here A and B
28       are  assumed  to  be  Hermitian, stored in packed format, and B is also
29       positive definite.
30       If eigenvectors are desired, it uses a divide and conquer algorithm.
31
32       The divide and conquer algorithm  makes  very  mild  assumptions  about
33       floating  point arithmetic. It will work on machines with a guard digit
34       in add/subtract, or on those binary machines without guard digits which
35       subtract  like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could
36       conceivably fail on hexadecimal or decimal machines without guard  dig‐
37       its, but we know of none.
38
39

ARGUMENTS

41       ITYPE   (input) INTEGER
42               Specifies the problem type to be solved:
43               = 1:  A*x = (lambda)*B*x
44               = 2:  A*B*x = (lambda)*x
45               = 3:  B*A*x = (lambda)*x
46
47       JOBZ    (input) CHARACTER*1
48               = 'N':  Compute eigenvalues only;
49               = 'V':  Compute eigenvalues and eigenvectors.
50
51       UPLO    (input) CHARACTER*1
52               = 'U':  Upper triangles of A and B are stored;
53               = 'L':  Lower triangles of A and B are stored.
54
55       N       (input) INTEGER
56               The order of the matrices A and B.  N >= 0.
57
58       AP      (input/output) COMPLEX*16 array, dimension (N*(N+1)/2)
59               On  entry,  the upper or lower triangle of the Hermitian matrix
60               A, packed columnwise in a linear array.  The j-th column  of  A
61               is  stored  in  the  array AP as follows: if UPLO = 'U', AP(i +
62               (j-1)*j/2) =  A(i,j)  for  1<=i<=j;  if  UPLO  =  'L',  AP(i  +
63               (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.
64
65               On exit, the contents of AP are destroyed.
66
67       BP      (input/output) COMPLEX*16 array, dimension (N*(N+1)/2)
68               On  entry,  the upper or lower triangle of the Hermitian matrix
69               B, packed columnwise in a linear array.  The j-th column  of  B
70               is  stored  in  the  array BP as follows: if UPLO = 'U', BP(i +
71               (j-1)*j/2) =  B(i,j)  for  1<=i<=j;  if  UPLO  =  'L',  BP(i  +
72               (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
73
74               On exit, the triangular factor U or L from the Cholesky factor‐
75               ization B = U**H*U or B = L*L**H, in the same storage format as
76               B.
77
78       W       (output) DOUBLE PRECISION array, dimension (N)
79               If INFO = 0, the eigenvalues in ascending order.
80
81       Z       (output) COMPLEX*16 array, dimension (LDZ, N)
82               If  JOBZ  =  'V',  then if INFO = 0, Z contains the matrix Z of
83               eigenvectors.  The eigenvectors are normalized as  follows:  if
84               ITYPE  = 1 or 2, Z**H*B*Z = I; if ITYPE = 3, Z**H*inv(B)*Z = I.
85               If JOBZ = 'N', then Z is not referenced.
86
87       LDZ     (input) INTEGER
88               The leading dimension of the array Z.  LDZ >= 1, and if JOBZ  =
89               'V', LDZ >= max(1,N).
90
91       WORK    (workspace) COMPLEX*16 array, dimension (MAX(1,LWORK))
92               On exit, if INFO = 0, WORK(1) returns the required LWORK.
93
94       LWORK   (input) INTEGER
95               The dimension of array WORK.  If N <= 1,               LWORK >=
96               1.  If JOBZ = 'N' and N > 1, LWORK >= N.  If JOBZ = 'V' and N >
97               1, LWORK >= 2*N.
98
99               If  LWORK  = -1, then a workspace query is assumed; the routine
100               only calculates the required sizes of the WORK, RWORK and IWORK
101               arrays,  returns these values as the first entries of the WORK,
102               RWORK and IWORK arrays, and no error message related  to  LWORK
103               or LRWORK or LIWORK is issued by XERBLA.
104
105       RWORK   (workspace) DOUBLE PRECISION array, dimension (MAX(1,LRWORK))
106               On exit, if INFO = 0, RWORK(1) returns the required LRWORK.
107
108       LRWORK  (input) INTEGER
109               The  dimension of array RWORK.  If N <= 1,               LRWORK
110               >= 1.  If JOBZ = 'N' and N > 1, LRWORK >= N.  If JOBZ = 'V' and
111               N > 1, LRWORK >= 1 + 5*N + 2*N**2.
112
113               If  LRWORK = -1, then a workspace query is assumed; the routine
114               only calculates the required sizes of the WORK, RWORK and IWORK
115               arrays,  returns these values as the first entries of the WORK,
116               RWORK and IWORK arrays, and no error message related  to  LWORK
117               or LRWORK or LIWORK is issued by XERBLA.
118
119       IWORK   (workspace/output) INTEGER array, dimension (MAX(1,LIWORK))
120               On exit, if INFO = 0, IWORK(1) returns the required LIWORK.
121
122       LIWORK  (input) INTEGER
123               The dimension of array IWORK.  If JOBZ  = 'N' or N <= 1, LIWORK
124               >= 1.  If JOBZ  = 'V' and N > 1, LIWORK >= 3 + 5*N.
125
126               If LIWORK = -1, then a workspace query is assumed; the  routine
127               only calculates the required sizes of the WORK, RWORK and IWORK
128               arrays, returns these values as the first entries of the  WORK,
129               RWORK  and  IWORK arrays, and no error message related to LWORK
130               or LRWORK or LIWORK is issued by XERBLA.
131
132       INFO    (output) INTEGER
133               = 0:  successful exit
134               < 0:  if INFO = -i, the i-th argument had an illegal value
135               > 0:  ZPPTRF or ZHPEVD returned an error code:
136               <= N:  if INFO = i, ZHPEVD failed to converge;  i  off-diagonal
137               elements of an intermediate tridiagonal form did not convergeto
138               zero; > N:   if INFO = N + i, for 1 <= i <= n, then the leading
139               minor of order i of B is not positive definite.  The factoriza‐
140               tion of B could not be completed and no eigenvalues  or  eigen‐
141               vectors were computed.
142

FURTHER DETAILS

144       Based on contributions by
145          Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA
146
147
148
149
150 LAPACK driver routine (version 3.N1o)vember 2006                       ZHPGVD(1)
Impressum