HP MLIB User's Guide Vol. 1 7th Ed.
Chapter 3 Basic Matrix Operations 245
Matrix-vector multiply SSBMV/DSBMV/CHBMV/ZHBMV
Upper triangular storage
The upper triangle of A is stored in an array ab with at least kd+1 = 3 rows
and 7 columns as follows:
The asterisks represent elements in the kd-by-kd triangle at the upper left
corner of ab that are not referenced. Thus, if a
ij
is an element within the band of
the upper triangle of A, it is stored in ab(kd+1+i−j,j). Therefore, the columns of
the upper triangle of A are stored in the columns of ab, and the diagonals of the
upper triangle of A are stored in the rows of ab, with the principal diagonal in
row kd+1, the first superdiagonal starting in the second position in row kd, and
so on.
Lower triangular storage
The lower triangle of A is stored in the array ab as follows:
The asterisks represent elements in the kd-by-kd triangle at the lower right
corner of ab that are not referenced. Thus, if a
ij
is an element within the band of
the lower triangle of A, it is stored in ab(1+i−j,j). Therefore, the columns of the
lower triangle of A are stored in the columns of ab, and the diagonals of the
lower triangle of A are stored in the rows of ab, with the principal diagonal in
the first row, the first subdiagonal in the second row, and so on.
Usage VECLIB:
CHARACTER*1 uplo
INTEGER*4 n, kd, ldab, incx, incy
REAL*4 alpha, beta, ab(ldab, n), x(lenx), y(leny)
CALL SSBMV(uplo, n, kd, alpha, ab, ldab, x, incx, beta, y, incy)
CHARACTER*1 uplo
INTEGER*4 n, kd, ldab, incx, incy
REAL*8 alpha, beta, ab(ldab, n), x(lenx), y(leny)
CALL DSBMV(uplo, n, kd, alpha, ab, ldab, x, incx, beta, y, incy)
* * 13 24 35 46 57
*122334455667
11 22 33 44 55 66 77
11 22 33 44 55 66 77
12 23 34 45 56 67 *
13 24 35 46 57 * *