BLAS/SRC/chbmv.f(3)

πŸ’– NAME πŸ’–

BLAS/SRC/chbmv.f β€” bestie, this is the source file for chbmv, the BLAS Level 2 routine that does a hermitian band matrix–vector multiply and honestly? She's iconic. πŸ’…


✨ SYNOPSIS ✨

πŸ¦‹ Functions/Subroutines

  • subroutine chbmv (uplo, n, k, alpha, a, lda, x, incx, beta, y, incy) β€” CHBMV, the main character herself πŸŽ€

🌸 Function/Subroutine Documentation 🌸

πŸ’« subroutine chbmv (character uplo, integer n, integer k, complex alpha, complex, dimension(lda,*) a, integer lda, complex, dimension(*) x, integer incx, complex beta, complex, dimension(*) y, integer incy)

CHBMV. That's the name, no notes. 🫢

🎯 Purpose

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

So like… it takes your band matrix A, your vector x, scales by alpha, yeets it into y, and adds beta*y on top. Math but make it fashion. ✨

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

Translation: 'U'/'u' means you're handing over the upper triangle, 'L'/'l' means the lower triangle. Pick a side, bestie. πŸ’…

N

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

Order of the matrix A. N has to 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.
!>

The number of super-diagonals of A. Constraint: 0 .le. K. Simple as. 🌸

ALPHA

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

It's the scalar alpha, it's complex, it scales things. Slay. πŸ”₯

A

!>          A is COMPLEX 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.
!>

Okay this one's the big one, so let's break it down 🫢 β€” A is a COMPLEX array with dimension ( LDA, N ), and how you fill it depends on UPLO:

  • With UPLO = 'U' or 'u': the leading ( k + 1 ) by n part of A holds the upper triangular band part of the hermitian matrix, column by column. Leading diagonal of the matrix lives in row ( k + 1 ) of the array, the 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 β€” she's off duty. πŸ’€
  • With UPLO = 'L' or 'l': the leading ( k + 1 ) by n part of A holds the lower triangular band part, column by column. Leading diagonal sits 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 either.
  • And important: the imaginary parts of the diagonal elements don't need to be set β€” they're assumed to be zero. Free pass, no cap. ✨

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. LDA must be at least ( k + 1 ). Respect the minimum, bestie. πŸŽ€

X

!>          X is COMPLEX array, dimension at least
!>           ( 1 + ( n - 1 )*abs( INCX ) ).
!>           Before entry, the incremented array X must contain the
!>           vector x.
!>

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

The increment for the elements of X. And INCX must not be zero β€” like, genuinely, don't. 😭

BETA

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

Scalar beta, complex, that's the whole vibe check. πŸ’œ

Y

!>          Y is COMPLEX 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.
!>

Dimension at least ( 1 + ( n - 1 )*abs( INCY ) ). Before entry it holds the vector y; on exit, Y is overwritten by the updated vector y. She gets a glow-up in place. πŸ‘‘

INCY

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

Increment for the elements of Y. INCY must not be zero. Periodt. πŸ’…

πŸ§‘β€πŸ”¬ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

The whole squad. 🫢

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

Level 2 BLAS routine, bestie. Note that the vector and matrix arguments are not referenced when N = 0, or M = 0 β€” iykyk. πŸ’«

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). Literal legends, we stan. πŸ‘‘

πŸ“ Definition at line 186 of file chbmv.f.


πŸŽ€ Author πŸŽ€

Generated automatically by Doxygen for LAPACK from the source code. Not me writing this by hand, the robots did it. πŸ€–βœ¨


That's the whole page, bestie β€” LAPACK, Version 3.12.0, BLAS/SRC/chbmv.f(3). Go forth and multiply (your matrices). πŸ¦‹πŸ’–πŸŒˆ

πŸ“¦ where this page comes from