complex16_blas_level3(3)

πŸ“¦
version 3.11.0 Β· 2 versions
, in debian bookworm

🌸 complex16_blas_level3(3) β€” LAPACK 🌸

okay bestie, welcome to the complex16 BLAS level 3 glow-up πŸ’… this is the group chat for all the big matrix-matrix routines, and we're gonna go through every single one. no cap, we're keeping all the facts, just making it cute. periodt.


✨ NAME ✨

complex16_blas_level3 - complex16


πŸ¦‹ SYNOPSIS πŸ¦‹

Functions

  • subroutine zgemm (TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) β€” ZGEMM
  • subroutine zhemm (SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC) β€” ZHEMM
  • subroutine zher2k (UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) β€” ZHER2K
  • subroutine zherk (UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC) β€” ZHERK
  • subroutine zsymm (SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC) β€” ZSYMM
  • subroutine zsyr2k (UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) β€” ZSYR2K
  • subroutine zsyrk (UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC) β€” ZSYRK
  • subroutine ztrmm (SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB) β€” ZTRMM
  • subroutine ztrsm (SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB) β€” ZTRSM

πŸ’– Detailed Description πŸ’–

This is the group of complex16 LEVEL 3 BLAS routines. ✨


πŸ‘‘ Function Documentation πŸ‘‘

subroutine zgemm (character TRANSA, character TRANSB, integer M, integer N, integer K, complex*16 ALPHA, complex*16, dimension(lda,) A, integer LDA, complex16, dimension(ldb,) B, integer LDB, complex16 BETA, complex*16, dimension(ldc,*) C, integer LDC)

ZGEMM

Purpose:

ZGEMM performs one of the matrix-matrix operations

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

where op( X ) is one of

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

alpha and beta are scalars, and A, B and C are matrices, with op( A ) an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.

Parameters

  • TRANSA β€” so like, TRANSA is a 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 β€” 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.
  • M β€” INTEGER. On entry, M specifies the number of rows of the matrix op( A ) and of the matrix C. M must be at least zero.
  • N β€” INTEGER. On entry, N specifies the number of columns of the matrix op( B ) and the number of columns of the matrix C. N must be at least zero.
  • K β€” 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 β€” COMPLEX*16. On entry, ALPHA specifies the scalar alpha.
  • A β€” COMPLEX*16 array, dimension ( LDA, ka ), where ka is k when TRANSA = 'N' or 'n', and is m otherwise. Before entry with TRANSA = 'N' or 'n', the leading m 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 β€” 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, m ), otherwise LDA must be at least max( 1, k ).
  • B β€” 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 β€” 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 β€” COMPLEX*16. On entry, BETA specifies the scalar beta. When BETA is supplied as zero then C need not be set on input.
  • C β€” COMPLEX*16 array, dimension ( LDC, N ). Before entry, the leading m 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 array C is overwritten by the m by n matrix ( alpha*op( A )*op( B ) + beta*C ).
  • LDC β€” INTEGER. On entry, LDC specifies the first dimension of C as declared in the calling (sub) program. LDC 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.


subroutine zhemm (character SIDE, character UPLO, integer M, integer N, complex*16 ALPHA, complex*16, dimension(lda,) A, integer LDA, complex16, dimension(ldb,) B, integer LDB, complex16 BETA, complex*16, dimension(ldc,*) C, integer LDC)

ZHEMM

Purpose:

ZHEMM performs one of the matrix-matrix operations

   C := alpha*A*B + beta*C,

or

   C := alpha*B*A + beta*C,

where alpha and beta are scalars, A is an hermitian matrix and B and C are m by n matrices.

