SRC/zhbevx_2stage.f(3)
π¦ SRC/zhbevx_2stage.f(3) π¦
okay so bestie, this page is from the Library Functions Manual, and itβs fully about SRC/zhbevx_2stage.f. itβs giving Fortran subroutine energy, and weβre here for it. π
π NAME π
SRC/zhbevx_2stage.f β thatβs the name, thatβs the file, no extra lore needed. β¨
β¨ SYNOPSIS β¨
π«Ά Functions/Subroutines π«Ά
bestie, the function list has exactly one main character: zhbevx_2stage, a subroutine with a truly iconic amount of arguments. π
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 β yes, OTHER is uppercase in the source, and we respect the source. π
π οΈ Function/Subroutine Documentation π οΈ
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)
Bestie, meet the full signature. ZHBEVX_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices. Yes, βOTHER matricesβ is the exact phrase, and yes, itβs a little mysterious. π
πΈ Purpose πΈ
Okay so the glow-up of this routine is: it computes selected eigenvalues and, optionally, eigenvectors of a complex Hermitian band matrix A using the 2stage technique for the reduction to tridiagonal. You can pick which eigenvalues/eigenvectors you want by specifying either a range of values or a range of indices for the desired eigenvalues. Itβs giving selection-menu energy, honestly. periodt. π₯
π Parameters π
JOBZisCHARACTER*1.= 'N':Compute eigenvalues only;= 'V':Compute eigenvalues and eigenvectors. Not available in this release.
π«Ά Heads up, bestie: JOBZ = 'V' literally says βNot available in this release.β Do not come for me, Iβm just the messenger. π
RANGEisCHARACTER*1.= 'A':all eigenvalues will be found;= 'V':all eigenvalues in the half-open interval(VL,VU]will be found;= 'I':theIL-th throughIU-th eigenvalues will be found.
UPLOisCHARACTER*1.= 'U':Upper triangle ofAis stored;= 'L':Lower triangle ofAis stored.
NisINTEGER.- The order of the matrix
A.N >= 0.
- The order of the matrix
KDisINTEGER.- The number of superdiagonals of the matrix
AifUPLO = 'U', or the number of subdiagonals ifUPLO = 'L'.KD >= 0.
- The number of superdiagonals of the matrix
ABisCOMPLEX*16array, dimension(LDAB, N).- On entry, the upper or lower triangle of the Hermitian band matrix
A, stored in the firstKD+1rows of the array. Thej-th column ofAis stored in thej-th column of the arrayABas follows:- if
UPLO = 'U',AB(kd+1+i-j,j) = A(i,j)formax(1,j-kd)<=i<=j; - if
UPLO = 'L',AB(1+i-j,j) = A(i,j)forj<=i<=min(n,j+kd).
- if
- On exit,
ABis overwritten by values generated during the reduction to tridiagonal form.
- On entry, the upper or lower triangle of the Hermitian band matrix
LDABisINTEGER.- The leading dimension of the array
AB.LDAB >= KD + 1.
- The leading dimension of the array
QisCOMPLEX*16array, dimension(LDQ, N).- If
JOBZ = 'V', theN-by-Nunitary matrix used in the reduction to tridiagonal form. - If
JOBZ = 'N', the arrayQis not referenced.
- If
LDQisINTEGER.- The leading dimension of the array
Q. IfJOBZ = 'V', thenLDQ >= max(1,N).
- The leading dimension of the array
VLisDOUBLE PRECISION.- If
RANGE='V', the lower bound of the interval to be searched for eigenvalues.VL < VU. Not referenced ifRANGE = 'A'or'I'.
- If
VUisDOUBLE PRECISION.- If
RANGE='V', the upper bound of the interval to be searched for eigenvalues.VL < VU. Not referenced ifRANGE = 'A'or'I'.
- If
ILisINTEGER.- If
RANGE='I', the index of the smallest eigenvalue to be returned.1 <= IL <= IU <= N, ifN > 0;IL = 1andIU = 0ifN = 0. Not referenced ifRANGE = 'A'or'V'.
- If
IUisINTEGER.- If
RANGE='I', the index of the largest eigenvalue to be returned.1 <= IL <= IU <= N, ifN > 0;IL = 1andIU = 0ifN = 0. Not referenced ifRANGE = 'A'or'V'.
- If
ABSTOLisDOUBLE 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 toABSTOL + EPS * max( |a|,|b| ) ,whereEPSis the machine precision. IfABSTOLis less than or equal to zero, thenEPS*|T|will be used in its place, where|T|is the 1-norm of the tridiagonal matrix obtained by reducingABto tridiagonal form. - Lowkey this tolerance stuff is highkey important: eigenvalues will be computed most accurately when
ABSTOLis set to twice the underflow threshold2*DLAMCH('S'), not zero. If this routine returns withINFO>0, indicating that some eigenvectors did not converge, try settingABSTOLto2*DLAMCH('S'). See by Demmel and Kahan, LAPACK Working Note #3.(Thatβs the exact reference line, double space and all β Iβm not fixing it, thatβs not my job. π )
- The absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval
MisINTEGER.- The total number of eigenvalues found.
0 <= M <= N. IfRANGE = 'A',M = N, and ifRANGE = 'I',M = IU-IL+1.
- The total number of eigenvalues found.
WisDOUBLE PRECISIONarray, dimension(N).- The first
Melements contain the selected eigenvalues in ascending order.
- The first
ZisCOMPLEX*16array, dimension(LDZ, max(1,M)).- If
JOBZ = 'V', then ifINFO = 0, the firstMcolumns ofZcontain the orthonormal eigenvectors of the matrixAcorresponding to the selected eigenvalues, with thei-th column ofZholding the eigenvector associated withW(i). If an eigenvector fails to converge, then that column ofZcontains the latest approximation to the eigenvector, and the index of the eigenvector is returned inIFAIL. IfJOBZ = 'N', thenZis not referenced. - Note: the user must ensure that at least
max(1,M)columns are supplied in the arrayZ; ifRANGE = 'V', the exact value ofMis not known in advance and an upper bound must be used.
- If
LDZisINTEGER.- The leading dimension of the array
Z.LDZ >= 1, and ifJOBZ = 'V',LDZ >= max(1,N).
- The leading dimension of the array
WORKisCOMPLEX*16array, dimension(LWORK).LWORKisINTEGER.- The length of the array
WORK.LWORK >= 1, whenN <= 1; otherwise IfJOBZ = 'N'andN > 1,LWORKmust be queried.LWORK = MAX(1, dimension)wheredimension = (2KD+1)*N + KD*NTHREADSwhereKDis the size of the band.NTHREADSis the number of threads used when openMP compilation is enabled, otherwise=1. IfJOBZ = '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. iykyk π
- The length of the array
RWORKisDOUBLE PRECISIONarray, dimension(7*N).IWORKisINTEGERarray, dimension(5*N).IFAILisINTEGERarray, dimension(N).- If
JOBZ = 'V', then ifINFO = 0, the firstMelements ofIFAILare zero. IfINFO > 0, thenIFAILcontains the indices of the eigenvectors that failed to converge. IfJOBZ = 'N', thenIFAILis not referenced.
- If
INFOisINTEGER.= 0:successful exit< 0:ifINFO = -i, thei-th argument had an illegal value> 0:ifINFO = i, thenieigenvectors failed to converge. Their indices are stored in arrayIFAIL.
vibe check: INFO = 0 is the slay. Anything else? Read the bullet, bestie. π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
no cap, thatβs the whole author squad. π«Ά
π 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
Obsessed with a good citation list, honestly. β
Definition at line 323 of file zhbevx_2stage.f.
π§Ύ Author π§Ύ
Generated automatically by Doxygen for LAPACK from the source code.
Thatβs the whole page, bestie! The footerβs giving LAPACK Version 3.12.0, file SRC/zhbevx_2stage.f(3) β mwah, go slay your eigenvalues. πβ¨πππ§π
π¦ 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