sglgesylv(3)

πŸ“¦
version 1.1.2 Β· 3 versions
, in fedora 43

🌸 NAME 🌸

<hotpink>sglgesylv</hotpink> β€” it's the Single Precision page, bestie. MEPACK, section 3, you know the vibe. πŸ’…

  • Single Precision routines for standard Sylvester equations. That's the whole assignment, periodt.

✨ SYNOPSIS ✨

🫢 Functions 🫢

okay so there are four subroutines on this page and I need you to meet all of them, they're all iconic in their own way:

  • sla_gesylv β€” Frontend for the solution of Standard Sylvester Equations.
subroutine sla_gesylv (facta, factb, transa, transb, sgn, m, n, a, lda,
    b, ldb, qa, ldqa, qb, ldqb, x, ldx, scale, work, ldwork, info)
  • sla_gesylv2 β€” Frontend for the solution of Standard Sylvester Equations.
subroutine sla_gesylv2 (facta, factb, transa, transb, sgn, m, n, a, lda,
    b, ldb, qa, ldqa, qb, ldqb, x, ldx, scale, work, ldwork, info)
  • sla_gesylv2_refine β€” Iterative Refinement for the standard Sylvester Equations.
subroutine sla_gesylv2_refine (transa, transb, guess, sgn, m, n, a, lda,
    b, ldb, x, ldx, y, ldy, as, ldas, bs, ldbs, q, ldq, u, ldu, maxit,
    tau, convlog, work, ldwork, info)
  • sla_gesylv_refine β€” Iterative Refinement for the standard Sylvester Equations.
subroutine sla_gesylv_refine (transa, transb, guess, sgn, m, n, a, lda,
    b, ldb, x, ldx, y, ldy, as, ldas, bs, ldbs, q, ldq, u, ldu, maxit,
    tau, convlog, work, ldwork, info)

πŸ¦‹ Detailed Description πŸ¦‹

Single Precision routines for standard Sylvester equations. That's the whole thing. πŸŽ€

This subsection contains the solvers for standard Sylvester equations with general coefficient matrices in single precision arithmetic. The Schur decompositions are computed in single precision with the help of LAPACK. Yes bestie, we're outsourcing the hard part to LAPACK and honestly? slay. πŸ”₯


πŸ‘‘ Function Documentation πŸ‘‘

🌟 sla_gesylv β€” Frontend for the solution of Standard Sylvester Equations 🌟

Here's the full typed signature, character for character, no cap:

subroutine sla_gesylv (character, dimension(1) facta, character,
    dimension(1) factb, character, dimension(1) transa, character,
    dimension(1) transb, real sgn, integer m, integer n, real,
    dimension(lda,*) a, integer lda, real, dimension(ldb, *) b, integer ldb,
    real, dimension(ldqa, *) qa, integer ldqa, real, dimension(ldqb, *) qb,
    integer ldqb, real, dimension(ldx, *) x, integer ldx, real scale, real,
    dimension(*) work, integer ldwork, integer info)

πŸ’– Purpose πŸ’–

SLA_GESYLV solves a Sylvester equation of one of these two forms:

   op1(A) * X  +  X * op2(B) = SCALE * Y                              (1)

or

   op1(A) * X  -  X * op2(B) = SCALE * Y                              (2)

where A is a M-by-M matrix and B is a N-by-N matrix. The right hand side Y and the solution X are M-by-N matrices. The matrices A and B can be either a general unreduced matrix, or an upper Hessenberg form, or a (quasi-) upper triangular factor. In the later case QA and QB provide the Schur-vectors of the matrices A and B. πŸ’…

🧚 Parameters 🧚

FACTA

FACTA is CHARACTER. Specifies how the matrix A is given.

  • == 'N': The matrix A is given as a general matrix and its Schur decomposition A = QA*S*QA**T will be computed.
  • == 'F': The matrix A is given as its Schur decomposition in terms of S and QA, form A = QA*S*QA**T
  • == 'H': The matrix A is given as an upper Hessenberg form and its Schur decomposition A = QA*S*QA**T will be computed

FACTB

FACTB is CHARACTER. Specifies how the matrix B is given.

  • == 'N': The matrix B is given as a general matrix and its Schur decomposition B = QB*R*QB**T will be computed.
  • == 'F': The matrix B is given as its Schur decomposition in terms of R and QB, form B = QB*R*QB**T
  • == 'H': The matrix B is given as an upper Hessenberg form and its Schur decomposition B = QB*R*QB**T will be computed

