complex_blas_level3(3)

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

🌸 complex_blas_level3 🌸

okay bestie, gather round β€” this is the manual page for complex_blas_level3, which lives in section 3 of the manual. It's the ✨complex✨ LEVEL 3 BLAS family, and honestly? It's giving math girlboss energy. Let's get into it πŸ’…


✨ NAME ✨

complex_blas_level3 β€” complex πŸ¦‹


πŸŽ€ SYNOPSIS πŸŽ€

🌈 Functions 🌈

  • subroutine cgemm (TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) β€” CGEMM πŸ‘‘
  • subroutine chemm (SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC) β€” CHEMM πŸ’–
  • subroutine cher2k (UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) β€” CHER2K 🌸
  • subroutine cherk (UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC) β€” CHERK ✨
  • subroutine csymm (SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC) β€” CSYMM πŸ¦‹
  • subroutine csyr2k (UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) β€” CSYR2K πŸŽ€
  • subroutine csyrk (UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC) β€” CSYRK πŸ’œ
  • subroutine ctrmm (SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB) β€” CTRMM πŸ”₯
  • subroutine ctrsm (SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB) β€” CTRSM πŸ’€

πŸ’– Detailed Description πŸ’–

This is the group of complex LEVEL 3 BLAS routines. That's it, that's the whole vibe check β€” nine routines, all complex, all level 3. Periodt.


🧚 Function Documentation 🧚

πŸ’… subroutine cgemm πŸ’…

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

CGEMM

πŸ‘‘ Purpose πŸ‘‘

CGEMM 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. Literally the whole main character matrix multiply.

🌸 Parameters 🌸

  • 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.
  • M β€” M is 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 β€” N is 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 β€” 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. On entry, ALPHA specifies the scalar alpha.
  • A β€” A is COMPLEX 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. (she shape-shifts depending on TRANSA, icon behaviour ngl)
  • 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, m ), otherwise LDA must be at least max( 1, k ).
  • B β€” B is COMPLEX 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. On entry, BETA specifies the scalar beta. When BETA is supplied as zero then C need not be set on input. (free pass on the input, we love a shortcut πŸ’…)
  • C β€” C is COMPLEX 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 β€” 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.

1989 and still slaying, no cap.


πŸ’– subroutine chemm πŸ’–

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

CHEMM

πŸ‘‘ Purpose πŸ‘‘

CHEMM 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. hermitian queen stays hermitian, we just multiply around her πŸ’…

🌸 Parameters 🌸

  • SIDE β€” SIDE is 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 β€” UPLO is 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 β€” M is INTEGER. On entry, M specifies the number of rows of the matrix C. M must be at least zero.
  • N β€” N is INTEGER. On entry, N specifies the number of columns of the matrix C. N must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA specifies the scalar alpha.
  • A β€” A is COMPLEX 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. (she's imaginary-free on the diagonal by default, don't worry about it ✨)
  • 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 ), otherwise 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.
  • 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 ).
  • BETA β€” BETA is COMPLEX. On entry, BETA specifies the scalar beta. When BETA is supplied as zero then C need not be set on input.
  • C β€” C is COMPLEX 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

…and that's exactly where this part runs out β€” the rest of LDC and everything after it is waiting for you in the next part, bestie 🫢

  • LDC is INTEGER β€” bestie, on entry, LDC is the first dimension of C exactly as you declared it back in the calling (sub) program. And it has to be at least max( 1, m ). that's the vibe check, no exceptions. πŸ’…

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 cher2k (character UPLO, character TRANS, integer N, integer K, complex ALPHA, complex, dimension(lda,) A, integer LDA, complex, dimension(ldb,) B, integer LDB, real BETA, complex, dimension(ldc,*) C, integer LDC)

CHER2K πŸ’– the hermitian rank-2k glow-up routine.

Purpose:

