SSTEQR2(l)

πŸ“¦ version 1.5, in ubuntu jammy

πŸ’– SSTEQR2 πŸ’–

okay so bestie, gather round, because this one is a whole moment. we're looking at SSTEQR2, a LAPACK routine, version 2.0 β€” and no cap, she is a modified version of LAPACK routine SSTEQR. she's giving "yes i'm the same but also i'm different." πŸ’…


✨ NAME ✨

  • SSTEQR2 β€” i a modified version of LAPACK routine SSTEQR

✨ SYNOPSIS ✨

SUBROUTINE SSTEQR2( COMPZ, N, D, E, Z, LDZ, NR, WORK, INFO )

    CHARACTER       COMPZ

    INTEGER         INFO, LDZ, N, NR

    REAL            D( * ), E( * ), WORK( * ), Z( LDZ, * )

🌸 PURPOSE 🌸

so like, SSTEQR2 is a modified version of LAPACK routine SSTEQR. it computes all the eigenvalues and, if you want them, the eigenvectors of a symmetric tridiagonal matrix using the implicit QL or QR method. lowkey iconic. πŸŽ€

and then β€” running SSTEQR2 to perform updates on a distributed matrix Q. proper usage of SSTEQR2 can be gleaned from examination of ScaLAPACK's PSSYEV. iykyk. ✨


πŸ’… ARGUMENTS πŸ’…

  • COMPZ (input) CHARACTER*1
    • = 'N': compute eigenvalues only. just the vibes, no vectors.
    • = 'I': compute eigenvalues and eigenvectors of the tridiagonal matrix. Z must be initialized to the identity matrix by PDLASET or DLASET prior to entering this subroutine. do not skip this step bestie, i'm begging. πŸ™ˆ
  • N (input) INTEGER the order of the matrix. N >= 0.
  • D (input/output) REAL array, dimension (N) on entry, the diagonal elements of the tridiagonal matrix. on exit, if INFO = 0, the eigenvalues in ascending order. she ascends. πŸ‘‘
  • E (input/output) REAL array, dimension (N-1) on entry, the (n-1) subdiagonal elements of the tridiagonal matrix. on exit, E has been destroyed. gone. deceased. πŸ’€ not a drill β€” if you needed that data, it's over.
  • Z (local input/local output) REAL array, global dimension (N, N), local dimension (LDZ, NR). on entry, if COMPZ = 'V', then Z contains the orthogonal matrix used in the reduction to tridiagonal form. on exit, if INFO = 0, then if COMPZ = 'V', Z contains the orthonormal eigenvectors of the original symmetric matrix, and if COMPZ = 'I', Z contains the orthonormal eigenvectors of the symmetric tridiagonal matrix. if COMPZ = 'N', then Z is not referenced. she's not even looking at it. 🫢
  • LDZ (input) INTEGER the leading dimension of the array Z. LDZ >= 1, and if eigenvectors are desired, then LDZ >= max(1,N).
  • NR (input) INTEGER NR = MAX(1, NUMROC( N, NB, MYPROW, 0, NPROCS ) ). if COMPZ = 'N', then NR is not referenced. again: ignored, ghosted, unbothered. 🌈
  • WORK (workspace) REAL array, dimension (max(1,2*N-2)) if COMPZ = 'N', then WORK is not referenced. honestly she's just chilling in the background.
  • INFO (output) INTEGER
    • = 0: successful exit. slay. πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value. bestie. what did you do.
    • > 0: the algorithm has failed to find all the eigenvalues in a total of 30*N iterations; if INFO = i, then i elements of E have not converged to zero; on exit, D and E contain the elements of a symmetric tridiagonal matrix which is orthogonally similar to the original matrix. so like β€” not converged, not the end of the world, but read that carefully, fr fr.

⚠️ real talk: E gets destroyed on exit, and that INFO > 0 case is not a cute little warning, it's the algorithm genuinely not converging in 30*N iterations. respect the caveats. πŸ™

mwah πŸ’‹ that's the whole page. this one came from a modified LAPACK routine, dated 12 May 1997 β€” yes she's a vintage queen and she still ate. go forth and compute, bestie. πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from