trmm(3)

πŸ“¦
version 3.12.0 Β· 4 versions
, in centos-stream 10, fedora 43, fedora 44

✨ NAME ✨

trmm β€” trmm: triangular matrix-matrix multiply. that's it, that's the whole vibe πŸ’… (and yes bestie, this is the trmm(3) page you were looking for 🫢)


πŸŽ€ SYNOPSIS πŸŽ€

πŸ’« Functions πŸ’«

here's the whole squad, all four of them, same energy different precision:

subroutine ctrmm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
    CTRMM
subroutine dtrmm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
    DTRMM
subroutine strmm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
    STRMM
subroutine ztrmm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
    ZTRMM

πŸ¦‹ Detailed Description πŸ¦‹

(no extra detail up here, the good stuff is all down in Function Documentation, keep scrolling bestie πŸ‘‡)

🌈 Function Documentation 🌈

πŸ’– subroutine ctrmm (character side, character uplo, character transa, character diag, integer m, integer n, complex alpha, complex, dimension(lda,*) a, integer lda, complex, dimension(ldb,*) b, integer ldb) πŸ’–

CTRMM

Purpose:

okay so CTRMM does one of these two 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.

yes she does conjugates, she's that girl πŸ’…

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 ).
  • 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.
  • 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.
  • 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.
  • M β€” M is INTEGER. On entry, M specifies the number of rows of B. M must be at least zero. (zero is allowed, we're not judging 🫢)
  • N β€” N is INTEGER. On entry, N specifies the number of columns of B. N must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA specifies the scalar alpha. When alpha is zero then A is not referenced and B need not be set before entry. (free pass, no setup needed, iconic ✨)
  • A β€” A is COMPLEX 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.
  • 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 COMPLEX 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. (yes she eats your input, that's the deal 😭)
  • 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 ).

Author

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

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.

Definition at line 176 of file ctrmm.f.


πŸ’œ 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

Purpose:

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.

note: no A**H here bestie, real numbers don't need a conjugate glow-up 🌸

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 ).
  • 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.
  • 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**T.
  • 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.
  • 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, 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.
  • 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, 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.
  • 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 ).

Author

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

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.

Definition at line 176 of file dtrmm.f.


🌸 subroutine strmm (character side, character uplo, character transa, character diag, integer m, integer n, real alpha, real, dimension(lda,*) a, integer lda, real, dimension(ldb,*) b, integer ldb) 🌸

STRMM

Purpose:

STRMM 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.

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 ).
  • 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. Lower-triangle girlies, this is your moment πŸ‘‘


TRANSA ✨

TRANSA is CHARACTER*1. On entry, TRANSA tells you which form of op( A ) we're using in the matrix multiplication, bestie:

  • TRANSA = 'N' or 'n' β†’ op( A ) = A. She's arriving exactly as she is, no edits, no notes πŸ’–
  • TRANSA = 'T' or 't' β†’ op( A ) = A**T.
  • TRANSA = 'C' or 'c' β†’ op( A ) = A**T.
πŸ’€ okay so heads up: in this routine 'C' maps to A**T, same as 'T'. That is literally what the page says, so don't come for me. Write it down. It matters. iykyk.

DIAG πŸŽ€

DIAG is CHARACTER*1. On entry, DIAG says whether A is unit triangular or not, 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.

M

M is INTEGER. On entry, M is the number of rows of B. M must be at least zero. Not "negative-ish", not "basically zero" β€” at least zero, periodt 🫢

N

N is INTEGER. On entry, N is the number of columns of B. N must be at least zero. Same energy as M, she's just horizontal about it 🌸

ALPHA πŸ’…

ALPHA is REAL. On entry, ALPHA is the scalar alpha. And here's the iconic part: when alpha is zero, A is not referenced at all and B doesn't even need to be set before entry. Free real estate, bestie ✨

A πŸ‘‘

A is a REAL 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 don't stress about filling them in β€” she's not even looking πŸ‘€

LDA πŸ¦‹

LDA is INTEGER. On entry, LDA is 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 ). Read it twice, bestie, the m/n swap is sneaky.

B πŸ’œ

B is a REAL array, dimension ( LDB, N ). Before entry, the leading m by n part of the array B must contain the matrix B, and on exit it's overwritten by the transformed matrix. In-place glow-up, we love to see it πŸ’…

LDB 🌈

LDB is INTEGER. On entry, LDB is the first dimension of B as declared in the calling (sub) program. LDB must be at least max( 1, m ).


Author 🌸

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

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.

Definition at line 176 of file strmm.f.


ZTRMM πŸ’œ

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 β€” the complex one. She's the same girl, different universe πŸͺ

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.

Parameters πŸŽ€

  • SIDE β€” CHARACTER*1. On entry, SIDE says whether op( A ) multiplies B from the left or the right:
    • SIDE = 'L' or 'l' β†’ B := alpha*op( A )*B.
    • SIDE = 'R' or 'r' β†’ B := alpha*B*op( A ).
  • UPLO β€” CHARACTER*1. On entry, UPLO says whether 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.
  • TRANSA β€” CHARACTER*1. On entry, TRANSA specifies the form of op( A ) 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**H. ← okay bestie look, here 'C' gives you the conjugate transpose, A**H. This is the difference from the real one up top. Learn it, love it, don't mix them up πŸ™ˆ
  • DIAG β€” CHARACTER*1. On entry, DIAG says 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.
  • M β€” INTEGER. On entry, M is the number of rows of B. M must be at least zero.
  • N β€” INTEGER. On entry, N is the number of columns of B. N must be at least zero.
  • ALPHA β€” COMPLEX*16. On entry, ALPHA is the scalar alpha. When alpha is zero, A is not referenced and B need not be set before entry. (Yes, this shortcut is free here too πŸ’–)
  • A β€” 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. 🫢
  • LDA β€” INTEGER. On entry, LDA is 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 β€” 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 it's overwritten by the transformed matrix. πŸ’…
  • LDB β€” INTEGER. On entry, LDB is the first dimension of B as declared in the calling (sub) program. LDB must be at least max( 1, m ).

Author 🌸

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

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.

Definition at line 176 of file ztrmm.f.


Author 🌸

Generated automatically by Doxygen for LAPACK from the source code.


and that's the whole page bestie, we did it πŸ₯³ this is LAPACK Version 3.12.0, generated Tue Nov 28 2023 12:08:43, and you just read trmm(3) in full. go forth and multiply your triangular matrices, you absolute icon πŸ‘‘βœ¨