1CHPGVD(1) LAPACK driver routine (version 3.1) CHPGVD(1)
2
3
4
6 CHPGVD - 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
11 SUBROUTINE CHPGVD( 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 REAL RWORK( * ), W( * )
21
22 COMPLEX AP( * ), BP( * ), WORK( * ), Z( LDZ, * )
23
25 CHPGVD 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
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 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 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) REAL array, dimension (N)
79 If INFO = 0, the eigenvalues in ascending order.
80
81 Z (output) COMPLEX 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 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) REAL 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: CPPTRF or CHPEVD returned an error code:
136 <= N: if INFO = i, CHPEVD 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
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 CHPGVD(1)