laqz3(3)

πŸ’– NAME πŸ’–

okay so quick vibe check: this is laqz3 from the Library Functions Manual (yes, laqz3(3) β€” the header literally says "Library Functions Manual", we're fancy).

laqz3 β€” bestie, it's the step-in routine for ggev3 and gges3. That's the whole personality. ✨


✨ SYNOPSIS ✨

πŸŽ€ Functions

  • claqz3 β€” a plain subroutine, answering to the name CLAQZ3:
subroutine claqz3 (ilschur, ilq, ilz, n, ilo, ihi, nshifts, nblock_desired, alpha, beta, a, lda, b, ldb, q, ldq, z, ldz, qc, ldqc, zc, ldzc, work, lwork, info)
  • dlaqz3 β€” a recursive subroutine, goes by DLAQZ3:
recursive subroutine dlaqz3 (ilschur, ilq, ilz, n, ilo, ihi, nw, a, lda, b, ldb, q, ldq, z, ldz, ns, nd, alphar, alphai, beta, qc, ldqc, zc, ldzc, work, lwork, rec, info)
  • slaqz3 β€” also a recursive subroutine, also iconic, answers to SLAQZ3:
recursive subroutine slaqz3 (ilschur, ilq, ilz, n, ilo, ihi, nw, a, lda, b, ldb, q, ldq, z, ldz, ns, nd, alphar, alphai, beta, qc, ldqc, zc, ldzc, work, lwork, rec, info)
  • zlaqz3 β€” a plain subroutine, name checked as ZLAQZ3:
subroutine zlaqz3 (ilschur, ilq, ilz, n, ilo, ihi, nshifts, nblock_desired, alpha, beta, a, lda, b, ldb, q, ldq, z, ldz, qc, ldqc, zc, ldzc, work, lwork, info)

🌸 Detailed Description 🌸

no cap, this section is empty in the original 🫢 the actual content lives down in Function Documentation, so scroll with me bestie ⬇️


πŸ‘‘ Function Documentation πŸ‘‘

πŸ’… subroutine claqz3

subroutine claqz3 (logical, intent(in) ilschur, logical, intent(in) ilq, logical, intent(in) ilz, integer, intent(in) n, integer, intent(in) ilo, integer, intent(in) ihi, integer, intent(in) nshifts, integer, intent(in) nblock_desired, complex, dimension( * ), intent(inout) alpha, complex, dimension( * ), intent(inout) beta, complex, dimension( lda, * ), intent(inout) a, integer, intent(in) lda, complex, dimension( ldb, * ), intent(inout) b, integer, intent(in) ldb, complex, dimension( ldq, * ), intent(inout) q, integer, intent(in) ldq, complex, dimension( ldz, * ), intent(inout) z, integer, intent(in) ldz, complex, dimension( ldqc, * ), intent(inout) qc, integer, intent(in) ldqc, complex, dimension( ldzc, * ), intent(inout) zc, integer, intent(in) ldzc, complex, dimension( * ), intent(inout) work, integer, intent(in) lwork, integer, intent(out) info)

CLAQZ3 πŸ¦‹

Purpose:

CLAQZ3 Executes a single multishift QZ sweep πŸ”₯

Parameters

  • ILSCHUR β€” ILSCHUR is LOGICAL. Determines whether or not to update the full Schur form. πŸ’…
  • ILQ β€” ILQ is LOGICAL. Determines whether or not to update the matrix Q.
  • ILZ β€” ILZ is LOGICAL. Determines whether or not to update the matrix Z.
  • N β€” N is INTEGER. The order of the matrices A, B, Q, and Z. N >= 0.
  • ILO β€” ILO is INTEGER. (that's the whole description bestie, it's giving mystique 🫢)
  • IHI β€” IHI is INTEGER. (same energy honestly)
  • NSHIFTS β€” NSHIFTS is INTEGER. The desired number of shifts to use.
  • NBLOCK_DESIRED β€” NBLOCK_DESIRED is INTEGER. The desired size of the computational windows.
  • ALPHA β€” ALPHA is COMPLEX array. SR contains the alpha parts of the shifts to use.
  • BETA β€” BETA is COMPLEX array. SS contains the scale of the shifts to use.
  • A β€” A is COMPLEX array, dimension (LDA, N).
  • LDA β€” LDA is INTEGER. The leading dimension of the array A. LDA >= max( 1, N ).
  • B β€” B is COMPLEX array, dimension (LDB, N).
  • LDB β€” LDB is INTEGER. The leading dimension of the array B. LDB >= max( 1, N ).
  • Q β€” Q is COMPLEX array, dimension (LDQ, N).
  • LDQ β€” LDQ is INTEGER.
  • Z β€” Z is COMPLEX array, dimension (LDZ, N).
  • LDZ β€” LDZ is INTEGER.
  • QC β€” QC is COMPLEX array, dimension (LDQC, NBLOCK_DESIRED).
  • LDQC β€” LDQC is INTEGER.
  • ZC β€” ZC is COMPLEX array, dimension (LDZC, NBLOCK_DESIRED).
  • LDZC β€” LDZ is INTEGER. (and yes, the original literally says LDZ here β€” not me, I'm just the messenger πŸ’€)
  • 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 dimension of the array WORK. LWORK >= max(1,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. 🩡
  • INFO β€” INFO is INTEGER:
    • = 0: successful exit πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value 😭

Author

Thijs Steel, KU Leuven

Date

May 2020

Definition at line 203 of file claqz3.f.


🧚 recursive subroutine dlaqz3

recursive subroutine dlaqz3 (logical, intent(in) ilschur, logical, intent(in) ilq, logical, intent(in) ilz, integer, intent(in) n, integer, intent(in) ilo, integer, intent(in) ihi, integer, intent(in) nw, double precision, dimension( lda, * ), intent(inout) a, integer, intent(in) lda, double precision, dimension( ldb, * ), intent(inout) b, integer, intent(in) ldb, double precision, dimension( ldq, * ), intent(inout) q, integer, intent(in) ldq, double precision, dimension( ldz, * ), intent(inout) z, integer, intent(in) ldz, integer, intent(out) ns, integer, intent(out) nd, double precision, dimension( * ), intent(inout) alphar, double precision, dimension( * ), intent(inout) alphai, double precision, dimension( * ), intent(inout) beta, double precision, dimension( ldqc, * ) qc, integer, intent(in) ldqc, double precision, dimension( ldzc, * ) zc, integer, intent(in) ldzc, double precision, dimension( * ) work, integer, intent(in) lwork, integer, intent(in) rec, integer, intent(out) info)

DLAQZ3 🌈

Purpose:

DLAQZ3 performs AED ✨

Parameters

  • ILSCHUR β€” ILSCHUR is LOGICAL. Determines whether or not to update the full Schur form.
  • ILQ β€” ILQ is LOGICAL. Determines whether or not to update the matrix Q.
  • ILZ β€” ILZ is LOGICAL. Determines whether or not to update the matrix Z.
  • N β€” N is INTEGER. The order of the matrices A, B, Q, and Z. N >= 0.
  • ILO β€” ILO is INTEGER.
  • IHI β€” IHI is INTEGER. ILO and IHI mark the rows and columns of (A,B) which are to be normalized. 🫧
  • NW β€” NW is INTEGER. The desired size of the deflation window.
  • A β€” A is DOUBLE PRECISION array, dimension (LDA, N).
  • LDA β€” LDA is INTEGER. The leading dimension of the array A. LDA >= max( 1, N ).
  • B β€” B is DOUBLE PRECISION array, dimension (LDB, N).
  • LDB β€” LDB is INTEGER. The leading dimension of the array B. LDB >= max( 1, N ).
  • Q β€” Q is DOUBLE PRECISION array, dimension (LDQ, N).
  • LDQ β€” LDQ is INTEGER.
  • Z β€” Z is DOUBLE PRECISION array, dimension (LDZ, N).
  • LDZ β€” LDZ is INTEGER.
  • NS β€” NS is INTEGER. The number of unconverged eigenvalues available to use as shifts. πŸ‘€
  • ND β€” ND is INTEGER. The number of converged eigenvalues found. 🎯
  • ALPHAR β€” ALPHAR is DOUBLE PRECISION array, dimension (N). The real parts of each scalar alpha defining an eigenvalue of GNEP.
  • ALPHAI β€” ALPHAI is DOUBLE PRECISION array, dimension (N). The imaginary parts of each scalar alpha defining an eigenvalue of GNEP.
if ALPHAI(j) is zero, then the j-th eigenvalue is real; if positive, then the j-th and (j+1)-st eigenvalues are a complex conjugate pair, with ALPHAI(j+1) = -ALPHAI(j). πŸŒ€
  • BETA β€” BETA is DOUBLE PRECISION array, dimension (N). The scalars beta that define the eigenvalues of GNEP.
together, the quantities alpha = (ALPHAR(j),ALPHAI(j)) and beta = BETA(j) represent the j-th eigenvalue of the matrix pair (A,B), in one of the forms lambda = alpha/beta or mu = beta/alpha. Since either lambda or mu may overflow, they should not, in general, be computed. ⚠️ (like, do not do that, fr fr)
  • QC β€” QC is DOUBLE PRECISION array, dimension (LDQC, NW).
  • LDQC β€” LDQC is INTEGER.
  • ZC β€” ZC is DOUBLE PRECISION array, dimension (LDZC, NW).
  • LDZC β€” LDZ is INTEGER. (yup, the original says LDZ here too, we are simply not touching it πŸ™ˆ)
  • WORK β€” WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, if INFO >= 0, WORK(1) returns the optimal LWORK.
  • LWORK β€” LWORK is INTEGER. The dimension of the array WORK. LWORK >= max(1,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. πŸ’œ
  • REC β€” REC is INTEGER. REC indicates the current recursion level. Should be set to 0 on first call. πŸͺ† (recursion bestie, it's giving inception)
  • INFO β€” INFO is INTEGER:
    • = 0: successful exit πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value 😭

Author

Thijs Steel, KU Leuven

Date

May 2020

Definition at line 235 of file dlaqz3.f.


🌸 okay slaqz3 and zlaqz3 are still coming β€” part 2 is right behind this, don't go anywhere 🫢

  • ILSCHUR β€” LOGICAL. Bestie, this is literally the "do we update the full Schur form or not" switch. That's it, that's the whole job. πŸ’…
  • ILQ β€” LOGICAL. Same vibe check but for the matrix Q: update it or leave it alone.
  • ILZ β€” LOGICAL. And this one? Yeah, Z. Update the matrix Z or nah. ✨
  • N β€” INTEGER. The order of the matrices A, B, Q, and Z. Must be N >= 0, no cap.
  • ILO β€” INTEGER. (The source gives it no extra lore, it's just an integer, and honestly? Iconic of it to say nothing. πŸŽ€)
  • IHI β€” INTEGER. Together with ILO, it marks the rows and columns of (A,B) which are to be normalized. Group project energy, fr.
  • NW β€” INTEGER. The desired size of the deflation window. Yes, "deflation window," it's giving economics but make it linear algebra.
  • A β€” REAL array, dimension (LDA, N).
  • LDA β€” INTEGER. The leading dimension of the array A. Constraint: LDA >= max( 1, N ). Respect the boundary, queen.
  • B β€” REAL array, dimension (LDB, N).
  • LDB β€” INTEGER. The leading dimension of the array B. Constraint: LDB >= max( 1, N ). Same rules, different letter. πŸ¦‹
  • Q β€” REAL array, dimension (LDQ, N).
  • LDQ β€” INTEGER. (No, the page doesn't elaborate. Sipping her drink, saying nothing. πŸ’€)
  • Z β€” REAL array, dimension (LDZ, N).
  • LDZ β€” INTEGER. Again, no discourse. It's just the leading dimension vibe.
  • NS β€” INTEGER, and it's intent(out) bestie ✨. The number of unconverged eigenvalues available to use as shifts. Look at her collecting stragglers.
  • ND β€” INTEGER, also intent(out). The number of converged eigenvalues found. The ones who actually showed up and did the work. 🫢
  • ALPHAR β€” REAL array, dimension (N). The real parts of each scalar alpha defining an eigenvalue of GNEP.
  • ALPHAI β€” REAL array, dimension (N). The imaginary parts of each scalar alpha defining an eigenvalue of GNEP. Now listen: if ALPHAI(j) is zero, then the j-th eigenvalue is real; if it's positive, then the j-th and (j+1)-st eigenvalues are a complex conjugate pair, with ALPHAI(j+1) = -ALPHAI(j). They come as a matching set, iykyk. πŸŽ€
  • BETA β€” REAL array, dimension (N). The scalars beta that define the eigenvalues of GNEP. Together, the quantities alpha = (ALPHAR(j),ALPHAI(j)) and beta = BETA(j) represent the j-th eigenvalue of the matrix pair (A,B), in one of the forms lambda = alpha/beta or mu = beta/alpha. And here's the important bit, no cap: since either lambda or mu may overflow, they should not, in general, be computed. πŸ”₯
Girl. Do not compute them. You will overflow and it will NOT be cute. This is a real warning, keep it.
  • QC β€” REAL array, dimension (LDQC, NW).
  • LDQC β€” INTEGER. (Mysterious. Loves that for her.)
  • ZC β€” REAL array, dimension (LDZC, NW).
  • LDZC β€” INTEGER. Okay so the source's own description here literally reads LDZ is INTEGER. Yes, LDZC's blurb says LDZ. Typos happen, we forgive her, it is an INTEGER either way. 😭
  • WORK β€” REAL array, dimension (MAX(1,LWORK)). On exit, if INFO >= 0, WORK(1) returns the optimal LWORK. She's a workspace that also does fortune telling, we stan.
  • LWORK β€” INTEGER. The dimension of the array WORK. Constraint: LWORK >= max(1,N).

Special case incoming: 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. So -1 is the "just tell me how much room I need" move, not a mistake. 🧚

  • REC β€” INTEGER. Indicates the current recursion level. Should be set to 0 on first call. Set it to zero first, bestie, do not rawdog the recursion. πŸ™ˆ
  • INFO β€” INTEGER. Your exit report card:
    • = 0: successful exit πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value. So read the number, count the arguments, go fix that one. πŸ’…

πŸ‘‘ Author & Date

Written by Thijs Steel, KU Leuven, dated May 2020. Shoutout, king. 🫢

Definition at line 234 of file slaqz3.f.


🌈 zlaqz3 β€” the complex one, and she is COMPLEX πŸ’…

Same gig, but everything is COMPLEX*16 now and the arguments have been reorganized. Look at the glow-up:

subroutine zlaqz3 (logical, intent(in) ilschur, logical, intent(in) ilq,
    logical, intent(in) ilz, integer, intent(in) n, integer, intent(in) ilo,
    integer, intent(in) ihi, integer, intent(in) nshifts, integer,
    intent(in) nblock_desired, complex*16, dimension( * ), intent(inout)
    alpha, complex*16, dimension( * ), intent(inout) beta, complex*16,
    dimension( lda, * ), intent(inout) a, integer, intent(in) lda,
    complex*16, dimension( ldb, * ), intent(inout) b, integer, intent(in)
    ldb, complex*16, dimension( ldq,         * ), intent(inout) q, integer,
    intent(in) ldq, complex*16, dimension( ldz, * ), intent(inout) z,
    integer, intent(in) ldz, complex*16, dimension( ldqc, * ), intent(inout)
    qc, integer, intent(in) ldqc, complex*16, dimension( ldzc, * ),
    intent(inout) zc, integer, intent(in) ldzc, complex*16, dimension( * ),
    intent(inout) work, integer, intent(in) lwork, integer, intent(out)
    info)

✨ Purpose

ZLAQZ3 Executes a single multishift QZ sweep. One sweep. Multishift. QZ. That's the whole thesis statement, and she ate. πŸ”₯

πŸŽ€ Parameters

  • ILSCHUR β€” LOGICAL. Determines whether or not to update the full Schur form.
  • ILQ β€” LOGICAL. Determines whether or not to update the matrix Q.
  • ILZ β€” LOGICAL. Determines whether or not to update the matrix Z.
  • N β€” INTEGER. The order of the matrices A, B, Q, and Z. N >= 0.
  • ILO β€” INTEGER. (No description in the source β€” she simply is.)
  • IHI β€” INTEGER. (Same. Present, accounted for, mysterious. πŸ’€)
  • NSHIFTS β€” INTEGER. The desired number of shifts to use. Not all shifts. The desired ones.
  • NBLOCK_DESIRED β€” INTEGER. The desired size of the computational windows. Plural windows. She's ambitious.
  • ALPHA β€” COMPLEX*16 array. The source says SR contains the alpha parts of the shifts to use. (Yes, SR. Yes, in the ALPHA description. The docs have lore, we just report it faithfully. 😭)
  • BETA β€” COMPLEX*16 array. The source says SS contains the scale of the shifts to use. Again: SS, in the BETA blurb. Copying it exactly, don't @ me.
  • A β€” COMPLEX*16 array, dimension (LDA, N).
  • LDA β€” INTEGER. The leading dimension of the array A. Constraint: LDA >= max( 1, N ).
  • B β€” COMPLEX*16 array, dimension (LDB, N).
  • LDB β€” INTEGER. The leading dimension of the array B. Constraint: LDB >= max( 1, N ).
  • Q β€” COMPLEX*16 array, dimension (LDQ, N).
  • LDQ β€” INTEGER. (Silent. Powerful. ✨)
  • Z β€” COMPLEX*16 array, dimension (LDZ, N).
  • LDZ β€” INTEGER. (Also silent.)
  • QC β€” COMPLEX*16 array, dimension (LDQC, NBLOCK_DESIRED). Note: NBLOCK_DESIRED, not NW β€” different girl, different signature.
  • LDQC β€” INTEGER.
  • ZC β€” COMPLEX*16 array, dimension (LDZC, NBLOCK_DESIRED).
  • LDZC β€” INTEGER. And yes, the description here says LDZ is INTEGER too. Same exact typo, carried into the complex version. Consistency is a love language, I guess. πŸ™ˆ
  • WORK β€” COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, if INFO >= 0, WORK(1) returns the optimal LWORK.
  • LWORK β€” INTEGER. The dimension of the array WORK. Constraint: LWORK >= max(1,N).

And the same special case: 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. 🧚

  • INFO β€” INTEGER. The receipts:
    • = 0: successful exit 🌸
    • < 0: if INFO = -i, the i-th argument had an illegal value. Count to i, fix i, move on. πŸ’…
Heads up bestie: zlaqz3 has no REC argument. slaqz3 does. Do not swap the calling sequences, that is not the vibe. 🫢

πŸ‘‘ Author & Date

Thijs Steel, KU Leuven again β€” she wrote both, we love a consistent author. Dated May 2020.

Definition at line 204 of file zlaqz3.f.


πŸ’œ One last thing

This whole page was generated automatically by Doxygen for LAPACK from the source code β€” so if a description sounds like it was written by a machine, it's because it literally was, and we're just here adding the sparkle. ✨

And that's the page! You made it to the end, so: this is LAPACK, Version 3.12.0, and the page name is laqz3(3) β€” go forth, call your subroutines, and don't compute lambda or mu. Periodt. πŸŽ€πŸ’–πŸ¦‹

πŸ“¦ where this page comes from