dblaux - Man Page
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.
Function Documentation
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.
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
Januar 2023
Definition at line 86 of file dla_itranspose.f90.
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.
- 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
Januar 2023
Definition at line 153 of file dla_qtrmm2.f90.
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
Januar 2023
Definition at line 98 of file dla_small_solve4.f90.
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.
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
Januar 2023
Definition at line 98 of file dla_small_solve8.f90.
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:
Reorder the eigenvalues of a matrix A such that the complex eigenvalues pairs will not cause a change of the block size in blocked linear matrix equation solver codes. The function uses DTREXC from LAPACK for moving the eigenvalues on the diagonal.
- Parameters
N
N is INTEGER The order of the matrices A and Q, N >= 0.
A
A is a DOUBLE PRECISION array, dimension (LDA,N) On entry, the leading N-by-N upper Hessenberg part of this array must contain the generalized Schur factor A_s of the matrix A. On exit, the leading N-by-N part of this array contains the generalized Schur factor A_s of the matrix A with no complex eigenvalues pairs an A(k*NB,k*NB), where k is a non negative integer.
LDA
LDA is INTEGER The leading dimension of the array A. LDA >= MAX(1,N).
Q
Q is a DOUBLE PRECISION array, dimension (LDQ,N) On entry, the leading N-by-N part of this array must contain the orthogonal matrix Q from the generalized Schur factorization. On exit, the leading N-by-N part of this array contains the update January 2021 factorization with integrated eigenvalue reordering.
LDQ
LDQ is INTEGER The leading dimension of the array Q. LDQ >= MAX(1,N).
NB
NB is INTEGER Block size of the solver planed to use. Typical values are 16, 32, or 64. The block size must be an even positive integer otherwise an error is returned.
WORK
WORK is INTEGER array, dimension (N) Workspace
INFO
INFO is INTEGER == 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value; = 1: The internal DTGEX2 caused an error. ]
- Author
Martin Koehler, MPI Magdeburg
- Date
Januar 2023
Definition at line 124 of file dla_sort_ev.f90.
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:
Reorder the eigenvalues of a matrix pencil (A,B) such that the complex eigenvalues pairs will not cause a change of the block size in blocked linear matrix equation solver codes. The function uses DTGEX2 from LAPACK for moving the eigenvalues on the diagonal.
- Parameters
N
N is INTEGER The order of the matrices A, B, Q, and Z, N >= 0.
A
A is a DOUBLE PRECISION array, dimension (LDA,N) On entry, the leading N-by-N upper Hessenberg part of this array must contain the generalized Schur factor A_s of the matrix A. On exit, the leading N-by-N part of this array contains the generalized Schur factor A_s of the matrix A with no complex eigenvalues pairs an A(k*NB,k*NB), where k is a non negative integer.
LDA
LDA is INTEGER The leading dimension of the array A. LDA >= MAX(1,N).
B
B is a DOUBLE PRECISION array, dimension (LDB,N) On entry, the leading N-by-N upper triangular part of this array must contain the generalized Schur factor B_s of the matrix B, On exit, the leading N-by-N part of this array contains the generalized Schur factor B_s of the matrix B with reordered eigenvalues.
LDB
LDB is INTEGER The leading dimension of the array B. LDB >= MAX(1,N).
Q
Q is a DOUBLE PRECISION array, dimension (LDQ,N) On entry, the leading N-by-N part of this array must contain the orthogonal matrix Q from the generalized Schur factorization. On exit, the leading N-by-N part of this array contains the update January 2021 factorization with integrated eigenvalue reordering.
LDQ
LDQ is INTEGER The leading dimension of the array Q. LDQ >= MAX(1,N).
Z
Z is a DOUBLE PRECISION array, dimension (LDZ,N) On entry, the leading N-by-N part of this array must contain the orthogonal matrix Z from the generalized Schur factorization. On exit, the leading N-by-N part of this array contains the update January 2021 factorization with integrated eigenvalue reordering.
LDZ
LDZ is INTEGER The leading dimension of the array Z. LDZ >= MAX(1,N).
NB
NB is INTEGER Block size of the solver planed to use. Typical values are 16, 32, or 64. The block size must be an even positive integer otherwise an error is returned.
WORK
WORK is INTEGER array, dimension (LWORK) Workspace
LWORK
LWORK is INTEGER Size of the workspace. LWORK >= MAX(1, 4*N, 256)
INFO
INFO is INTEGER == 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value; = 1: The internal DTGEX2 caused an error. ]
- Author
Martin Koehler, MPI Magdeburg
- Date
Januar 2023
Definition at line 165 of file dla_sort_gev.f90.
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.
- Remarks
The function does not perform any check on the input arguments.
- Parameters
TRANS
TRANS is CHARACTER(1) Specifies which transformation is applied: == 'N': Transformation (1) == 'T': Transformation (2)
M
M is INTEGER The order of the matrices QA and the number of rows of X. M >= 0.
N
N is INTEGER The order of the matrices QB and the number of columns of X. N >= 0.
X
X is DOUBLE PRECISION array, dimension (LDX,N) The matrix X is a general M-by-N matrix overwritten by (1) or (2)
LDX
LDX is INTEGER The leading dimension of the array X. LDX >= max(1,M).
QA
QA is DOUBLE PRECISION array, dimension (LDQA,M) The matrix QA is M-by-M the transformation matrix.
LDQA
LDQA is INTEGER The leading dimension of the array QA. LDQA >= max(1,M).
QB
QB is DOUBLE PRECISION array, dimension (LDQB,N) The matrix QB is N-by-N the transformation matrix.
LDQB
LDQB is INTEGER The leading dimension of the array QB. LDQB >= max(1,N).
WORK
WORK is DOUBLE PRECISION array, dimension (M*N) Workspace for the computation.
- Author
Martin Koehler, MPI Magdeburg
- Date
Januar 2023
Definition at line 119 of file dla_transform_general.f90.
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.
- Parameters
TRANS
TRANS is CHARACTER(1) Specifies which transformation is applied: == 'N': Transformation (1) == 'T': Transformation (2)
M
M is INTEGER The order of the matrices Q and X. M >= 0.
X
X is DOUBLE PRECISION array, dimension (LDX,M) The matrix X is a general M-by-M matrix overwritten by (1) or (2)
LDX
LDX is INTEGER The leading dimension of the array X. LDX >= max(1,M).
Q
Q is DOUBLE PRECISION array, dimension (LDQ,M) The matrix Q is M-by-M the transformation matrix.
LDQ
LDQ is INTEGER The leading dimension of the array Q. LDQ >= max(1,M).
WORK
WORK is DOUBLE PRECISION array, dimension (M**2) Workspace for the computation.
- Author
Martin Koehler, MPI Magdeburg
- Date
Januar 2023
Definition at line 101 of file dla_transform_standard.f90.
Author
Generated automatically by Doxygen for MEPACK from the source code.