BLAS/SRC/zgemmtr.f(3)

πŸ“¦ version 3.12.1, in arch rolling

πŸ’– BLAS/SRC/zgemmtr.f β€” the zgemmtr era πŸ’–

okay bestie, so this page is from the Library Functions Manual for BLAS/SRC/zgemmtr.f, and honestly? It's a whole vibe. Let's get into it πŸŽ€


✨ SYNOPSIS ✨

Functions/Subroutines

  • subroutine zgemmtr (uplo, transa, transb, n, k, alpha, a, lda, b, ldb, beta, c, ldc) β€” that's ZGEMMTR, the main character πŸ‘‘
subroutine zgemmtr (uplo, transa, transb, n, k, alpha, a, lda, b, ldb,
    beta, c, ldc)
    ZGEMMTR

πŸ¦‹ Function/Subroutine Documentation πŸ¦‹

subroutine zgemmtr

subroutine zgemmtr (character uplo, character transa, character transb,
    integer n, integer k, complex*16 alpha, complex*16, dimension(lda,*) a,
    integer lda, complex*16, dimension(ldb,*) b, integer ldb, complex*16
    beta, complex*16, dimension(ldc,*) c, integer ldc)

ZGEMMTR β€” say it with me, iconique ✨

Purpose 🫢

so ZGEMMTR performs one of the matrix-matrix operations, and here's the whole thing:

C := alpha*op( A )*op( B ) + beta*C,

where op( X ) is one of

op( X ) = X   or   op( X ) = X**T,

and alpha and beta are scalars, while A, B and C are matrices. Specifically: op( A ) is an n by k matrix, op( B ) is a k by n matrix, and C is an n by n matrix. πŸ’…

and here's the part that's lowkey the whole point: this routine only accesses and updates the upper or lower triangular part of the result matrix C. So if you already know your resulting C is Hermitian or symmetric, you can use that fact and save yourself the effort. iconic behaviour, no cap 🌸


Parameters 🧚

  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO specifies whether the lower or the upper triangular part of C is access and updated.
    • UPLO = 'L' or 'l' β†’ the lower triangular part of C is used.
    • UPLO = 'U' or 'u' β†’ the upper triangular part of C is used.
  • 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.
  • TRANSB β€” TRANSB is CHARACTER*1. On entry, TRANSB specifies the form of op( B ) to be used in the matrix multiplication, as follows:
    • TRANSB = 'N' or 'n' β†’ op( B ) = B.
    • TRANSB = 'T' or 't' β†’ op( B ) = B**T.
    • TRANSB = 'C' or 'c' β†’ op( B ) = B**H.
  • N β€” N is INTEGER. On entry, N specifies the number of rows and columns of the matrix C, the number of columns of op(B) and the number of rows of op(A). N must be at least zero. ⭐
  • K β€” K is INTEGER. On entry, K specifies the number of columns of the matrix op( A ) and the number of rows of the matrix op( B ). K must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX*16. On entry, ALPHA specifies the scalar alpha. πŸ’œ
  • A β€” A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is k when TRANSA = 'N' or 'n', and is n otherwise. Before entry with TRANSA = 'N' or 'n', the leading n by k part of the array A must contain the matrix A; otherwise the leading k by m part of the array A must contain the matrix A.
  • LDA β€” LDA is INTEGER. On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. When TRANSA = 'N' or 'n' then LDA must be at least max( 1, n ); otherwise LDA must be at least max( 1, k ).
  • B β€” B is COMPLEX*16 array, dimension ( LDB, kb ), where kb is n when TRANSB = 'N' or 'n', and is k otherwise. Before entry with TRANSB = 'N' or 'n', the leading k by n part of the array B must contain the matrix B; otherwise the leading n by k part of the array B must contain the matrix B.
  • LDB β€” LDB is INTEGER. On entry, LDB specifies the first dimension of B as declared in the calling (sub) program. When TRANSB = 'N' or 'n' then LDB must be at least max( 1, k ); otherwise LDB must be at least max( 1, n ).
  • BETA β€” BETA is COMPLEX*16. On entry, BETA specifies the scalar beta. When BETA is supplied as zero then C need not be set on input. cute, right? one less thing to worry about πŸ“
  • C β€” C is COMPLEX*16 array, dimension ( LDC, N ). Before entry, the leading n by n part of the array C must contain the matrix C, except when beta is zero, in which case C need not be set on entry. On exit, the upper or lower triangular part of the matrix C is overwritten by the n by n matrix
( alpha*op( A )*op( B ) + beta*C ).
  • LDC β€” LDC is INTEGER. On entry, LDC specifies the first dimension of C as declared in the calling (sub) program. LDC must be at least max( 1, n ). πŸ”₯

Author ✨

Martin Koehler


Further Details 🌈

  • Level 3 Blas routine. πŸ‘‘
  • -- Written on 19-July-2023.
  • Martin Koehler, MPI Magdeburg

Definition at line 189 of file zgemmtr.f. πŸ’…

fr fr, that's the exact line β€” go look, i'll wait 🧚

Author πŸŽ€

Generated automatically by Doxygen for LAPACK from the source code.


and that's the whole page bestie!! 🌸 LAPACK, Version 3.12.0, dated BLAS/SRC/zgemmtr.f(3) β€” mwah, go forth and multiply your matrices πŸ’–πŸ¦‹βœ¨

πŸ“¦ where this page comes from