Parameters

  • SIDE β€” CHARACTER*1. On entry, SIDE specifies whether the hermitian matrix A appears on the left or right in the operation as follows:
    • SIDE = 'L' or 'l' C := alpha*A*B + beta*C,
    • SIDE = 'R' or 'r' C := alpha*B*A + beta*C,
  • UPLO β€” CHARACTER*1. On entry, UPLO specifies whether the upper or lower triangular part of the hermitian matrix A is to be referenced as follows:
    • UPLO = 'U' or 'u' Only the upper triangular part of the hermitian matrix is to be referenced.
    • UPLO = 'L' or 'l' Only the lower triangular part of the hermitian matrix is to be referenced.
  • M β€” INTEGER. On entry, M specifies the number of rows of the matrix C. M must be at least zero.
  • N β€” INTEGER. On entry, N specifies the number of columns of the matrix C. N must be at least zero.
  • ALPHA β€” COMPLEX*16. On entry, ALPHA specifies the scalar alpha.
  • A β€” COMPLEX*16 array, dimension ( LDA, ka ), where ka is m when SIDE = 'L' or 'l' and is n otherwise. Before entry with SIDE = 'L' or 'l', the m by m part of the array A must contain the hermitian matrix, such that when UPLO = 'U' or 'u', the leading m by m upper triangular part of the array A must contain the upper triangular part of the hermitian matrix and the strictly lower triangular part of A is not referenced, and when UPLO = 'L' or 'l', the leading m by m lower triangular part of the array A must contain the lower triangular part of the hermitian matrix and the strictly upper triangular part of A is not referenced. Before entry with SIDE = 'R' or 'r', the n by n part of the array A must contain the hermitian matrix, such that when UPLO = 'U' or 'u', the leading n by n upper triangular part of the array A must contain the upper triangular part of the hermitian matrix and the strictly lower triangular part of A is not referenced, and when UPLO = 'L' or 'l', the leading n by n lower triangular part of the array A must contain the lower triangular part of the hermitian matrix and the strictly upper triangular part of A is not referenced. Note that the imaginary parts of the diagonal elements need not be set, they are assumed to be zero.
  • LDA β€” 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 ), otherwise 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.
  • LDB β€” 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 ).
  • BETA β€” COMPLEX*16. On entry, BETA specifies the scalar beta. When BETA is supplied as zero then C need not be set on input.
  • C β€” COMPLEX*16 array, dimension ( LDC, N ). Before entry, the leading m 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 array C is overwritten by the m by n updated matrix.
  • LDC β€”
  • 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, 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.

πŸ‘‘ zher2k β€” ZHER2K

subroutine zher2k (character UPLO, character TRANS, integer N, integer K,
    complex*16 ALPHA, complex*16, dimension(lda,*) A, integer LDA,
    complex*16, dimension(ldb,*) B, integer LDB, double precision BETA,
    complex*16, dimension(ldc,*) C, integer LDC)

✨ Purpose

okay bestie, ZHER2K performs one of the hermitian rank 2k operations:

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

or

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

where alpha and beta are scalars with beta real, C is an n by n hermitian matrix and A and B are n by k matrices in the first case and k by n matrices in the second case. πŸ’…

🌸 Parameters

  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO specifies whether the upper or lower triangular part of the array C is to be referenced as follows:
    • UPLO = 'U' or 'u' β€” Only the upper triangular part of C is to be referenced.
    • UPLO = 'L' or 'l' β€” Only the lower triangular part of C is to be referenced.
  • TRANS β€” TRANS is CHARACTER*1. On entry, TRANS specifies the operation to be performed as follows:
    • TRANS = 'N' or 'n' β€” C := alpha*A*B**H + conjg( alpha )*B*A**H + beta*C.
    • TRANS = 'C' or 'c' β€” C := alpha*A**H*B + conjg( alpha )*B**H*A + beta*C.
  • N β€” N is INTEGER. On entry, N specifies the order of the matrix C. N must be at least zero.
  • K β€” K is INTEGER. On entry with TRANS = 'N' or 'n', K specifies the number of columns of the matrices A and B, and on entry with TRANS = 'C' or 'c', K specifies the number of rows of the matrices A and 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 TRANS = 'N' or 'n', and is n otherwise. Before entry with TRANS = 'N' or 'n', the leading n by k part of the array A must contain the matrix A, otherwise the leading k by n 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 TRANS = '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 k when TRANS = 'N' or 'n', and is n otherwise. Before entry with TRANS = 'N' or 'n', the leading n by k part of the array B must contain the matrix B, otherwise the leading k by n 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 TRANS = 'N' or 'n' then LDB must be at least max( 1, n ), otherwise LDB must be at least max( 1, k ). Unchanged on exit.
  • BETA β€” BETA is DOUBLE PRECISION. On entry, BETA specifies the scalar beta.
  • C β€” C is COMPLEX*16 array, dimension ( LDC, N ).
    • Before entry with UPLO = 'U' or 'u', the leading n by n upper triangular part of the array C must contain the upper triangular part of the hermitian matrix and the strictly lower triangular part of C is not referenced. On exit, the upper triangular part of the array C is overwritten by the upper triangular part of the updated matrix.
    • Before entry with UPLO = 'L' or 'l', the leading n by n lower triangular part of the array C must contain the lower triangular part of the hermitian matrix and the strictly upper triangular part of C is not referenced. On exit, the lower triangular part of the array C is overwritten by the lower triangular part of the updated matrix.
    • > ⚠️ Note that the imaginary parts of the diagonal elements need not be set, they are assumed to be zero, and on exit they are set to zero.
  • 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

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

