BLAS/SRC/ssyr2k.f(3)

πŸ’– SSYR2K β€” BLAS/SRC/ssyr2k.f πŸ’–

okay so bestie, this is a page straight out of the LAPACK Library Functions Manual, and it's honestly kind of iconic. It's a Level 3 BLAS routine, it does symmetric rank-2k updates, and yes we're gonna go through every single parameter together because that's what friends do 🫢


✨ SYNOPSIS ✨

Functions/Subroutines

  • subroutine ssyr2k (uplo, trans, n, k, alpha, a, lda, b, ldb, beta, c, ldc) β€” SSYR2K, the main character herself πŸ‘‘

🌸 Function/Subroutine Documentation 🌸

the signature, verbatim, no notes πŸ’…

subroutine ssyr2k (character uplo, character trans, integer n, integer k,
    real alpha, real, dimension(lda,*) a, integer lda, real,
    dimension(ldb,*) b, integer ldb, real beta, real, dimension(ldc,*) c,
    integer ldc)

SSYR2K


πŸŽ€ Purpose πŸŽ€

so what does she actually do? SSYR2K performs one of the symmetric rank 2k operations, and here they are in all their glory:

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. that's it, that's the whole vibe 🌈


πŸ’œ 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**T + alpha*B*A**T + beta*C.
    • TRANS = 'T' or 't' β†’ C := alpha*A**T*B + alpha*B**T*A + beta*C.
    • TRANS = 'C' or 'c' β†’ 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. yes bestie, at least zero, we don't do negative orders here πŸ™ˆ
  • 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' or 'C' or 'c', K specifies the number of rows of the matrices A and B. K must be at least zero.
  • ALPHA β€” ALPHA is REAL. On entry, ALPHA specifies the scalar alpha. that's her, the queen of scaling πŸ’…
  • A β€” A is REAL 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 REAL 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. (she's a whole twin situation with A, we love consistency ✨)
  • 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 REAL. On entry, BETA specifies the scalar beta. the other queen of scaling πŸŽ€
  • C β€” C is REAL 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 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.

like, 1989?? they were out here doing symmetric rank-2k updates before I was even a thought. legends, fr fr 🌟


πŸ“ Definition at line 191 of file ssyr2k.f.


πŸ’« Author πŸ’«

Generated automatically by Doxygen for LAPACK from the source code.


ngl the whole thing is a vibe: two triangular halves, one C, and a beta that just sits there scaling whatever you hand her. respect πŸ˜­πŸ’œ

okay bestie that's the whole page, no crumbs left β€” and for the record this beauty is from LAPACK, Version 3.12.0, filed under BLAS/SRC/ssyr2k.f(3). slay, eat, periodt πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from