dblaux(3)
πΈ dblaux(3) β MEPACK π
okay bestie, welcome to dblaux, the double precision auxiliary routines page from MEPACK (section 3, library territory). it's giving backstage-crew energy: these are the helper routines that do the quiet, unglamorous work behind the double precision computational routines so the main characters can shine. π«Ά
β¨ NAME β¨
dblaux β Double Precision Auxiliary Routines
- Helper routines for double precision computations. π
β¨ SYNOPSIS β¨
π Functions
subroutine dla_itranspose (k, kh, l, lh, x, ldx)
Solver for 4-by-4 Linear Systems.
subroutine dla_qtrmm2 (side, trans, m, n, alpha, a, lda, b, ldb, c, ldc)
Multiply with the sub-diagonal entries of a quasi triangular matrix.
subroutine dla_small_solve4 (n, a, rhs, info, eps, smlnum)
Solver for 4-by-4 Linear Systems.
subroutine dla_small_solve8 (n, a, rhs, info, eps, smlnum)
Solver for 8-by-8 Linear Systems.
subroutine dla_sort_ev (n, a, lda, q, ldq, nb, work, info)
Block Reordering of generalized Eigenvalues.
subroutine dla_sort_gev (n, a, lda, b, ldb, q, ldq, z, ldz, nb, work,
lwork, info)
Block Reordering of generalized Eigenvalues.
subroutine dla_transform_general (trans, m, n, x, ldx, qa, ldqa, qb,
ldqb, work)
Transform the Right-Hand Side or Solution for generalized
projections.
subroutine dla_transform_standard (trans, m, x, ldx, q, ldq, work)
Transform the Right-Hand Side or Solution for standard projections.
β¨ Detailed Description β¨
Helper routines for double precision computations. π
This section contains a set of helper routines for the double precision computational routines. This includes the transformation of the right-hand-sides, the transformation of the solutions, the solution of special linear systems and the sorting of eigenvalues. no cap, that's the whole vibe. β¨
β¨ Function Documentation β¨
π subroutine dla_itranspose π
subroutine dla_itranspose (integer k, integer kh, integer l, integer lh,
double precision, dimension(ldx,*) x, integer ldx)
Solver for 4-by-4 Linear Systems. (that's what the one-liner says, bestie β we're just reporting it faithfully π«‘)
Purpose:
!>
!> DLA_ITRANSPOSE performs the implicit transpose
!>
!> X(L:LH,K:KH ) <- X(K:KH,L:LH)**T (1)
!>
!>
Parameters
K
!> K is INTEGER
!> First index of the transpose operations as in (1)
!>
KH
!> KH is INTEGER
!> Second index of the transpose operations as in (1)
!>
L
!> L is INTEGER
!> Third index of the transpose operations as in (1)
!>
LH
!> LH is INTEGER
!> Fourth index of the transpose operations as in (1)
!>
X
!> X is DOUBLE PRECISION array, dimension (LDX,*)
!> X is the matrix to perform the transpose on.
!>
LDX
!> LDX is INTEGER
!> The leading dimension of the array X. LDX >= MAX(1,KH,LH).
!>
Author
Martin Koehler, MPI Magdeburg
Date
October 2025
Definition at line 86 of file dla_itranspose.f90.
π subroutine dla_qtrmm2 π
subroutine dla_qtrmm2 (character(1) side, character(1) trans, integer m,
integer n, double precision alpha, double precision, dimension(lda, *)
a, integer lda, double precision, dimension(ldb, *) b, integer ldb,
double precision, dimension(ldc,*) c, integer ldc)
Multiply with the sub-diagonal entries of a quasi triangular matrix.
Purpose:
!>
!> Multiply a matrix with the sub-diagonal entries of a quasi-triangular matrix.
!> Consider a quasi-triangular matrix A where sub(A) is the matrix only containing
!> the sub-diagonal entries. Than the DLA_QTRMM2 routine computes
!>
!> C = C + ALPHA * op(sub(A)) * B (1)
!>
!> or
!>
!> C = C + ALPHA * B * op(sub(A)) (2)
!>
!>
β οΈ Attention β The routine does not check the input arguments. bestie. it trusts you completely. do not betray it. π
Parameters
SIDE
!> SIDE is CHARACTER(1)
!> On entry, SIDE specifies whether op( A ) multiplies B from
!> the left or right as follows:
!>
!> SIDE = 'L' or 'l' B := alpha*op( A )*B.
!>
!> SIDE = 'R' or 'r' B := alpha*B*op( A ).
!>
TRANS
!> TRANS is CHARACTER(1)
!> On entry, TRANS specifies the form of op( A ) to be used in
!> the matrix multiplication as follows:
!>
!> TRANS == 'N' or 'n' op( A ) = A.
!>
!> TRANS == 'T' or 't' op( A ) = A**T.
!>
!> TRANS = 'C' or 'c' op( A ) = A**T.
!>
M
!> M is INTEGER
!> On entry, M specifies the number of rows of B. M must be at
!> least zero.
!>
N
!> N is INTEGER
!> On entry, N specifies the number of columns of B. N must be
!> at least zero.
!>
ALPHA
!> ALPHA is DOUBLE PRECISION.
!> On entry, ALPHA specifies the scalar alpha. When alpha is
!> zero then A is not referenced and B need not be set before
!> entry.
!>
A
!> A is DOUBLE PRECISION array of DIMENSION ( LDA, k ), where k is m
!> when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'.
!> The leading k by k
!> upper triangular part of the array A must contain the upper
!> quasi triangular matrix.
!>
LDA
!> LDA is INTEGER
!> On entry, LDA specifies the first dimension of A as declared
!> in the calling (sub) program. When SIDE = 'L' or 'l' then
!> LDA must be at least max( 1, m ), when SIDE = 'R' or 'r'
!> then LDA must be at least max( 1, n ).
!>
B
!> B is DOUBLE PRECISION array of DIMENSION ( LDB, n ).
!> Before entry, the leading m by n part of the array B must
!> contain the matrix B.
!>
LDB
!> LDB is INTEGER
!> On entry, LDB specifies the first dimension of B as declared
!> in the calling (sub) program. LDB must be at least
!> max( 1, m ).
!>
C
!> C is DOUBLE PRECISION array of DIMENSION ( LDC, n ).
!> Before entry, the leading m by n part of the array C must
!> contain the matrix C, and on exit is overwritten by the
!> update January 2021
!>
LDC
!> LDC is INTEGER
!> On entry, LDC specifies the first dimension of C as declared
!> in the calling (sub) program. LDB must be at least
!> max( 1, m ).
!>
Author
Martin Koehler, MPI Magdeburg
Date
October 2025
Definition at line 153 of file dla_qtrmm2.f90.
π subroutine dla_small_solve4 π
subroutine dla_small_solve4 (integer n, double precision, dimension( 4, 4 )
a, double precision, dimension(4) rhs, integer info, double precision
eps, double precision smlnum)
Solver for 4-by-4 Linear Systems.
Purpose:
!>
!> DLA_SMALL_SOLVE4 solves a linear system
!>
!> A * x = b (1)
!>
!> where A is a most a 4 by 4 matrix.
!>
Parameters
N
!> N is INTEGER
!> The order of the matrix A N = (1,2,4).
!>
A
!> A is DOUBLE PRECISION array, dimension (4,4)
!> The matrix A must be stored in a 4-by-4 matrix even if it is smaller.
!> On output the matrix A is destroyed.
!>
RHS
!> RHS is DOUBLE PRECISION array, dimension (4)
!> The matrix RHS contains the right hand side on input and the solution X on output if INFO == 0
!>
INFO
!> INFO is INTEGER
!> == 0: successful exit
!> < 0: if INFO = -i, the i-th argument had an illegal value
!> > 0: The equation is not solved correctly. One of the arising inner
!> system got singular.
!>
EPS
!> EPS is DOUBLE PRECISION
!> EPS is the machine epsilon determined by DLAMCH
!>
SMLNUM
!> SMLNUM is DOUBLE PRECISION
!> SMLNUM is the smallest number in DOUBLE PRECISION which can be represented without underflow.
!>
Author
Martin Koehler, MPI Magdeburg
Date
October 2025
Definition at line 98 of file dla_small_solve4.f90.
π subroutine dla_small_solve8 π
subroutine dla_small_solve8 (integer n, double precision, dimension( 8, 8 )
a, double precision, dimension(8) rhs, integer info, double precision
eps, double precision smlnum)
Solver for 8-by-8 Linear Systems.
Purpose:
!>
!> DLA_SMALL_SOLVE8 solves a linear system
!>
!> A * x = b (1)
!>
!> where A is a most a 8 by 8 matrix with leading dimension 8.
!>
Parameters
N
!> N is INTEGER
!> The order of the matrix A N = {1,2,4,8} .
!>
A
!> A is DOUBLE PRECISION array, dimension (8,8)
!> The matrix A must be stored in a 4-by-4 matrix even if it is smaller.
!> On output the matrix A is destroyed.
!>
π yes bestie, it says 4-by-4 in the 8-by-8 routine's docs. we are reporting, not fixing. that's the assignment. π«Ά
RHS
!> RHS is DOUBLE PRECISION array, dimension (8)
!> The matrix RHS contains the right hand side on input and the solution X on output if INFO == 0
!>
INFO
!> INFO is INTEGER
!> == 0: successful exit
!> < 0: if INFO = -i, the i-th argument had an illegal value
!> > 0: The equation is not solved correctly. One of the arising inner
!> system got singular.
!>
EPS
!> EPS is DOUBLE PRECISION
!> EPS is the machine epsilon determined by DLAMCH
!>
SMLNUM
!> SMLNUM is DOUBLE PRECISION
!> SMLNUM is the smallest number in DOUBLE PRECISION which can be represented without underflow.
!>
Author
Martin Koehler, MPI Magdeburg
Date
October 2025
Definition at line 98 of file dla_small_solve8.f90.
β¨ and that's part 1 bestie, hold on, there's more coming β¨
subroutine dla_sort_ev π
subroutine dla_sort_ev (integer n, double precision, dimension( lda, * ) a,
integer lda, double precision, dimension( ldq, * ) q, integer ldq,
integer nb, double precision, dimension( * ) work, integer info)
Block Reordering of generalized Eigenvalues. β¨
β¨ Purpose β¨
Bestie, this one reorders the eigenvalues of a matrix A so that the complex eigenvalue pairs won't cause a change of the block size in blocked linear matrix equation solver codes. It uses DTREXC from LAPACK for moving the eigenvalues on the diagonal. No cap. π₯
π Parameters π
Nβ INTEGER, gorgeous. It's the order of the matricesAandQ, andN >= 0. πAβ DOUBLE PRECISION array, dimension(LDA,N). On entry, the leadingN-by-Nupper Hessenberg part of this array must contain the generalized Schur factorA_sof the matrixA. On exit, the leadingN-by-Npart of this array contains the generalized Schur factorA_sof the matrixAwith no complex eigenvalue pairs inA(k*NB,k*NB), wherekis a non-negative integer. π¦LDAβ INTEGER. It's the leading dimension of the arrayA.LDA >= MAX(1,N). β¨Qβ DOUBLE PRECISION array, dimension(LDQ,N). On entry, the leadingN-by-Npart of this array must contain the orthogonal matrixQfrom the generalized Schur factorization. On exit, the leadingN-by-Npart of this array contains the update January 2021 factorization with integrated eigenvalue reordering. πLDQβ INTEGER. It's the leading dimension of the arrayQ.LDQ >= MAX(1,N). πΈNBβ INTEGER. It's the block size of the solver planned to use. Typical values are16,32, or64. The block size must be an even positive integer, otherwise an error is returned. πWORKβ INTEGER array, dimension(N). Workspace. πINFOβ INTEGER.== 0: successful exit;< 0: ifINFO = -i, thei-th argument had an illegal value;= 1: The internalDTGEX2caused an error. ]
Author: Martin Koehler, MPI Magdeburg
Date: October 2025
Definition at line 124 of file dla_sort_ev.f90.
subroutine dla_sort_gev π
subroutine dla_sort_gev (integer n, double precision, dimension( lda, * ) a,
integer lda, double precision, dimension( ldb, * ) b, integer ldb,
double precision, dimension( ldq, * ) q, integer ldq, double precision,
dimension( ldz, * ) z, integer ldz, integer nb, double precision,
dimension( * ) work, integer lwork, integer info)
Block Reordering of generalized Eigenvalues. β¨
β¨ Purpose β¨
This one reorders the eigenvalues of a matrix pencil (A,B) so that the complex eigenvalue pairs won't cause a change of the block size in blocked linear matrix equation solver codes. It uses DTGEX2 from LAPACK for moving the eigenvalues on the diagonal. Periodt. π
π Parameters π
Nβ INTEGER. The order of the matricesA,B,Q, andZ,N >= 0. πAβ DOUBLE PRECISION array, dimension(LDA,N). On entry, the leadingN-by-Nupper Hessenberg part of this array must contain the generalized Schur factorA_sof the matrixA. On exit, the leadingN-by-Npart of this array contains the generalized Schur factorA_sof the matrixAwith no complex eigenvalue pairs inA(k*NB,k*NB), wherekis a non-negative integer. π¦LDAβ INTEGER. The leading dimension of the arrayA.LDA >= MAX(1,N). β¨Bβ DOUBLE PRECISION array, dimension(LDB,N). On entry, the leadingN-by-Nupper triangular part of this array must contain the generalized Schur factorB_sof the matrixB. On exit, the leadingN-by-Npart of this array contains the generalized Schur factorB_sof the matrixBwith reordered eigenvalues. πLDBβ INTEGER. The leading dimension of the arrayB.LDB >= MAX(1,N). πQβ DOUBLE PRECISION array, dimension(LDQ,N). On entry, the leadingN-by-Npart of this array must contain the orthogonal matrixQfrom the generalized Schur factorization. On exit, the leadingN-by-Npart of this array contains the update January 2021 factorization with integrated eigenvalue reordering. πΈLDQβ INTEGER. The leading dimension of the arrayQ.LDQ >= MAX(1,N). πZβ DOUBLE PRECISION array, dimension(LDZ,N). On entry, the leadingN-by-Npart of this array must contain the orthogonal matrixZfrom the generalized Schur factorization. On exit, the leadingN-by-Npart of this array contains the update January 2021 factorization with integrated eigenvalue reordering. π¦LDZβ INTEGER. The leading dimension of the arrayZ.LDZ >= MAX(1,N). β¨NBβ INTEGER. The block size of the solver planned to use. Typical values are16,32, or64. The block size must be an even positive integer, otherwise an error is returned. πWORKβ INTEGER array, dimension(LWORK). Workspace. πLWORKβ INTEGER. Size of the workspace.LWORK >= MAX(1, 4*N, 256). π₯INFOβ INTEGER.== 0: successful exit;< 0: ifINFO = -i, thei-th argument had an illegal value;= 1: The internalDTGEX2caused an error. ]
Author: Martin Koehler, MPI Magdeburg
Date: October 2025
Definition at line 165 of file dla_sort_gev.f90.
subroutine dla_transform_general π§
subroutine dla_transform_general (character, dimension(*) trans, integer m,
integer n, double precision, dimension(ldx, *) x, integer ldx, double
precision, dimension(ldqa, *) qa, integer ldqa, double precision,
dimension(ldqb, *) qb, integer ldqb, double precision, dimension(*)
work)
Transform the Right-Hand Side or Solution for generalized projections. π
β¨ Purpose β¨
DLA_TRANSFORM_STANDARD computes either
X <- QA*X*QB**T (1)
or
X <- QA**T*X*QB (2)
where QA is a M-by-M matrices, QB is a N-by-N matrix, and X is a M-by-N matrix. (Yes, bestie, it says DLA_TRANSFORM_STANDARD even though the subroutine is dla_transform_general β we don't make the rules, we just keep the details.) π
π Remarks
The function does not perform any check on the input arguments. So you better be sure, okay? π
π Parameters π
TRANSβ CHARACTER(1). Specifies which transformation is applied:== 'N': Transformation (1)== 'T': Transformation (2)
Mβ INTEGER. The order of the matricesQAand the number of rows ofX.M >= 0. πNβ INTEGER. The order of the matricesQBand the number of columns ofX.N >= 0. β¨Xβ DOUBLE PRECISION array, dimension(LDX,N). The matrixXis a generalM-by-Nmatrix overwritten by (1) or (2). π¦LDXβ INTEGER. The leading dimension of the arrayX.LDX >= max(1,M). πΈQAβ DOUBLE PRECISION array, dimension(LDQA,M). The matrixQAisM-by-Mthe transformation matrix. πLDQAβ INTEGER. The leading dimension of the arrayQA.LDQA >= max(1,M). πQBβ DOUBLE PRECISION array, dimension(LDQB,N). The matrixQBisN-by-Nthe transformation matrix. πLDQBβ INTEGER. The leading dimension of the arrayQB.LDQB >= max(1,N). β¨WORKβ DOUBLE PRECISION array, dimension(M*N). Workspace for the computation. π₯
Author: Martin Koehler, MPI Magdeburg
Date: October 2025
Definition at line 119 of file dla_transform_general.f90.
subroutine dla_transform_standard π
subroutine dla_transform_standard (character, dimension(*) trans, integer m,
double precision, dimension(ldx, *) x, integer ldx, double precision,
dimension(ldq, *) q, integer ldq, double precision, dimension(*) work)
Transform the Right-Hand Side or Solution for standard projections. π
β¨ Purpose β¨
DLA_TRANSFORM_STANDARD computes either
X <- Q*X*Q**T (1)
or
X <- Q**T*X*Q (2)
where Q and X are M-by-M matrices. π
π Remarks
The function does not perform any check on the input arguments. So you better be sure, okay? π
π Parameters π
TRANSβ CHARACTER(1). Specifies which transformation is applied:== 'N': Transformation (1)== 'T': Transformation (2)
Mβ INTEGER. The order of the matricesQandX.M >= 0. πXβXβ ok soXis a DOUBLE PRECISION array, dimension(LDX,M)π and the matrixXis a general M-by-M matrix that gets overwritten by (1) or (2). yeah she's not surviving this one bestie, she's getting replaced π«ΆLDXβLDXis INTEGER</>, the leading dimension of the arrayX. and the rule isLDX >= max(1,M)β¨ no exceptions, she's gotta be big enough.QβQis a DOUBLE PRECISION array, dimension(LDQ,M), and the matrixQis M-by-M, the transformation matrix π that's literally her whole job.LDQβLDQis INTEGER</>, the leading dimension of the arrayQ. same energy:LDQ >= max(1,M)πWORKβWORKis a DOUBLE PRECISION array, dimension(M**2), and it's the workspace for the computation. she does not get to be pretty, she gets to be useful π
βοΈ Author
Martin Koehler, MPI Magdeburg πΈ
π Date
October 2025 π¦
Definition at line 101 of file dla_transform_standard.f90. like, the receipts are right there iykyk π₯
π Author
Generated automatically by Doxygen for MEPACK from the source code. not a human typing this out with love, a whole robot did it π iconic behaviour honestly.
okay bestie that's the whole page, we're DONE β¨ no cap, you just read an entire Fortran linear algebra manpage and you ate. this one's from Version 1.1.2, stamped Thu Oct 9 2025 00:00:00, and it's dblaux(3) β go forth and call your functions responsibly, mwah ππ
π¦
π¦ where this page comes from
- fedora 43: mepack-devel 1.1.2-1.fc43 Β· GPL-3.0-or-later and LGPL-2.1-or-later and BSD-3-Clause
- fedora 43: mepack-devel 1.1.2-1.fc43 Β· GPL-3.0-or-later and LGPL-2.1-or-later and BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms