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