hbevd_2stage(3)
πΈ NAME πΈ
okay bestie, this is the hbevd_2stage(3) page from the Library Functions Manual, and it's all about hbevd_2stage β {hb,sb}evd_2stage: eig, divide and conquer. Eigenvalues, divide and conquer, the whole vibe π
β¨
β¨ SYNOPSIS β¨
Functions
chbevd_2stageβCHBEVD_2STAGEcomputes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices.subroutine chbevd_2stage (jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)dsbevd_2stageβDSBEVD_2STAGEcomputes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices.subroutine dsbevd_2stage (jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, iwork, liwork, info)ssbevd_2stageβSSBEVD_2STAGEcomputes 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)zhbevd_2stageβZHBEVD_2STAGEcomputes 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)
π« Detailed Description π«
The real tea is all in the function docs below, bestie β no extra lore hiding up here π«Ά
π₯ Function Documentation π₯
subroutine chbevd_2stage
subroutine chbevd_2stage (character jobz, character uplo, integer n, integer kd, complex, dimension( ldab, * ) ab, integer ldab, real, dimension( * ) w, complex, dimension( ldz, * ) z, integer ldz, complex, dimension( * ) work, integer lwork, real, dimension( * ) rwork, integer lrwork, integer, dimension( * ) iwork, integer liwork, integer info)
CHBEVD_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices.
Purpose: CHBEVD_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.
Parameters
JOBZ β JOBZ is CHARACTER*1.
= 'N':Compute eigenvalues only;= 'V':Compute eigenvalues and eigenvectors. Not available in this release.
bestie, 'V' is giving βnot available in this releaseβ energy β that's just the rule, no cap π
UPLO β UPLO is CHARACTER*1.
= 'U':Upper triangle of A is stored;= 'L':Lower triangle of A is stored.
N β N is INTEGER. The order of the matrix A. N >= 0.
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.
AB β AB is COMPLEX 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.
LDAB β LDAB is INTEGER. The leading dimension of the array AB. LDAB >= KD + 1.
W β W is REAL array, dimension (N). If INFO = 0, the eigenvalues in ascending order.
Z β Z is COMPLEX 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.
LDZ β LDZ is INTEGER. The leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', LDZ >= max(1,N).
WORK β WORK is COMPLEX array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
LWORK β LWORK is INTEGER. The length of the array WORK. LWORK >= 1, when N <= 1; otherwise:
- If
JOBZ = 'N'andN > 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'andN > 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.
RWORK β RWORK is REAL array, dimension (LRWORK). On exit, if INFO = 0, RWORK(1) returns the optimal LRWORK.
LRWORK β LRWORK is INTEGER. The dimension of array RWORK.
- If
N <= 1,LRWORKmust be at least 1. - If
JOBZ = 'N'andN > 1,LRWORKmust be at leastN. - If
JOBZ = 'V'andN > 1,LRWORKmust be at least1 + 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.
IWORK β IWORK is INTEGER array, dimension (MAX(1,LIWORK)). On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK.
LIWORK β LIWORK is INTEGER. The dimension of array IWORK.
- If
JOBZ = 'N'orN <= 1,LIWORKmust be at least 1. - If
JOBZ = 'V'andN > 1,LIWORKmust be at least3 + 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.
INFO β INFO is INTEGER.
= 0:successful exit.< 0:ifINFO = -i, the i-th argument had an illegal value.> 0:ifINFO = i, the algorithm failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero.
Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Further Details:
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 251 of file chbevd_2stage.f.
subroutine dsbevd_2stage
subroutine dsbevd_2stage (character jobz, character uplo, integer n, integer kd, double precision, dimension( ldab, * ) ab, integer ldab, double precision, dimension( * ) w, double precision, dimension( ldz, * ) z, integer ldz, double precision, dimension( * ) work, integer lwork, integer, dimension( * ) iwork, integer liwork, integer info)
DSBEVD_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices.
Purpose: DSBEVD_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.
Parameters
JOBZ β JOBZ is CHARACTER*1.
= 'N':Compute eigenvalues only;= 'V':Compute eigenvalues and eigenvectors. Not available in this release.
UPLO β UPLO is CHARACTER*1.
= 'U':Upper triangle of A is stored;= 'L':Lower triangle of A is stored.
N β N is INTEGER. The order of the matrix A. N >= 0.
KD
okay so where were we β right, the parameters, bestie. buckle up, we're going through every single one π
KD(INTEGER) β the number of superdiagonals of the matrixAifUPLO = 'U', or the number of subdiagonals ifUPLO = 'L'. gotta beKD >= 0, no exceptions π«ΆAB(DOUBLE PRECISIONarray, dimension(LDAB, N)) β on entry, this holds the upper or lower triangle of the symmetric band matrixA, stored in the firstKD+1rows of the array. the j-th column ofAlives in the j-th column ofAB, like this:
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 gets overwritten by values generated during the reduction to tridiagonal form π so don't come crying to me about your original data. if UPLO = 'U', the first superdiagonal and the diagonal of the tridiagonal matrix T are returned in rows KD and KD+1 of AB; if UPLO = 'L', the diagonal and first subdiagonal of T are returned in the first two rows of AB. iconic storage behavior, honestly π
LDAB(INTEGER) β the leading dimension of the arrayAB. rule is simple:LDAB >= KD + 1. that's it, that's the whole vibe check β¨W(DOUBLE PRECISIONarray, dimension(N)) β ifINFO = 0, this is where your eigenvalues live, in ascending order πΈZ(DOUBLE PRECISIONarray, dimension(LDZ, N)) β ifJOBZ = 'V', then whenINFO = 0,Zcontains the orthonormal eigenvectors of the matrixA, with the i-th column ofZholding the eigenvector associated withW(i). ifJOBZ = 'N', thenZis simply not referenced β literally not even looked at πLDZ(INTEGER) β the leading dimension of the arrayZ.LDZ >= 1, and ifJOBZ = 'V', then alsoLDZ >= max(1,N). both conditions, bestie, not one or the other πWORK(DOUBLE PRECISIONarray, dimensionLWORK) β on exit, ifINFO = 0,WORK(1)returns the optimalLWORK. cute little self-report, love that for us π¦LWORK(INTEGER) β the length of the arrayWORK.LWORK >= 1whenN <= 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.
and 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. iykyk β¨
IWORK(INTEGERarray, dimension(MAX(1,LIWORK))) β on exit, ifINFO = 0,IWORK(1)returns the optimalLIWORK. same self-reporting energy π«ΆLIWORK(INTEGER) β the dimension of the arrayIWORK.- if
JOBZ = 'N'orN <= 1,LIWORKmust be at least1. - if
JOBZ = 'V'andN > 2,LIWORKmust be at least3 + 5*N.
- if
and 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. same deal as above, fr fr π
INFO(INTEGER) β the receipts:= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = i, the algorithm failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero π
Author π
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Further Details π§
All details about the 2stage techniques are available in β and yes bestie, we cite our sources, that's main character energy:
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 226 of file dsbevd_2stage.f.
π subroutine ssbevd_2stage
okay so now we meet the sibling, and here's the signature, verbatim, because we do not mess with signatures:
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 π
Purpose β¨
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. she's thorough, she's efficient, she ate π
Parameters π
JOBZ(CHARACTER*1) β= 'N': compute eigenvalues only;= 'V': compute eigenvalues and eigenvectors. β οΈ Not available in this release. so don't try it, bestie, it's giving "coming soon" energy π
UPLO(CHARACTER*1) β= 'U': upper triangle ofAis stored;= 'L': lower triangle ofAis stored.
N(INTEGER) β the order of the matrixA.N >= 0. zero is allowed, negative is a no π«ΆKD(INTEGER) β the number of superdiagonals of the matrixAifUPLO = 'U', or the number of subdiagonals ifUPLO = 'L'.KD >= 0. same deal as the double precision version, no cap πΈAB(REALarray, dimension(LDAB, N)) β on entry, the upper or lower triangle of the symmetric band matrixA, stored in the firstKD+1rows of the array. the j-th column ofAis stored in the j-th column of the arrayABas 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. yes she overwrites, that's her whole thing π
LDAB(INTEGER) β the leading dimension of the arrayAB.LDAB >= KD + 1. periodt β¨W(REALarray, dimension(N)) β ifINFO = 0, the eigenvalues in ascending order. sorted, gorgeous, ascending, we love her πZ(REALarray, dimension(LDZ, N)) β ifJOBZ = 'V', then ifINFO = 0,Zcontains the orthonormal eigenvectors of the matrixA, with the i-th column ofZholding the eigenvector associated withW(i). ifJOBZ = 'N', thenZis not referenced. not even a glance π¦LDZ(INTEGER) β the leading dimension of the arrayZ.LDZ >= 1, and ifJOBZ = 'V',LDZ >= max(1,N). both, bestie πWORK(REALarray, dimensionLWORK) β on exit, ifINFO = 0,WORK(1)returns the optimalLWORK. little flex, we stan π«ΆLWORK(INTEGER) β the length of the arrayWORK.LWORK >= 1whenN <= 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.
and 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. same ritual as before, no cap β
IWORK(INTEGERarray, dimension(MAX(1,LIWORK))) β on exit, ifINFO = 0,IWORK(1)returns the optimalLIWORKπLIWORKLIWORKβ INTEGER, the dimension of the<italic>IWORK</italic>array π- If
JOBZ = 'N'orN <= 1,LIWORKmust be at least1. - If
JOBZ = 'V'andN > 2,LIWORKmust be at least3 + 5*N. - If
LIWORK = -1, bestie, that's a workspace query βοΈ β the routine only calculates the optimal sizes of theWORKandIWORKarrays, returns those values as the first entries of theWORKandIWORKarrays, and no error message related toLWORKorLIWORKis issued byXERBLA.
- If
INFOβ INTEGER, the vibe check at the end π= 0: successful exit< 0: ifINFO = -i, the i-th argument had an illegal value> 0: ifINFO = i, the algorithm failed to converge;ioff-diagonal elements of an intermediate tridiagonal form did not converge to zero π
π AUTHOR
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π¬ FURTHER DETAILS:
All details about the 2stage techniques are available in β like, the actual receipts, the lore, the whole bibliography bestie π:
- 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 226 of file ssbevd_2stage.f.
π¦ subroutine zhbevd_2stage
Okay so now we get to the complex one, and she is so iconic for it π:
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 β¨
π― PURPOSE:
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. Slay π
πΈ PARAMETERS
JOBZβJOBZisCHARACTER*1= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors. Not available in this release. π (yeah, we know, we're sad about it too)
UPLOβUPLOisCHARACTER*1= 'U': Upper triangle ofAis stored;= 'L': Lower triangle ofAis stored.
NβNisINTEGER. The order of the matrixA.N >= 0.KDβKDisINTEGER. The number of superdiagonals of the matrixAifUPLO = 'U', or the number of subdiagonals ifUPLO = 'L'.KD >= 0.ABβABisCOMPLEX*16array, dimension(LDAB, N). On entry, the upper or lower triangle of the Hermitian band matrixA, stored in the firstKD+1rows of the array. The j-th column ofAis stored in the j-th column of the arrayABas 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. She gets a whole glow-up on the way out, periodt π«
LDABβLDABisINTEGER. The leading dimension of the arrayAB.LDAB >= KD + 1.WβWisDOUBLE PRECISIONarray, dimension(N). IfINFO = 0, the eigenvalues in ascending order. Obsessed with an ordered list πZβZisCOMPLEX*16array, dimension(LDZ, N). IfJOBZ = 'V', then ifINFO = 0,Zcontains the orthonormal eigenvectors of the matrixA, with the i-th column ofZholding the eigenvector associated withW(i). IfJOBZ = 'N', thenZis not referenced. Not even a little bit. She said don't perceive me πLDZβLDZisINTEGER. The leading dimension of the arrayZ.LDZ >= 1, and ifJOBZ = 'V',LDZ >= max(1,N).WORKβWORKisCOMPLEX*16array, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. The length of the arrayWORK.LWORK >= 1, whenN <= 1; otherwise:- If
JOBZ = 'N'andN > 1,LWORKmust be queried.
- If
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'andN > 1,LWORKmust be queried. Not yet available. π - If
LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal sizes of theWORK,RWORKandIWORKarrays, returns these values as the first entries of theWORK,RWORKandIWORKarrays, and no error message related toLWORKorLRWORKorLIWORKis issued byXERBLA.
RWORKβRWORKisDOUBLE PRECISIONarray, dimension(LRWORK). On exit, ifINFO = 0,RWORK(1)returns the optimalLRWORK.LRWORKβLRWORKisINTEGER, the dimension of arrayRWORKπ- If
N <= 1,LRWORKmust be at least1. - If
JOBZ = 'N'andN > 1,LRWORKmust be at leastN. - If
JOBZ = 'V'andN > 1,LRWORKmust be at least1 + 5*N + 2*N**2. - If
LRWORK = -1, then a workspace query is assumed; the routine only calculates the optimal sizes of theWORK,RWORKandIWORKarrays, returns these values as the first entries of theWORK,RWORKandIWORKarrays, and no error message related toLWORKorLRWORKorLIWORKis issued byXERBLA.
- If
IWORKβIWORKisINTEGERarray, dimension(MAX(1,LIWORK)). On exit, ifINFO = 0,IWORK(1)returns the optimalLIWORK.LIWORKβLIWORKisINTEGER, the dimension of arrayIWORK.- If
JOBZ = 'N'orN <= 1,LIWORKmust be at least1. - If
JOBZ = 'V'andN > 1,LIWORKmust be at least3 + 5*N. - If
LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal sizes of theWORK,RWORKandIWORKarrays, returns these values as the first entries of theWORK,RWORKandIWORKarrays, and no error message related toLWORKorLRWORKorLIWORKis issued byXERBLA.
- If
INFOβINFOisINTEGER= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value.> 0: ifINFO = i, the algorithm failed to converge;ioff-diagonal elements of an intermediate tridiagonal form did not converge to zero. π
π AUTHOR
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π¬ FURTHER DETAILS:
Same receipts, same legends β 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
...
okay so the very last thing in the Function Documentation is this little breadcrumb, and honestly it's giving "x marks the spot" energy:
Definition at line 251 of file zhbevd_2stage.fβ that's exactly where in the source the good stuff lives, so if you ever wanna read the raw Fortran (iconic behavior, no notes), that's your line number π
β¨ AUTHOR β¨
Real talk, nobody sat down and hand-wrote this section. It's <italic>Generated automatically by Doxygen for LAPACK from the source code.</italic> β Doxygen literally auto-built it out of the LAPACK source code, so it's fr fr a machine-made credit and not some mysterious human author you need to go track down π«Ά
Ngl bestie, that means there's no rogue maintainer to @ β the docs are just a Doxygen glow-up of the actual source π
and that's a wrap on hbevd_2stage(3)!! π this whole page came to you courtesy of LAPACK, Version 3.12.0, with the footer reading hbevd_2stage(3) all cute in the corner β so go forth, call your HBEVD_2STAGE, and slay β¨ππ¦
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms