1CHPGVD(1)             LAPACK driver routine (version 3.2)            CHPGVD(1)
2
3
4

NAME

6       CHPGVD - computes all the eigenvalues and, optionally, the eigenvectors
7       of a 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 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

PURPOSE

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       The  divide  and  conquer  algorithm  makes very mild assumptions about
32       floating point arithmetic. It will work on machines with a guard  digit
33       in add/subtract, or on those binary machines without guard digits which
34       subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It  could
35       conceivably  fail on hexadecimal or decimal machines without guard dig‐
36       its, but we know of none.
37

ARGUMENTS

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

FURTHER DETAILS

135       Based on contributions by
136          Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA
137
138
139
140 LAPACK driver routine (version 3.N2o)vember 2008                       CHPGVD(1)
Impressum