-- Modified 8-Nov-93 to set C(J,J) to DBLE( C(J,J) ) when BETA = 1.
   Ed Anderson, Cray Research Inc.

🌈 zherk β€” ZHERK

subroutine zherk (character UPLO, character TRANS, integer N, integer K,
    double precision ALPHA, complex*16, dimension(lda,*) A, integer LDA,
    double precision BETA, complex*16, dimension(ldc,*) C, integer LDC)

✨ Purpose

ZHERK performs one of the hermitian rank k operations:

C := alpha*A*A**H + beta*C,

or

C := alpha*A**H*A + beta*C,

where alpha and beta are real scalars, C is an n by n hermitian matrix and A is an n by k matrix in the first case and a k by n matrix in the second case. πŸ¦‹

🌸 Parameters

  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO specifies whether the upper or lower triangular part of the array C is to be referenced as follows:
    • UPLO = 'U' or 'u' β€” Only the upper triangular part of C is to be referenced.
    • UPLO = 'L' or 'l' β€” Only the lower triangular part of C is to be referenced.
  • TRANS β€” TRANS is CHARACTER*1. On entry, TRANS specifies the operation to be performed as follows:
    • TRANS = 'N' or 'n' β€” C := alpha*A*A**H + beta*C.
    • TRANS = 'C' or 'c' β€” C := alpha*A**H*A + beta*C.
  • N β€” N is INTEGER. On entry, N specifies the order of the matrix C. N must be at least zero.
  • K β€” K is INTEGER. On entry with TRANS = 'N' or 'n', K specifies the number of columns of the matrix A, and on entry with TRANS = 'C' or 'c', K specifies the number of rows of the matrix A. K must be at least zero.
  • ALPHA β€” ALPHA is DOUBLE PRECISION. On entry, ALPHA specifies the scalar alpha.
  • A β€” A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is k when TRANS = 'N' or 'n', and is n otherwise. Before entry with TRANS = 'N' or 'n', the leading n by k part of the array A must contain the matrix A, otherwise the leading k by n 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 TRANS = 'N' or 'n' then LDA must be at least max( 1, n ), otherwise LDA must be at least max( 1, k ).
  • BETA β€” BETA is DOUBLE PRECISION. On entry, BETA specifies the scalar beta.
  • C β€” C is COMPLEX*16 array, dimension ( LDC, N ).
    • Before entry with UPLO = 'U' or 'u', the leading n by n upper triangular part of the array C must contain the upper triangular part of the hermitian matrix and the strictly lower triangular part of C is not referenced. On exit, the upper triangular part of the array C is overwritten by the upper triangular part of the updated matrix.
    • Before entry with UPLO = 'L' or 'l', the leading n by n lower triangular part of the array C must contain the lower triangular part of the hermitian matrix and the strictly upper triangular part of C is not referenced. On exit, the lower triangular part of the array C is overwritten by the lower triangular part of the updated matrix.
    • > ⚠️ Note that the imaginary parts of the diagonal elements need not be set, they are assumed to be zero, and on exit they are set to zero.
  • 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

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

-- Modified 8-Nov-93 to set C(J,J) to DBLE( C(J,J) ) when BETA = 1.
   Ed Anderson, Cray Research Inc.

Okay so those are the receipts, bestie β€” the whole glow-up history of this routine, from the original 1989 era girlies to that 1993 little tweak where C(J,J) gets set to DBLE( C(J,J) ) when BETA = 1. Ed Anderson from Cray Research did that one. Iconic of her. πŸ’…


🌸 zsymm 🌸

SYMMETRIC MATRIX TIMES MATRIX, BUT MAKE IT COMPLEX*16

subroutine zsymm (character SIDE, character UPLO, integer M, integer N,
    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)

ZSYMM

πŸ’– Purpose

So ZSYMM does one of these two matrix-matrix situations, and you get to pick which:

C := alpha*A*B + beta*C,

or

C := alpha*B*A + beta*C,

where alpha and beta are scalars, A is a symmetric matrix, and B and C are m by n matrices. No cap, that's the whole vibe.

✨ Parameters

  • SIDE β€” SIDE is CHARACTER*1. On entry, SIDE says whether that symmetric matrix A is sitting on the left or on the right of the operation, like so:
SIDE = 'L' or 'l'   C := alpha*A*B + beta*C,

SIDE = 'R' or 'r'   C := alpha*B*A + beta*C,
  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO tells us whether we're reading the upper or the lower triangular part of that symmetric matrix A:
UPLO = 'U' or 'u'   Only the upper triangular part of the
                    symmetric matrix is to be referenced.

UPLO = 'L' or 'l'   Only the lower triangular part of the
                    symmetric matrix is to be referenced.
  • M β€” M is INTEGER. On entry, M is the number of rows of matrix C. And listen β€” M must be at least zero. 🫢
  • N β€” N is INTEGER. On entry, N is the number of columns of matrix C. Also must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX*16. On entry, ALPHA is the scalar alpha. That's it, that's the girl.
  • A β€” A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is m when SIDE = 'L' or 'l' and is n otherwise.

Before entry with SIDE = 'L' or 'l', the m by m part of the array A must contain the symmetric matrix, such that when UPLO = 'U' or 'u', the leading m by m upper triangular part of the array A must contain the upper triangular part of the symmetric matrix, and the strictly lower triangular part of A is not referenced. And when UPLO = 'L' or 'l', the leading m by m lower triangular part of the array A must contain the lower triangular part of the symmetric matrix, and the strictly upper triangular part of A is not referenced.

Before entry with SIDE = 'R' or 'r', the n by n part of the array A must contain the symmetric matrix, such that when UPLO = 'U' or 'u', the leading n by n upper triangular part of the array A must contain the upper triangular part of the symmetric matrix, and the strictly lower triangular part of A is not referenced. And when UPLO = 'L' or 'l', the leading n by n lower triangular part of the array A must contain the lower triangular part of the symmetric matrix, and the strictly upper triangular part of A is not referenced.

  • 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 ), otherwise LDA must be at least max( 1, n ). πŸ‘‘
  • 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. Standard.
  • 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 ).
  • BETA β€” BETA is COMPLEX*16. On entry, BETA is the scalar beta. And here's the fun part β€” when BETA is supplied as zero, then C need not be set on input. Free real estate. πŸ™ˆ
  • C β€” C is COMPLEX*16 array, dimension ( LDC, N ). Before entry, the leading m 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 array C is overwritten by the m by n updated matrix. She's changed. She's grown. πŸ¦‹
  • LDC β€” LDC is INTEGER. On entry, LDC is the first dimension of C as declared in the calling (sub)program. LDC 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.

πŸŽ€ zsyr2k πŸŽ€

SYMMETRIC RANK 2K UPDATE, COMPLEX*16 EDITION

subroutine zsyr2k (character UPLO, character TRANS, 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)

ZSYR2K

πŸ’– Purpose

ZSYR2K performs one of the symmetric rank 2k operations:

C := alpha*A*B**T + alpha*B*A**T + beta*C,

or

C := alpha*A**T*B + alpha*B**T*A + beta*C,

where alpha and beta are scalars, C is an n by n symmetric matrix, and A and B are n by k matrices in the first case, and k by n matrices in the second case. Two whole terms, bestie. She's doing the most and we love her for it. ✨

✨ Parameters

  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO says whether the upper or the lower triangular part of the array C is to be referenced:
