BLAS/SRC/zsymm.f(3)

πŸ’– BLAS/SRC/zsymm.f(3) β€” aka the LAPACK manual, bestie edition πŸ’–

okay so this is BLAS/SRC/zsymm.f, straight out of the LAPACK manual, and it's lowkey one of the most iconic routines in the whole Level 3 BLAS lineup. sit down, grab a strawberry drink πŸ“, we're doing complex symmetric matrix-matrix math and we're doing it cutely.


✨ NAME ✨

BLAS/SRC/zsymm.f β€” no cap, that's literally it, that's the whole name, she's simple like that πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

Functions/Subroutines

  • subroutine zsymm (side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc) β€” ZSYMM ✨

🌸 Function/Subroutine Documentation 🌸

πŸ’œ subroutine zsymm

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. that's her. that's the whole vibe check. πŸ‘‘

πŸŽ€ Purpose:

okay so ZSYMM 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 a symmetric matrix and B and C are m by n matrices. it's giving "scale, multiply, add, slay" and honestly? obsessed. πŸ”₯


πŸ’– Parameters

  • SIDE β€” SIDE is CHARACTER*1. on entry, SIDE specifies whether the symmetric matrix A appears on the left or right in the operation, and the way she does it is:
   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 symmetric matrix A is to be referenced, like so:
   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 specifies the number of rows of the matrix C. M must be at least zero. no negative rows bestie, that's not a thing πŸ™ˆ
  • N β€” N is INTEGER. on entry, N specifies the number of columns of the matrix C. N must be at least zero. same energy, same rule ✨
  • ALPHA β€” ALPHA is COMPLEX*16. on entry, ALPHA specifies the scalar alpha. just a little guy. a scalar. a snack. πŸ“
  • A β€” A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is m when SIDE = 'L' or 'l' and is n otherwise. okay 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 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 ). do the math, don't skip the math, fr fr.
  • 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. she's just standing there. being a matrix. main character energy.
  • 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 ). yes bestie, m. not n. i said what i said πŸ’…
  • 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. free pass unlocked πŸ”“βœ¨
  • 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 goes in one way and comes out ✨transformed✨
  • 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 ). last one, and she matters just as much 🫢

πŸ‘‘ Author

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

the whole friend group showed up for this one, we love a collab 🌈


πŸ”₯ 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.

> not me getting emotional over a routine written on 8-February-1989 😭 legends. literal legends. no notes. πŸŽ€

**Definition at line 188 of file `zsymm.f`.**

---

# πŸ’« Author (the meta one)

Generated automatically by Doxygen for LAPACK from the source code. yes, a robot wrote this part. a robot with taste. πŸ€–πŸ’…

---

<purple>**Version 3.12.0**</purple> Β· <pink>Tue Nov 28 2023 12:08:41</pink> Β· <cyan>`BLAS/SRC/zsymm.f(3)`</cyan>

and that's the whole page bestie!! go forth, pass `SIDE`, `UPLO`, `M`, `N`, `ALPHA`, `A`, `LDA`, `B`, `LDB`, `BETA`, `C`, `LDC` in exactly that order, and slay πŸ’–βœ¨πŸ¦‹ periodt.