1ZHEEVD(1) LAPACK driver routine (version 3.1) ZHEEVD(1)
2
3
4
6 ZHEEVD - all eigenvalues and, optionally, eigenvectors of a complex
7 Hermitian matrix A
8
10 SUBROUTINE ZHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK,
11 LRWORK, IWORK, LIWORK, INFO )
12
13 CHARACTER JOBZ, UPLO
14
15 INTEGER INFO, LDA, LIWORK, LRWORK, LWORK, N
16
17 INTEGER IWORK( * )
18
19 DOUBLE PRECISION RWORK( * ), W( * )
20
21 COMPLEX*16 A( LDA, * ), WORK( * )
22
24 ZHEEVD computes all eigenvalues and, optionally, eigenvectors of a com‐
25 plex Hermitian matrix A. If eigenvectors are desired, it uses a divide
26 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 A (input/output) COMPLEX*16 array, dimension (LDA, N)
49 On entry, the Hermitian matrix A. If UPLO = 'U', the leading
50 N-by-N upper triangular part of A contains the upper triangular
51 part of the matrix A. If UPLO = 'L', the leading N-by-N lower
52 triangular part of A contains the lower triangular part of the
53 matrix A. On exit, if JOBZ = 'V', then if INFO = 0, A contains
54 the orthonormal eigenvectors of the matrix A. If JOBZ = 'N',
55 then on exit the lower triangle (if UPLO='L') or the upper tri‐
56 angle (if UPLO='U') of A, including the diagonal, is destroyed.
57
58 LDA (input) INTEGER
59 The leading dimension of the array A. LDA >= max(1,N).
60
61 W (output) DOUBLE PRECISION array, dimension (N)
62 If INFO = 0, the eigenvalues in ascending order.
63
64 WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK))
65 On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
66
67 LWORK (input) INTEGER
68 The length of the array WORK. If N <= 1, LWORK
69 must be at least 1. If JOBZ = 'N' and N > 1, LWORK must be at
70 least N + 1. If JOBZ = 'V' and N > 1, LWORK must be at least
71 2*N + N**2.
72
73 If LWORK = -1, then a workspace query is assumed; the routine
74 only calculates the optimal sizes of the WORK, RWORK and IWORK
75 arrays, returns these values as the first entries of the WORK,
76 RWORK and IWORK arrays, and no error message related to LWORK
77 or LRWORK or LIWORK is issued by XERBLA.
78
79 RWORK (workspace/output) DOUBLE PRECISION array,
80 dimension (LRWORK) On exit, if INFO = 0, RWORK(1) returns the
81 optimal LRWORK.
82
83 LRWORK (input) INTEGER
84 The dimension of the array RWORK. If N <= 1,
85 LRWORK must be at least 1. If JOBZ = 'N' and N > 1, LRWORK
86 must be at least N. If JOBZ = 'V' and N > 1, LRWORK must be
87 at least 1 + 5*N + 2*N**2.
88
89 If LRWORK = -1, then a workspace query is assumed; the routine
90 only calculates the optimal sizes of the WORK, RWORK and IWORK
91 arrays, returns these values as the first entries of the WORK,
92 RWORK and IWORK arrays, and no error message related to LWORK
93 or LRWORK or LIWORK is issued by XERBLA.
94
95 IWORK (workspace/output) INTEGER array, dimension (MAX(1,LIWORK))
96 On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK.
97
98 LIWORK (input) INTEGER
99 The dimension of the array IWORK. If N <= 1,
100 LIWORK must be at least 1. If JOBZ = 'N' and N > 1, LIWORK
101 must be at least 1. If JOBZ = 'V' and N > 1, LIWORK must be
102 at least 3 + 5*N.
103
104 If LIWORK = -1, then a workspace query is assumed; the routine
105 only calculates the optimal sizes of the WORK, RWORK and IWORK
106 arrays, returns these values as the first entries of the WORK,
107 RWORK and IWORK arrays, and no error message related to LWORK
108 or LRWORK or LIWORK is issued by XERBLA.
109
110 INFO (output) INTEGER
111 = 0: successful exit
112 < 0: if INFO = -i, the i-th argument had an illegal value
113 > 0: if INFO = i and JOBZ = 'N', then the algorithm failed to
114 converge; i off-diagonal elements of an intermediate tridiago‐
115 nal form did not converge to zero; if INFO = i and JOBZ = 'V',
116 then the algorithm failed to compute an eigenvalue while work‐
117 ing on the submatrix lying in rows and columns INFO/(N+1)
118 through mod(INFO,N+1).
119
121 Based on contributions by
122 Jeff Rutter, Computer Science Division, University of California
123 at Berkeley, USA
124
125 Modified description of INFO. Sven, 16 Feb 05.
126
127
128
129 LAPACK driver routine (version 3.N1o)vember 2006 ZHEEVD(1)