Contents


NAME

     zhbmv - perform the matrix-vector operation   y := alpha*A*x
     + beta*y

SYNOPSIS

     SUBROUTINE ZHBMV(UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y,
           INCY)

     CHARACTER * 1 UPLO
     DOUBLE COMPLEX ALPHA, BETA
     DOUBLE COMPLEX A(LDA,*), X(*), Y(*)
     INTEGER N, K, LDA, INCX, INCY

     SUBROUTINE ZHBMV_64(UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y,
           INCY)

     CHARACTER * 1 UPLO
     DOUBLE COMPLEX ALPHA, BETA
     DOUBLE COMPLEX A(LDA,*), X(*), Y(*)
     INTEGER*8 N, K, LDA, INCX, INCY

  F95 INTERFACE
     SUBROUTINE HBMV(UPLO, [N], K, 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, K, LDA, INCX, INCY

     SUBROUTINE HBMV_64(UPLO, [N], K, 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, K, LDA, INCX, INCY

  C INTERFACE
     #include <sunperf.h>

     void zhbmv(char uplo, int n, int  k,  doublecomplex  *alpha,
               doublecomplex  *a,  int lda, doublecomplex *x, int
               incx, doublecomplex *beta, doublecomplex  *y,  int
               incy);
     void zhbmv_64(char  uplo,  long  n,  long  k,  doublecomplex
               *alpha,  doublecomplex *a, long lda, doublecomplex
               *x, long incx, doublecomplex *beta,  doublecomplex
               *y, long incy);

PURPOSE

     zhbmv performs the matrix-vector  operation y := alpha*A*x +
     beta*y  where alpha and beta are scalars, x and y are n ele-
     ment vectors and A is an n by n hermitian band matrix,  with
     k super-diagonals.

ARGUMENTS

     UPLO (input)
               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.

               Unchanged on exit.

     N (input)
               On entry, N specifies the order of the  matrix  A.
               N >= 0.  Unchanged on exit.

     K (input)
               On  entry,  K  specifies  the  number  of   super-
               diagonals  of the matrix A. K must satisfy  0 .le.
               K.  Unchanged on exit.

     ALPHA (input)
               On  entry,  ALPHA  specifies  the  scalar   alpha.
               Unchanged on exit.

     A (input)
               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 lead-
               ing 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 lead-
               ing 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 ele-
               ments  need not be set and are assumed to be zero.
               Unchanged on exit.

     LDA (input)
               On entry, LDA specifies the first dimension  of  A
               as declared in the calling (sub) program. LDA >= (
               k + 1 ).  Unchanged on exit.

     X (input)
               ( 1 + ( n - 1 )*abs( INCX ) ).  Before entry,  the
               incremented  array  X  must  contain the vector x.
               Unchanged on exit.

     INCX (input)
               On entry, INCX specifies  the  increment  for  the
               elements  of  X. INCX must not be zero.  Unchanged
               on exit.

     BETA (input)
               On  entry,  BETA  specifies   the   scalar   beta.
               Unchanged on exit.

     Y (input/output)
               ( 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.

     INCY (input)
               On entry, INCY specifies  the  increment  for  the
               elements  of  Y. INCY must not be zero.  Unchanged
               on exit.