TRANSA

TRANSA is CHARACTER. Specifies the form of the system of equations with respect to A:

  • == 'N': op1(A) = A
  • == 'T': op1(A) = A**T

TRANSB

TRANSB is CHARACTER. Specifies the form of the system of equations with respect to B:

  • == 'N': op2(B) = B,
  • == 'T': op2(B) = B**T

SGN

SGN is REAL, allowed values: +/-1. Specifies the sign between the two parts of the Sylvester equation.

  • = 1 : Solve Equation (1)
  • == -1: Solve Equation (2)

M

M is INTEGER. The order of the matrices A and C. M >= 0.

N

N is INTEGER. The order of the matrices B and D. N >= 0.

A

A is REAL array, dimension (LDA,M).

  • If FACTA == , the matrix A is a general matrix and it is overwritten with its schur decomposition S.
  • If FACTA == , the matrix A contains its (quasi-) upper triangular matrix S being the Schur decomposition of A.
  • If FACTA == , the matrix A is an upper Hessenberg matrix and it is overwritten with its schur decomposition S.
not me noticing the original doc literally leaves the value blank after each FACTA == 😭 bestie I am NOT filling those in for you, that's on the source, we keep it exactly as it is. πŸ™ˆ

LDA

LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M).

B

B is REAL array, dimension (LDB,N).

  • If FACTB == , the matrix B is a general matrix and it is overwritten with its schur decomposition R.
  • If FACTB == , the matrix B contains its (quasi-) upper triangular matrix R being the Schur decomposition of B.
  • If FACTB == , the matrix B is an upper Hessenberg matrix and it is overwritten with its schur decomposition R.

LDB

LDB is INTEGER. The leading dimension of the array B. LDB >= max(1,N).

QA

QA is REAL array, dimension (LDQA,M).

  • If FACTA == , the matrix QA is an empty M-by-M matrix on input and contains the Schur vectors of A on output.
  • If FACTA == , the matrix QA contains the Schur vectors of A.
  • If FACTA == , the matrix QA is an empty M-by-M matrix on input and contains the Schur vectors of A on output.

LDQA

LDQA is INTEGER. The leading dimension of the array QA. LDQA >= max(1,M).

QB

QB is REAL array, dimension (LDQB,N).

  • If FACTB == , the matrix QB is an empty N-by-N matrix on input and contains the Schur vectors of B on output.
  • If FACTB == , the matrix QB contains the Schur vectors of B.
  • If FACTB == , the matrix QB is an empty N-by-N matrix on input and contains the Schur vectors of B on output.

LDQB

LDQB is INTEGER. The leading dimension of the array QB. LDQB >= max(1,N).

X

X is REAL array, dimension (LDX,N).

  • On input, the matrix X contains the right hand side Y.
  • On output, the matrix X contains the solution of Equation (1) or (2).

Right hand side Y and the solution X are M-by-N matrices. πŸ’œ

LDX

LDX is INTEGER. The leading dimension of the array X. LDX >= max(1,M).

SCALE

SCALE is REAL. SCALE is a scaling factor to prevent the overflow in the result. If INFO == 0 then SCALE is 1.0, otherwise if one of the inner systems could not be solved correctly, 0 < SCALE <= 1 holds true.

WORK

WORK is REAL array, dimension (MAX(1,LDWORK)). Workspace for the algorithm. The optmimal workspace is given either by \ref mepack_memory_frontend or a previous call to the this routine with LDWORK === -1.

LDWORK

LDWORK is INTEGER. Size of the workspace for the algorithm. This can be determined by a call \ref mepack_memory_frontend. Alternatively, if LDWORK == -1 on input, the subroutine will return the required size of the workspace in LDWORK without performing any computations.

INFO

INFO is INTEGER.

  • == 0: successful exit πŸŽ‰
  • = 1: SHGEES failed
  • = 2: SLA_SORT_EV failed
  • = 3: SLA_TRLYAP_DAG failed
  • < 0: if INFO = -i, the i-th argument had an illegal value

