SRC/dla_geamv.f(3)

🌸 SRC/dla_geamv.f β€” LAPACK manual, but make it make sense πŸ’…

okay so bestie, welcome to the dla_geamv page from the LAPACK Library Functions Manual. yes it's a Fortran file name as a title, no we're not gonna be weird about it. let's GO ✨


✨ NAME ✨

SRC/dla_geamv.f β€” that's literally the whole name, she's lowkey mysterious like that πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

Functions/Subroutines

subroutine dla_geamv (trans, m, n, alpha, a, lda, x, incx, beta, y,
    incy)
DLA_GEAMV computes a matrix-vector product using a general matrix to calculate error bounds.

like... that's the whole vibe. she multiplies matrices and she's precise about it πŸ”₯


πŸ‘‘ Function/Subroutine Documentation πŸ‘‘

subroutine dla_geamv (integer trans, integer m, integer n, double precision
    alpha, double precision, dimension( lda, * ) a, integer lda, double
    precision, dimension( * ) x, integer incx, double precision beta, double
    precision, dimension( * ) y, integer incy)

DLA_GEAMV computes a matrix-vector product using a general matrix to calculate error bounds. no cap, that's her job description πŸ’–

🌈 Purpose 🌈

!>
!> DLA_GEAMV  performs one of the matrix-vector operations
!>
!>         y := alpha*abs(A)*abs(x) + beta*abs(y),
!>    or   y := alpha*abs(A)**T*abs(x) + beta*abs(y),
!>
!> where alpha and beta are scalars, x and y are vectors and A is an
!> m by n matrix.
!>
!> This function is primarily used in calculating error bounds.
!> To protect against underflow during evaluation, components in
!> the resulting vector are perturbed away from zero by (N+1)
!> times the underflow threshold.  To prevent unnecessarily large
!> errors for block-structure embedded in general matrices,
!>  zero components are not perturbed.  A zero
!> entry is considered  if all multiplications involved
!> in computing that entry have at least one zero multiplicand.
!>

so real talk β€” she does the abs-ified matrix-vector thing, and she's mainly here so the error bounds come out right. to keep underflow from ruining everything, the components in the result get nudged away from zero by (N+1) times the underflow threshold 😭. BUT β€” and this is the iconique part β€” zero components do not get perturbed, because we don't want unnecessarily large errors for block-structure embedded in general matrices. an entry counts as a zero if every single multiplication involved in computing it had at least one zero multiplicand. periodt. 🫢


πŸ’œ Parameters πŸ’œ

  • TRANS β€” TRANS is INTEGER. On entry, TRANS picks the operation, and it's giving three options:
BLAS_NO_TRANS      y := alpha*abs(A)*abs(x) + beta*abs(y)
BLAS_TRANS         y := alpha*abs(A**T)*abs(x) + beta*abs(y)
BLAS_CONJ_TRANS    y := alpha*abs(A**T)*abs(x) + beta*abs(y)

Unchanged on exit. (and yes, BLAS_TRANS and BLAS_CONJ_TRANS give you the exact same thing here β€” that's the actual source, don't come for me πŸ™ˆ)

  • M β€” M is INTEGER. On entry, M is how many rows A has. M must be at least zero. Unchanged on exit.
  • N β€” N is INTEGER. On entry, N is how many columns A has. N must be at least zero. Unchanged on exit.
  • ALPHA β€” ALPHA is DOUBLE PRECISION. On entry, ALPHA is the scalar alpha. Unchanged on exit. slay πŸ’…
  • A β€” A is DOUBLE PRECISION array, dimension ( LDA, n ). Before entry, the leading m by n part of the array A must contain the matrix of coefficients. Unchanged on exit.
  • LDA β€” LDA is INTEGER. On entry, LDA is the first dimension of A as declared in the calling (sub) program. LDA must be at least max( 1, m ). Unchanged on exit.
  • X β€” X is DOUBLE PRECISION array, dimension ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n', and at least ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. Before entry, the incremented array X must contain the vector x. Unchanged on exit.
  • INCX β€” INCX is INTEGER. On entry, INCX is the increment for the elements of X. INCX must not be zero. Unchanged on exit. 🚫 (fr fr, zero is not the move here)
  • BETA β€” BETA is DOUBLE PRECISION. On entry, BETA is the scalar beta. When BETA is supplied as zero then Y need not be set on input. Unchanged on exit. (free real estate 🎁)
  • Y β€” Y is DOUBLE PRECISION array, dimension at least ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n', and at least ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. Before entry with BETA non-zero, the incremented array Y must contain the vector y. On exit, Y is overwritten by the updated vector y. If either m or n is zero, then Y not referenced and the function performs a quick return. πŸƒβ€β™€οΈπŸ’¨
  • INCY β€” INCY is INTEGER. On entry, INCY is the increment for the elements of Y. INCY must not be zero. Unchanged on exit.
Level 2 Blas routine. that's her tax bracket πŸ’€

🧚 Author 🧚

the legends behind this one:

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

Definition at line 174 of file dla_geamv.f. ✨


🌸 Author (again, yes) 🌸

Generated automatically by Doxygen for LAPACK from the source code. so she wasn't even hand-written, she was born this way πŸ’–


and that's the whole page bestie!! πŸŽ€ this was SRC/dla_geamv.f from LAPACK Version 3.12.0 β€” go forth and compute your error bounds, you absolute icon πŸ‘‘πŸ’œ

πŸ“¦ where this page comes from