UPLO = 'U' or 'u'   Only the upper triangular part of C
                    is to be referenced.

UPLO = 'L' or 'l'   Only the lower triangular part of C
                    is to be referenced.
  • TRANS β€” TRANS is CHARACTER*1. On entry, TRANS picks which operation is happening:
TRANS = 'N' or 'n'    C := alpha*A*B**T + alpha*B*A**T +
                           beta*C.

TRANS = 'T' or 't'    C := alpha*A**T*B + alpha*B**T*A +
                           beta*C.
  • N β€” N is INTEGER. On entry, N is the order of matrix C. N must be at least zero. 🫢
  • K β€” K is INTEGER. On entry with TRANS = 'N' or 'n', K is the number of columns of the matrices A and B, and on entry with TRANS = 'T' or 't', K is the number of rows of the matrices A and B. K must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX*16. On entry, ALPHA is the scalar alpha.
  • A β€” A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is k when TRANS = 'N' or 'n', and is n otherwise. Before entry with TRANS = 'N' or 'n', the leading n by k part of the array A must contain the matrix A, otherwise the leading k by n part of the array A must contain the matrix A.
  • LDA β€” LDA is INTEGER. On entry, LDA is the first dimension of A as declared in the calling (sub)program. When TRANS = '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 k when TRANS = 'N' or 'n', and is n otherwise. Before entry with TRANS = 'N' or 'n', the leading n by k part of the array B must contain the matrix B, otherwise the leading k by n part of the array B must contain the matrix B.
  • LDB β€” LDB is INTEGER. On entry, LDB is the first dimension of B as declared in the calling (sub)program. When TRANS = 'N' or 'n' then LDB must be at least max( 1, n ), otherwise LDB must be at least max( 1, k ).
  • BETA β€” BETA is COMPLEX*16. On entry, BETA is the scalar beta. Just beta. Living her simple life.
  • C β€” C is COMPLEX*16 array, dimension ( LDC, N ).

Before entry with UPLO = 'U' or 'u', the leading n by n upper triangular part of the array C must contain the upper triangular part of the symmetric matrix, and the strictly lower triangular part of C is not referenced. On exit, the upper triangular part of the array C is overwritten by the upper triangular part of the updated matrix.

Before entry with UPLO = 'L' or 'l', the leading n by n lower triangular part of the array C must contain the lower triangular part of the symmetric matrix, and the strictly upper triangular part of C is not referenced. On exit, the lower triangular part of the array C is overwritten by the lower triangular part of the updated matrix.

Only half of her gets touched, and honestly? That's the whole point. Symmetry ate. πŸ’…

  • LDC β€” LDC is INTEGER. On entry, LDC is the first dimension of C as declared in the calling (sub)program. LDC must be at least max( 1, n ).

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

🌸 zsyrk β€” the symmetric rank-k moment 🌸

subroutine zsyrk (character UPLO, character TRANS, integer N, integer K,
    complex*16 ALPHA, complex*16, dimension(lda,*) A, integer LDA,
    complex*16 BETA, complex*16, dimension(ldc,*) C, integer LDC)

Purpose

Okay bestie, ZSYRK does one of the symmetric rank k operations, and you're getting exactly one of these two:

C := alpha*A*A**T + beta*C,

or

C := alpha*A**T*A + beta*C,

where alpha and beta are scalars, C is an n by n symmetric matrix, and A is an n by k matrix in the first case and a k by n matrix in the second case. Slay. πŸ’…