🌈 See also 🌈

  • SLA_TRSYLV_L3
  • SLA_TRSYLV_L3_2S
  • SLA_TRSYLV_DAG
  • SLA_TRSYLV_L2_UNOPT
  • SLA_TRSYLV_L2
  • SLA_TRSYLV_L2_REORDER
  • SLA_TRSYLV_L2_LOCAL_COPY
  • SLA_TRSYLV_L2_LOCAL_COPY_32
  • SLA_TRSYLV_L2_LOCAL_COPY_64
  • SLA_TRSYLV_L2_LOCAL_COPY_96
  • SLA_TRSYLV_L2_LOCAL_COPY_128

πŸŽ€ Author πŸŽ€

Martin Koehler, MPI Magdeburg

πŸŽ€ Date πŸŽ€

October 2025

πŸŽ€ Definition πŸŽ€

Definition at line 250 of file sla_gesylv.f90.


🌟 sla_gesylv2 β€” Frontend for the solution of Standard Sylvester Equations 🌟

The typed signature, exactly as it appears:

subroutine sla_gesylv2 (character, dimension(1) facta, character,
    dimension(1) factb, character, dimension(1) transa, character,
    dimension(1) transb, real sgn, integer m, integer n, real,
    dimension(lda,*) a, integer lda, real, dimension(ldb, *) b, integer ldb,
    real, dimension(ldqa, *) qa, integer ldqa, real, dimension(ldqb, *) qb,
    integer ldqb, real, dimension(ldx, *) x, integer ldx, real scale, real,
    dimension(*) work, integer ldwork, integer info)

πŸ’– Purpose πŸ’–

SLA_GESYLV2 solves a Sylvester equation of the following forms:

   op1(A) * X * op2(B) +  X  = SCALE * Y                              (1)

or

   op1(A) * X * op2(B) -  X  = SCALE * Y                              (2)

where A is a M-by-M matrix and B is a N-by-N matrix. The right hand side Y and the solution X are M-by-N matrices. The matrices A and B can be either a general unreduced matrix, or an upper Hessenberg form, or a (quasi-) upper triangular factor. In the later case QA and QB provide the Schur-vectors of the matrices A and B. ✨

🧚 Parameters 🧚

FACTA

...okay bestie we are literally mid-parameter here,

  • FACTA β€” CHARACTER, and it's the one that decides how the matrix A shows up to the party. πŸ’…
    • 'N': A is given as a general matrix, and its Schur decomposition A = QA*S*QA**T will be computed. ✨
    • 'F': A is given as its Schur decomposition in terms of S and QA, in the form A = QA*S*QA**T. πŸŽ€
    • 'H': A is given as an upper Hessenberg form, and its Schur decomposition A = QA*S*QA**T will be computed. 🌸
  • FACTB β€” CHARACTER, same energy but for the matrix B. πŸ¦‹
    • 'N': B is given as a general matrix, and its Schur decomposition B = QB*R*QB**T will be computed. ✨
    • 'F': B is given as its Schur decomposition in terms of R and QB, in the form B = QB*R*QB**T. πŸŽ€
    • 'H': B is given as an upper Hessenberg form, and its Schur decomposition B = QB*R*QB**T will be computed. 🌸
  • TRANSA β€” CHARACTER. It sets the form of the system of equations with respect to A, bestie:
    • 'N': op1(A) = A
    • 'T': op1(A) = A**T
  • TRANSB β€” CHARACTER. Same deal, but the form of the system of equations with respect to B:
    • 'N': op2(B) = B,
    • 'T': op2(B) = B**T
  • SGN β€” REAL, allowed values: +/-1. It specifies the sign between the two parts of the Sylvester equation. πŸ‘‘
    • = 1 : Solve Equation (1)
    • == -1: Solve Equation (2)
  • M β€” INTEGER. The order of the matrices A and C. M >= 0. ⭐
  • N β€” INTEGER. The order of the matrices B and D. N >= 0. ⭐
  • A β€” REAL array, dimension (LDA,M). Here's the tea on what it holds depending on the flag:
    • If FACTA == , the matrix A is a general matrix and it is overwritten with its schur decomposition S. πŸ’«
    • If FACTA == , the matrix A contains its (quasi-) upper triangular matrix S, being the Schur decomposition of A.
    • If FACTA == , the matrix A is an upper Hessenberg matrix and it is overwritten with its schur decomposition S. πŸ’«
  • LDA β€” INTEGER. The leading dimension of the array A. LDA >= max(1,M). 🫢
  • B β€” REAL array, dimension (LDB,N). Same vibe, for B:
    • If FACTB == , the matrix B is a general matrix and it is overwritten with its schur decomposition R. πŸ’«
    • If FACTB == , the matrix B contains its (quasi-) upper triangular matrix R, being the Schur decomposition of B.
    • If FACTB == , the matrix B is an upper Hessenberg matrix and it is overwritten with its schur decomposition R. πŸ’«
  • LDB β€” INTEGER. The leading dimension of the array B. LDB >= max(1,N). 🫢
  • QA β€” REAL array, dimension (LDQA,M). The Schur vectors of A, and whether they come in or go out depends on FACTA:
    • If FACTA == , the matrix QA is an empty M-by-M matrix on input and contains the Schur vectors of A on output. πŸ¦‹
    • If FACTA == , the matrix QA contains the Schur vectors of A.
    • If FACTA == , the matrix QA is an empty M-by-M matrix on input and contains the Schur vectors of A on output. πŸ¦‹
  • LDQA β€” INTEGER. The leading dimension of the array QA. LDQA >= max(1,M). 🫢
  • QB β€” REAL array, dimension (LDQB,N). The Schur vectors of B, same rules as above:
    • If FACTB == , the matrix QB is an empty N-by-N matrix on input and contains the Schur vectors of B on output. πŸ¦‹
    • If FACTB == , the matrix QB contains the Schur vectors of B.
    • If FACTB == , the matrix QB is an empty N-by-N matrix on input and contains the Schur vectors of B on output. πŸ¦‹
  • LDQB β€” INTEGER. The leading dimension of the array QB. LDQB >= max(1,N). 🫢
  • X β€” REAL array, dimension (LDX,N). On input, the matrix X contains the right hand side Y. On output, the matrix X contains the solution of Equation (1) or (2). πŸ”₯ Right hand side Y and the solution X are both M-by-N matrices, periodt.
  • LDX β€” INTEGER. The leading dimension of the array X. LDX >= max(1,M). 🫢
  • SCALE β€” REAL. It's the scaling factor that stops the result from overflowing, because we do not do overflow in this house. πŸ›‘ If INFO == 0 then SCALE is 1.0, otherwise if one of the inner systems could not be solved correctly, 0 < SCALE <= 1 holds true.
  • WORK β€” REAL array, dimension (MAX(1,LDWORK)). Workspace for the algorithm. 🌈 The optimal workspace is given either by \ref mepack_memory_frontend or by a previous call to this routine with LDWORK === -1. πŸ‘€
  • LDWORK β€” INTEGER. Size of the workspace for the algorithm. This can be determined by a call to \ref mepack_memory_frontend. Alternatively, if LDWORK == -1 on input, the subroutine will return the required size of the workspace in LDWORK without performing any computations. 🀯 no cap, it just tells you the size and dips.
  • INFO β€” INTEGER. The vibe check at the end: πŸ’€
    • == 0: successful exit πŸŽ‰
    • = 1: SHGEES failed 😭
    • = 2: SLA_SORT_EV failed 😭
    • = 3: SLA_TRLYAP_DAG failed 😭
    • < 0: if INFO = -i, the i-th argument had an illegal value πŸ™ˆ

πŸ‘€ See also ✨

  • SLA_TRSYLV2_L3
  • SLA_TRSYLV2_L3_2S
  • SLA_TRSYLV2_DAG
  • SLA_TRSYLV2_L2_UNOPT
  • SLA_TRSYLV2_L2
  • SLA_TRSYLV2_L2_REORDER
  • SLA_TRSYLV2_L2_LOCAL_COPY
  • SLA_TRSYLV2_L2_LOCAL_COPY_32
  • SLA_TRSYLV2_L2_LOCAL_COPY_64
  • SLA_TRSYLV2_L2_LOCAL_COPY_96
  • SLA_TRSYLV2_L2_LOCAL_COPY_128

πŸ‘‘ Author

Martin Koehler, MPI Magdeburg

πŸ“… Date

October 2025

πŸ“ Definition

At line 250 of file sla_gesylv2.f90.


πŸ’– subroutine sla_gesylv2_refine πŸ’–

subroutine sla_gesylv2_refine (character, dimension(1) transa, character,
    dimension(1) transb, character, dimension(1) guess, real sgn, integer m,
    integer n, real, dimension(lda, *) a, integer lda, real, dimension(ldb,
    *) b, integer ldb, real, dimension ( ldx , * ) x, integer ldx, real,
    dimension(ldy, *) y, integer ldy, real, dimension(ldas, *) as, integer
    ldas, real, dimension(ldbs,*) bs, integer ldbs, real, dimension(ldq, *)
    q, integer ldq, real, dimension(ldu, *) u, integer ldu, integer maxit,
    real tau, real, dimension(*) convlog, real, dimension(*) work, integer
    ldwork, integer info)

Iterative Refinement for the standard Sylvester Equations. πŸ¦‹βœ¨


🎯 Purpose

SLA_GESYLV2_REFINE solves a Sylvester equation of the following forms, bestie:

op1(A) * X * op2(B)  +  X = Y                              (1)

or

op1(A) * X * op2(B)  -  X = Y                              (2)

where A is a M-by-M matrix and B is a N-by-N matrix, using iterative refinement. πŸ” The right hand side Y and the solution X are M-by-N matrices.

The matrix A and B need to be given in the original form as well as in their Schur decomposition, since both are required in the iterative refinement procedure. πŸ’… like, both versions. don't skimp.

🌸 Parameters 🌸

  • TRANSA β€” CHARACTER. Specifies the form of the system of equations with respect to A:
    • 'N': op1(A) = A
    • 'T': op1(A) = A**T
  • TRANSB β€” CHARACTER. Specifies the form of the system of equations with respect to B:
    • 'N': op2(B) = B,
    • 'T': op2(B) = B**T
  • GUESS β€” CHARACTER. Tells us whether X already contains an initial guess or not, iykyk:
    • = 'I': X contains an initial guess
    • = 'N': No initial guess, X is set to zero at the begin of the iteration. πŸ«₯
  • SGN β€” REAL, allowed values: +/-1. Specifies the sign between both terms. βš–οΈ
  • M β€” INTEGER. The order of the matrix A. M >= 0. ⭐
  • N β€” INTEGER. The order of the matrix B. N >= 0. ⭐
  • A β€” REAL array, dimension (LDA,M). The array A contains the original matrix A defining the equation. πŸŽ€
  • LDA β€” INTEGER. The leading dimension of the array A. LDA >= max(1,M). 🫢
  • B β€” REAL array, dimension (LDB,N). The array B contains the original matrix B defining the equation. πŸŽ€
  • LDB β€” INTEGER. The leading dimension of the array B. LDB >= max(1,N). 🫢
  • X β€” REAL array, dimension (LDX,N). On input, the array X contains the initial guess, if GUESS = 'I'. On output, the array X contains the solution X. πŸ’–
  • LDX β€” INTEGER. The leading dimension of the array X. LDX >= max(1,M). 🫢
  • Y β€” REAL array, dimension (LDY,N). On input, the array Y contains the right hand side Y. The array stays unchanged during the iteration. 🧊 (it does not get touched, periodt.)
  • LDY β€” INTEGER. The leading dimension of the array Y. LDY >= max(1,M). 🫢
  • AS β€” REAL array, dimension (LDAS,M). The array AS contains the Schur decomposition of the A. 🌈
  • LDAS β€” INTEGER. The leading dimension of the array AS. LDAS >= max(1,M). 🫢
  • BS β€” REAL array, dimension (LDBS,N). The array BS contains the Schur decomposition of B. 🌈
  • LDBS

okay so the remaining arguments, and yes we are listing every single one of them, no skipping, that's the rule πŸ’…

  • LDBS β€” an INTEGER, the leading dimension of the array BS. Constraint: LDBS >= max(1,N).
  • Q β€” a REAL array, dimension (LDQ,M). It holds the Schur vectors of A, exactly as SGEES handed them over. ✨
  • LDQ β€” an INTEGER, the leading dimension of the array Q. Constraint: LDQ >= max(1,M).
  • U β€” a REAL array, dimension (LDU,N). It holds the Schur vectors of B, as returned by SGEES. πŸ¦‹
  • LDU β€” an INTEGER, the leading dimension of the array U. Constraint: LDU >= max(1,N).
  • MAXIT β€” an INTEGER, and it's a glow-up situation because it means two different things at two different times:
    • On input, MAXIT is the maximum number of iterations that get performed, and it has to sit in the range 2 <= MAXIT <= 100.
    • On exit, MAXIT holds the number of iteration steps the algorithm actually took. πŸ‘‘
  • TAU β€” a REAL, also doing the double-duty thing:
    • On input, TAU is the extra security factor for the stopping criterion; typical values are 0.1.
    • On exit, TAU holds the last relative residual from the moment the stopping criterion became valid. πŸŽ€
  • CONVLOG β€” a REAL array, dimension (MAXIT). This is the receipts, bestie: the convergence history of the iterative refinement. CONVLOG(I) holds the maximum relative residual before it gets solved for the I-th time.
  • WORK β€” a REAL array, dimension (MAX(1,LDWORK)). Workspace for the algorithm. The optimal workspace comes back in LDWORK if LDWORK == -1 on input β€” and in that case, no computations happen at all. πŸ™ˆ
  • LDWORK β€” an INTEGER. If LDWORK == -1, the subroutine returns the required size of the workspace in LDWORK on exit. No computations are performed and none of the arrays get referenced. So convenient, honestly.
  • INFO β€” an INTEGER, the final vibe check:
    • == 0: Success ✨
    • > 0: the iteration failed in step INFO 😭
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • = -50: some of the internal settings like NB, ... are incorrect πŸ’€

