chbmv - perform the matrix-vector operation y := alpha*A*x + beta*y
SUBROUTINE CHBMV( UPLO, N, NDIAG, ALPHA, A, LDA, X, INCX, BETA, Y, * INCY) CHARACTER * 1 UPLO COMPLEX ALPHA, BETA COMPLEX A(LDA,*), X(*), Y(*) INTEGER N, NDIAG, LDA, INCX, INCY
SUBROUTINE CHBMV_64( UPLO, N, NDIAG, ALPHA, A, LDA, X, INCX, BETA, * Y, INCY) CHARACTER * 1 UPLO COMPLEX ALPHA, BETA COMPLEX A(LDA,*), X(*), Y(*) INTEGER*8 N, NDIAG, LDA, INCX, INCY
SUBROUTINE HBMV( UPLO, [N], NDIAG, ALPHA, A, [LDA], X, [INCX], BETA, * Y, [INCY]) CHARACTER(LEN=1) :: UPLO COMPLEX :: ALPHA, BETA COMPLEX, DIMENSION(:) :: X, Y COMPLEX, DIMENSION(:,:) :: A INTEGER :: N, NDIAG, LDA, INCX, INCY
SUBROUTINE HBMV_64( UPLO, [N], NDIAG, ALPHA, A, [LDA], X, [INCX], * BETA, Y, [INCY]) CHARACTER(LEN=1) :: UPLO COMPLEX :: ALPHA, BETA COMPLEX, DIMENSION(:) :: X, Y COMPLEX, DIMENSION(:,:) :: A INTEGER(8) :: N, NDIAG, LDA, INCX, INCY
#include <sunperf.h>
void chbmv(char uplo, int n, int ndiag, complex alpha, complex *a, int lda, complex *x, int incx, complex beta, complex *y, int incy);
void chbmv_64(char uplo, long n, long ndiag, complex alpha, complex *a, long lda, complex *x, long incx, complex beta, complex *y, long incy);
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 ndiag super-diagonals.
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.
Unchanged on exit.
DO 20, J = 1, N M = NDIAG + 1 - J DO 10, I = MAX( 1, J - NDIAG ), J A( M + I, J ) = matrix( I, J ) 10 CONTINUE 20 CONTINUE
Before entry with UPLO = 'L' or 'l', the leading ( ndiag + 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 ndiag by ndiag 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 + NDIAG ) 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. Unchanged on exit.