BLAS/SRC/zhbmv.f(3)

πŸ’– BLAS/SRC/zhbmv.f β€” bestie edition πŸ’–

okay so we're diving into zhbmv.f from LAPACK's BLAS folder, and ngl this one is kind of a bop. it's a Level 2 BLAS routine, it does a hermitian band matrix times vector thing, and it's lowkey iconic. let me tell you everything, no gatekeeping. πŸŽ€


✨ SYNOPSIS ✨

Functions/Subroutines

  • subroutine zhbmv (uplo, n, k, alpha, a, lda, x, incx, beta, y, incy)
    • literally just ZHBMV. that's the whole thing. slay.

πŸ’… Function/Subroutine Documentation πŸ’…

subroutine zhbmv (character uplo, integer n, integer k, complex*16 alpha,
    complex*16, dimension(lda,*) a, integer lda, complex*16, dimension(*) x,
    integer incx, complex*16 beta, complex*16, dimension(*) y, integer incy)

ZHBMV β€” she's the moment.

🌸 Purpose

okay so bestie, ZHBMV performs the matrix-vector operation

y := alpha*A*x + beta*y,

where alpha and beta are scalars, x and y are n element vectors, and A is an n by n hermitian band matrix, with k super-diagonals. that's the whole vibe. πŸ¦‹


πŸŽ€ Parameters

  • UPLO β€” UPLO is CHARACTER*1. on entry, UPLO tells us whether the upper or lower triangular part of the band matrix A is being supplied, like this:
    • UPLO = 'U' or 'u' β†’ the upper triangular part of A is being supplied.
    • UPLO = 'L' or 'l' β†’ the lower triangular part of A is being supplied.
  • N β€” N is INTEGER. on entry, N specifies the order of the matrix A. N must be at least zero. (zero is valid, don't come for her.)
  • K β€” K is INTEGER. on entry, K specifies the number of super-diagonals of the matrix A. K must satisfy 0 .le. K. no negative energy allowed. πŸ’€
  • ALPHA β€” ALPHA is COMPLEX*16. on entry, ALPHA specifies the scalar alpha. she's just a scalar, living her life.
  • A β€” A is COMPLEX*16 array, dimension ( LDA, N ).
    • before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) by n part of the array A must contain the upper triangular band part of the hermitian matrix, supplied column by column, with the leading diagonal of the matrix in row ( k + 1 ) of the array, the first super-diagonal starting at position 2 in row k, and so on. the top left k by k triangle of the array A is not referenced β€” she's off-limits, periodt.
    • the following program segment will transfer the upper triangular part of a hermitian band matrix from conventional full matrix storage to band storage:
      DO 20, J = 1, N
         M = K + 1 - J
         DO 10, I = MAX( 1, J - K ), J
            A( M + I, J ) = matrix( I, J )
   10    CONTINUE
   20 CONTINUE
  • before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) by n part of the array A must contain the lower triangular band part of the hermitian matrix, supplied column by column, with the leading diagonal of the matrix in row 1 of the array, the first sub-diagonal starting at position 1 in row 2, and so on. the bottom right k by k triangle of the array A is not referenced.
  • the following program segment will transfer the lower triangular part of a hermitian band matrix from conventional full matrix storage to band storage:
      DO 20, J = 1, N
         M = 1 - J
         DO 10, I = J, MIN( N, J + K )
            A( M + I, J ) = matrix( I, J )
   10    CONTINUE
   20 CONTINUE
  • πŸ“Œ note that the imaginary parts of the diagonal elements need not be set and are assumed to be zero. so like, don't stress about them, they're already zero in spirit.
  • 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 ( k + 1 ).
  • 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.
  • INCX β€” INCX is INTEGER. on entry, INCX specifies the increment for the elements of X. INCX must not be zero. seriously. don't.
  • BETA β€” BETA is COMPLEX*16. on entry, BETA specifies the scalar beta. another queen of a scalar.
  • Y β€” Y is COMPLEX*16 array, dimension at least ( 1 + ( n - 1 )*abs( INCY ) ). before entry, the incremented array Y must contain the vector y. on exit, Y is overwritten by the updated vector y. she got a glow-up, sorry to her old contents. 😭
  • INCY β€” INCY is INTEGER. on entry, INCY specifies the increment for the elements of Y. INCY must not be zero. same rule, bestie.

πŸ‘‘ Author

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

absolute legends, all of them. 🫢


πŸ”₯ Further Details:

  • Level 2 Blas routine.
  • the vector and matrix arguments are not referenced when N = 0, or M = 0.
  • -- 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.

⭐ Definition

defined at line 186 of file zhbmv.f.


🌈 Author (again, because she deserves a second shoutout)

generated automatically by Doxygen for LAPACK from the source code. the robots did this one. πŸ€–βœ¨


okay that's the whole page bestie, you're officially fluent in zhbmv πŸ’– this was Version 3.12.0, dated Tue Nov 28 2023 12:08:41, straight out of BLAS/SRC/zhbmv.f. go forth and multiply your hermitian band matrices. periodt. πŸ’…πŸŽ€πŸ¦‹