DTRMM(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

πŸ’– 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 β€” keep SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB exactly 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