stegr(3)

πŸ’… stegr(3) β€” Library Functions Manual energy

okay so this is the stegr(3) page from the Library Functions Manual, and the name is literally stegr: eig, bisection, see stemr. It’s giving compatibility-wrapper realness, bestie. 🫢

πŸ’– NAME

stegr β€” stegr: eig, bisection, see stemr

✨ SYNOPSIS

Four subroutines, one iconic little family:

       subroutine cstegr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w,
           z, ldz, isuppz, work, lwork, iwork, liwork, info)
           CSTEGR
       subroutine dstegr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w,
           z, ldz, isuppz, work, lwork, iwork, liwork, info)
           DSTEGR
       subroutine sstegr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w,
           z, ldz, isuppz, work, lwork, iwork, liwork, info)
           SSTEGR
       subroutine zstegr (jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w,
           z, ldz, isuppz, work, lwork, iwork, liwork, info)
           ZSTEGR

🌈 Detailed Description

The detailed description section is short and sweet here β€” the function documentation below is where the main character energy lives. πŸ’…

πŸ‘‘ Function Documentation

πŸ¦‹ cstegr β€” CSTEGR

       subroutine cstegr (character jobz, character range, integer n, real,
           dimension( * ) d, real, dimension( * ) e, real vl, real vu, integer il,
           integer iu, real abstol, integer m, real, dimension( * ) w, complex,
           dimension( ldz, * ) z, integer ldz, integer, dimension( * ) isuppz,
           real, dimension( * ) work, integer lwork, integer, dimension( * ) iwork,
           integer liwork, integer info)
           CSTEGR

✨ Purpose

okay so CSTEGR computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, and the corresponding real eigenvectors are pairwise orthogonal. no cap. ✨

The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues.

CSTEGR is a compatibility wrapper around the improved CSTEMR routine. See SSTEMR for further details. πŸ‘€

One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used.

Note: CSTEGR and CSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptional values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard. ⚠️

πŸŽ€ Parameters

  • JOBZ β€” CHARACTER*1. This is the vibe check for what you want back:
    • = 'N': Compute eigenvalues only;
    • = 'V': Compute eigenvalues and eigenvectors.
  • RANGE β€” CHARACTER*1. Pick your search era:
    • = '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.
  • N β€” INTEGER. The order of the matrix. N >= 0.
  • D β€” REAL array, dimension (N). On entry, the N diagonal elements of the tridiagonal matrix T. On exit, D is overwritten.
  • E β€” REAL array, dimension (N). On entry, the (N-1) subdiagonal elements of the tridiagonal matrix T in elements 1 to N-1 of E. E(N) need not be set on input, but is used internally as workspace. On exit, E is overwritten.
  • VL β€” REAL. If RANGE='V', the lower bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.
  • VU β€” REAL. If RANGE='V', the upper bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.
  • IL β€” INTEGER. If RANGE='I', the index of the smallest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0. Not referenced if RANGE = 'A' or 'V'.
  • IU β€” INTEGER. If RANGE='I', the index of the largest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0. Not referenced if RANGE = 'A' or 'V'.
  • ABSTOL β€” REAL. Unused. Was the absolute error tolerance for the eigenvalues/eigenvectors in previous versions.
  • M β€” INTEGER. The total number of eigenvalues found. 0 <= M <= N. If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1.
  • W β€” REAL array, dimension (N). The first M elements contain the selected eigenvalues in ascending order.
  • Z β€” COMPLEX array, dimension (LDZ, max(1,M) ). If JOBZ = 'V', and if INFO = 0, then the first M columns of Z contain the orthonormal eigenvectors of the matrix T corresponding to the selected eigenvalues, with the i-th column of Z holding the eigenvector associated with W(i). 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. Supplying N columns is always safe.
  • LDZ β€” INTEGER. The leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', then LDZ >= max(1,N).
  • ISUPPZ β€” INTEGER array, dimension ( 2*max(1,M) ). The support of the eigenvectors in Z, i.e., the indices indicating the nonzero elements in Z. The i-th computed eigenvector is nonzero only in elements ISUPPZ( 2*i-1 ) through ISUPPZ( 2*i ). This is relevant in the case when the matrix is split. ISUPPZ is only accessed when JOBZ is 'V' and N > 0.
  • WORK β€” REAL array, dimension (LWORK). On exit, if INFO = 0, WORK(1) returns the optimal (and minimal) LWORK.
  • LWORK β€” INTEGER. The dimension of the array WORK. LWORK >= max(1,18*N) if JOBZ = 'V', and LWORK >= max(1,12*N) if JOBZ = 'N'. 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.
  • IWORK β€” INTEGER array, dimension (LIWORK). On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK.
  • LIWORK β€” INTEGER. The dimension of the array IWORK. LIWORK >= max(1,10*N) if the eigenvectors are desired, and LIWORK >= max(1,8*N) if only the eigenvalues are to be computed. If LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the IWORK array, returns this value as the first entry of the IWORK array, and no error message related to LIWORK is issued by XERBLA.
  • INFO β€” INTEGER. On exit, INFO:
    • = 0: successful exit
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • > 0: if INFO = 1X, internal error in SLARRE, if INFO = 2X, internal error in CLARRV. Here, the digit X = ABS( IINFO ) < 10, where IINFO is the nonzero error code returned by SLARRE or CLARRV, respectively.

πŸ’– Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

🌸 Contributors:

Inderjit Dhillon, IBM Almaden, USA

Osni Marques, LBNL/NERSC, USA

Christof Voemel, LBNL/NERSC, USA

Definition at line 262 of file cstegr.f.

🫢 dstegr β€” DSTEGR

       subroutine dstegr (character jobz, character range, integer n, double
           precision, dimension( * ) d, double precision, dimension( * ) e, double
           precision vl, double precision vu, integer il, integer iu, double
           precision abstol, integer m, double precision, dimension( * ) w, double
           precision, dimension( ldz, * ) z, integer ldz, integer, dimension( * )
           isuppz, double precision, dimension( * ) work, integer lwork, integer,
           dimension( * ) iwork, integer liwork, integer info)
           DSTEGR

✨ Purpose

DSTEGR computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, and the corresponding real eigenvectors are pairwise orthogonal. literally the same iconic setup. πŸ’œ

The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues.

DSTEGR is a compatibility wrapper around the improved DSTEMR routine. See DSTEMR for further details. πŸ‘‘

One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used.

Note: DSTEGR and DSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptional values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard. ⚠️

πŸŽ€ Parameters

  • JOBZ β€” CHARACTER*1. What do you want computed, bestie?
    • = 'N': Compute eigenvalues only;
    • = 'V': Compute eigenvalues and eigenvectors.
  • RANGE β€” CHARACTER*1. The search-scope selector:
    • = '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.

N

  • N β€” N is INTEGER. It's the order of the matrix, and the rule is N >= 0. πŸ’…
  • D β€” D is a DOUBLE PRECISION array, dimension (N). On entry, it holds the N diagonal elements of the tridiagonal matrix T. On exit? Sorry bestie, D is overwritten. 😭
  • E β€” E is a DOUBLE PRECISION array, dimension (N). On entry, the (N-1) subdiagonal elements of the tridiagonal matrix T live in elements 1 to N-1 of E. E(N) does not need to be set on input, but it's used internally as workspace. On exit, E is overwritten. 🫢
  • VL β€” VL is DOUBLE PRECISION. If RANGE='V', it's the lower bound of the interval to be searched for eigenvalues. The rule is VL < VU. It is not referenced if RANGE = 'A' or 'I'. πŸ”₯
  • VU β€” VU is DOUBLE PRECISION. If RANGE='V', it's the upper bound of the interval to be searched for eigenvalues. The rule is VL < VU. It is not referenced if RANGE = 'A' or 'I'. ✨
  • IL β€” IL is INTEGER. If RANGE='I', it's the index of the smallest eigenvalue to be returned. The rule: 1 <= IL <= IU <= N, if N > 0. Not referenced if RANGE = 'A' or 'V'. πŸŽ€
  • IU β€” IU is INTEGER. If RANGE='I', it's the index of the largest eigenvalue to be returned. The rule: 1 <= IL <= IU <= N, if N > 0. Not referenced if RANGE = 'A' or 'V'. πŸ‘‘
  • ABSTOL β€” ABSTOL is DOUBLE PRECISION. It's unused, bestie. It was the absolute error tolerance for the eigenvalues/eigenvectors in previous versions. πŸ’€
  • M β€” M is INTEGER. The total number of eigenvalues found. 0 <= M <= N. If RANGE = 'A', then M = N, and if RANGE = 'I', then M = IU-IL+1. 🌟
  • W β€” W is a DOUBLE PRECISION array, dimension (N). The first M elements contain the selected eigenvalues in ascending order. πŸŽ€
  • Z β€” Z is a DOUBLE PRECISION array, dimension (LDZ, max(1,M) ). If JOBZ = 'V', and if INFO = 0, then the first M columns of Z contain the orthonormal eigenvectors of the matrix T corresponding to the selected eigenvalues, with the i-th column of Z holding the eigenvector associated with W(i). 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. Supplying N columns is always safe. πŸ’–
  • LDZ β€” LDZ is INTEGER. The leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', then LDZ >= max(1,N). πŸ¦‹
  • ISUPPZ β€” ISUPPZ is INTEGER array, dimension ( 2*max(1,M) ). It's the support of the eigenvectors in Z, i.e., the indices indicating the nonzero elements in Z. The i-th computed eigenvector is nonzero only in elements ISUPPZ( 2*i-1 ) through ISUPPZ( 2*i ). This is relevant in the case when the matrix is split. ISUPPZ is only accessed when JOBZ is 'V' and N > 0. 🌸
  • WORK β€” WORK is DOUBLE PRECISION array, dimension (LWORK). On exit, if INFO = 0, WORK(1) returns the optimal (and minimal) LWORK. ⭐
  • LWORK β€” LWORK is INTEGER. The dimension of the array WORK. LWORK >= max(1,18*N) if JOBZ = 'V', and LWORK >= max(1,12*N) if JOBZ = 'N'. 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. πŸ”₯
  • IWORK β€” IWORK is INTEGER array, dimension (LIWORK). On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK. 🧚
  • LIWORK β€” LIWORK is INTEGER. The dimension of the array IWORK. LIWORK >= max(1,10*N) if the eigenvectors are desired, and LIWORK >= max(1,8*N) if only the eigenvalues are to be computed. If LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the IWORK array, returns this value as the first entry of the IWORK array, and no error message related to LIWORK is issued by XERBLA. πŸ’œ
  • INFO β€” INFO is INTEGER. On exit, INFO:
    • = 0: successful exit. πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value. πŸ™ˆ
    • > 0: if INFO = 1X, internal error in DLARRE, if INFO = 2X, internal error in DLARRV. Here, the digit X = ABS( IINFO ) < 10, where IINFO is the nonzero error code returned by DLARRE or DLARRV, respectively. πŸ’€

Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Contributors:

  • Inderjit Dhillon, IBM Almaden, USA
  • Osni Marques, LBNL/NERSC, USA
  • Christof Voemel, LBNL/NERSC, USA

Definition at line 262 of file dstegr.f.

   subroutine sstegr (character jobz, character range, integer n, real,
       dimension( * ) d, real, dimension( * ) e, real vl, real vu, integer il,
       integer iu, real abstol, integer m, real, dimension( * ) w, real,
       dimension( ldz, * ) z, integer ldz, integer, dimension( * ) isuppz,
       real, dimension( * ) work, integer lwork, integer, dimension( * ) iwork,
       integer liwork, integer info)

SSTEGR πŸ’…

Purpose:

Okay so SSTEGR computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, and the corresponding real eigenvectors are pairwise orthogonal. The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the desired eigenvalues. SSTEGR is a compatibility wrapper around the improved SSTEMR routine. See SSTEMR for further details. One important change is that the ABSTOL parameter no longer provides any benefit and hence is no longer used.

Note: SSTEGR and SSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs. Normal execution may create these exceptional values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard. 😭

Parameters

  • JOBZ β€” JOBZ is CHARACTER*1.
    • = 'N': Compute eigenvalues only; πŸŽ€
    • = 'V': Compute eigenvalues and eigenvectors. πŸ’–
  • 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. πŸ‘‘
  • N β€” N is INTEGER. The order of the matrix. N >= 0. πŸ’…
  • D β€” D is REAL array, dimension (N). On entry, the N diagonal elements of the tridiagonal matrix T. On exit, D is overwritten. 😭
  • E β€” E is REAL array, dimension (N). On entry, the (N-1) subdiagonal elements of the tridiagonal matrix T in elements 1 to N-1 of E. E(N) need not be set on input, but is used internally as workspace. On exit, E is overwritten. 🫢
  • VL β€” VL is REAL. If RANGE='V', the lower bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'. πŸ”₯
  • VU β€” VU is REAL. If RANGE='V', the upper bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'. ✨
  • IL β€” IL is INTEGER. If RANGE='I', the index of the smallest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0. Not referenced if RANGE = 'A' or 'V'. πŸŽ€
  • IU β€” IU is INTEGER. If RANGE='I', the index of the largest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0. Not referenced if RANGE = 'A' or 'V'. πŸ‘‘
  • ABSTOL β€” ABSTOL is REAL. Unused. Was the absolute error tolerance for the eigenvalues/eigenvectors in previous versions. πŸ’€
  • 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. 🌟
  • W β€” W is REAL array, dimension (N). The first M elements contain the selected eigenvalues in ascending order. πŸŽ€
  • Z
  • Z β€” this is a REAL array, dimension (LDZ, max(1,M) ). If JOBZ = 'V' and INFO = 0, then the first M columns of Z hold the orthonormal eigenvectors of the matrix T that match your selected eigenvalues, and the i-th column of Z is the eigenvector for W(i) πŸŽ€. If JOBZ = 'N', then Z isn't even looked at, ghosted fr. Heads up bestie: you have to make sure at least max(1,M) columns are actually supplied in the Z array β€” and if RANGE = 'V', the exact value of M isn't known in advance so you gotta use an upper bound 😭. Supplying N columns is always safe, that's the no-stress option πŸ’….
  • LDZ β€” LDZ is INTEGER, the leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V' then LDZ >= max(1,N). Don't skip this one, it's giving strict-parent energy πŸ™ˆ.
  • ISUPPZ β€” ISUPPZ is INTEGER array, dimension ( 2*max(1,M) ). It's the support of the eigenvectors in Z, aka the indices that tell you where the nonzero elements in Z actually live ✨. The i-th computed eigenvector is nonzero only in elements ISUPPZ( 2*i-1 ) through ISUPPZ( 2*i ). This is relevant when the matrix is split, iykyk. ISUPPZ is only accessed when JOBZ is 'V' and N > 0 πŸ¦‹.
  • WORK β€” WORK is REAL array, dimension (LWORK). On exit, if INFO = 0, WORK(1) returns the optimal (and minimal) LWORK β€” she tells you what she actually needed, iconic πŸ’–.
  • LWORK β€” LWORK is INTEGER, the dimension of the array WORK. LWORK >= max(1,18*N) if JOBZ = 'V', and LWORK >= max(1,12*N) if JOBZ = 'N' πŸ“. If LWORK = -1, then a workspace query is assumed β€” the routine only calculates the optimal size of the WORK array, returns that value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA 🧚. It's the "just asking, not ordering" mode.
  • IWORK β€” IWORK is INTEGER array, dimension (LIWORK). On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK 🌸.
  • LIWORK β€” LIWORK is INTEGER, the dimension of the array IWORK. LIWORK >= max(1,10*N) if the eigenvectors are desired, and LIWORK >= max(1,8*N) if only the eigenvalues are to be computed ✨. If LIWORK = -1, then a workspace query is assumed β€” the routine only calculates the optimal size of the IWORK array, returns this value as the first entry of the IWORK array, and no error message related to LIWORK is issued by XERBLA. Same drill, integer edition πŸ’….
  • INFO β€” INFO is INTEGER. On exit, INFO is lowkey the vibe report πŸ“‹:
    • = 0: successful exit πŸŽ‰ slay.
    • < 0: if INFO = -i, the i-th argument had an illegal value πŸ’€ β€” check your inputs bestie.
    • > 0: if INFO = 1X, internal error in SLARRE; if INFO = 2X, internal error in SLARRV. Here, the digit X = ABS( IINFO ) < 10, where IINFO is the nonzero error code returned by SLARRE or SLARRV, respectively. So like, INFO = 13 means SLARRE returned IINFO = -3... no cap, read the digits πŸ™ˆ.

🫢 Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

πŸ‘‘ Contributors:

Inderjit Dhillon, IBM Almaden, USA Osni Marques, LBNL/NERSC, USA Christof Voemel, LBNL/NERSC, USA

Definition at line 262 of file sstegr.f.


subroutine zstegr (character jobz, character range, integer n, double
    precision, dimension( * ) d, double precision, dimension( * ) e, 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, integer, dimension( * )
    isuppz, double precision, dimension( * ) work, integer lwork, integer,
    dimension( * ) iwork, integer liwork, integer info)

πŸ’œ ZSTEGR

✨ Purpose:

ZSTEGR computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T πŸ”₯. Any such unreduced matrix has a well defined set of pairwise different real eigenvalues, and the corresponding real eigenvectors are pairwise orthogonal β€” that's just how she is ✨.

The spectrum may be computed either completely or partially by specifying either an interval (VL,VU] or a range of indices IL:IU for the eigenvalues you want 🎯.

ZSTEGR is a compatibility wrapper around the improved ZSTEMR routine. See ZSTEMR for further details β€” she's the main character, this one's the cover πŸ’….

One important change: the ABSTOL parameter no longer provides any benefit and hence is no longer used πŸ’€. It's giving deprecated-but-still-invited-to-the-party.

Note: ZSTEGR and ZSTEMR work only on machines which follow IEEE-754 floating-point standard in their handling of infinities and NaNs 😀. Normal execution may create these exceptional values and hence may abort due to a floating point exception in environments which do not conform to the IEEE-754 standard. Like, don't say nobody warned you πŸ™ˆ.

πŸŽ€ Parameters

  • JOBZ β€” JOBZ is CHARACTER*1:
    • = 'N': compute eigenvalues only πŸ‘€
    • = 'V': compute eigenvalues and eigenvectors πŸŽ‰ both, we're doing both.
  • 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 🎯
  • N β€” N is INTEGER, the order of the matrix. N >= 0 ⭐.
  • D β€” D is DOUBLE PRECISION array, dimension (N). On entry, the N diagonal elements of the tridiagonal matrix T. On exit, D is overwritten 🫠 β€” she's gone, she served her purpose.
  • E β€” E is DOUBLE PRECISION array, dimension (N). On entry, the (N-1) subdiagonal elements of the tridiagonal matrix T in elements 1 to N-1 of E. E(N) need not be set on input, but is used internally as workspace 🧚. On exit, E is overwritten πŸ’….
  • 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' β€” she minds her business.
  • 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'.
  • IL β€” IL is INTEGER. If RANGE='I', the index of the smallest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0. Not referenced if RANGE = 'A' or 'V' ✨.
  • IU β€” IU is INTEGER. If RANGE='I', the index of the largest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0. Not referenced if RANGE = 'A' or 'V' ✨.
  • ABSTOL β€” ABSTOL is DOUBLE PRECISION. Unused. Was the absolute error tolerance for the eigenvalues/eigenvectors in previous versions πŸ•―οΈ rip to a legend, she's retired.
  • 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 β€” math is mathing πŸ’….
  • W β€” W is DOUBLE PRECISION array, dimension (N). The first M elements contain the selected eigenvalues in ascending order πŸ“ˆ β€” sorted, organized, she has her life together.
  • Z β€” Z is COMPLEX*16 array, dimension (LDZ, max(1,M) ). If JOBZ = 'V' and if INFO = 0, then the first M columns of Z contain the orthonormal eigenvectors of the matrix T corresponding to the selected eigenvalues, with the i-th column of Z holding the eigenvector associated with W(i) πŸŽ€. If JOBZ = 'N', then Z is not referenced. Heads up bestie: you 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 😭. Supplying N columns is always safe 🫢.
  • LDZ β€” LDZ is INTEGER, the leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', then LDZ >= max(1,N) πŸ’….
  • ISUPPZ β€” ISUPPZ is INTEGER array, dimension ( 2*max(1,M) ). The support of the eigenvectors in Z, i.e., the indices indicating the nonzero elements in Z ✨. The i-th computed eigenvector is nonzero only in elements ISUPPZ( 2*i-1 ) through ISUPPZ( 2*i ). This is relevant in the case when the matrix is split, iykyk πŸ¦‹. ISUPPZ is only accessed when JOBZ is 'V' and N > 0.
  • WORK β€” WORK is DOUBLE PRECISION array, dimension (LWORK). On exit, if INFO = 0, WORK(1) returns the optimal (and minimal) LWORK πŸ’–.
  • LWORK β€” LWORK is INTEGER, the dimension of the array WORK. LWORK >= max(1,18*N) if JOBZ = 'V', and LWORK >= max(1,12*N) if JOBZ = 'N' πŸ“. 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 🧚.
  • IWORK β€” IWORK is INTEGER array, dimension (LIWORK). On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK 🌸.
  • LIWORK β€”
  • LIWORK β€” INTEGER πŸ’… this is the dimension of the array IWORK, bestie, and it has rules:
    • LIWORK >= max(1,10*N) if you actually want the eigenvectors (iconic of you)
    • LIWORK >= max(1,8*N) if you're only here for the eigenvalues (lowkey valid, less work)

And the spicy part 🌢️: if LIWORK = -1, then a workspace query is assumed β€” the routine only calculates the optimal size of the IWORK array, returns that value as the first entry of the IWORK array, and no error message related to LIWORK is issued by XERBLA. So it's giving "just asking, not committing" energy πŸŽ€

  • INFO β€” INTEGER, and on exit it's your little report card πŸ“‹:
    • = 0: successful exit ✨ slay, we ate
    • < 0: if INFO = -i, the i-th argument had an illegal value πŸ™ˆ
    • > 0: if INFO = 1X, internal error in DLARRE; if INFO = 2X, internal error in ZLARRV. And here's the decoder ring: the digit X = ABS( IINFO ) < 10, where IINFO is the nonzero error code returned by DLARRE or ZLARRV, respectively πŸ’€

πŸ‘‘ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Not one, not two β€” four whole institutions carried this fr fr 🫢

🌸 Contributors:

  • Inderjit Dhillon, IBM Almaden, USA
  • Osni Marques, LBNL/NERSC, USA
  • Christof Voemel, LBNL/NERSC, USA

Shoutout to the girlies who made this happen πŸ’–

πŸ¦‹ Definition at line 262 of file zstegr.f.

Like, if you ever need to find it, that's literally where it lives πŸ“


πŸŽ€ Author (the docs one)

Generated automatically by Doxygen for LAPACK from the source code. So no human typed this part β€” the machine did it, and honestly? It understood the assignment πŸ€–βœ¨


Okay so that's the whole page, bestie! Every flag, every bound, every error code β€” all of it, no cap πŸ’… Go forth and stegr responsibly.

And the cute little footer at the very bottom confirms the source and version: this is from LAPACK, Version 3.12.0, stamped for stegr(3) with its date β€” so you know exactly which era of the timeline you're reading 🌈⭐ Periodt 🫢

πŸ“¦ where this page comes from