okay so CHER2K does one of these two hermitian rank 2k operations, and it's giving main character energy:

   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 tells us whether the upper or lower triangular part of the array C is getting referenced, like this:
    • 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 says which operation we're performing, bestie:
    • 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 is the order of the matrix C. And N must be at least zero. zero is the floor, periodt. 🫢
  • 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 = 'C' or 'c', K is the number of rows of the matrices A and B. K must be at least zero too. πŸ’€
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA is the scalar alpha.
  • A β€” A is COMPLEX 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 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 REAL. On entry, BETA is the scalar beta. (yes bestie, it's real β€” we said that. πŸ’…)
  • C β€” C is COMPLEX 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 is the first dimension of C as declared in the calling (sub) program. LDC must be at least max( 1, n ). and that's on periodt. πŸ‘‘

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 REAL( C(J,J) ) when BETA = 1.
   Ed Anderson, Cray Research Inc.

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

CHERK πŸ’– the hermitian rank-k icon. no B matrix here, we're keeping it simple.

Purpose:

CHERK performs one of these hermitian rank k operations, and it ate:

   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 says whether the upper or lower triangular part of the array C is getting 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 β€” TRANS is CHARACTER*1. On entry, TRANS picks the operation, bestie:
    • 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 is the order of the 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 matrix A. And on entry with TRANS = 'C' or 'c', K is the number of rows of the matrix A. K must be at least zero. πŸ“
  • ALPHA β€” ALPHA is REAL. On entry, ALPHA is the scalar alpha.
  • A β€” A is COMPLEX 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 ). πŸ’œ
  • BETA β€” BETA is REAL. On entry, BETA is the scalar beta.
  • C β€” C is COMPLEX 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 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.

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


πŸ¦‹ csymm

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

CSYMM

✨ Purpose

okay so bestie, CSYMM does one of these two matrix-matrix operations, your pick:

   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. πŸ’…

🌸 Parameters

  • SIDE β€” SIDE is CHARACTER*1. on entry, SIDE says whether the symmetric matrix A shows up on the left or the right in the operation, like this:
    • 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 says whether the upper or lower triangular part of the symmetric matrix A is the part being referenced, like this:
    • 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 says how many rows the matrix C has. M has to be at least zero. no negative row counts, that's not the vibe πŸ™ˆ
  • N β€” N is INTEGER. on entry, N says how many columns the matrix C has. N has to be at least zero.
  • ALPHA β€” ALPHA is COMPLEX. on entry, ALPHA is literally just the scalar alpha. iconic, no notes.
  • A β€” A is a COMPLEX array, dimension ( LDA, ka ), where ka is m when SIDE = 'L' or 'l' and is n otherwise. so here's the tea πŸ‘‘:
    • 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 says 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 a COMPLEX array, dimension ( LDB, N ). before entry, the leading m by n part of the array B must contain the matrix B. 🫢
  • LDB β€” LDB is INTEGER. on entry, LDB says the first dimension of B as declared in the calling (sub) program. LDB must be at least max( 1, m ).
  • BETA β€” BETA is COMPLEX. on entry, BETA is the scalar beta. when BETA is supplied as zero then C need not be set on input β€” free pass, bestie, take it πŸ’€
  • C β€” C is a COMPLEX 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. so yeah she does get rewritten, don't be shocked ✨
  • LDC β€” LDC is INTEGER. on entry, LDC says 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. periodt.

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

🧚 csyr2k

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

CSYR2K

✨ Purpose

bestie, CSYR2K 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 for the price of one, we love a 2k moment πŸ”₯

🌸 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, like this:
    • 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, like this:
    • 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 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 = 'T' or 't', K specifies the number of rows of the matrices A and B. K must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX. on entry, ALPHA specifies the scalar alpha. slay.
  • A β€” A is a COMPLEX 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 a COMPLEX 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 ).
  • BETA β€” BETA is COMPLEX. on entry, BETA specifies the scalar beta.
  • C β€” C is a COMPLEX array, dimension ( LDC, N ). this one's got ✨rules✨, so listen up:
    • 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 β€” 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. yep, that's the whole note. πŸ’…

             -- 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 csyrk πŸ’…

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

CSYRK ✨

