ZHBMV(3)

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

πŸ’… NAME

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/BLAS/SRC/zhbmv.f β€” bestie, this is the source file for ZHBMV, and we're reading it through the Library Functions Manual. Yes the path is that long, no we're not apologising for it 🫢


✨ SYNOPSIS

Functions/Subroutines

  • subroutine ZHBMV (uplo, n, k, alpha, a, lda, x, incx, beta, y, incy) β€” the whole vibe check in one line, honestly
    • ZHBMV

πŸŽ€ 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 iconic, she's a Level 2 BLAS routine, and she multiplies a hermitian band matrix by a vector, periodt πŸ’…

Purpose:

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

!>
!> 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 it, that's the whole function. y gets the glow-up: scaled by beta, plus alpha times A times x. No cap. ✨

Parameters

UPLO

!>          UPLO is CHARACTER*1
!>           On entry, UPLO specifies whether the upper or lower
!>           triangular part of the band matrix A is being supplied as
!>           follows:
!>
!>              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.
!>

Lowkey the most important flag β€” tell her which triangle of A you're handing over. Uppercase or lowercase, she does not care, she slays either way 🌸

N

!>          N is INTEGER
!>           On entry, N specifies the order of the matrix A.
!>           N must be at least zero.
!>

The order of A. Must be at least zero. No negative girlies allowed πŸ™…β€β™€οΈ

K

!>          K is INTEGER
!>           On entry, K specifies the number of super-diagonals of the
!>           matrix A. K must satisfy  0 .le. K.
!>

Number of super-diagonals. Constraint is 0 .le. K β€” written in vintage Fortran notation, but bestie, it just means K is zero or more πŸ’€

ALPHA

!>          ALPHA is COMPLEX*16
!>           On entry, ALPHA specifies the scalar alpha.
!>

The scalar alpha. She's a COMPLEX*16. She's main character energy.

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.
!>           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.
!>

This is the big one, so let's break it down 🧚

  • Dimension is ( LDA, N ).
  • With UPLO = 'U' or 'u': the leading ( k + 1 ) by n part holds the upper triangular band part, column by column. Leading diagonal lives in row ( k + 1 ), first super-diagonal starts at position 2 in row k, and so on. The top left k by k triangle of A is not referenced.
  • With UPLO = 'L' or 'l': the leading ( k + 1 ) by n part holds the lower triangular band part, column by column. Leading diagonal lives in row 1, first sub-diagonal starts at position 1 in row 2, and so on. The bottom right k by k triangle of A is not referenced.

Transfer the upper part from full storage to band storage like this:

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

And the lower part, same energy, different loops:

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
Heads up bestie 🌟 β€” the imaginary parts of the diagonal elements need not be set, and are assumed to be zero. So don't stress about them, she's not checking.

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 ).
!>

First dimension of A as declared in the calling (sub) program. Must be at least ( k + 1 ). Do not skimp on LDA, 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.
!>

Vector x, COMPLEX*16, dimension at least ( 1 + ( n - 1 )*abs( INCX ) ). Fill her in before entry πŸ¦‹

INCX

!>          INCX is INTEGER
!>           On entry, INCX specifies the increment for the elements of
!>           X. INCX must not be zero.
!>

Increment for the elements of X. Must not be zero β€” that's a hard no πŸ”₯

BETA

!>          BETA is COMPLEX*16
!>           On entry, BETA specifies the scalar beta.
!>

The scalar beta. Also COMPLEX*16. Also iconic.

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.
!>

Vector y, dimension at least ( 1 + ( n - 1 )*abs( INCY ) ). Pre-entry: contains y. Post-exit: overwritten by the updated y. She came in as one thing and left as another, that's the transformation arc πŸ’–

INCY

!>          INCY is INTEGER
!>           On entry, INCY specifies the increment for the elements of
!>           Y. INCY must not be zero.
!>

Increment for Y. Also must not be zero. Same rule, same consequences 🚫

Author

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

Shoutout to the whole committee, we stan a collaborative effort πŸ‘‘

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.
!>

Some lore for you πŸ“œ β€” Level 2 BLAS routine. The vector and matrix arguments are not referenced when N = 0, or M = 0. 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 queens, honestly 🌈

Definition at line 186 of file zhbmv.f.


πŸ“ Author

Generated automatically by Doxygen for LAPACK from the source code. (Not a human, just a very diligent little robot πŸŽ€)


Later, bestie πŸ’œ β€” this page came to you from LAPACK, Version 3.12.0, and it lives at /home/abui...SRC/zhbmv.f(3). Go forth and multiply your hermitian band matrices, mwah πŸ’‹

πŸ“¦ where this page comes from