/home/abui...la_heamv.f(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

πŸŽ€ NAME

okay so bestie, this file is literally /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zla_heamv.f β€” that's the whole name, yes, it's giving "my parents named me after the entire family tree" πŸ’€. It's a page from the Library Functions Manual, and it's all about one iconic little Fortran subroutine. Buckle up. πŸ¦‹


✨ SYNOPSIS

Functions/Subroutines

  • subroutine ZLA_HEAMV (uplo, n, alpha, a, lda, x, incx, beta, y, incy) β€” not me introducing the whole squad at once 😭 this one computes a matrix-vector product using a Hermitian indefinite matrix to calculate error bounds. yes, "error bounds" β€” she's a precision queen, she's behind the scenes, she's the main character of numerical safety fr fr πŸ‘‘

🫢 Function/Subroutine Documentation

subroutine ZLA_HEAMV (integer uplo, integer n, double precision alpha, complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension( * ) x, integer incx, double precision beta, double precision, dimension( * ) y, integer incy)

ZLA_HEAMV computes a matrix-vector product using a Hermitian indefinite matrix to calculate error bounds. that's her whole job description and she ate πŸ’…

subroutine ZLA_HEAMV (integer uplo, integer n, double precision alpha,
    complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension( *
    ) x, integer incx, double precision beta, double precision, dimension( *
    ) y, integer incy)

🌸 Purpose

okay so here's the actual tea, straight from the source comments:

!>
!> ZLA_SYAMV  performs the matrix-vector operation
!>
!>         y := alpha*abs(A)*abs(x) + beta*abs(y),
!>
!> where alpha and beta are scalars, x and y are vectors and A is an
!> n by n symmetric 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.
!>

highkey the whole personality is in that last bit: she nudges tiny values away from zero by (N+1) times the underflow threshold so nothing underflows on her watch 🧚, BUT if an entry is genuinely a zero (meaning every multiplication that built it had at least one zero multiplicand), she leaves it exactly zero. respectful. considerate. iconic. ✨


πŸ’– Parameters

  • UPLO β€” UPLO is INTEGER. on entry, UPLO tells her which triangle of A to even look at:
    • UPLO = BLAS_UPPER β†’ only the upper triangular part of A is to be referenced.
    • UPLO = BLAS_LOWER β†’ only the lower triangular part of A is to be referenced.
    • unchanged on exit, as always πŸŽ€
  • N β€” N is INTEGER. on entry, N specifies the number of columns of the matrix A. N must be at least zero. unchanged on exit. no cap. πŸ¦‹
  • ALPHA β€” ALPHA is DOUBLE PRECISION. on entry, ALPHA specifies the scalar alpha. unchanged on exit. she's your hype coefficient fr 😌
  • A β€” A is COMPLEX*16 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. (yes it says m by n, we're just reporting the vibes as written πŸ™ˆ)
  • LDA β€” LDA is INTEGER. on entry, LDA specifies the first dimension of A as declared in the calling (sub) program. LDA must be at least max( 1, n ). unchanged on exit. don't skimp on your leading dimension bestie, she WILL notice πŸ’€
  • X β€” X is COMPLEX*16 array, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). before entry, the incremented array X must contain the vector x. unchanged on exit. πŸ“
  • INCX β€” INCX is INTEGER. on entry, INCX specifies the increment for the elements of X. INCX must not be zero. unchanged on exit. zero stride is a crime and she will not be part of it πŸ”₯
  • BETA β€” BETA is DOUBLE PRECISION. on entry, BETA specifies the scalar beta. when BETA is supplied as zero then Y need not be set on input. unchanged on exit. cute little shortcut, yw πŸ’œ
  • Y β€” Y is DOUBLE PRECISION array, dimension ( 1 + ( n - 1 )*abs( INCY ) ). 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. yes she's destructive, she's a whole vibe, back up your data πŸ™ˆ
  • INCY β€” INCY is INTEGER. on entry, INCY specifies the increment for the elements of Y. INCY must not be zero. unchanged on exit. same rule, same energy ✨
ok quick reality check bestie: X is COMPLEX*16 but Y is plain DOUBLE PRECISION, and ALPHA/BETA are DOUBLE PRECISION too. that's literally what the page says, don't come for me πŸ’…

πŸ‘‘ Author

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

the whole group project carried itself, we love to see it 🫢


🌈 Further Details

!>
!>  Level 2 Blas routine.
!>
!>  -- Written on 22-October-1986.
!>     Jack Dongarra, Argonne National Lab.
!>     Jeremy Du Croz, Nag Central Office.
!>     Sven Hammarling, Nag Central Office.
!>     Richard Hanson, Sandia National Labs.
!>  -- Modified for the absolute-value product, April 2006
!>     Jason Riedy, UC Berkeley
!>

so she's a Level 2 BLAS routine, originally written on 22-October-1986 by Jack Dongarra (Argonne National Lab.), Jeremy Du Croz (Nag Central Office), Sven Hammarling (Nag Central Office), and Richard Hanson (Sandia National Labs.) β€” vintage!!! πŸ‘‘ and then modified for the absolute-value product in April 2006 by Jason Riedy, UC Berkeley. a glow-up decades in the making, periodt πŸ’…

Definition at line 176 of file zla_heamv.f. go look, she's literally right there ⭐


πŸŽ€ Author

Generated automatically by Doxygen for LAPACK from the source code. not a human, just a very diligent little robot doing its thing πŸ€–πŸ’–


and that's the whole page bestie!! πŸ’œ source/version tea for the sign-off: this is LAPACK, Version 3.12.0, and the page is /home/abui...la_heamv.f(3) β€” go forth and compute those error bounds responsibly, mwah πŸŽ€πŸ¦‹βœ¨

πŸ“¦ where this page comes from