🌸 Purpose 🌸

okay so CSYRK does one of the symmetric rank k operations, bestie:

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. no cap. πŸ’–

πŸŽ€ Parameters πŸŽ€

  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO tells us whether the upper or lower triangular part of the array C is the one getting referenced, like:
    • 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 says which operation we're doing, and it's giving:
    • TRANS = 'N' or 'n' β€” C := alpha*A*A**T + beta*C.
    • TRANS = 'T' or 't' β€” C := alpha*A**T*A + beta*C.
  • N β€” N is INTEGER. On entry, N is the order of the matrix C. N must be at least zero. periodt.
  • K β€” K is INTEGER. On entry with TRANS = 'N' or 'n', K is the number of columns of the matrix A, and on entry with TRANS = 'T' or 't', K is the number of rows of the matrix A. K must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA is the scalar alpha. πŸ’«
  • A β€” A is COMPLEX 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 ).
  • BETA β€” BETA is COMPLEX. On entry, BETA is the scalar beta. πŸ“
  • C β€” C is COMPLEX 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 β€” 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. iykyk.

             -- 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 ctrmm ✨

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 🌸

CTRMM 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 β€” SIDE is CHARACTER*1. On entry, SIDE says whether op( A ) multiplies B from the left or right, like:
    • 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 says whether the matrix A is 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 says what form of op( A ) is being 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.
  • DIAG β€” DIAG is 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 β€” M is INTEGER. On entry, M is the number of rows of B. M must be at least zero.
  • N β€” N is INTEGER. On entry, N is the number of columns of B. N must be at least zero.
  • ALPHA β€” ALPHA is COMPLEX. On entry, ALPHA is the scalar alpha. When alpha is zero then A is not referenced and B need not be set before entry. slay, free real estate πŸ’…
  • 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. 😭 iconic behavior honestly
  • 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 ).
  • 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. πŸ¦‹
  • 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.

πŸŽ€ subroutine ctrsm πŸŽ€

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

CTRSM 🌈

🌸 Purpose 🌸

CTRSM 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 heads up bestie, B is not surviving this πŸ’€

πŸŽ€ Parameters πŸŽ€

  • SIDE β€” SIDE is CHARACTER*1. On entry, SIDE says whether op( A ) appears on the left or right of X, like:
    • SIDE = 'L' or 'l' β€” op( A )*X = alpha*B.
    • SIDE = 'R' or 'r' β€” X*op( A ) = alpha*B.
  • UPLO β€” UPLO is CHARACTER*1. On entry, UPLO says whether the matrix A is 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 says what form of op( A ) is being 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.
  • DIAG

DIAG

DIAG is CHARACTER*1

On entry, DIAG specifies whether or not A is unit triangular, and honestly? It’s giving options:

  • DIAG = 'U' or 'u' β€” A is assumed to be unit triangular. (Like, the diagonal is lowkey just 1.0 energy. ✨)
  • DIAG = 'N' or 'n' β€” A is not assumed to be unit triangular. (So you actually have to look at the diagonal. No shortcuts. πŸ’…)

M

M is INTEGER

On entry, M specifies the number of rows of B. M must be at least zero. (Negative rows? Not on this campus. 🚫)

N

N is INTEGER

On entry, N specifies the number of columns of B. N must be at least zero. (Same vibe, bestie. 🫢)

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. (Not me ignoring A and B entirely when alpha is 0. It’s called efficiency, look it up. πŸ’…)

A

A is COMPLEX 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. (So don’t even worry about setting them. They’re just 1.0 coded in. πŸ™ˆ)

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 ). (Respect the dimension, okay? It’s not a suggestion. πŸ‘‘)

B

B is COMPLEX 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. (So B walks in, X walks out. Character development. πŸ’…)

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 ). (Again: at least. No tiny LDB energy. πŸ’€)

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 the whole vibe, bestie. This masterpiece is from LAPACK version 3.11.0, dated Sun Nov 27 2022, and it lives at complex_blas_level3(3). Slay. πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from