Functions | |
| subroutine | sbdsvdx (uplo, jobz, range, n, d, e, vl, vu, il, iu, ns, s, z, ldz, work, iwork, info) |
| SBDSVDX | |
| subroutine | sggglm (n, m, p, a, lda, b, ldb, d, x, y, work, lwork, info) |
| SGGGLM | |
| subroutine | ssbev (jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, info) |
| SSBEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | ssbev_2stage (jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, info) |
| SSBEV_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | ssbevd (jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, iwork, liwork, info) |
| SSBEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | ssbevd_2stage (jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, iwork, liwork, info) |
| SSBEVD_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | ssbevx (jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info) |
| SSBEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | ssbevx_2stage (jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info) |
| SSBEVX_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | ssbgv (jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, w, z, ldz, work, info) |
| SSBGV | |
| subroutine | ssbgvd (jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, w, z, ldz, work, lwork, iwork, liwork, info) |
| SSBGVD | |
| subroutine | ssbgvx (jobz, range, uplo, n, ka, kb, ab, ldab, bb, ldbb, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info) |
| SSBGVX | |
| subroutine | sspev (jobz, uplo, n, ap, w, z, ldz, work, info) |
| SSPEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | sspevd (jobz, uplo, n, ap, w, z, ldz, work, lwork, iwork, liwork, info) |
| SSPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | sspevx (jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info) |
| SSPEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | sspgv (itype, jobz, uplo, n, ap, bp, w, z, ldz, work, info) |
| SSPGV | |
| subroutine | sspgvd (itype, jobz, uplo, n, ap, bp, w, z, ldz, work, lwork, iwork, liwork, info) |
| SSPGVD | |
| subroutine | sspgvx (itype, jobz, range, uplo, n, ap, bp, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info) |
| SSPGVX | |
| subroutine | sstev (jobz, n, d, e, z, ldz, work, info) |
| SSTEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | sstevd (jobz, n, d, e, z, ldz, work, lwork, iwork, liwork, info) |
| SSTEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | sstevr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info) |
| SSTEVR computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | sstevx (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info) |
| SSTEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
This is the group of real Other Eigenvalue routines
| subroutine sbdsvdx | ( | character | uplo, |
| character | jobz, | ||
| character | range, | ||
| integer | n, | ||
| real, dimension( * ) | d, | ||
| real, dimension( * ) | e, | ||
| real | vl, | ||
| real | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| integer | ns, | ||
| real, dimension( * ) | s, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork, | ||
| integer | info ) |
SBDSVDX
Download SBDSVDX + dependencies [TGZ] [ZIP] [TXT]
!>
!> SBDSVDX computes the singular value decomposition (SVD) of a real
!> N-by-N (upper or lower) bidiagonal matrix B, B = U * S * VT,
!> where S is a diagonal matrix with non-negative diagonal elements
!> (the singular values of B), and U and VT are orthogonal matrices
!> of left and right singular vectors, respectively.
!>
!> Given an upper bidiagonal B with diagonal D = [ d_1 d_2 ... d_N ]
!> and superdiagonal E = [ e_1 e_2 ... e_N-1 ], SBDSVDX computes the
!> singular value decompositon of B through the eigenvalues and
!> eigenvectors of the N*2-by-N*2 tridiagonal matrix
!>
!> | 0 d_1 |
!> | d_1 0 e_1 |
!> TGK = | e_1 0 d_2 |
!> | d_2 . . |
!> | . . . |
!>
!> If (s,u,v) is a singular triplet of B with ||u|| = ||v|| = 1, then
!> (+/-s,q), ||q|| = 1, are eigenpairs of TGK, with q = P * ( u' +/-v' ) /
!> sqrt(2) = ( v_1 u_1 v_2 u_2 ... v_n u_n ) / sqrt(2), and
!> P = [ e_{n+1} e_{1} e_{n+2} e_{2} ... ].
!>
!> Given a TGK matrix, one can either a) compute -s,-v and change signs
!> so that the singular values (and corresponding vectors) are already in
!> descending order (as in SGESVD/SGESDD) or b) compute s,v and reorder
!> the values (and corresponding vectors). SBDSVDX implements a) by
!> calling SSTEVX (bisection plus inverse iteration, to be replaced
!> with a version of the Multiple Relative Robust Representation
!> algorithm. (See P. Willems and B. Lang, A framework for the MR^3
!> algorithm: theory and implementation, SIAM J. Sci. Comput.,
!> 35:740-766, 2013.)
!> | [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': B is upper bidiagonal; !> = 'L': B is lower bidiagonal. !> |
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute singular values only; !> = 'V': Compute singular values and singular vectors. !> |
| [in] | RANGE | !> RANGE is CHARACTER*1 !> = 'A': all singular values will be found. !> = 'V': all singular values in the half-open interval [VL,VU) !> will be found. !> = 'I': the IL-th through IU-th singular values will be found. !> |
| [in] | N | !> N is INTEGER !> The order of the bidiagonal matrix. N >= 0. !> |
| [in] | D | !> D is REAL array, dimension (N) !> The n diagonal elements of the bidiagonal matrix B. !> |
| [in] | E | !> E is REAL array, dimension (max(1,N-1)) !> The (n-1) superdiagonal elements of the bidiagonal matrix !> B in elements 1 to N-1. !> |
| [in] | VL | !> VL is REAL !> If RANGE='V', the lower bound of the interval to !> be searched for singular values. VU > VL. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | VU | !> VU is REAL !> If RANGE='V', the upper bound of the interval to !> be searched for singular values. VU > VL. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | IL | !> IL is INTEGER !> If RANGE='I', the index of the !> smallest singular value to be returned. !> 1 <= IL <= IU <= min(M,N), if min(M,N) > 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | IU | !> IU is INTEGER !> If RANGE='I', the index of the !> largest singular value to be returned. !> 1 <= IL <= IU <= min(M,N), if min(M,N) > 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [out] | NS | !> NS is INTEGER !> The total number of singular values found. 0 <= NS <= N. !> If RANGE = 'A', NS = N, and if RANGE = 'I', NS = IU-IL+1. !> |
| [out] | S | !> S is REAL array, dimension (N) !> The first NS elements contain the selected singular values in !> ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (2*N,K) !> If JOBZ = 'V', then if INFO = 0 the first NS columns of Z !> contain the singular vectors of the matrix B corresponding to !> the selected singular values, with U in rows 1 to N and V !> in rows N+1 to N*2, i.e. !> Z = [ U ] !> [ V ] !> If JOBZ = 'N', then Z is not referenced. !> Note: The user must ensure that at least K = NS+1 columns are !> supplied in the array Z; if RANGE = 'V', the exact value of !> NS is not known in advance and an upper bound must be used. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(2,N*2). !> |
| [out] | WORK | !> WORK is REAL array, dimension (14*N) !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (12*N) !> If JOBZ = 'V', then if INFO = 0, the first NS elements of !> IWORK are zero. If INFO > 0, then IWORK contains the indices !> of the eigenvectors that failed to converge in DSTEVX. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, then i eigenvectors failed to converge !> in SSTEVX. The indices of the eigenvectors !> (as returned by SSTEVX) are stored in the !> array IWORK. !> if INFO = N*2 + 1, an internal error occurred. !> |
Definition at line 224 of file sbdsvdx.f.
| subroutine sggglm | ( | integer | n, |
| integer | m, | ||
| integer | p, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( * ) | d, | ||
| real, dimension( * ) | x, | ||
| real, dimension( * ) | y, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SGGGLM
Download SGGGLM + dependencies [TGZ] [ZIP] [TXT]
!> !> SGGGLM solves a general Gauss-Markov linear model (GLM) problem: !> !> minimize || y ||_2 subject to d = A*x + B*y !> x !> !> where A is an N-by-M matrix, B is an N-by-P matrix, and d is a !> given N-vector. It is assumed that M <= N <= M+P, and !> !> rank(A) = M and rank( A B ) = N. !> !> Under these assumptions, the constrained equation is always !> consistent, and there is a unique solution x and a minimal 2-norm !> solution y, which is obtained using a generalized QR factorization !> of the matrices (A, B) given by !> !> A = Q*(R), B = Q*T*Z. !> (0) !> !> In particular, if matrix B is square nonsingular, then the problem !> GLM is equivalent to the following weighted linear least squares !> problem !> !> minimize || inv(B)*(d-A*x) ||_2 !> x !> !> where inv(B) denotes the inverse of B. !>
| [in] | N | !> N is INTEGER !> The number of rows of the matrices A and B. N >= 0. !> |
| [in] | M | !> M is INTEGER !> The number of columns of the matrix A. 0 <= M <= N. !> |
| [in] | P | !> P is INTEGER !> The number of columns of the matrix B. P >= N-M. !> |
| [in,out] | A | !> A is REAL array, dimension (LDA,M) !> On entry, the N-by-M matrix A. !> On exit, the upper triangular part of the array A contains !> the M-by-M upper triangular matrix R. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in,out] | B | !> B is REAL array, dimension (LDB,P) !> On entry, the N-by-P matrix B. !> On exit, if N <= P, the upper triangle of the subarray !> B(1:N,P-N+1:P) contains the N-by-N upper triangular matrix T; !> if N > P, the elements on and above the (N-P)th subdiagonal !> contain the N-by-P upper trapezoidal matrix T. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | D | !> D is REAL array, dimension (N) !> On entry, D is the left hand side of the GLM equation. !> On exit, D is destroyed. !> |
| [out] | X | !> X is REAL array, dimension (M) !> |
| [out] | Y | !> Y is REAL array, dimension (P) !> !> On exit, X and Y are the solutions of the GLM problem. !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,N+M+P). !> For optimum performance, LWORK >= M+min(N,P)+max(N,P)*NB, !> where NB is an upper bound for the optimal blocksizes for !> SGEQRF, SGERQF, SORMQR and SORMRQ. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> = 1: the upper triangular factor R associated with A in the !> generalized QR factorization of the pair (A, B) is !> singular, so that rank(A) < M; the least squares !> solution could not be computed. !> = 2: the bottom (N-M) by (N-M) part of the upper trapezoidal !> factor T associated with B in the generalized QR !> factorization of the pair (A, B) is singular, so that !> rank( A B ) < N; the least squares solution could not !> be computed. !> |
Definition at line 183 of file sggglm.f.
| subroutine ssbev | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| real, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | info ) |
SSBEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSBEV + dependencies [TGZ] [ZIP] [TXT]
!> !> SSBEV computes all the eigenvalues and, optionally, eigenvectors of !> a real symmetric band matrix A. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | KD | !> KD is INTEGER !> The number of superdiagonals of the matrix A if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KD >= 0. !> |
| [in,out] | AB | !> AB is REAL array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix A, stored in the first KD+1 rows of the array. The !> j-th column of A is stored in the j-th column of the array AB !> as follows: !> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j; !> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd). !> !> On exit, AB is overwritten by values generated during the !> reduction to tridiagonal form. If UPLO = 'U', the first !> superdiagonal and the diagonal of the tridiagonal matrix T !> are returned in rows KD and KD+1 of AB, and if UPLO = 'L', !> the diagonal and first subdiagonal of T are returned in the !> first two rows of AB. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KD + 1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal !> eigenvectors of the matrix A, with the i-th column of Z !> holding the eigenvector associated with W(i). !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (max(1,3*N-2)) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, the algorithm failed to converge; i !> off-diagonal elements of an intermediate tridiagonal !> form did not converge to zero. !> |
Definition at line 144 of file ssbev.f.
| subroutine ssbev_2stage | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| real, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SSBEV_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSBEV_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> SSBEV_2STAGE computes all the eigenvalues and, optionally, eigenvectors of !> a real symmetric band matrix A using the 2stage technique for !> the reduction to tridiagonal. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> Not available in this release. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | KD | !> KD is INTEGER !> The number of superdiagonals of the matrix A if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KD >= 0. !> |
| [in,out] | AB | !> AB is REAL array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix A, stored in the first KD+1 rows of the array. The !> j-th column of A is stored in the j-th column of the array AB !> as follows: !> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j; !> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd). !> !> On exit, AB is overwritten by values generated during the !> reduction to tridiagonal form. If UPLO = 'U', the first !> superdiagonal and the diagonal of the tridiagonal matrix T !> are returned in rows KD and KD+1 of AB, and if UPLO = 'L', !> the diagonal and first subdiagonal of T are returned in the !> first two rows of AB. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KD + 1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal !> eigenvectors of the matrix A, with the i-th column of Z !> holding the eigenvector associated with W(i). !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension LWORK !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of the array WORK. LWORK >= 1, when N <= 1; !> otherwise !> If JOBZ = 'N' and N > 1, LWORK must be queried. !> LWORK = MAX(1, dimension) where !> dimension = (2KD+1)*N + KD*NTHREADS + N !> where KD is the size of the band. !> NTHREADS is the number of threads used when !> openMP compilation is enabled, otherwise =1. !> If JOBZ = 'V' and N > 1, LWORK must be queried. Not yet available. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, the algorithm failed to converge; i !> off-diagonal elements of an intermediate tridiagonal !> form did not converge to zero. !> |
!> !> All details about the 2stage techniques are available in: !> !> Azzam Haidar, Hatem Ltaief, and Jack Dongarra. !> Parallel reduction to condensed forms for symmetric eigenvalue problems !> using aggregated fine-grained and memory-aware kernels. In Proceedings !> of 2011 International Conference for High Performance Computing, !> Networking, Storage and Analysis (SC '11), New York, NY, USA, !> Article 8 , 11 pages. !> http://doi.acm.org/10.1145/2063384.2063394 !> !> A. Haidar, J. Kurzak, P. Luszczek, 2013. !> An improved parallel singular value algorithm and its implementation !> for multicore hardware, In Proceedings of 2013 International Conference !> for High Performance Computing, Networking, Storage and Analysis (SC '13). !> Denver, Colorado, USA, 2013. !> Article 90, 12 pages. !> http://doi.acm.org/10.1145/2503210.2503292 !> !> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. !> A novel hybrid CPU-GPU generalized eigensolver for electronic structure !> calculations based on fine-grained memory aware tasks. !> International Journal of High Performance Computing Applications. !> Volume 28 Issue 2, Pages 196-209, May 2014. !> http://hpc.sagepub.com/content/28/2/196 !> !>
Definition at line 202 of file ssbev_2stage.f.
| subroutine ssbevd | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| real, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
SSBEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSBEVD + dependencies [TGZ] [ZIP] [TXT]
!> !> SSBEVD computes all the eigenvalues and, optionally, eigenvectors of !> a real symmetric band matrix A. If eigenvectors are desired, it uses !> a divide and conquer algorithm. !> !> The divide and conquer algorithm makes very mild assumptions about !> floating point arithmetic. It will work on machines with a guard !> digit in add/subtract, or on those binary machines without guard !> digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or !> Cray-2. It could conceivably fail on hexadecimal or decimal machines !> without guard digits, but we know of none. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | KD | !> KD is INTEGER !> The number of superdiagonals of the matrix A if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KD >= 0. !> |
| [in,out] | AB | !> AB is REAL array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix A, stored in the first KD+1 rows of the array. The !> j-th column of A is stored in the j-th column of the array AB !> as follows: !> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j; !> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd). !> !> On exit, AB is overwritten by values generated during the !> reduction to tridiagonal form. If UPLO = 'U', the first !> superdiagonal and the diagonal of the tridiagonal matrix T !> are returned in rows KD and KD+1 of AB, and if UPLO = 'L', !> the diagonal and first subdiagonal of T are returned in the !> first two rows of AB. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KD + 1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal !> eigenvectors of the matrix A, with the i-th column of Z !> holding the eigenvector associated with W(i). !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, !> dimension (LWORK) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> IF N <= 1, LWORK must be at least 1. !> If JOBZ = 'N' and N > 2, LWORK must be at least 2*N. !> If JOBZ = 'V' and N > 2, LWORK must be at least !> ( 1 + 5*N + 2*N**2 ). !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal sizes of the WORK and IWORK !> arrays, returns these values as the first entries of the WORK !> and IWORK arrays, and no error message related to LWORK or !> LIWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (MAX(1,LIWORK)) !> On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK. !> |
| [in] | LIWORK | !> LIWORK is INTEGER !> The dimension of the array IWORK. !> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1. !> If JOBZ = 'V' and N > 2, LIWORK must be at least 3 + 5*N. !> !> If LIWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal sizes of the WORK and !> IWORK arrays, returns these values as the first entries of !> the WORK and IWORK arrays, and no error message related to !> LWORK or LIWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, the algorithm failed to converge; i !> off-diagonal elements of an intermediate tridiagonal !> form did not converge to zero. !> |
Definition at line 191 of file ssbevd.f.
| subroutine ssbevd_2stage | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| real, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
SSBEVD_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSBEVD_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> SSBEVD_2STAGE computes all the eigenvalues and, optionally, eigenvectors of !> a real symmetric band matrix A using the 2stage technique for !> the reduction to tridiagonal. If eigenvectors are desired, it uses !> a divide and conquer algorithm. !> !> The divide and conquer algorithm makes very mild assumptions about !> floating point arithmetic. It will work on machines with a guard !> digit in add/subtract, or on those binary machines without guard !> digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or !> Cray-2. It could conceivably fail on hexadecimal or decimal machines !> without guard digits, but we know of none. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> Not available in this release. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | KD | !> KD is INTEGER !> The number of superdiagonals of the matrix A if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KD >= 0. !> |
| [in,out] | AB | !> AB is REAL array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix A, stored in the first KD+1 rows of the array. The !> j-th column of A is stored in the j-th column of the array AB !> as follows: !> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j; !> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd). !> !> On exit, AB is overwritten by values generated during the !> reduction to tridiagonal form. If UPLO = 'U', the first !> superdiagonal and the diagonal of the tridiagonal matrix T !> are returned in rows KD and KD+1 of AB, and if UPLO = 'L', !> the diagonal and first subdiagonal of T are returned in the !> first two rows of AB. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KD + 1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal !> eigenvectors of the matrix A, with the i-th column of Z !> holding the eigenvector associated with W(i). !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension LWORK !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of the array WORK. LWORK >= 1, when N <= 1; !> otherwise !> If JOBZ = 'N' and N > 1, LWORK must be queried. !> LWORK = MAX(1, dimension) where !> dimension = (2KD+1)*N + KD*NTHREADS + N !> where KD is the size of the band. !> NTHREADS is the number of threads used when !> openMP compilation is enabled, otherwise =1. !> If JOBZ = 'V' and N > 1, LWORK must be queried. Not yet available. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal sizes of the WORK and IWORK !> arrays, returns these values as the first entries of the WORK !> and IWORK arrays, and no error message related to LWORK or !> LIWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (MAX(1,LIWORK)) !> On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK. !> |
| [in] | LIWORK | !> LIWORK is INTEGER !> The dimension of the array IWORK. !> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1. !> If JOBZ = 'V' and N > 2, LIWORK must be at least 3 + 5*N. !> !> If LIWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal sizes of the WORK and !> IWORK arrays, returns these values as the first entries of !> the WORK and IWORK arrays, and no error message related to !> LWORK or LIWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, the algorithm failed to converge; i !> off-diagonal elements of an intermediate tridiagonal !> form did not converge to zero. !> |
!> !> All details about the 2stage techniques are available in: !> !> Azzam Haidar, Hatem Ltaief, and Jack Dongarra. !> Parallel reduction to condensed forms for symmetric eigenvalue problems !> using aggregated fine-grained and memory-aware kernels. In Proceedings !> of 2011 International Conference for High Performance Computing, !> Networking, Storage and Analysis (SC '11), New York, NY, USA, !> Article 8 , 11 pages. !> http://doi.acm.org/10.1145/2063384.2063394 !> !> A. Haidar, J. Kurzak, P. Luszczek, 2013. !> An improved parallel singular value algorithm and its implementation !> for multicore hardware, In Proceedings of 2013 International Conference !> for High Performance Computing, Networking, Storage and Analysis (SC '13). !> Denver, Colorado, USA, 2013. !> Article 90, 12 pages. !> http://doi.acm.org/10.1145/2503210.2503292 !> !> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. !> A novel hybrid CPU-GPU generalized eigensolver for electronic structure !> calculations based on fine-grained memory aware tasks. !> International Journal of High Performance Computing Applications. !> Volume 28 Issue 2, Pages 196-209, May 2014. !> http://hpc.sagepub.com/content/28/2/196 !> !>
Definition at line 232 of file ssbevd_2stage.f.
| subroutine ssbevx | ( | character | jobz, |
| character | range, | ||
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| real, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| real, dimension( ldq, * ) | q, | ||
| integer | ldq, | ||
| real | vl, | ||
| real | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| real | abstol, | ||
| integer | m, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
SSBEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSBEVX + dependencies [TGZ] [ZIP] [TXT]
!> !> SSBEVX computes selected eigenvalues and, optionally, eigenvectors !> of a real symmetric band matrix A. Eigenvalues and eigenvectors can !> be selected by specifying either a range of values or a range of !> indices for the desired eigenvalues. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | RANGE | !> RANGE is CHARACTER*1 !> = 'A': all eigenvalues will be found; !> = 'V': all eigenvalues in the half-open interval (VL,VU] !> will be found; !> = 'I': the IL-th through IU-th eigenvalues will be found. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | KD | !> KD is INTEGER !> The number of superdiagonals of the matrix A if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KD >= 0. !> |
| [in,out] | AB | !> AB is REAL array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix A, stored in the first KD+1 rows of the array. The !> j-th column of A is stored in the j-th column of the array AB !> as follows: !> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j; !> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd). !> !> On exit, AB is overwritten by values generated during the !> reduction to tridiagonal form. If UPLO = 'U', the first !> superdiagonal and the diagonal of the tridiagonal matrix T !> are returned in rows KD and KD+1 of AB, and if UPLO = 'L', !> the diagonal and first subdiagonal of T are returned in the !> first two rows of AB. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KD + 1. !> |
| [out] | Q | !> Q is REAL array, dimension (LDQ, N) !> If JOBZ = 'V', the N-by-N orthogonal matrix used in the !> reduction to tridiagonal form. !> If JOBZ = 'N', the array Q is not referenced. !> |
| [in] | LDQ | !> LDQ is INTEGER !> The leading dimension of the array Q. If JOBZ = 'V', then !> LDQ >= max(1,N). !> |
| [in] | VL | !> VL is REAL !> If RANGE='V', the lower bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | VU | !> VU is REAL !> If RANGE='V', the upper bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | IL | !> IL is INTEGER !> If RANGE='I', the index of the !> smallest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | IU | !> IU is INTEGER !> If RANGE='I', the index of the !> largest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | ABSTOL | !> ABSTOL is REAL
!> The absolute error tolerance for the eigenvalues.
!> An approximate eigenvalue is accepted as converged
!> when it is determined to lie in an interval [a,b]
!> of width less than or equal to
!>
!> ABSTOL + EPS * max( |a|,|b| ) ,
!>
!> where EPS is the machine precision. If ABSTOL is less than
!> or equal to zero, then EPS*|T| will be used in its place,
!> where |T| is the 1-norm of the tridiagonal matrix obtained
!> by reducing AB to tridiagonal form.
!>
!> Eigenvalues will be computed most accurately when ABSTOL is
!> set to twice the underflow threshold 2*SLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*SLAMCH('S').
!>
!> See by Demmel and
!> Kahan, LAPACK Working Note #3.
!> |
| [out] | M | !> M is INTEGER !> The total number of eigenvalues found. 0 <= M <= N. !> If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> The first M elements contain the selected eigenvalues in !> ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, max(1,M)) !> If JOBZ = 'V', then if INFO = 0, the first M columns of Z !> contain the orthonormal eigenvectors of the matrix A !> corresponding to the selected eigenvalues, with the i-th !> column of Z holding the eigenvector associated with W(i). !> If an eigenvector fails to converge, then that column of Z !> contains the latest approximation to the eigenvector, and the !> index of the eigenvector is returned in IFAIL. !> If JOBZ = 'N', then Z is not referenced. !> Note: the user must ensure that at least max(1,M) columns are !> supplied in the array Z; if RANGE = 'V', the exact value of M !> is not known in advance and an upper bound must be used. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (7*N) !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (5*N) !> |
| [out] | IFAIL | !> IFAIL is INTEGER array, dimension (N) !> If JOBZ = 'V', then if INFO = 0, the first M elements of !> IFAIL are zero. If INFO > 0, then IFAIL contains the !> indices of the eigenvectors that failed to converge. !> If JOBZ = 'N', then IFAIL is not referenced. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, then i eigenvectors failed to converge. !> Their indices are stored in array IFAIL. !> |
Definition at line 262 of file ssbevx.f.
| subroutine ssbevx_2stage | ( | character | jobz, |
| character | range, | ||
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| real, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| real, dimension( ldq, * ) | q, | ||
| integer | ldq, | ||
| real | vl, | ||
| real | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| real | abstol, | ||
| integer | m, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
SSBEVX_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSBEVX_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> SSBEVX_2STAGE computes selected eigenvalues and, optionally, eigenvectors !> of a real symmetric band matrix A using the 2stage technique for !> the reduction to tridiagonal. Eigenvalues and eigenvectors can !> be selected by specifying either a range of values or a range of !> indices for the desired eigenvalues. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> Not available in this release. !> |
| [in] | RANGE | !> RANGE is CHARACTER*1 !> = 'A': all eigenvalues will be found; !> = 'V': all eigenvalues in the half-open interval (VL,VU] !> will be found; !> = 'I': the IL-th through IU-th eigenvalues will be found. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | KD | !> KD is INTEGER !> The number of superdiagonals of the matrix A if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KD >= 0. !> |
| [in,out] | AB | !> AB is REAL array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix A, stored in the first KD+1 rows of the array. The !> j-th column of A is stored in the j-th column of the array AB !> as follows: !> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j; !> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd). !> !> On exit, AB is overwritten by values generated during the !> reduction to tridiagonal form. If UPLO = 'U', the first !> superdiagonal and the diagonal of the tridiagonal matrix T !> are returned in rows KD and KD+1 of AB, and if UPLO = 'L', !> the diagonal and first subdiagonal of T are returned in the !> first two rows of AB. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KD + 1. !> |
| [out] | Q | !> Q is REAL array, dimension (LDQ, N) !> If JOBZ = 'V', the N-by-N orthogonal matrix used in the !> reduction to tridiagonal form. !> If JOBZ = 'N', the array Q is not referenced. !> |
| [in] | LDQ | !> LDQ is INTEGER !> The leading dimension of the array Q. If JOBZ = 'V', then !> LDQ >= max(1,N). !> |
| [in] | VL | !> VL is REAL !> If RANGE='V', the lower bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | VU | !> VU is REAL !> If RANGE='V', the upper bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | IL | !> IL is INTEGER !> If RANGE='I', the index of the !> smallest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | IU | !> IU is INTEGER !> If RANGE='I', the index of the !> largest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | ABSTOL | !> ABSTOL is REAL
!> The absolute error tolerance for the eigenvalues.
!> An approximate eigenvalue is accepted as converged
!> when it is determined to lie in an interval [a,b]
!> of width less than or equal to
!>
!> ABSTOL + EPS * max( |a|,|b| ) ,
!>
!> where EPS is the machine precision. If ABSTOL is less than
!> or equal to zero, then EPS*|T| will be used in its place,
!> where |T| is the 1-norm of the tridiagonal matrix obtained
!> by reducing AB to tridiagonal form.
!>
!> Eigenvalues will be computed most accurately when ABSTOL is
!> set to twice the underflow threshold 2*SLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*SLAMCH('S').
!>
!> See by Demmel and
!> Kahan, LAPACK Working Note #3.
!> |
| [out] | M | !> M is INTEGER !> The total number of eigenvalues found. 0 <= M <= N. !> If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> The first M elements contain the selected eigenvalues in !> ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, max(1,M)) !> If JOBZ = 'V', then if INFO = 0, the first M columns of Z !> contain the orthonormal eigenvectors of the matrix A !> corresponding to the selected eigenvalues, with the i-th !> column of Z holding the eigenvector associated with W(i). !> If an eigenvector fails to converge, then that column of Z !> contains the latest approximation to the eigenvector, and the !> index of the eigenvector is returned in IFAIL. !> If JOBZ = 'N', then Z is not referenced. !> Note: the user must ensure that at least max(1,M) columns are !> supplied in the array Z; if RANGE = 'V', the exact value of M !> is not known in advance and an upper bound must be used. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (LWORK) !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of the array WORK. LWORK >= 1, when N <= 1; !> otherwise !> If JOBZ = 'N' and N > 1, LWORK must be queried. !> LWORK = MAX(1, 7*N, dimension) where !> dimension = (2KD+1)*N + KD*NTHREADS + 2*N !> where KD is the size of the band. !> NTHREADS is the number of threads used when !> openMP compilation is enabled, otherwise =1. !> If JOBZ = 'V' and N > 1, LWORK must be queried. Not yet available !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (5*N) !> |
| [out] | IFAIL | !> IFAIL is INTEGER array, dimension (N) !> If JOBZ = 'V', then if INFO = 0, the first M elements of !> IFAIL are zero. If INFO > 0, then IFAIL contains the !> indices of the eigenvectors that failed to converge. !> If JOBZ = 'N', then IFAIL is not referenced. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, then i eigenvectors failed to converge. !> Their indices are stored in array IFAIL. !> |
!> !> All details about the 2stage techniques are available in: !> !> Azzam Haidar, Hatem Ltaief, and Jack Dongarra. !> Parallel reduction to condensed forms for symmetric eigenvalue problems !> using aggregated fine-grained and memory-aware kernels. In Proceedings !> of 2011 International Conference for High Performance Computing, !> Networking, Storage and Analysis (SC '11), New York, NY, USA, !> Article 8 , 11 pages. !> http://doi.acm.org/10.1145/2063384.2063394 !> !> A. Haidar, J. Kurzak, P. Luszczek, 2013. !> An improved parallel singular value algorithm and its implementation !> for multicore hardware, In Proceedings of 2013 International Conference !> for High Performance Computing, Networking, Storage and Analysis (SC '13). !> Denver, Colorado, USA, 2013. !> Article 90, 12 pages. !> http://doi.acm.org/10.1145/2503210.2503292 !> !> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. !> A novel hybrid CPU-GPU generalized eigensolver for electronic structure !> calculations based on fine-grained memory aware tasks. !> International Journal of High Performance Computing Applications. !> Volume 28 Issue 2, Pages 196-209, May 2014. !> http://hpc.sagepub.com/content/28/2/196 !> !>
Definition at line 319 of file ssbevx_2stage.f.
| subroutine ssbgv | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | ka, | ||
| integer | kb, | ||
| real, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| real, dimension( ldbb, * ) | bb, | ||
| integer | ldbb, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | info ) |
SSBGV
Download SSBGV + dependencies [TGZ] [ZIP] [TXT]
!> !> SSBGV computes all the eigenvalues, and optionally, the eigenvectors !> of a real generalized symmetric-definite banded eigenproblem, of !> the form A*x=(lambda)*B*x. Here A and B are assumed to be symmetric !> and banded, and B is also positive definite. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangles of A and B are stored; !> = 'L': Lower triangles of A and B are stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A and B. N >= 0. !> |
| [in] | KA | !> KA is INTEGER !> The number of superdiagonals of the matrix A if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KA >= 0. !> |
| [in] | KB | !> KB is INTEGER !> The number of superdiagonals of the matrix B if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KB >= 0. !> |
| [in,out] | AB | !> AB is REAL array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix A, stored in the first ka+1 rows of the array. The !> j-th column of A is stored in the j-th column of the array AB !> as follows: !> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j; !> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka). !> !> On exit, the contents of AB are destroyed. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KA+1. !> |
| [in,out] | BB | !> BB is REAL array, dimension (LDBB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix B, stored in the first kb+1 rows of the array. The !> j-th column of B is stored in the j-th column of the array BB !> as follows: !> if UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j; !> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb). !> !> On exit, the factor S from the split Cholesky factorization !> B = S**T*S, as returned by SPBSTF. !> |
| [in] | LDBB | !> LDBB is INTEGER !> The leading dimension of the array BB. LDBB >= KB+1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of !> eigenvectors, with the i-th column of Z holding the !> eigenvector associated with W(i). The eigenvectors are !> normalized so that Z**T*B*Z = I. !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= N. !> |
| [out] | WORK | !> WORK is REAL array, dimension (3*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, and i is: !> <= N: the algorithm failed to converge: !> i off-diagonal elements of an intermediate !> tridiagonal form did not converge to zero; !> > N: if INFO = N + i, for 1 <= i <= N, then SPBSTF !> returned INFO = i: B is not positive definite. !> The factorization of B could not be completed and !> no eigenvalues or eigenvectors were computed. !> |
Definition at line 175 of file ssbgv.f.
| subroutine ssbgvd | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | ka, | ||
| integer | kb, | ||
| real, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| real, dimension( ldbb, * ) | bb, | ||
| integer | ldbb, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
SSBGVD
Download SSBGVD + dependencies [TGZ] [ZIP] [TXT]
!> !> SSBGVD computes all the eigenvalues, and optionally, the eigenvectors !> of a real generalized symmetric-definite banded eigenproblem, of the !> form A*x=(lambda)*B*x. Here A and B are assumed to be symmetric and !> banded, and B is also positive definite. If eigenvectors are !> desired, it uses a divide and conquer algorithm. !> !> The divide and conquer algorithm makes very mild assumptions about !> floating point arithmetic. It will work on machines with a guard !> digit in add/subtract, or on those binary machines without guard !> digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or !> Cray-2. It could conceivably fail on hexadecimal or decimal machines !> without guard digits, but we know of none. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangles of A and B are stored; !> = 'L': Lower triangles of A and B are stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A and B. N >= 0. !> |
| [in] | KA | !> KA is INTEGER !> The number of superdiagonals of the matrix A if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KA >= 0. !> |
| [in] | KB | !> KB is INTEGER !> The number of superdiagonals of the matrix B if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KB >= 0. !> |
| [in,out] | AB | !> AB is REAL array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix A, stored in the first ka+1 rows of the array. The !> j-th column of A is stored in the j-th column of the array AB !> as follows: !> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j; !> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka). !> !> On exit, the contents of AB are destroyed. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KA+1. !> |
| [in,out] | BB | !> BB is REAL array, dimension (LDBB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix B, stored in the first kb+1 rows of the array. The !> j-th column of B is stored in the j-th column of the array BB !> as follows: !> if UPLO = 'U', BB(ka+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j; !> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb). !> !> On exit, the factor S from the split Cholesky factorization !> B = S**T*S, as returned by SPBSTF. !> |
| [in] | LDBB | !> LDBB is INTEGER !> The leading dimension of the array BB. LDBB >= KB+1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of !> eigenvectors, with the i-th column of Z holding the !> eigenvector associated with W(i). The eigenvectors are !> normalized so Z**T*B*Z = I. !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> If N <= 1, LWORK >= 1. !> If JOBZ = 'N' and N > 1, LWORK >= 3*N. !> If JOBZ = 'V' and N > 1, LWORK >= 1 + 5*N + 2*N**2. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal sizes of the WORK and IWORK !> arrays, returns these values as the first entries of the WORK !> and IWORK arrays, and no error message related to LWORK or !> LIWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (MAX(1,LIWORK)) !> On exit, if LIWORK > 0, IWORK(1) returns the optimal LIWORK. !> |
| [in] | LIWORK | !> LIWORK is INTEGER !> The dimension of the array IWORK. !> If JOBZ = 'N' or N <= 1, LIWORK >= 1. !> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N. !> !> If LIWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal sizes of the WORK and !> IWORK arrays, returns these values as the first entries of !> the WORK and IWORK arrays, and no error message related to !> LWORK or LIWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, and i is: !> <= N: the algorithm failed to converge: !> i off-diagonal elements of an intermediate !> tridiagonal form did not converge to zero; !> > N: if INFO = N + i, for 1 <= i <= N, then SPBSTF !> returned INFO = i: B is not positive definite. !> The factorization of B could not be completed and !> no eigenvalues or eigenvectors were computed. !> |
Definition at line 225 of file ssbgvd.f.
| subroutine ssbgvx | ( | character | jobz, |
| character | range, | ||
| character | uplo, | ||
| integer | n, | ||
| integer | ka, | ||
| integer | kb, | ||
| real, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| real, dimension( ldbb, * ) | bb, | ||
| integer | ldbb, | ||
| real, dimension( ldq, * ) | q, | ||
| integer | ldq, | ||
| real | vl, | ||
| real | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| real | abstol, | ||
| integer | m, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
SSBGVX
Download SSBGVX + dependencies [TGZ] [ZIP] [TXT]
!> !> SSBGVX computes selected eigenvalues, and optionally, eigenvectors !> of a real generalized symmetric-definite banded eigenproblem, of !> the form A*x=(lambda)*B*x. Here A and B are assumed to be symmetric !> and banded, and B is also positive definite. Eigenvalues and !> eigenvectors can be selected by specifying either all eigenvalues, !> a range of values or a range of indices for the desired eigenvalues. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | RANGE | !> RANGE is CHARACTER*1 !> = 'A': all eigenvalues will be found. !> = 'V': all eigenvalues in the half-open interval (VL,VU] !> will be found. !> = 'I': the IL-th through IU-th eigenvalues will be found. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangles of A and B are stored; !> = 'L': Lower triangles of A and B are stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A and B. N >= 0. !> |
| [in] | KA | !> KA is INTEGER !> The number of superdiagonals of the matrix A if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KA >= 0. !> |
| [in] | KB | !> KB is INTEGER !> The number of superdiagonals of the matrix B if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KB >= 0. !> |
| [in,out] | AB | !> AB is REAL array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix A, stored in the first ka+1 rows of the array. The !> j-th column of A is stored in the j-th column of the array AB !> as follows: !> if UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-ka)<=i<=j; !> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+ka). !> !> On exit, the contents of AB are destroyed. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KA+1. !> |
| [in,out] | BB | !> BB is REAL array, dimension (LDBB, N) !> On entry, the upper or lower triangle of the symmetric band !> matrix B, stored in the first kb+1 rows of the array. The !> j-th column of B is stored in the j-th column of the array BB !> as follows: !> if UPLO = 'U', BB(ka+1+i-j,j) = B(i,j) for max(1,j-kb)<=i<=j; !> if UPLO = 'L', BB(1+i-j,j) = B(i,j) for j<=i<=min(n,j+kb). !> !> On exit, the factor S from the split Cholesky factorization !> B = S**T*S, as returned by SPBSTF. !> |
| [in] | LDBB | !> LDBB is INTEGER !> The leading dimension of the array BB. LDBB >= KB+1. !> |
| [out] | Q | !> Q is REAL array, dimension (LDQ, N) !> If JOBZ = 'V', the n-by-n matrix used in the reduction of !> A*x = (lambda)*B*x to standard form, i.e. C*x = (lambda)*x, !> and consequently C to tridiagonal form. !> If JOBZ = 'N', the array Q is not referenced. !> |
| [in] | LDQ | !> LDQ is INTEGER !> The leading dimension of the array Q. If JOBZ = 'N', !> LDQ >= 1. If JOBZ = 'V', LDQ >= max(1,N). !> |
| [in] | VL | !> VL is REAL !> !> If RANGE='V', the lower bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | VU | !> VU is REAL !> !> If RANGE='V', the upper bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | IL | !> IL is INTEGER !> !> If RANGE='I', the index of the !> smallest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | IU | !> IU is INTEGER !> !> If RANGE='I', the index of the !> largest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | ABSTOL | !> ABSTOL is REAL
!> The absolute error tolerance for the eigenvalues.
!> An approximate eigenvalue is accepted as converged
!> when it is determined to lie in an interval [a,b]
!> of width less than or equal to
!>
!> ABSTOL + EPS * max( |a|,|b| ) ,
!>
!> where EPS is the machine precision. If ABSTOL is less than
!> or equal to zero, then EPS*|T| will be used in its place,
!> where |T| is the 1-norm of the tridiagonal matrix obtained
!> by reducing A to tridiagonal form.
!>
!> Eigenvalues will be computed most accurately when ABSTOL is
!> set to twice the underflow threshold 2*SLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*SLAMCH('S').
!> |
| [out] | M | !> M is INTEGER !> The total number of eigenvalues found. 0 <= M <= N. !> If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of !> eigenvectors, with the i-th column of Z holding the !> eigenvector associated with W(i). The eigenvectors are !> normalized so Z**T*B*Z = I. !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (7*N) !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (5*N) !> |
| [out] | IFAIL | !> IFAIL is INTEGER array, dimension (M) !> If JOBZ = 'V', then if INFO = 0, the first M elements of !> IFAIL are zero. If INFO > 0, then IFAIL contains the !> indices of the eigenvalues that failed to converge. !> If JOBZ = 'N', then IFAIL is not referenced. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> <= N: if INFO = i, then i eigenvectors failed to converge. !> Their indices are stored in IFAIL. !> > N: SPBSTF returned an error code; i.e., !> if INFO = N + i, for 1 <= i <= N, then the leading !> minor of order i of B is not positive definite. !> The factorization of B could not be completed and !> no eigenvalues or eigenvectors were computed. !> |
Definition at line 291 of file ssbgvx.f.
| subroutine sspev | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| real, dimension( * ) | ap, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | info ) |
SSPEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSPEV + dependencies [TGZ] [ZIP] [TXT]
!> !> SSPEV computes all the eigenvalues and, optionally, eigenvectors of a !> real symmetric matrix A in packed storage. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | AP | !> AP is REAL array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the symmetric matrix !> A, packed columnwise in a linear array. The j-th column of A !> is stored in the array AP as follows: !> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j; !> if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n. !> !> On exit, AP is overwritten by values generated during the !> reduction to tridiagonal form. If UPLO = 'U', the diagonal !> and first superdiagonal of the tridiagonal matrix T overwrite !> the corresponding elements of A, and if UPLO = 'L', the !> diagonal and first subdiagonal of T overwrite the !> corresponding elements of A. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal !> eigenvectors of the matrix A, with the i-th column of Z !> holding the eigenvector associated with W(i). !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (3*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, the algorithm failed to converge; i !> off-diagonal elements of an intermediate tridiagonal !> form did not converge to zero. !> |
Definition at line 129 of file sspev.f.
| subroutine sspevd | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| real, dimension( * ) | ap, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
SSPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSPEVD + dependencies [TGZ] [ZIP] [TXT]
!> !> SSPEVD computes all the eigenvalues and, optionally, eigenvectors !> of a real symmetric matrix A in packed storage. If eigenvectors are !> desired, it uses a divide and conquer algorithm. !> !> The divide and conquer algorithm makes very mild assumptions about !> floating point arithmetic. It will work on machines with a guard !> digit in add/subtract, or on those binary machines without guard !> digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or !> Cray-2. It could conceivably fail on hexadecimal or decimal machines !> without guard digits, but we know of none. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | AP | !> AP is REAL array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the symmetric matrix !> A, packed columnwise in a linear array. The j-th column of A !> is stored in the array AP as follows: !> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j; !> if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n. !> !> On exit, AP is overwritten by values generated during the !> reduction to tridiagonal form. If UPLO = 'U', the diagonal !> and first superdiagonal of the tridiagonal matrix T overwrite !> the corresponding elements of A, and if UPLO = 'L', the !> diagonal and first subdiagonal of T overwrite the !> corresponding elements of A. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal !> eigenvectors of the matrix A, with the i-th column of Z !> holding the eigenvector associated with W(i). !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the required LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> If N <= 1, LWORK must be at least 1. !> If JOBZ = 'N' and N > 1, LWORK must be at least 2*N. !> If JOBZ = 'V' and N > 1, LWORK must be at least !> 1 + 6*N + N**2. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the required sizes of the WORK and IWORK !> arrays, returns these values as the first entries of the WORK !> and IWORK arrays, and no error message related to LWORK or !> LIWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (MAX(1,LIWORK)) !> On exit, if INFO = 0, IWORK(1) returns the required LIWORK. !> |
| [in] | LIWORK | !> LIWORK is INTEGER !> The dimension of the array IWORK. !> If JOBZ = 'N' or N <= 1, LIWORK must be at least 1. !> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N. !> !> If LIWORK = -1, then a workspace query is assumed; the !> routine only calculates the required sizes of the WORK and !> IWORK arrays, returns these values as the first entries of !> the WORK and IWORK arrays, and no error message related to !> LWORK or LIWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, the algorithm failed to converge; i !> off-diagonal elements of an intermediate tridiagonal !> form did not converge to zero. !> |
Definition at line 176 of file sspevd.f.
| subroutine sspevx | ( | character | jobz, |
| character | range, | ||
| character | uplo, | ||
| integer | n, | ||
| real, dimension( * ) | ap, | ||
| real | vl, | ||
| real | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| real | abstol, | ||
| integer | m, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
SSPEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSPEVX + dependencies [TGZ] [ZIP] [TXT]
!> !> SSPEVX computes selected eigenvalues and, optionally, eigenvectors !> of a real symmetric matrix A in packed storage. Eigenvalues/vectors !> can be selected by specifying either a range of values or a range of !> indices for the desired eigenvalues. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | RANGE | !> RANGE is CHARACTER*1 !> = 'A': all eigenvalues will be found; !> = 'V': all eigenvalues in the half-open interval (VL,VU] !> will be found; !> = 'I': the IL-th through IU-th eigenvalues will be found. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | AP | !> AP is REAL array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the symmetric matrix !> A, packed columnwise in a linear array. The j-th column of A !> is stored in the array AP as follows: !> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j; !> if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n. !> !> On exit, AP is overwritten by values generated during the !> reduction to tridiagonal form. If UPLO = 'U', the diagonal !> and first superdiagonal of the tridiagonal matrix T overwrite !> the corresponding elements of A, and if UPLO = 'L', the !> diagonal and first subdiagonal of T overwrite the !> corresponding elements of A. !> |
| [in] | VL | !> VL is REAL !> If RANGE='V', the lower bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | VU | !> VU is REAL !> If RANGE='V', the upper bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | IL | !> IL is INTEGER !> If RANGE='I', the index of the !> smallest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | IU | !> IU is INTEGER !> If RANGE='I', the index of the !> largest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | ABSTOL | !> ABSTOL is REAL
!> The absolute error tolerance for the eigenvalues.
!> An approximate eigenvalue is accepted as converged
!> when it is determined to lie in an interval [a,b]
!> of width less than or equal to
!>
!> ABSTOL + EPS * max( |a|,|b| ) ,
!>
!> where EPS is the machine precision. If ABSTOL is less than
!> or equal to zero, then EPS*|T| will be used in its place,
!> where |T| is the 1-norm of the tridiagonal matrix obtained
!> by reducing AP to tridiagonal form.
!>
!> Eigenvalues will be computed most accurately when ABSTOL is
!> set to twice the underflow threshold 2*SLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*SLAMCH('S').
!>
!> See by Demmel and
!> Kahan, LAPACK Working Note #3.
!> |
| [out] | M | !> M is INTEGER !> The total number of eigenvalues found. 0 <= M <= N. !> If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the selected eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, max(1,M)) !> If JOBZ = 'V', then if INFO = 0, the first M columns of Z !> contain the orthonormal eigenvectors of the matrix A !> corresponding to the selected eigenvalues, with the i-th !> column of Z holding the eigenvector associated with W(i). !> If an eigenvector fails to converge, then that column of Z !> contains the latest approximation to the eigenvector, and the !> index of the eigenvector is returned in IFAIL. !> If JOBZ = 'N', then Z is not referenced. !> Note: the user must ensure that at least max(1,M) columns are !> supplied in the array Z; if RANGE = 'V', the exact value of M !> is not known in advance and an upper bound must be used. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (8*N) !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (5*N) !> |
| [out] | IFAIL | !> IFAIL is INTEGER array, dimension (N) !> If JOBZ = 'V', then if INFO = 0, the first M elements of !> IFAIL are zero. If INFO > 0, then IFAIL contains the !> indices of the eigenvectors that failed to converge. !> If JOBZ = 'N', then IFAIL is not referenced. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, then i eigenvectors failed to converge. !> Their indices are stored in array IFAIL. !> |
Definition at line 231 of file sspevx.f.
| subroutine sspgv | ( | integer | itype, |
| character | jobz, | ||
| character | uplo, | ||
| integer | n, | ||
| real, dimension( * ) | ap, | ||
| real, dimension( * ) | bp, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | info ) |
SSPGV
Download SSPGV + dependencies [TGZ] [ZIP] [TXT]
!> !> SSPGV computes all the eigenvalues and, optionally, the eigenvectors !> of a real generalized symmetric-definite eigenproblem, of the form !> A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x. !> Here A and B are assumed to be symmetric, stored in packed format, !> and B is also positive definite. !>
| [in] | ITYPE | !> ITYPE is INTEGER !> Specifies the problem type to be solved: !> = 1: A*x = (lambda)*B*x !> = 2: A*B*x = (lambda)*x !> = 3: B*A*x = (lambda)*x !> |
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangles of A and B are stored; !> = 'L': Lower triangles of A and B are stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A and B. N >= 0. !> |
| [in,out] | AP | !> AP is REAL array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the symmetric matrix !> A, packed columnwise in a linear array. The j-th column of A !> is stored in the array AP as follows: !> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j; !> if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n. !> !> On exit, the contents of AP are destroyed. !> |
| [in,out] | BP | !> BP is REAL array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the symmetric matrix !> B, packed columnwise in a linear array. The j-th column of B !> is stored in the array BP as follows: !> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j; !> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n. !> !> On exit, the triangular factor U or L from the Cholesky !> factorization B = U**T*U or B = L*L**T, in the same storage !> format as B. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of !> eigenvectors. The eigenvectors are normalized as follows: !> if ITYPE = 1 or 2, Z**T*B*Z = I; !> if ITYPE = 3, Z**T*inv(B)*Z = I. !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (3*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: SPPTRF or SSPEV returned an error code: !> <= N: if INFO = i, SSPEV failed to converge; !> i off-diagonal elements of an intermediate !> tridiagonal form did not converge to zero. !> > N: if INFO = n + i, for 1 <= i <= n, then the leading !> minor of order i of B is not positive definite. !> The factorization of B could not be completed and !> no eigenvalues or eigenvectors were computed. !> |
Definition at line 158 of file sspgv.f.
| subroutine sspgvd | ( | integer | itype, |
| character | jobz, | ||
| character | uplo, | ||
| integer | n, | ||
| real, dimension( * ) | ap, | ||
| real, dimension( * ) | bp, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
SSPGVD
Download SSPGVD + dependencies [TGZ] [ZIP] [TXT]
!> !> SSPGVD computes all the eigenvalues, and optionally, the eigenvectors !> of a real generalized symmetric-definite eigenproblem, of the form !> A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x. Here A and !> B are assumed to be symmetric, stored in packed format, and B is also !> positive definite. !> If eigenvectors are desired, it uses a divide and conquer algorithm. !> !> The divide and conquer algorithm makes very mild assumptions about !> floating point arithmetic. It will work on machines with a guard !> digit in add/subtract, or on those binary machines without guard !> digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or !> Cray-2. It could conceivably fail on hexadecimal or decimal machines !> without guard digits, but we know of none. !>
| [in] | ITYPE | !> ITYPE is INTEGER !> Specifies the problem type to be solved: !> = 1: A*x = (lambda)*B*x !> = 2: A*B*x = (lambda)*x !> = 3: B*A*x = (lambda)*x !> |
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangles of A and B are stored; !> = 'L': Lower triangles of A and B are stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A and B. N >= 0. !> |
| [in,out] | AP | !> AP is REAL array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the symmetric matrix !> A, packed columnwise in a linear array. The j-th column of A !> is stored in the array AP as follows: !> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j; !> if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n. !> !> On exit, the contents of AP are destroyed. !> |
| [in,out] | BP | !> BP is REAL array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the symmetric matrix !> B, packed columnwise in a linear array. The j-th column of B !> is stored in the array BP as follows: !> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j; !> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n. !> !> On exit, the triangular factor U or L from the Cholesky !> factorization B = U**T*U or B = L*L**T, in the same storage !> format as B. !> |
| [out] | W | !> W is REAL array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of !> eigenvectors. The eigenvectors are normalized as follows: !> if ITYPE = 1 or 2, Z**T*B*Z = I; !> if ITYPE = 3, Z**T*inv(B)*Z = I. !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the required LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> If N <= 1, LWORK >= 1. !> If JOBZ = 'N' and N > 1, LWORK >= 2*N. !> If JOBZ = 'V' and N > 1, LWORK >= 1 + 6*N + 2*N**2. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the required sizes of the WORK and IWORK !> arrays, returns these values as the first entries of the WORK !> and IWORK arrays, and no error message related to LWORK or !> LIWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (MAX(1,LIWORK)) !> On exit, if INFO = 0, IWORK(1) returns the required LIWORK. !> |
| [in] | LIWORK | !> LIWORK is INTEGER !> The dimension of the array IWORK. !> If JOBZ = 'N' or N <= 1, LIWORK >= 1. !> If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N. !> !> If LIWORK = -1, then a workspace query is assumed; the !> routine only calculates the required sizes of the WORK and !> IWORK arrays, returns these values as the first entries of !> the WORK and IWORK arrays, and no error message related to !> LWORK or LIWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: SPPTRF or SSPEVD returned an error code: !> <= N: if INFO = i, SSPEVD failed to converge; !> i off-diagonal elements of an intermediate !> tridiagonal form did not converge to zero; !> > N: if INFO = N + i, for 1 <= i <= N, then the leading !> minor of order i of B is not positive definite. !> The factorization of B could not be completed and !> no eigenvalues or eigenvectors were computed. !> |
Definition at line 208 of file sspgvd.f.
| subroutine sspgvx | ( | integer | itype, |
| character | jobz, | ||
| character | range, | ||
| character | uplo, | ||
| integer | n, | ||
| real, dimension( * ) | ap, | ||
| real, dimension( * ) | bp, | ||
| real | vl, | ||
| real | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| real | abstol, | ||
| integer | m, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
SSPGVX
Download SSPGVX + dependencies [TGZ] [ZIP] [TXT]
!> !> SSPGVX computes selected eigenvalues, and optionally, eigenvectors !> of a real generalized symmetric-definite eigenproblem, of the form !> A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x. Here A !> and B are assumed to be symmetric, stored in packed storage, and B !> is also positive definite. Eigenvalues and eigenvectors can be !> selected by specifying either a range of values or a range of indices !> for the desired eigenvalues. !>
| [in] | ITYPE | !> ITYPE is INTEGER !> Specifies the problem type to be solved: !> = 1: A*x = (lambda)*B*x !> = 2: A*B*x = (lambda)*x !> = 3: B*A*x = (lambda)*x !> |
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | RANGE | !> RANGE is CHARACTER*1 !> = 'A': all eigenvalues will be found. !> = 'V': all eigenvalues in the half-open interval (VL,VU] !> will be found. !> = 'I': the IL-th through IU-th eigenvalues will be found. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A and B are stored; !> = 'L': Lower triangle of A and B are stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix pencil (A,B). N >= 0. !> |
| [in,out] | AP | !> AP is REAL array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the symmetric matrix !> A, packed columnwise in a linear array. The j-th column of A !> is stored in the array AP as follows: !> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j; !> if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n. !> !> On exit, the contents of AP are destroyed. !> |
| [in,out] | BP | !> BP is REAL array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the symmetric matrix !> B, packed columnwise in a linear array. The j-th column of B !> is stored in the array BP as follows: !> if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j; !> if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n. !> !> On exit, the triangular factor U or L from the Cholesky !> factorization B = U**T*U or B = L*L**T, in the same storage !> format as B. !> |
| [in] | VL | !> VL is REAL !> !> If RANGE='V', the lower bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | VU | !> VU is REAL !> !> If RANGE='V', the upper bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | IL | !> IL is INTEGER !> !> If RANGE='I', the index of the !> smallest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | IU | !> IU is INTEGER !> !> If RANGE='I', the index of the !> largest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | ABSTOL | !> ABSTOL is REAL
!> The absolute error tolerance for the eigenvalues.
!> An approximate eigenvalue is accepted as converged
!> when it is determined to lie in an interval [a,b]
!> of width less than or equal to
!>
!> ABSTOL + EPS * max( |a|,|b| ) ,
!>
!> where EPS is the machine precision. If ABSTOL is less than
!> or equal to zero, then EPS*|T| will be used in its place,
!> where |T| is the 1-norm of the tridiagonal matrix obtained
!> by reducing A to tridiagonal form.
!>
!> Eigenvalues will be computed most accurately when ABSTOL is
!> set to twice the underflow threshold 2*SLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*SLAMCH('S').
!> |
| [out] | M | !> M is INTEGER !> The total number of eigenvalues found. 0 <= M <= N. !> If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> On normal exit, the first M elements contain the selected !> eigenvalues in ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, max(1,M)) !> If JOBZ = 'N', then Z is not referenced. !> If JOBZ = 'V', then if INFO = 0, the first M columns of Z !> contain the orthonormal eigenvectors of the matrix A !> corresponding to the selected eigenvalues, with the i-th !> column of Z holding the eigenvector associated with W(i). !> The eigenvectors are normalized as follows: !> if ITYPE = 1 or 2, Z**T*B*Z = I; !> if ITYPE = 3, Z**T*inv(B)*Z = I. !> !> If an eigenvector fails to converge, then that column of Z !> contains the latest approximation to the eigenvector, and the !> index of the eigenvector is returned in IFAIL. !> Note: the user must ensure that at least max(1,M) columns are !> supplied in the array Z; if RANGE = 'V', the exact value of M !> is not known in advance and an upper bound must be used. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (8*N) !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (5*N) !> |
| [out] | IFAIL | !> IFAIL is INTEGER array, dimension (N) !> If JOBZ = 'V', then if INFO = 0, the first M elements of !> IFAIL are zero. If INFO > 0, then IFAIL contains the !> indices of the eigenvectors that failed to converge. !> If JOBZ = 'N', then IFAIL is not referenced. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: SPPTRF or SSPEVX returned an error code: !> <= N: if INFO = i, SSPEVX failed to converge; !> i eigenvectors failed to converge. Their indices !> are stored in array IFAIL. !> > N: if INFO = N + i, for 1 <= i <= N, then the leading !> minor of order i of B is not positive definite. !> The factorization of B could not be completed and !> no eigenvalues or eigenvectors were computed. !> |
Definition at line 269 of file sspgvx.f.
| subroutine sstev | ( | character | jobz, |
| integer | n, | ||
| real, dimension( * ) | d, | ||
| real, dimension( * ) | e, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | info ) |
SSTEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSTEV + dependencies [TGZ] [ZIP] [TXT]
!> !> SSTEV computes all eigenvalues and, optionally, eigenvectors of a !> real symmetric tridiagonal matrix A. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix. N >= 0. !> |
| [in,out] | D | !> D is REAL array, dimension (N) !> On entry, the n diagonal elements of the tridiagonal matrix !> A. !> On exit, if INFO = 0, the eigenvalues in ascending order. !> |
| [in,out] | E | !> E is REAL array, dimension (N-1) !> On entry, the (n-1) subdiagonal elements of the tridiagonal !> matrix A, stored in elements 1 to N-1 of E. !> On exit, the contents of E are destroyed. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal !> eigenvectors of the matrix A, with the i-th column of Z !> holding the eigenvector associated with D(i). !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (max(1,2*N-2)) !> If JOBZ = 'N', WORK is not referenced. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, the algorithm failed to converge; i !> off-diagonal elements of E did not converge to zero. !> |
Definition at line 115 of file sstev.f.
| subroutine sstevd | ( | character | jobz, |
| integer | n, | ||
| real, dimension( * ) | d, | ||
| real, dimension( * ) | e, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
SSTEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSTEVD + dependencies [TGZ] [ZIP] [TXT]
!> !> SSTEVD computes all eigenvalues and, optionally, eigenvectors of a !> real symmetric tridiagonal matrix. If eigenvectors are desired, it !> uses a divide and conquer algorithm. !> !> The divide and conquer algorithm makes very mild assumptions about !> floating point arithmetic. It will work on machines with a guard !> digit in add/subtract, or on those binary machines without guard !> digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or !> Cray-2. It could conceivably fail on hexadecimal or decimal machines !> without guard digits, but we know of none. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix. N >= 0. !> |
| [in,out] | D | !> D is REAL array, dimension (N) !> On entry, the n diagonal elements of the tridiagonal matrix !> A. !> On exit, if INFO = 0, the eigenvalues in ascending order. !> |
| [in,out] | E | !> E is REAL array, dimension (N-1) !> On entry, the (n-1) subdiagonal elements of the tridiagonal !> matrix A, stored in elements 1 to N-1 of E. !> On exit, the contents of E are destroyed. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, N) !> If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal !> eigenvectors of the matrix A, with the i-th column of Z !> holding the eigenvector associated with D(i). !> If JOBZ = 'N', then Z is not referenced. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, !> dimension (LWORK) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> If JOBZ = 'N' or N <= 1 then LWORK must be at least 1. !> If JOBZ = 'V' and N > 1 then LWORK must be at least !> ( 1 + 4*N + N**2 ). !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal sizes of the WORK and IWORK !> arrays, returns these values as the first entries of the WORK !> and IWORK arrays, and no error message related to LWORK or !> LIWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (MAX(1,LIWORK)) !> On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK. !> |
| [in] | LIWORK | !> LIWORK is INTEGER !> The dimension of the array IWORK. !> If JOBZ = 'N' or N <= 1 then LIWORK must be at least 1. !> If JOBZ = 'V' and N > 1 then LIWORK must be at least 3+5*N. !> !> If LIWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal sizes of the WORK and !> IWORK arrays, returns these values as the first entries of !> the WORK and IWORK arrays, and no error message related to !> LWORK or LIWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, the algorithm failed to converge; i !> off-diagonal elements of E did not converge to zero. !> |
Definition at line 161 of file sstevd.f.
| subroutine sstevr | ( | character | jobz, |
| character | range, | ||
| integer | n, | ||
| real, dimension( * ) | d, | ||
| real, dimension( * ) | e, | ||
| real | vl, | ||
| real | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| real | abstol, | ||
| integer | m, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| integer, dimension( * ) | isuppz, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
SSTEVR computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSTEVR + dependencies [TGZ] [ZIP] [TXT]
!> !> SSTEVR computes selected eigenvalues and, optionally, eigenvectors !> of a real symmetric tridiagonal matrix T. Eigenvalues and !> eigenvectors can be selected by specifying either a range of values !> or a range of indices for the desired eigenvalues. !> !> Whenever possible, SSTEVR calls SSTEMR to compute the !> eigenspectrum using Relatively Robust Representations. SSTEMR !> computes eigenvalues by the dqds algorithm, while orthogonal !> eigenvectors are computed from various L D L^T representations !> (also known as Relatively Robust Representations). Gram-Schmidt !> orthogonalization is avoided as far as possible. More specifically, !> the various steps of the algorithm are as follows. For the i-th !> unreduced block of T, !> (a) Compute T - sigma_i = L_i D_i L_i^T, such that L_i D_i L_i^T !> is a relatively robust representation, !> (b) Compute the eigenvalues, lambda_j, of L_i D_i L_i^T to high !> relative accuracy by the dqds algorithm, !> (c) If there is a cluster of close eigenvalues, sigma_i !> close to the cluster, and go to step (a), !> (d) Given the approximate eigenvalue lambda_j of L_i D_i L_i^T, !> compute the corresponding eigenvector by forming a !> rank-revealing twisted factorization. !> The desired accuracy of the output can be specified by the input !> parameter ABSTOL. !> !> For more details, see , by Inderjit Dhillon, !> Computer Science Division Technical Report No. UCB//CSD-97-971, !> UC Berkeley, May 1997. !> !> !> Note 1 : SSTEVR calls SSTEMR when the full spectrum is requested !> on machines which conform to the ieee-754 floating point standard. !> SSTEVR calls SSTEBZ and SSTEIN on non-ieee machines and !> when partial spectrum requests are made. !> !> Normal execution of SSTEMR may create NaNs and infinities and !> hence may abort due to a floating point exception in environments !> which do not handle NaNs and infinities in the ieee standard default !> manner. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | RANGE | !> RANGE is CHARACTER*1 !> = 'A': all eigenvalues will be found. !> = 'V': all eigenvalues in the half-open interval (VL,VU] !> will be found. !> = 'I': the IL-th through IU-th eigenvalues will be found. !> For RANGE = 'V' or 'I' and IU - IL < N - 1, SSTEBZ and !> SSTEIN are called !> |
| [in] | N | !> N is INTEGER !> The order of the matrix. N >= 0. !> |
| [in,out] | D | !> D is REAL array, dimension (N) !> On entry, the n diagonal elements of the tridiagonal matrix !> A. !> On exit, D may be multiplied by a constant factor chosen !> to avoid over/underflow in computing the eigenvalues. !> |
| [in,out] | E | !> E is REAL array, dimension (max(1,N-1)) !> On entry, the (n-1) subdiagonal elements of the tridiagonal !> matrix A in elements 1 to N-1 of E. !> On exit, E may be multiplied by a constant factor chosen !> to avoid over/underflow in computing the eigenvalues. !> |
| [in] | VL | !> VL is REAL !> If RANGE='V', the lower bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | VU | !> VU is REAL !> If RANGE='V', the upper bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | IL | !> IL is INTEGER !> If RANGE='I', the index of the !> smallest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | IU | !> IU is INTEGER !> If RANGE='I', the index of the !> largest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | ABSTOL | !> ABSTOL is REAL !> The absolute error tolerance for the eigenvalues. !> An approximate eigenvalue is accepted as converged !> when it is determined to lie in an interval [a,b] !> of width less than or equal to !> !> ABSTOL + EPS * max( |a|,|b| ) , !> !> where EPS is the machine precision. If ABSTOL is less than !> or equal to zero, then EPS*|T| will be used in its place, !> where |T| is the 1-norm of the tridiagonal matrix obtained !> by reducing A to tridiagonal form. !> !> See by Demmel and !> Kahan, LAPACK Working Note #3. !> !> If high relative accuracy is important, set ABSTOL to !> SLAMCH( 'Safe minimum' ). Doing so will guarantee that !> eigenvalues are computed to high relative accuracy when !> possible in future releases. The current code does not !> make any guarantees about high relative accuracy, but !> future releases will. See J. Barlow and J. Demmel, !> , LAPACK Working Note #7, for a discussion !> of which matrices define their eigenvalues to high relative !> accuracy. !> |
| [out] | M | !> M is INTEGER !> The total number of eigenvalues found. 0 <= M <= N. !> If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> The first M elements contain the selected eigenvalues in !> ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, max(1,M) ) !> If JOBZ = 'V', then if INFO = 0, the first M columns of Z !> contain the orthonormal eigenvectors of the matrix A !> corresponding to the selected eigenvalues, with the i-th !> column of Z holding the eigenvector associated with W(i). !> Note: the user must ensure that at least max(1,M) columns are !> supplied in the array Z; if RANGE = 'V', the exact value of M !> is not known in advance and an upper bound must be used. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | ISUPPZ | !> ISUPPZ is INTEGER array, dimension ( 2*max(1,M) ) !> The support of the eigenvectors in Z, i.e., the indices !> indicating the nonzero elements in Z. The i-th eigenvector !> is nonzero only in elements ISUPPZ( 2*i-1 ) through !> ISUPPZ( 2*i ). !> Implemented only for RANGE = 'A' or 'I' and IU - IL = N - 1 !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal (and !> minimal) LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= 20*N. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal sizes of the WORK and IWORK !> arrays, returns these values as the first entries of the WORK !> and IWORK arrays, and no error message related to LWORK or !> LIWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (MAX(1,LIWORK)) !> On exit, if INFO = 0, IWORK(1) returns the optimal (and !> minimal) LIWORK. !> |
| [in] | LIWORK | !> LIWORK is INTEGER !> The dimension of the array IWORK. LIWORK >= 10*N. !> !> If LIWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal sizes of the WORK and !> IWORK arrays, returns these values as the first entries of !> the WORK and IWORK arrays, and no error message related to !> LWORK or LIWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: Internal error !> |
Definition at line 303 of file sstevr.f.
| subroutine sstevx | ( | character | jobz, |
| character | range, | ||
| integer | n, | ||
| real, dimension( * ) | d, | ||
| real, dimension( * ) | e, | ||
| real | vl, | ||
| real | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| real | abstol, | ||
| integer | m, | ||
| real, dimension( * ) | w, | ||
| real, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
SSTEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download SSTEVX + dependencies [TGZ] [ZIP] [TXT]
!> !> SSTEVX computes selected eigenvalues and, optionally, eigenvectors !> of a real symmetric tridiagonal matrix A. Eigenvalues and !> eigenvectors can be selected by specifying either a range of values !> or a range of indices for the desired eigenvalues. !>
| [in] | JOBZ | !> JOBZ is CHARACTER*1 !> = 'N': Compute eigenvalues only; !> = 'V': Compute eigenvalues and eigenvectors. !> |
| [in] | RANGE | !> RANGE is CHARACTER*1 !> = 'A': all eigenvalues will be found. !> = 'V': all eigenvalues in the half-open interval (VL,VU] !> will be found. !> = 'I': the IL-th through IU-th eigenvalues will be found. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix. N >= 0. !> |
| [in,out] | D | !> D is REAL array, dimension (N) !> On entry, the n diagonal elements of the tridiagonal matrix !> A. !> On exit, D may be multiplied by a constant factor chosen !> to avoid over/underflow in computing the eigenvalues. !> |
| [in,out] | E | !> E is REAL array, dimension (max(1,N-1)) !> On entry, the (n-1) subdiagonal elements of the tridiagonal !> matrix A in elements 1 to N-1 of E. !> On exit, E may be multiplied by a constant factor chosen !> to avoid over/underflow in computing the eigenvalues. !> |
| [in] | VL | !> VL is REAL !> If RANGE='V', the lower bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | VU | !> VU is REAL !> If RANGE='V', the upper bound of the interval to !> be searched for eigenvalues. VL < VU. !> Not referenced if RANGE = 'A' or 'I'. !> |
| [in] | IL | !> IL is INTEGER !> If RANGE='I', the index of the !> smallest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | IU | !> IU is INTEGER !> If RANGE='I', the index of the !> largest eigenvalue to be returned. !> 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. !> Not referenced if RANGE = 'A' or 'V'. !> |
| [in] | ABSTOL | !> ABSTOL is REAL
!> The absolute error tolerance for the eigenvalues.
!> An approximate eigenvalue is accepted as converged
!> when it is determined to lie in an interval [a,b]
!> of width less than or equal to
!>
!> ABSTOL + EPS * max( |a|,|b| ) ,
!>
!> where EPS is the machine precision. If ABSTOL is less
!> than or equal to zero, then EPS*|T| will be used in
!> its place, where |T| is the 1-norm of the tridiagonal
!> matrix.
!>
!> Eigenvalues will be computed most accurately when ABSTOL is
!> set to twice the underflow threshold 2*SLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*SLAMCH('S').
!>
!> See by Demmel and
!> Kahan, LAPACK Working Note #3.
!> |
| [out] | M | !> M is INTEGER !> The total number of eigenvalues found. 0 <= M <= N. !> If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1. !> |
| [out] | W | !> W is REAL array, dimension (N) !> The first M elements contain the selected eigenvalues in !> ascending order. !> |
| [out] | Z | !> Z is REAL array, dimension (LDZ, max(1,M) ) !> If JOBZ = 'V', then if INFO = 0, the first M columns of Z !> contain the orthonormal eigenvectors of the matrix A !> corresponding to the selected eigenvalues, with the i-th !> column of Z holding the eigenvector associated with W(i). !> If an eigenvector fails to converge (INFO > 0), then that !> column of Z contains the latest approximation to the !> eigenvector, and the index of the eigenvector is returned !> in IFAIL. If JOBZ = 'N', then Z is not referenced. !> Note: the user must ensure that at least max(1,M) columns are !> supplied in the array Z; if RANGE = 'V', the exact value of M !> is not known in advance and an upper bound must be used. !> |
| [in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1, and if !> JOBZ = 'V', LDZ >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (5*N) !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (5*N) !> |
| [out] | IFAIL | !> IFAIL is INTEGER array, dimension (N) !> If JOBZ = 'V', then if INFO = 0, the first M elements of !> IFAIL are zero. If INFO > 0, then IFAIL contains the !> indices of the eigenvectors that failed to converge. !> If JOBZ = 'N', then IFAIL is not referenced. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, then i eigenvectors failed to converge. !> Their indices are stored in array IFAIL. !> |
Definition at line 225 of file sstevx.f.