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 plainsubroutine, answering to the nameCLAQZ3:
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β arecursive subroutine, goes byDLAQZ3:
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 arecursive subroutine, also iconic, answers toSLAQZ3:
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 plainsubroutine, name checked asZLAQZ3:
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βILSCHURisLOGICAL. Determines whether or not to update the full Schur form. πILQβILQisLOGICAL. Determines whether or not to update the matrix Q.ILZβILZisLOGICAL. Determines whether or not to update the matrix Z.NβNisINTEGER. The order of the matricesA,B,Q, andZ.N >= 0.ILOβILOisINTEGER. (that's the whole description bestie, it's giving mystique π«Ά)IHIβIHIisINTEGER. (same energy honestly)NSHIFTSβNSHIFTSisINTEGER. The desired number of shifts to use.NBLOCK_DESIREDβNBLOCK_DESIREDisINTEGER. The desired size of the computational windows.ALPHAβALPHAisCOMPLEXarray.SRcontains the alpha parts of the shifts to use.BETAβBETAisCOMPLEXarray.SScontains the scale of the shifts to use.AβAisCOMPLEXarray, dimension(LDA, N).LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max( 1, N ).BβBisCOMPLEXarray, dimension(LDB, N).LDBβLDBisINTEGER. The leading dimension of the arrayB.LDB >= max( 1, N ).QβQisCOMPLEXarray, dimension(LDQ, N).LDQβLDQisINTEGER.ZβZisCOMPLEXarray, dimension(LDZ, N).LDZβLDZisINTEGER.QCβQCisCOMPLEXarray, dimension(LDQC, NBLOCK_DESIRED).LDQCβLDQCisINTEGER.ZCβZCisCOMPLEXarray, dimension(LDZC, NBLOCK_DESIRED).LDZCβLDZisINTEGER. (and yes, the original literally saysLDZhere β not me, I'm just the messenger π)WORKβWORKisCOMPLEXarray, dimension(MAX(1,LWORK)). On exit, ifINFO >= 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. The dimension of the arrayWORK.LWORK >= max(1,N).
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. π©΅
INFOβINFOisINTEGER:= 0: successful exit π< 0: ifINFO = -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βILSCHURisLOGICAL. Determines whether or not to update the full Schur form.ILQβILQisLOGICAL. Determines whether or not to update the matrix Q.ILZβILZisLOGICAL. Determines whether or not to update the matrix Z.NβNisINTEGER. The order of the matricesA,B,Q, andZ.N >= 0.ILOβILOisINTEGER.IHIβIHIisINTEGER.ILOandIHImark the rows and columns of(A,B)which are to be normalized. π«§NWβNWisINTEGER. The desired size of the deflation window.AβAisDOUBLE PRECISIONarray, dimension(LDA, N).LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max( 1, N ).BβBisDOUBLE PRECISIONarray, dimension(LDB, N).LDBβLDBisINTEGER. The leading dimension of the arrayB.LDB >= max( 1, N ).QβQisDOUBLE PRECISIONarray, dimension(LDQ, N).LDQβLDQisINTEGER.ZβZisDOUBLE PRECISIONarray, dimension(LDZ, N).LDZβLDZisINTEGER.NSβNSisINTEGER. The number of unconverged eigenvalues available to use as shifts. πNDβNDisINTEGER. The number of converged eigenvalues found. π―ALPHARβALPHARisDOUBLE PRECISIONarray, dimension(N). The real parts of each scalar alpha defining an eigenvalue of GNEP.ALPHAIβALPHAIisDOUBLE PRECISIONarray, dimension(N). The imaginary parts of each scalar alpha defining an eigenvalue of GNEP.
ifALPHAI(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, withALPHAI(j+1) = -ALPHAI(j). π
BETAβBETAisDOUBLE PRECISIONarray, dimension(N). The scalars beta that define the eigenvalues of GNEP.
together, the quantitiesalpha = (ALPHAR(j),ALPHAI(j))andbeta = BETA(j)represent the j-th eigenvalue of the matrix pair(A,B), in one of the formslambda = alpha/betaormu = beta/alpha. Since either lambda or mu may overflow, they should not, in general, be computed. β οΈ (like, do not do that, fr fr)
QCβQCisDOUBLE PRECISIONarray, dimension(LDQC, NW).LDQCβLDQCisINTEGER.ZCβZCisDOUBLE PRECISIONarray, dimension(LDZC, NW).LDZCβLDZisINTEGER. (yup, the original saysLDZhere too, we are simply not touching it π)WORKβWORKisDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). On exit, ifINFO >= 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. The dimension of the arrayWORK.LWORK >= max(1,N).
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. π
RECβRECisINTEGER.RECindicates the current recursion level. Should be set to0on first call. πͺ (recursion bestie, it's giving inception)INFOβINFOisINTEGER:= 0: successful exit π< 0: ifINFO = -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 matrixQ: update it or leave it alone.ILZβLOGICAL. And this one? Yeah,Z. Update the matrixZor nah. β¨NβINTEGER. The order of the matricesA,B,Q, andZ. Must beN >= 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 withILO, 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βREALarray, dimension(LDA, N).LDAβINTEGER. The leading dimension of the arrayA. Constraint:LDA >= max( 1, N ). Respect the boundary, queen.BβREALarray, dimension(LDB, N).LDBβINTEGER. The leading dimension of the arrayB. Constraint:LDB >= max( 1, N ). Same rules, different letter. π¦QβREALarray, dimension(LDQ, N).LDQβINTEGER. (No, the page doesn't elaborate. Sipping her drink, saying nothing. π)ZβREALarray, dimension(LDZ, N).LDZβINTEGER. Again, no discourse. It's just the leading dimension vibe.NSβINTEGER, and it'sintent(out)bestie β¨. The number of unconverged eigenvalues available to use as shifts. Look at her collecting stragglers.NDβINTEGER, alsointent(out). The number of converged eigenvalues found. The ones who actually showed up and did the work. π«ΆALPHARβREALarray, dimension(N). The real parts of each scalar alpha defining an eigenvalue of GNEP.ALPHAIβREALarray, dimension(N). The imaginary parts of each scalar alpha defining an eigenvalue of GNEP. Now listen: ifALPHAI(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, withALPHAI(j+1) = -ALPHAI(j). They come as a matching set, iykyk. πBETAβREALarray, dimension(N). The scalars beta that define the eigenvalues of GNEP. Together, the quantitiesalpha = (ALPHAR(j),ALPHAI(j))andbeta = BETA(j)represent the j-th eigenvalue of the matrix pair(A,B), in one of the formslambda = alpha/betaormu = 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βREALarray, dimension(LDQC, NW).LDQCβINTEGER. (Mysterious. Loves that for her.)ZCβREALarray, dimension(LDZC, NW).LDZCβINTEGER. Okay so the source's own description here literally readsLDZ is INTEGER. Yes, LDZC's blurb says LDZ. Typos happen, we forgive her, it is anINTEGEReither way. πWORKβREALarray, dimension(MAX(1,LWORK)). On exit, ifINFO >= 0,WORK(1)returns the optimalLWORK. She's a workspace that also does fortune telling, we stan.LWORKβINTEGER. The dimension of the arrayWORK. 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 to0on first call. Set it to zero first, bestie, do not rawdog the recursion. πINFOβINTEGER. Your exit report card:= 0: successful exit π< 0: ifINFO = -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 matrixQ.ILZβLOGICAL. Determines whether or not to update the matrixZ.NβINTEGER. The order of the matricesA,B,Q, andZ.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*16array. 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*16array. 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*16array, dimension(LDA, N).LDAβINTEGER. The leading dimension of the arrayA. Constraint:LDA >= max( 1, N ).BβCOMPLEX*16array, dimension(LDB, N).LDBβINTEGER. The leading dimension of the arrayB. Constraint:LDB >= max( 1, N ).QβCOMPLEX*16array, dimension(LDQ, N).LDQβINTEGER. (Silent. Powerful. β¨)ZβCOMPLEX*16array, dimension(LDZ, N).LDZβINTEGER. (Also silent.)QCβCOMPLEX*16array, dimension(LDQC, NBLOCK_DESIRED). Note:NBLOCK_DESIRED, notNWβ different girl, different signature.LDQCβINTEGER.ZCβCOMPLEX*16array, dimension(LDZC, NBLOCK_DESIRED).LDZCβINTEGER. And yes, the description here saysLDZ is INTEGERtoo. Same exact typo, carried into the complex version. Consistency is a love language, I guess. πWORKβCOMPLEX*16array, dimension(MAX(1,LWORK)). On exit, ifINFO >= 0,WORK(1)returns the optimalLWORK.LWORKβINTEGER. The dimension of the arrayWORK. 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: ifINFO = -i, the i-th argument had an illegal value. Count to i, fix i, move on. π
Heads up bestie:zlaqz3has noRECargument.slaqz3does. 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
- 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