/home/abui...x_2stage.f(3)
π
/home/abui...x_2stage.f(3) β Library Functions Manual π¦
okay bestie, so this file is called /home/abui...x_2stage.f(3) and it lives in the Library Functions Manual, and honestly? it's a whole moment. it's giving "the Fortran source walked so your eigenvalues could run" β¨
πΈ NAME πΈ
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zheevx_2stage.f
like, that's the whole path. yes it's long. yes it ate. no we're not shortening it, it's literal, do not touch π
π SYNOPSIS π
Functions/Subroutines
subroutine ZHEEVX_2STAGE (jobz, range, uplo, n, a, lda, vl, vu, il, iu,
abstol, m, w, z, ldz, work, lwork, rwork, iwork, ifail, info)
ZHEEVX_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matrices π
π Function/Subroutine Documentation π
subroutine ZHEEVX_2STAGE (character jobz, character range, character uplo,
integer n, complex*16, dimension( lda, * ) a, integer lda, 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)
ZHEEVX_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matrices. that's the whole vibe, bestie π«Ά
β¨ Purpose β¨
!>ZHEEVX_2STAGEcomputes selected eigenvalues and, optionally, eigenvectors !> of a complex Hermitian matrixAusing 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.
so like β you get to choose which eigenvalues you want?? iconic. main character energy fr fr π
π Parameters π
okay this is the long part, but every single one matters, no skipping, iykyk:
JOBZ
!>JOBZisCHARACTER*1!> ='N': Compute eigenvalues only; !> ='V': Compute eigenvalues and eigenvectors. !> Not available in this release.
so 'V' is lowkey a "we don't have that yet" situation π β note that, don't come for me.
RANGE
!>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.
half-open interval (VL,VU] β yes with the round bracket on the left and the square one on the right, she's specific like that π
UPLO
!>UPLOisCHARACTER*1!> ='U': Upper triangle ofAis stored; !> ='L': Lower triangle ofAis stored.
pick a side bestie, we're not storing both π
N
!>NisINTEGER!> The order of the matrixA.N >= 0.
A
!>AisCOMPLEX*16array, dimension(LDA, N)!> On entry, the Hermitian matrixA. IfUPLO = 'U', the !> leading N-by-N upper triangular part ofAcontains the !> upper triangular part of the matrixA. IfUPLO = 'L', !> the leading N-by-N lower triangular part ofAcontains !> the lower triangular part of the matrixA. !> On exit, the lower triangle (ifUPLO='L') or the upper !> triangle (ifUPLO='U') ofA, including the diagonal, is !> destroyed.
β οΈ heads up: on exit part of A is destroyed β diagonal included. she does not leave things the way she found them π
LDA
!>LDAisINTEGER!> The leading dimension of the arrayA.LDA >= max(1,N).
VL
!>VLisDOUBLE PRECISION!> IfRANGE='V', the lower bound of the interval to !> be searched for eigenvalues.VL < VU. !> Not referenced ifRANGE = 'A'or'I'.
VU
!>VUisDOUBLE PRECISION!> IfRANGE='V', the upper bound of the interval to !> be searched for eigenvalues.VL < VU. !> Not referenced ifRANGE = 'A'or'I'.
VL and VU are a matched set, VL < VU, periodt π
IL
!>ILisINTEGER!> IfRANGE='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'.
IU
!>IUisINTEGER!> IfRANGE='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'.
ABSTOL
!>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 to !>ABSTOL + 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 reducingAto tridiagonal form. !> Eigenvalues will be computed most accurately whenABSTOLis !> set to twice the underflow threshold2*DLAMCH('S'), not zero. !> If this routine returns withINFO>0, indicating that some !> eigenvectors did not converge, try settingABSTOLto !>2*DLAMCH('S'). !> See by Demmel and !> Kahan, LAPACK Working Note #3.
π₯ the accuracy tea: want the most accurate eigenvalues? set ABSTOL to 2*DLAMCH('S'), not zero. and if INFO>0 (some eigenvectors didn't converge), that's your cue to switch to 2*DLAMCH('S').
M
!>MisINTEGER!> The total number of eigenvalues found.0 <= M <= N. !> IfRANGE = 'A',M = N, and ifRANGE = 'I',M = IU-IL+1.
W
!>WisDOUBLE PRECISIONarray, dimension(N)!> On normal exit, the firstMelements contain the selected !> eigenvalues in ascending order.
ascending order, as she should π
Z
!>ZisCOMPLEX*16array, dimension(LDZ, max(1,M))!> IfJOBZ = 'V', then ifINFO = 0, the firstMcolumns ofZ!> contain the orthonormal eigenvectors of the matrixA!> corresponding to the selected eigenvalues, with the i-th !> column ofZholding the eigenvector associated withW(i). !> If an eigenvector fails to converge, then that column ofZ!> contains 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 leastmax(1,M)columns are !> supplied in the arrayZ; ifRANGE = 'V', the exact value ofM!> is not known in advance and an upper bound must be used.
β οΈ real talk: you have to make sure Z has at least max(1,M) columns. and if RANGE = 'V'? you don't even know M yet, so you gotta use an upper bound. plan ahead bestie π
LDZ
!>LDZisINTEGER!> The leading dimension of the arrayZ.LDZ >= 1, and if !>JOBZ = '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 !> IfJOBZ = 'N'andN > 1,LWORKmust be queried. !>LWORK = MAX(1, 8*N, dimension)where !>dimension = max(stage1,stage2) + (KD+1)*N + N!> =N*KD + N*max(KD+1,FACTOPTNB)!>+ max(2*KD*KD, KD*NTHREADS)!>+ (KD+1)*N + N!> whereKDis the blocking size of the reduction, !>FACTOPTNBis the blocking used by the QR or LQ !> algorithm, usuallyFACTOPTNB=128is a good choice !>NTHREADSis the number of threads used when !> openMP compilation is enabled, otherwise =1. !> IfJOBZ = 'V'andN > 1,LWORKmust be queried. Not yet available !> IfLWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of theWORKarray, returns !> this value as the first entry of theWORKarray, and no error !> message related toLWORKis issued byXERBLA.
π the classic move: pass LWORK = -1, ask politely, get the optimal size back in WORK(1), and XERBLA won't even yell at you about LWORK. free real estate.
also note JOBZ = 'V' with N > 1 β LWORK must be queried, and it's not yet available. yeah. that.
RWORK
!>RWORKisDOUBLE PRECISIONarray, dimension(7*N)
IWORK
!>IWORKisINTEGERarray, dimension(5*N)
IFAIL
!>IFAILisINTEGERarray, dimension(N)!> IfJOBZ = 'V', then ifINFO = 0, the firstMelements of !>IFAILare zero. IfINFO > 0, thenIFAILcontains the !> indices of the eigenvectors that failed to converge. !> IfJOBZ = 'N', thenIFAILis not referenced.
she's the receipts π if an eigenvector ghosted you, its index is sitting right here.
INFO
!>INFOisINTEGER!> = 0: successful exit !> < 0: ifINFO = -i, the i-th argument had an illegal value !> > 0: ifINFO = i, then i eigenvectors failed to converge. !> Their indices are stored in arrayIFAIL.
π§ Author π§
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
a whole squad, we love a collab π«Άβ¨
β 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
the reading list is right there, go be a scholar π¦π
Definition at line 303 of file zheevx_2stage.f. π―
Author π
This page was generated automatically by Doxygen for LAPACK, straight from the source code, bestie. π No hand-typing drama hereβDoxygen handled it, and LAPACK is the icon behind the whole thing. β¨
That's the tea! π Footer sign-off: LAPACK, Version 3.12.0, page path /home/abui...x_2stage.f(3). No date listed, just so you know π. Love that for us. π«Άπ
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms