ZTRMM(3)

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

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

okay so. the "name" of this whole thing is literally just a path, no cap:

/home/abuild/rpmbuild/BUILD/lapack-
static-3.12.0-build/lapack-3.12.0/BLAS/SRC/ztrmm.f

that's it. that's the name. she's a file, she's iconic, she does triangular matrix multiplication. periodt. πŸ’–


✨ SYNOPSIS ✨

Functions/Subroutines

  • subroutine ZTRMM (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) β€” 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. that's her. that's the whole subroutine. πŸŽ€

🌸 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. she takes your triangular matrix A, optionally transposes or conjugate-transposes it, multiplies it into B from whichever side you want, and scales the whole thing by alpha. 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 ).
!>

SIDE is a CHARACTER*1, and on entry it tells you whether op( A ) multiplies B from the left or from the right β€” pick your lane bestie:

  • SIDE = 'L' or 'l' gives you B := alpha*op( A )*B.
  • SIDE = 'R' or 'r' gives you 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.
!>

UPLO is CHARACTER*1, and it's the vibe check for A: upper or lower triangular?

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

TRANSA is CHARACTER*1 and it decides what op( A ) actually looks like in the multiply:

  • TRANSA = 'N' or 'n' β€” op( A ) = A. no notes, she's serving the original.
  • TRANSA = 'T' or 't' β€” op( A ) = A**T. transposed era.
  • TRANSA = 'C' or 'c' β€” op( A ) = A**H. conjugate-transposed era, we love a glow-up. πŸ’…

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

DIAG is CHARACTER*1 and it's the "is she unit triangular or not" flag:

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

M is INTEGER, on entry it's how many rows B has, and M must be at least zero. no negative row counts, that's not a thing, we don't do that. πŸ™ˆ

N

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

N is INTEGER, on entry it's how many columns B has, and N must be at least zero too. same energy. 🫢

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

ALPHA is COMPLEX*16 and it's your scalar alpha. key detail bestie: when alpha is zero then A is not referenced and B need not be set before entry. so like. free real estate. πŸŽ€

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

A is a COMPLEX*16 array, dimension ( LDA, k ), where k is m when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. and there are rules, obviously:

  • before entry with UPLO = 'U' or 'u', the leading k by k upper triangular part of 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 A must contain the lower triangular matrix, and the strictly upper triangular part of A is not referenced.
  • also note: when DIAG = 'U' or 'u', the diagonal elements of A are not referenced either β€” they're just assumed to be unity. she doesn't even look at them. πŸ’€

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

LDA is INTEGER β€” the first dimension of A as declared in the calling (sub) program. the requirements:

  • 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 )

write that down. πŸ“

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 is a 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 is overwritten by the transformed matrix. she's a main character who changes the whole plot in place, no cap. πŸ”₯

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 is INTEGER β€” the first dimension of B as declared in the calling (sub) program. LDB must be at least max( 1, m ). that's the rule, don't fight it. πŸ¦‹


πŸ‘‘ Author πŸ‘‘

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

a whole group project that actually shipped. iconic. 🌈


🌟 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 β€” the girlies have been slaying since the 80s, we stan a legend. πŸŽ€


Definition at line 176 of file ztrmm.f.


πŸ’œ Author πŸ’œ

Generated automatically by Doxygen for LAPACK from the source code. no human wrote this bit, a robot did, and honestly? she ate. πŸ€–βœ¨


okay that's the page!! LAPACK, Version 3.12.0 β€” and the whole thing lives at /home/abui...SRC/ztrmm.f(3), as always. mwah, go multiply something triangular bestie πŸ’‹πŸ«ΆπŸŒΈ

πŸ“¦ where this page comes from