DTRMM(3)
π DTRMM β triangular matrix Γ matrix, the iconic way π
okay so first things first, bestie: this page lives at /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/BLAS/SRC/dtrmm.f in the BLAS source tree, it's part of LAPACK Version 3.12.0, and the header up top says dtrmm.f(3) from the Library Functions Manual. We're gonna get into all of it, no skipped chapters, periodt. π
β¨ NAME β¨
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/BLAS/SRC/dtrmm.f
like, that's literally the whole name section. she's a file path, she's mysterious, she contains multitudes. π
π¦ SYNOPSIS π¦
Functions/Subroutines
subroutine DTRMM (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)β that's her. that's DTRMM.
πΈ Function/Subroutine Documentation πΈ
so here's the full glow-up, the actual signature, character for character:
subroutine DTRMM (character side, character uplo, character transa,
character diag, integer m, integer n, double precision alpha, double
precision, dimension(lda,*) a, integer lda, double precision,
dimension(ldb,*) b, integer ldb)
DTRMM β iconic. main character energy fr fr.
π Purpose π
okay so what does she actually do? DTRMM performs one of the matrix-matrix operations:
B := alpha*op( A )*B, or B := alpha*B*op( A ),
where alpha is a scalar, B is an m by n matrix, A is a unit, or non-unit, upper or lower triangular matrix and op( A ) is one of:
op( A ) = A or op( A ) = A**T.
that's it, that's the whole vibe. triangular matmul, no cap. π₯
β¨ Parameters β¨
every single one, bestie. buckle up, we're going through all of them. π«Ά
SIDE
SIDE is CHARACTER*1. on entry, SIDE specifies whether op( A ) multiplies B from the left or right, like so:
SIDE = 'L' or 'l' B := alpha*op( A )*B.
SIDE = 'R' or 'r' B := alpha*B*op( A ).
left or right, choose your fighter. π
UPLO
UPLO is CHARACTER*1. on entry, UPLO specifies whether the matrix A is an upper or lower triangular matrix:
UPLO = 'U' or 'u' A is an upper triangular matrix.
UPLO = 'L' or 'l' A is a lower triangular matrix.
upper girlie or lower girlie, both valid. π
TRANSA
TRANSA is CHARACTER*1. on entry, TRANSA specifies the form of op( A ) to be used in the matrix multiplication:
TRANSA = 'N' or 'n' op( A ) = A.
TRANSA = 'T' or 't' op( A ) = A**T.
TRANSA = 'C' or 'c' op( A ) = A**T.
note that 'T' and 'C' are giving the exact same energy here β both mean A**T. π¦
DIAG
DIAG is CHARACTER*1. on entry, DIAG specifies whether or not A is unit triangular:
DIAG = 'U' or 'u' A is assumed to be unit triangular.
DIAG = 'N' or 'n' A is not assumed to be unit
triangular.
unit triangular = the diagonal is silently assumed to be all ones, iykyk. β¨
M
M is INTEGER. on entry, M specifies the number of rows of B. M must be at least zero. no negative row counts, we don't do that here. πΈ
N
N is INTEGER. on entry, N specifies the number of columns of B. N must be at least zero. same energy, same rule. πΈ
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. so like, if alpha's a zero, A literally doesn't even get looked at. she's off the clock. π
A
A is DOUBLE PRECISION array, dimension ( LDA, k ), where k is m when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'.
before entry with UPLO = 'U' or 'u', the leading k by k upper triangular part of the array A must contain the upper triangular matrix and the strictly lower triangular part of A is not referenced.
before entry with UPLO = 'L' or 'l', the leading k by k lower triangular part of the array A must contain the lower triangular matrix and the strictly upper triangular part of A is not referenced.
note that when DIAG = 'U' or 'u', the diagonal elements of A are not referenced either, but are assumed to be unity. so the diagonal is literally just vibes at that point. π§
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 ). respect the leading dimension, she's not decorative. π
B
B is DOUBLE PRECISION array, dimension ( LDB, N ). before entry, the leading m by n part of the array B must contain the matrix B, and on exit is overwritten by the transformed matrix. she goes in as B and comes out transformed β glow-up arc fr. π₯
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 ). minimum requirement, non-negotiable. β¨
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
the whole squad. academic royalty. we stan. π
β Further Details β
- Level 3 Blas routine.
-- Written on 8-February-1989.- Jack Dongarra, Argonne National Laboratory.
- Iain Duff, AERE Harwell.
- Jeremy Du Croz, Numerical Algorithms Group Ltd.
- Sven Hammarling, Numerical Algorithms Group Ltd.
written in 1989 and still serving looks. legends only. ππ₯
π Definition π
Definition at line 176 of file dtrmm.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code. (not a human, just a very efficient little robot bestie π€β¨)
ok and one last thing β keepSIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDBexactly as spelled, don't get cute with the argument names, that's a totally different kind of cute and the compiler will NOT be into it. π
and that's the page, bestie! π«Ά she's LAPACK Version 3.12.0 (the <rainbow>LAPACK</rainbow> footer energy), sourced from /home/abui...SRC/dtrmm.f(3) β go forth and multiply your triangular matrices. mwah. ππΈ
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms