Functions | |
| subroutine | zggglm (n, m, p, a, lda, b, ldb, d, x, y, work, lwork, info) |
| ZGGGLM | |
| subroutine | zhbev (jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, rwork, info) |
| ZHBEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | zhbev_2stage (jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, rwork, info) |
| ZHBEV_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | zhbevd (jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info) |
| ZHBEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | zhbevd_2stage (jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info) |
| ZHBEVD_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | zhbevx (jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, rwork, iwork, ifail, info) |
| ZHBEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | zhbevx_2stage (jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, rwork, iwork, ifail, info) |
| ZHBEVX_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | zhbgv (jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, w, z, ldz, work, rwork, info) |
| ZHBGV | |
| subroutine | zhbgvd (jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info) |
| ZHBGVD | |
| subroutine | zhbgvx (jobz, range, uplo, n, ka, kb, ab, ldab, bb, ldbb, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, rwork, iwork, ifail, info) |
| ZHBGVX | |
| subroutine | zhpev (jobz, uplo, n, ap, w, z, ldz, work, rwork, info) |
| ZHPEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | zhpevd (jobz, uplo, n, ap, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info) |
| ZHPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | zhpevx (jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m, w, z, ldz, work, rwork, iwork, ifail, info) |
| ZHPEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices | |
| subroutine | zhpgv (itype, jobz, uplo, n, ap, bp, w, z, ldz, work, rwork, info) |
| ZHPGV | |
| subroutine | zhpgvd (itype, jobz, uplo, n, ap, bp, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info) |
| ZHPGVD | |
| subroutine | zhpgvx (itype, jobz, range, uplo, n, ap, bp, vl, vu, il, iu, abstol, m, w, z, ldz, work, rwork, iwork, ifail, info) |
| ZHPGVX | |
This is the group of complex16 Other Eigenvalue routines
| subroutine zggglm | ( | integer | n, |
| integer | m, | ||
| integer | p, | ||
| complex*16, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex*16, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex*16, dimension( * ) | d, | ||
| complex*16, dimension( * ) | x, | ||
| complex*16, dimension( * ) | y, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
ZGGGLM
Download ZGGGLM + dependencies [TGZ] [ZIP] [TXT]
!> !> ZGGGLM 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 COMPLEX*16 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 COMPLEX*16 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 COMPLEX*16 array, dimension (N) !> On entry, D is the left hand side of the GLM equation. !> On exit, D is destroyed. !> |
| [out] | X | !> X is COMPLEX*16 array, dimension (M) !> |
| [out] | Y | !> Y is COMPLEX*16 array, dimension (P) !> !> On exit, X and Y are the solutions of the GLM problem. !> |
| [out] | WORK | !> WORK is COMPLEX*16 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 !> ZGEQRF, ZGERQF, ZUNMQR and ZUNMRQ. !> !> 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 zggglm.f.
| subroutine zhbev | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| complex*16, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZHBEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download ZHBEV + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHBEV computes all the eigenvalues and, optionally, eigenvectors of !> a complex Hermitian 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 COMPLEX*16 array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the Hermitian 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 DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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 COMPLEX*16 array, dimension (N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION 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 150 of file zhbev.f.
| subroutine zhbev_2stage | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| complex*16, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZHBEV_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download ZHBEV_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHBEV_2STAGE computes all the eigenvalues and, optionally, eigenvectors of !> a complex Hermitian 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 COMPLEX*16 array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the Hermitian 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 DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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 COMPLEX*16 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 !> 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, RWORK and !> IWORK arrays, returns these values as the first entries of !> the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK or LIWORK is issued by XERBLA. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION 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. !> |
!> !> 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 209 of file zhbev_2stage.f.
| subroutine zhbevd | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| complex*16, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | lrwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
ZHBEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download ZHBEVD + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHBEVD computes all the eigenvalues and, optionally, eigenvectors of !> a complex Hermitian 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 COMPLEX*16 array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the Hermitian 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 DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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 COMPLEX*16 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 must be at least 1. !> If JOBZ = 'N' and N > 1, LWORK must be at least N. !> If JOBZ = 'V' and N > 1, LWORK must be at least 2*N**2. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal sizes of the WORK, RWORK and !> IWORK arrays, returns these values as the first entries of !> the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK or LIWORK is issued by XERBLA. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, !> dimension (LRWORK) !> On exit, if INFO = 0, RWORK(1) returns the optimal LRWORK. !> |
| [in] | LRWORK | !> LRWORK is INTEGER !> The dimension of array RWORK. !> If N <= 1, LRWORK must be at least 1. !> If JOBZ = 'N' and N > 1, LRWORK must be at least N. !> If JOBZ = 'V' and N > 1, LRWORK must be at least !> 1 + 5*N + 2*N**2. !> !> If LRWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal sizes of the WORK, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK 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 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 optimal sizes of the WORK, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK 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 213 of file zhbevd.f.
| subroutine zhbevd_2stage | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| complex*16, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | lrwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
ZHBEVD_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download ZHBEVD_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHBEVD_2STAGE computes all the eigenvalues and, optionally, eigenvectors of !> a complex Hermitian 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 COMPLEX*16 array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the Hermitian 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 DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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 COMPLEX*16 array, dimension (MAX(1,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 !> 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, RWORK and !> IWORK arrays, returns these values as the first entries of !> the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK or LIWORK is issued by XERBLA. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, !> dimension (LRWORK) !> On exit, if INFO = 0, RWORK(1) returns the optimal LRWORK. !> |
| [in] | LRWORK | !> LRWORK is INTEGER !> The dimension of array RWORK. !> If N <= 1, LRWORK must be at least 1. !> If JOBZ = 'N' and N > 1, LRWORK must be at least N. !> If JOBZ = 'V' and N > 1, LRWORK must be at least !> 1 + 5*N + 2*N**2. !> !> If LRWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal sizes of the WORK, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK 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 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 optimal sizes of the WORK, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK 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 257 of file zhbevd_2stage.f.
| subroutine zhbevx | ( | character | jobz, |
| character | range, | ||
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| complex*16, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| complex*16, dimension( ldq, * ) | q, | ||
| integer | ldq, | ||
| double precision | vl, | ||
| double precision | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| double precision | abstol, | ||
| integer | m, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
ZHBEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download ZHBEVX + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHBEVX computes selected eigenvalues and, optionally, eigenvectors !> of a complex Hermitian 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 COMPLEX*16 array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the Hermitian 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. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KD + 1. !> |
| [out] | Q | !> Q is COMPLEX*16 array, dimension (LDQ, N) !> If JOBZ = 'V', the N-by-N unitary 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 DOUBLE PRECISION !> 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 DOUBLE PRECISION !> 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 DOUBLE PRECISION
!> 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*DLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*DLAMCH('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 DOUBLE PRECISION array, dimension (N) !> The first M elements contain the selected eigenvalues in !> ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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 COMPLEX*16 array, dimension (N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION 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 264 of file zhbevx.f.
| subroutine zhbevx_2stage | ( | character | jobz, |
| character | range, | ||
| character | uplo, | ||
| integer | n, | ||
| integer | kd, | ||
| complex*16, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| complex*16, dimension( ldq, * ) | q, | ||
| integer | ldq, | ||
| double precision | vl, | ||
| double precision | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| double precision | abstol, | ||
| integer | m, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| double precision, dimension( * ) | rwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
ZHBEVX_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download ZHBEVX_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHBEVX_2STAGE computes selected eigenvalues and, optionally, eigenvectors !> of a complex Hermitian 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 COMPLEX*16 array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the Hermitian 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. !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KD + 1. !> |
| [out] | Q | !> Q is COMPLEX*16 array, dimension (LDQ, N) !> If JOBZ = 'V', the N-by-N unitary 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 DOUBLE PRECISION !> 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 DOUBLE PRECISION !> 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 DOUBLE PRECISION
!> 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*DLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*DLAMCH('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 DOUBLE PRECISION array, dimension (N) !> The first M elements contain the selected eigenvalues in !> ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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 COMPLEX*16 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, dimension) where !> dimension = (2KD+1)*N + KD*NTHREADS !> 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, RWORK and !> IWORK arrays, returns these values as the first entries of !> the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK or LIWORK is issued by XERBLA. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION 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. !> |
!> !> 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 323 of file zhbevx_2stage.f.
| subroutine zhbgv | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | ka, | ||
| integer | kb, | ||
| complex*16, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| complex*16, dimension( ldbb, * ) | bb, | ||
| integer | ldbb, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZHBGV
Download ZHBGV + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHBGV computes all the eigenvalues, and optionally, the eigenvectors !> of a complex generalized Hermitian-definite banded eigenproblem, of !> the form A*x=(lambda)*B*x. Here A and B are assumed to be Hermitian !> 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 COMPLEX*16 array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the Hermitian 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 COMPLEX*16 array, dimension (LDBB, N) !> On entry, the upper or lower triangle of the Hermitian 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**H*S, as returned by ZPBSTF. !> |
| [in] | LDBB | !> LDBB is INTEGER !> The leading dimension of the array BB. LDBB >= KB+1. !> |
| [out] | W | !> W is DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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**H*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 COMPLEX*16 array, dimension (N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION 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 ZPBSTF !> 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 181 of file zhbgv.f.
| subroutine zhbgvd | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| integer | ka, | ||
| integer | kb, | ||
| complex*16, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| complex*16, dimension( ldbb, * ) | bb, | ||
| integer | ldbb, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | lrwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
ZHBGVD
Download ZHBGVD + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHBGVD computes all the eigenvalues, and optionally, the eigenvectors !> of a complex generalized Hermitian-definite banded eigenproblem, of !> the form A*x=(lambda)*B*x. Here A and B are assumed to be Hermitian !> 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 COMPLEX*16 array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the Hermitian 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 COMPLEX*16 array, dimension (LDBB, N) !> On entry, the upper or lower triangle of the Hermitian 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**H*S, as returned by ZPBSTF. !> |
| [in] | LDBB | !> LDBB is INTEGER !> The leading dimension of the array BB. LDBB >= KB+1. !> |
| [out] | W | !> W is DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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**H*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 COMPLEX*16 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 >= N. !> If JOBZ = 'V' and N > 1, LWORK >= 2*N**2. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal sizes of the WORK, RWORK and !> IWORK arrays, returns these values as the first entries of !> the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK or LIWORK is issued by XERBLA. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (MAX(1,LRWORK)) !> On exit, if INFO=0, RWORK(1) returns the optimal LRWORK. !> |
| [in] | LRWORK | !> LRWORK is INTEGER !> The dimension of array RWORK. !> If N <= 1, LRWORK >= 1. !> If JOBZ = 'N' and N > 1, LRWORK >= N. !> If JOBZ = 'V' and N > 1, LRWORK >= 1 + 5*N + 2*N**2. !> !> If LRWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal sizes of the WORK, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK 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 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, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK 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 ZPBSTF !> 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 249 of file zhbgvd.f.
| subroutine zhbgvx | ( | character | jobz, |
| character | range, | ||
| character | uplo, | ||
| integer | n, | ||
| integer | ka, | ||
| integer | kb, | ||
| complex*16, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| complex*16, dimension( ldbb, * ) | bb, | ||
| integer | ldbb, | ||
| complex*16, dimension( ldq, * ) | q, | ||
| integer | ldq, | ||
| double precision | vl, | ||
| double precision | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| double precision | abstol, | ||
| integer | m, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
ZHBGVX
Download ZHBGVX + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHBGVX computes all the eigenvalues, and optionally, the eigenvectors !> of a complex generalized Hermitian-definite banded eigenproblem, of !> the form A*x=(lambda)*B*x. Here A and B are assumed to be Hermitian !> 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 COMPLEX*16 array, dimension (LDAB, N) !> On entry, the upper or lower triangle of the Hermitian 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 COMPLEX*16 array, dimension (LDBB, N) !> On entry, the upper or lower triangle of the Hermitian 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**H*S, as returned by ZPBSTF. !> |
| [in] | LDBB | !> LDBB is INTEGER !> The leading dimension of the array BB. LDBB >= KB+1. !> |
| [out] | Q | !> Q is COMPLEX*16 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 DOUBLE PRECISION !> !> 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 DOUBLE PRECISION !> !> 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 DOUBLE PRECISION
!> 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*DLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*DLAMCH('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 DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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**H*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 COMPLEX*16 array, dimension (N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION 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, and i is: !> <= N: then i eigenvectors failed to converge. Their !> indices are stored in array IFAIL. !> > N: if INFO = N + i, for 1 <= i <= N, then ZPBSTF !> 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 297 of file zhbgvx.f.
| subroutine zhpev | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| complex*16, dimension( * ) | ap, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZHPEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download ZHPEV + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHPEV computes all the eigenvalues and, optionally, eigenvectors of a !> complex Hermitian matrix 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 COMPLEX*16 array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the Hermitian 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 DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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 COMPLEX*16 array, dimension (max(1, 2*N-1)) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION 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 136 of file zhpev.f.
| subroutine zhpevd | ( | character | jobz, |
| character | uplo, | ||
| integer | n, | ||
| complex*16, dimension( * ) | ap, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | lrwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
ZHPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download ZHPEVD + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHPEVD computes all the eigenvalues and, optionally, eigenvectors of !> a complex Hermitian 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 COMPLEX*16 array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the Hermitian 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 DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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 COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the required LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of array WORK. !> If N <= 1, LWORK must be at least 1. !> If JOBZ = 'N' and N > 1, LWORK must be at least N. !> If JOBZ = 'V' and N > 1, LWORK must be at least 2*N. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the required sizes of the WORK, RWORK and !> IWORK arrays, returns these values as the first entries of !> the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK or LIWORK is issued by XERBLA. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (MAX(1,LRWORK)) !> On exit, if INFO = 0, RWORK(1) returns the required LRWORK. !> |
| [in] | LRWORK | !> LRWORK is INTEGER !> The dimension of array RWORK. !> If N <= 1, LRWORK must be at least 1. !> If JOBZ = 'N' and N > 1, LRWORK must be at least N. !> If JOBZ = 'V' and N > 1, LRWORK must be at least !> 1 + 5*N + 2*N**2. !> !> If LRWORK = -1, then a workspace query is assumed; the !> routine only calculates the required sizes of the WORK, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK 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 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, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK 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 198 of file zhpevd.f.
| subroutine zhpevx | ( | character | jobz, |
| character | range, | ||
| character | uplo, | ||
| integer | n, | ||
| complex*16, dimension( * ) | ap, | ||
| double precision | vl, | ||
| double precision | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| double precision | abstol, | ||
| integer | m, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
ZHPEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
Download ZHPEVX + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHPEVX computes selected eigenvalues and, optionally, eigenvectors !> of a complex Hermitian 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 COMPLEX*16 array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the Hermitian 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 DOUBLE PRECISION !> 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 DOUBLE PRECISION !> 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 DOUBLE PRECISION
!> 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*DLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*DLAMCH('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 DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the selected eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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 COMPLEX*16 array, dimension (2*N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION 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 237 of file zhpevx.f.
| subroutine zhpgv | ( | integer | itype, |
| character | jobz, | ||
| character | uplo, | ||
| integer | n, | ||
| complex*16, dimension( * ) | ap, | ||
| complex*16, dimension( * ) | bp, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | info ) |
ZHPGV
Download ZHPGV + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHPGV computes all the eigenvalues and, optionally, the eigenvectors !> of a complex generalized Hermitian-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 Hermitian, 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 COMPLEX*16 array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the Hermitian 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 COMPLEX*16 array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the Hermitian 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**H*U or B = L*L**H, in the same storage !> format as B. !> |
| [out] | W | !> W is DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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**H*B*Z = I; !> if ITYPE = 3, Z**H*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 COMPLEX*16 array, dimension (max(1, 2*N-1)) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION 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: ZPPTRF or ZHPEV returned an error code: !> <= N: if INFO = i, ZHPEV failed to converge; !> i off-diagonal elements of an intermediate !> tridiagonal form did not convergeto 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 163 of file zhpgv.f.
| subroutine zhpgvd | ( | integer | itype, |
| character | jobz, | ||
| character | uplo, | ||
| integer | n, | ||
| complex*16, dimension( * ) | ap, | ||
| complex*16, dimension( * ) | bp, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| integer | lwork, | ||
| double precision, dimension( * ) | rwork, | ||
| integer | lrwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | liwork, | ||
| integer | info ) |
ZHPGVD
Download ZHPGVD + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHPGVD computes all the eigenvalues and, optionally, the eigenvectors !> of a complex generalized Hermitian-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 Hermitian, 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 COMPLEX*16 array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the Hermitian 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 COMPLEX*16 array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the Hermitian 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**H*U or B = L*L**H, in the same storage !> format as B. !> |
| [out] | W | !> W is DOUBLE PRECISION array, dimension (N) !> If INFO = 0, the eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 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**H*B*Z = I; !> if ITYPE = 3, Z**H*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 COMPLEX*16 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 >= N. !> If JOBZ = 'V' and N > 1, LWORK >= 2*N. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the required sizes of the WORK, RWORK and !> IWORK arrays, returns these values as the first entries of !> the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK or LIWORK is issued by XERBLA. !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (MAX(1,LRWORK)) !> On exit, if INFO = 0, RWORK(1) returns the required LRWORK. !> |
| [in] | LRWORK | !> LRWORK is INTEGER !> The dimension of array RWORK. !> If N <= 1, LRWORK >= 1. !> If JOBZ = 'N' and N > 1, LRWORK >= N. !> If JOBZ = 'V' and N > 1, LRWORK >= 1 + 5*N + 2*N**2. !> !> If LRWORK = -1, then a workspace query is assumed; the !> routine only calculates the required sizes of the WORK, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK 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 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, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK 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: ZPPTRF or ZHPEVD returned an error code: !> <= N: if INFO = i, ZHPEVD failed to converge; !> i off-diagonal elements of an intermediate !> tridiagonal form did not convergeto 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 229 of file zhpgvd.f.
| subroutine zhpgvx | ( | integer | itype, |
| character | jobz, | ||
| character | range, | ||
| character | uplo, | ||
| integer | n, | ||
| complex*16, dimension( * ) | ap, | ||
| complex*16, dimension( * ) | bp, | ||
| double precision | vl, | ||
| double precision | vu, | ||
| integer | il, | ||
| integer | iu, | ||
| double precision | abstol, | ||
| integer | m, | ||
| double precision, dimension( * ) | w, | ||
| complex*16, dimension( ldz, * ) | z, | ||
| integer | ldz, | ||
| complex*16, dimension( * ) | work, | ||
| double precision, dimension( * ) | rwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer, dimension( * ) | ifail, | ||
| integer | info ) |
ZHPGVX
Download ZHPGVX + dependencies [TGZ] [ZIP] [TXT]
!> !> ZHPGVX computes selected eigenvalues and, optionally, eigenvectors !> of a complex generalized Hermitian-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 Hermitian, stored in packed format, 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 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 COMPLEX*16 array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the Hermitian 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 COMPLEX*16 array, dimension (N*(N+1)/2) !> On entry, the upper or lower triangle of the Hermitian 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**H*U or B = L*L**H, in the same storage !> format as B. !> |
| [in] | VL | !> VL is DOUBLE PRECISION !> !> 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 DOUBLE PRECISION !> !> 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 DOUBLE PRECISION
!> 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*DLAMCH('S'), not zero.
!> If this routine returns with INFO>0, indicating that some
!> eigenvectors did not converge, try setting ABSTOL to
!> 2*DLAMCH('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 DOUBLE PRECISION array, dimension (N) !> On normal exit, the first M elements contain the selected !> eigenvalues in ascending order. !> |
| [out] | Z | !> Z is COMPLEX*16 array, dimension (LDZ, N) !> 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**H*B*Z = I; !> if ITYPE = 3, Z**H*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 COMPLEX*16 array, dimension (2*N) !> |
| [out] | RWORK | !> RWORK is DOUBLE PRECISION 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: ZPPTRF or ZHPEVX returned an error code: !> <= N: if INFO = i, ZHPEVX 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 274 of file zhpgvx.f.