zhbmv - perform the matrix-vector operation y := alpha*A*x + beta*y
SUBROUTINE ZHBMV( UPLO, N, NDIAG, ALPHA, A, LDA, X, INCX, BETA, Y, * INCY) CHARACTER * 1 UPLO DOUBLE COMPLEX ALPHA, BETA DOUBLE COMPLEX A(LDA,*), X(*), Y(*) INTEGER N, NDIAG, LDA, INCX, INCY
SUBROUTINE ZHBMV_64( UPLO, N, NDIAG, ALPHA, A, LDA, X, INCX, BETA, * Y, INCY) CHARACTER * 1 UPLO DOUBLE COMPLEX ALPHA, BETA DOUBLE 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(8) :: ALPHA, BETA COMPLEX(8), DIMENSION(:) :: X, Y COMPLEX(8), 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(8) :: ALPHA, BETA COMPLEX(8), DIMENSION(:) :: X, Y COMPLEX(8), DIMENSION(:,:) :: A INTEGER(8) :: N, NDIAG, LDA, INCX, INCY
#include <sunperf.h>
void zhbmv(char uplo, int n, int ndiag, doublecomplex alpha, doublecomplex *a, int lda, doublecomplex *x, int incx, doublecomplex beta, doublecomplex *y, int incy);
void zhbmv_64(char uplo, long n, long ndiag, doublecomplex alpha, doublecomplex *a, long lda, doublecomplex *x, long incx, doublecomplex beta, doublecomplex *y, long incy);
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 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.