Parameters

  • UPLO β€” CHARACTER*1. On entry, UPLO specifies whether the upper or lower triangular part of the array C is to be referenced, like so:
    • UPLO = 'U' or 'u' β€” only the upper triangular part of C is to be referenced.
    • UPLO = 'L' or 'l' β€” only the lower triangular part of C is to be referenced.
  • TRANS β€” CHARACTER*1. On entry, TRANS specifies the operation to be performed, as follows:
    • TRANS = 'N' or 'n' β€” C := alpha*A*A**T + beta*C.
    • TRANS = 'T' or 't' β€” C := alpha*A**T*A + beta*C.
  • N β€” INTEGER. On entry, N specifies the order of the matrix C. N must be at least zero. (no negative orders, we don't do that here 🫢)
  • K β€” INTEGER. On entry with TRANS = 'N' or 'n', K specifies the number of columns of the matrix A; and on entry with TRANS = 'T' or 't', K specifies the number of rows of the matrix A. K must be at least zero.
  • ALPHA β€” COMPLEX*16. On entry, ALPHA specifies the scalar alpha. It's giving scalar energy. ✨
  • A β€” COMPLEX*16 array, dimension ( LDA, ka ), where ka is k when TRANS = 'N' or 'n', and is n otherwise. Before entry with TRANS = 'N' or 'n', the leading n by k part of the array A must contain the matrix A; otherwise the leading k by n part of the array A must contain the matrix A.
  • LDA β€” INTEGER. On entry, LDA specifies the first dimension of A as declared in the calling (sub) program. When TRANS = 'N' or 'n' then LDA must be at least max( 1, n ); otherwise LDA must be at least max( 1, k ).
  • BETA β€” COMPLEX*16. On entry, BETA specifies the scalar beta. Bestie, the other scalar. πŸ’–
  • C β€” COMPLEX*16 array, dimension ( LDC, N ).
    • Before entry with UPLO = 'U' or 'u', the leading n by n upper triangular part of the array C must contain the upper triangular part of the symmetric matrix, and the strictly lower triangular part of C is not referenced. On exit, the upper triangular part of the array C is overwritten by the upper triangular part of the updated matrix.
    • Before entry with UPLO = 'L' or 'l', the leading n by n lower triangular part of the array C must contain the lower triangular part of the symmetric matrix, and the strictly upper triangular part of C is not referenced. On exit, the lower triangular part of the array C is overwritten by the lower triangular part of the updated matrix.
  • LDC β€” 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

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

πŸ¦‹ ztrmm β€” triangular matrix-matrix multiply, main character edition πŸ¦‹

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)

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.

Like, three whole options for op( A ). Choices are iconic. πŸ‘‘

Parameters

  • SIDE β€” 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 β€” 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 β€” 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 β€” 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 β€” INTEGER. On entry, M specifies the number of rows of B. M must be at least zero.
  • N β€” INTEGER. On entry, N specifies the number of columns of B. N must be at least zero.
  • ALPHA β€” 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. Free real estate, lowkey. πŸ’€
  • 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 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 β€” 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.
  • LDB β€” 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.

πŸŽ€ ztrsm β€” triangular solve, she's solving for X πŸŽ€

subroutine ztrsm (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)

Purpose

ZTRSM solves one of the matrix equations

op( A )*X = alpha*B,   or   X*op( A ) = alpha*B,

where alpha is a scalar, X and B are m by n matrices, 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.

The matrix X is overwritten on B. So like, B walked in and X walked out. Periodt. πŸ’…

Parameters

  • SIDE β€” CHARACTER*1. On entry, SIDE specifies whether op( A ) appears on the left or right of X, as follows:
    • SIDE = 'L' or 'l' β€” op( A )*X = alpha*B.
    • SIDE = 'R' or 'r' β€” X*op( A ) = alpha*B.
  • UPLO β€” 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 β€” 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

okay so bestie, we're in the home stretch of these parameters πŸ’… let's finish strong ✨

  • 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 is INTEGER β€” On entry, M specifies the number of rows of B. M must be at least zero.
  • N is INTEGER β€” On entry, N specifies the number of columns of B. N must be at least zero.
  • 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.
  • A is COMPLEX*16 array, dimension ( LDA, k ), where k is m when SIDE = 'L' or 'l' and k 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 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 is COMPLEX*16 array, dimension ( LDB, N ) β€” Before entry, the leading m by n part of the array B must contain the right-hand side matrix B, and on exit is overwritten by the solution matrix X.
  • 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.

✨ Author ✨

Generated automatically by Doxygen for LAPACK from the source code.


and that's a wrap on the whole page, bestie! this iconic piece of LAPACK lore is Version 3.11.0, dated Sun Nov 27 2022, and it's the complex16_blas_level3(3) man page. stay slay, stay linear algebra-ing πŸ’–βœ¨πŸ«Ά

πŸ“¦ where this page comes from