1CHPEVD(1) LAPACK driver routine (version 3.1) CHPEVD(1)
2
3
4
6 CHPEVD - all the eigenvalues and, optionally, eigenvectors of a complex
7 Hermitian matrix A in packed storage
8
10 SUBROUTINE CHPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, RWORK,
11 LRWORK, IWORK, LIWORK, INFO )
12
13 CHARACTER JOBZ, UPLO
14
15 INTEGER INFO, LDZ, LIWORK, LRWORK, LWORK, N
16
17 INTEGER IWORK( * )
18
19 REAL RWORK( * ), W( * )
20
21 COMPLEX AP( * ), WORK( * ), Z( LDZ, * )
22
24 CHPEVD computes all the eigenvalues and, optionally, eigenvectors of a
25 complex Hermitian matrix A in packed storage. If eigenvectors are
26 desired, it uses a divide and conquer algorithm.
27
28 The divide and conquer algorithm makes very mild assumptions about
29 floating point arithmetic. It will work on machines with a guard digit
30 in add/subtract, or on those binary machines without guard digits which
31 subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could
32 conceivably fail on hexadecimal or decimal machines without guard dig‐
33 its, but we know of none.
34
35
37 JOBZ (input) CHARACTER*1
38 = 'N': Compute eigenvalues only;
39 = 'V': Compute eigenvalues and eigenvectors.
40
41 UPLO (input) CHARACTER*1
42 = 'U': Upper triangle of A is stored;
43 = 'L': Lower triangle of A is stored.
44
45 N (input) INTEGER
46 The order of the matrix A. N >= 0.
47
48 AP (input/output) COMPLEX array, dimension (N*(N+1)/2)
49 On entry, the upper or lower triangle of the Hermitian matrix
50 A, packed columnwise in a linear array. The j-th column of A
51 is stored in the array AP as follows: if UPLO = 'U', AP(i +
52 (j-1)*j/2) = A(i,j) for 1<=i<=j; if UPLO = 'L', AP(i +
53 (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.
54
55 On exit, AP is overwritten by values generated during the
56 reduction to tridiagonal form. If UPLO = 'U', the diagonal and
57 first superdiagonal of the tridiagonal matrix T overwrite the
58 corresponding elements of A, and if UPLO = 'L', the diagonal
59 and first subdiagonal of T overwrite the corresponding elements
60 of A.
61
62 W (output) REAL array, dimension (N)
63 If INFO = 0, the eigenvalues in ascending order.
64
65 Z (output) COMPLEX array, dimension (LDZ, N)
66 If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal
67 eigenvectors of the matrix A, with the i-th column of Z holding
68 the eigenvector associated with W(i). If JOBZ = 'N', then Z is
69 not referenced.
70
71 LDZ (input) INTEGER
72 The leading dimension of the array Z. LDZ >= 1, and if JOBZ =
73 'V', LDZ >= max(1,N).
74
75 WORK (workspace/output) COMPLEX array, dimension (MAX(1,LWORK))
76 On exit, if INFO = 0, WORK(1) returns the required LWORK.
77
78 LWORK (input) INTEGER
79 The dimension of array WORK. If N <= 1, LWORK
80 must be at least 1. If JOBZ = 'N' and N > 1, LWORK must be at
81 least N. If JOBZ = 'V' and N > 1, LWORK must be at least 2*N.
82
83 If LWORK = -1, then a workspace query is assumed; the routine
84 only calculates the required sizes of the WORK, RWORK and IWORK
85 arrays, returns these values as the first entries of the WORK,
86 RWORK and IWORK arrays, and no error message related to LWORK
87 or LRWORK or LIWORK is issued by XERBLA.
88
89 RWORK (workspace/output) REAL array, dimension (MAX(1,LRWORK))
90 On exit, if INFO = 0, RWORK(1) returns the required LRWORK.
91
92 LRWORK (input) INTEGER
93 The dimension of array RWORK. If N <= 1, LRWORK
94 must be at least 1. If JOBZ = 'N' and N > 1, LRWORK must be at
95 least N. If JOBZ = 'V' and N > 1, LRWORK must be at least 1 +
96 5*N + 2*N**2.
97
98 If LRWORK = -1, then a workspace query is assumed; the routine
99 only calculates the required sizes of the WORK, RWORK and IWORK
100 arrays, returns these values as the first entries of the WORK,
101 RWORK and IWORK arrays, and no error message related to LWORK
102 or LRWORK or LIWORK is issued by XERBLA.
103
104 IWORK (workspace/output) INTEGER array, dimension (MAX(1,LIWORK))
105 On exit, if INFO = 0, IWORK(1) returns the required LIWORK.
106
107 LIWORK (input) INTEGER
108 The dimension of array IWORK. If JOBZ = 'N' or N <= 1, LIWORK
109 must be at least 1. If JOBZ = 'V' and N > 1, LIWORK must be
110 at least 3 + 5*N.
111
112 If LIWORK = -1, then a workspace query is assumed; the routine
113 only calculates the required sizes of the WORK, RWORK and IWORK
114 arrays, returns these values as the first entries of the WORK,
115 RWORK and IWORK arrays, and no error message related to LWORK
116 or LRWORK or LIWORK is issued by XERBLA.
117
118 INFO (output) INTEGER
119 = 0: successful exit
120 < 0: if INFO = -i, the i-th argument had an illegal value.
121 > 0: if INFO = i, the algorithm failed to converge; i off-
122 diagonal elements of an intermediate tridiagonal form did not
123 converge to zero.
124
125
126
127 LAPACK driver routine (version 3.N1o)vember 2006 CHPEVD(1)