🌸 See also 🌸

  • SLA_TRSYLV2_DAG
  • DLA_TRSYLV2_LEVEL3
  • SLA_TRSYLV2_L3_2S
  • SLA_TRSYLV2_L2_UNOPT
  • SLA_TRSYLV2_L2
  • SLA_TRSYLV2_L2_REORDER
  • SLA_TRSYLV2_L2_LOCAL_COPY_32
  • SLA_TRSYLV2_L2_LOCAL_COPY_64
  • SLA_TRSYLV2_L2_LOCAL_COPY_96
  • SLA_TRSYLV2_L2_LOCAL_COPY_128
  • SLA_TRSYLV2_L2_LOCAL_COPY

🫢 Author 🫢

Martin Koehler, MPI Magdeburg

πŸ“… Date πŸ“…

October 2025

And for the record, this one is defined at line 271 of file sla_gesylv2_refine.f90. πŸ“


πŸ¦‹ sla_gesylv_refine β€” the second one, and she's the star of the show πŸ¦‹

   subroutine sla_gesylv_refine (character, dimension(1) transa, character,
       dimension(1) transb, character, dimension(1) guess, real sgn, integer m,
       integer n, real, dimension(lda, *) a, integer lda, real, dimension(ldb,
       *) b, integer ldb, real, dimension ( ldx , * ) x, integer ldx, real,
       dimension(ldy, *) y, integer ldy, real, dimension(ldas, *) as, integer
       ldas, real, dimension(ldbs,*) bs, integer ldbs, real, dimension(ldq, *)
       q, integer ldq, real, dimension(ldu, *) u, integer ldu, integer maxit,
       real tau, real, dimension(*) convlog, real, dimension(*) work, integer
       ldwork, integer info)

Iterative Refinement for the standard Sylvester Equations. That's the whole point of her. πŸ’–

✨ Purpose ✨

okay so SLA_GESYLV_REFINE solves a Sylvester equation, and there are two forms, bestie:

op1(A) * X  +  X * op2(B) = Y                              (1)

or

op1(A) * X  -  X * op2(B) = Y                              (2)

where A is an M-by-M matrix and B is an N-by-N matrix, and it does it all with iterative refinement. The right hand side Y and the solution X are both M-by-N matrices. 🌈

And here's the part you can't skip: A and B have to be handed over in their original form and in their Schur decomposition, because the iterative refinement procedure literally needs both. No shortcuts, she needs the whole wardrobe. πŸ‘‘

πŸŽ€ Parameters πŸŽ€

  • TRANSA β€” a CHARACTER that says which form of the system of equations we're doing with respect to A:
    • 'N': op1(A) = A
    • 'T': op1(A) = A**T
  • TRANSB β€” a CHARACTER, same energy but for B:
    • 'N': op2(B) = B,
    • 'T': op2(B) = B**T
  • GUESS β€” a CHARACTER telling us whether X already has an initial guess in it or not:
    • 'I': X contains an initial guess
    • 'N': no initial guess β€” X gets set to zero at the beginning of the iteration
  • SGN β€” a REAL, allowed values are +/-1, and it specifies the sign between both terms. That's it, that's the whole job. ✨
  • M β€” an INTEGER, the order of the matrix A. Constraint: M >= 0.
  • N β€” an INTEGER, the order of the matrix B. Constraint: N >= 0.
  • A β€” a REAL array, dimension (LDA,M). It holds the original matrix A that defines the equation. πŸ¦‹
  • LDA β€” an INTEGER, the leading dimension of the array A. Constraint: LDA >= max(1,M).
  • B β€” a REAL array, dimension (LDB,N). It holds the original matrix B that defines the equation.
  • LDB β€” an INTEGER, the leading dimension of the array B. Constraint: LDB >= max(1,N).
  • X β€” a REAL array, dimension (LDX,N), and she changes:
    • On input, X holds the initial guess, but only if GUESS = 'I'.
    • On output, X holds the solution X. Slay. πŸ’…
  • LDX β€” an INTEGER, the leading dimension of the array X. Constraint: LDX >= max(1,M).
  • Y β€” a REAL array, dimension (LDY,N). On input it holds the right hand side Y, and it stays unchanged during the whole iteration. Loyal queen. 🫢
  • LDY β€” an INTEGER, the leading dimension of the array Y. Constraint: LDY >= max(1,M).
  • AS β€” a REAL array, dimension (LDAS,M). It holds the Schur decomposition of A.
  • LDAS β€” an INTEGER, the leading dimension of the array AS. Constraint: LDAS >= max(1,M).
  • BS β€” a REAL array, dimension (LDBS,N). It holds the Schur decomposition of B.
  • LDBS β€” an INTEGER, the leading dimension of the array BS. Constraint: LDBS >= max(1,N).
  • Q β€” a REAL array, dimension (LDQ,M), holding the Schur vectors of A as returned by SGEES. ⭐
  • LDQ β€” an INTEGER, the leading dimension of the array Q. Constraint: LDQ >= max(1,M).
  • U β€” a REAL array, dimension (LDU,N), holding the Schur vectors of B as returned by SGEES.
  • LDU β€” an INTEGER, the leading dimension of the array U. Constraint: LDU >= max(1,N).
  • MAXIT β€” an INTEGER, dual purpose as always:
    • On input, MAXIT is the maximum number of iterations that are performed, 2 <= MAXIT <= 100
    • On exit, MAXIT is the number of iteration steps taken by the algorithm
  • TAU β€” a REAL, also dual purpose:
    • On input, TAU is the additional security factor for the stopping criterion; typical values are 0.1
    • On exit, TAU holds the last relative residual when the stopping criterion got valid
  • CONVLOG β€” a REAL array, dimension (MAXIT), the convergence history of the iterative refinement. CONVLOG(I) holds the maximum relative residual before it is solved for the I-th time. πŸ“ˆ
  • WORK β€” a REAL array, dimension (MAX(1,LDWORK)). Workspace for the algorithm. The optimal workspace is returned in LDWORK if LDWORK == -1 on input, and in that case no computations are performed. πŸ™ˆ
  • LDWORK β€” an INTEGER. If LDWORK == -1, the subroutine returns the required size of the workspace in LDWORK on exit. No computations are performed and none of the arrays are referenced.
  • INFO β€” an INTEGER, the closing vibe check:
    • == 0: Success ✨
    • > 0: the iteration failed in step INFO 😭
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • = -50: some of the internal settings like NB, ... are incorrect πŸ’€

🌸 See also 🌸

  • SLA_TRSYLV_DAG
  • DLA_TRSYLV_LEVEL3
  • SLA_TRSYLV_L3_2S
  • SLA_TRSYLV_L2_UNOPT
  • SLA_TRSYLV_L2
  • SLA_TRSYLV_L2_REORDER
  • SLA_TRSYLV_L2_LOCAL_COPY_32
  • SLA_TRSYLV_L2_LOCAL_COPY_64
  • SLA_TRSYLV_L2_LOCAL_COPY_96
  • SLA_TRSYLV_L2_LOCAL_COPY_128
  • SLA_TRSYLV_L2_LOCAL_COPY

🫢 Author 🫢

Martin Koehler, MPI Magdeburg

πŸ“… Date πŸ“…

October 2025

Defined at line 272 of file sla_gesylv_refine.f90. πŸ“


and that's a wrap on the whole page, bestie πŸ’– This was generated automatically by Doxygen for MEPACK, straight out of the source code. It's Version 1.1.2, dated Thu Oct 9 2025 00:00:00, and the whole thing lives at page sglgesylv(3). Go refine something iteratively, queen πŸ‘‘βœ¨

πŸ“¦ where this page comes from