BLAS/SRC/ztrmm.f(3)

πŸ’… BLAS/SRC/ztrmm.f(3) β€” from the Library Functions Manual, bestie

okay so picture this: it's BLAS/SRC/ztrmm.f(3), and the manual it lives in is literally called the Library Functions Manual. Cute. Let's get into it ✨


πŸŽ€ NAME πŸŽ€

BLAS/SRC/ztrmm.f β€” that's the whole name, that's the whole vibe. This is the manpage for the file that holds ztrmm. πŸ¦‹


✨ SYNOPSIS ✨

Functions/Subroutines

  • subroutine ztrmm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) β€” the one and only ZTRMM πŸ’–

πŸ‘‘ Function/Subroutine Documentation πŸ‘‘

subroutine ztrmm (character side, character uplo, character transa,
    character diag, integer m, integer n, complex*16 alpha, complex*16,
    dimension(lda,*) a, integer lda, complex*16, dimension(ldb,*) b, integer
    ldb)

ZTRMM 🫢 (yes that's the signature up there, character for character, no cap)

🌸 Purpose 🌸

!> !> ZTRMM 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 or op( A ) = A**H. !>

so like. it does triangular matrix times matrix things. main character energy fr fr πŸ”₯


🧚 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 ). !>

left or right, babe β€” pick your lane πŸ’…

UPLO

!> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix A is an upper or !> lower triangular matrix as follows: !> !> 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, your call πŸŽ€

TRANSA

!> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n' op( A ) = A. !> !> TRANSA = 'T' or 't' op( A ) = A**T. !> !> TRANSA = 'C' or 'c' op( A ) = A**H. !>

no transpose, transpose, or conjugate transpose β€” the full trio, iconic 🌈

DIAG

!> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit triangular !> as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !>

is the diagonal all ones or not, that's the whole question πŸ’€

M

!> M is INTEGER !> On entry, M specifies the number of rows of B. M must be at !> least zero. !>

rows of B. M must be at least zero β€” don't be out here passing negatives πŸ™ˆ

N

!> N is INTEGER !> On entry, N specifies the number of columns of B. N must be !> at least zero. !>

columns of B. also at least zero. rules are rules ✨

ALPHA

!> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. When alpha is !> zero then A is not referenced and B need not be set before !> entry. !>

not me pointing out that if alpha is zero, A doesn't even get looked at and B doesn't need to be set before entry 😭 free pass honestly

A

!> A is COMPLEX*16 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 k is m when SIDE = 'L' or 'l', and n when SIDE = 'R' or 'r'. the half you don't need? not referenced, ignored, unbothered πŸ’… and if DIAG = 'U' or 'u' the diagonal elements aren't referenced either β€” they're just assumed to be unity. trust.

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 ). !>

leading dimension of A: at least max( 1, m ) for SIDE = 'L' or 'l', at least max( 1, n ) for SIDE = 'R' or 'r'. memorize it, bestie πŸ“

B

!> B is COMPLEX*16 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. !>

B goes in, transformed B comes out. glow-up arc, literally 🌸

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 ). !>

LDB must be at least max( 1, m ). no exceptions, we don't do that here πŸ”₯


πŸ’œ Author πŸ’œ

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

the whole squad showed up 🫢


⭐ 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. !>

Level 3 BLAS routine, written on 8-February-1989 by Jack Dongarra (Argonne National Laboratory), Iain Duff (AERE Harwell), Jeremy Du Croz (Numerical Algorithms Group Ltd.) and Sven Hammarling (Numerical Algorithms Group Ltd.). legends, honestly πŸ‘‘


Definition at line 176 of file ztrmm.f. πŸ“


🌟 Author 🌟

Generated automatically by Doxygen for LAPACK from the source code. (the robot did this one, not me πŸ€–)


and that's the whole page, bestie! footer tea: this is LAPACK, Version 3.12.0, and the page you just read is BLAS/SRC/ztrmm.f(3). go forth and multiply your triangular matrices πŸ’–βœ¨πŸŽ€
πŸ“¦ where this page comes from