## MB01MD

### Matrix-vector operation alpha*A*x + beta*y, with A a skew-symmetric matrix

[Specification] [Arguments] [Method] [References] [Comments] [Example]

Purpose

      To perform the matrix-vector operation

         y := alpha*A*x + beta*y,

      where alpha and beta are scalars, x and y are vectors of length
      n and A is an n-by-n skew-symmetric matrix.

      This is a modified version of the vanilla implemented BLAS
      routine DSYMV written by Jack Dongarra, Jeremy Du Croz,
      Sven Hammarling, and Richard Hanson.

Specification

          SUBROUTINE MB01MD( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y,
         $                   INCY )
    C     .. Scalar Arguments ..
          DOUBLE PRECISION   ALPHA, BETA
          INTEGER            INCX, INCY, LDA, N
          CHARACTER          UPLO
    C     .. Array Arguments ..
          DOUBLE PRECISION   A(LDA,*), X(*), Y(*)

Arguments

Mode Parameters

      UPLO    CHARACTER*1
              Specifies whether the upper or lower triangular part of
              the array A is to be referenced as follows:
              = 'U':  only the strictly upper triangular part of A is to
                      be referenced;
              = 'L':  only the strictly lower triangular part of A is to
                      be referenced.

Input/Output Parameters

      N       (input) INTEGER
              The order of the matrix A.  N >= 0.

      ALPHA   (input) DOUBLE PRECISION
              The scalar alpha. If alpha is zero the array A is not
              referenced.

      A       (input) DOUBLE PRECISION array, dimension (LDA,N)
              On entry with UPLO = 'U', the leading N-by-N part of this
              array must contain the strictly upper triangular part of
              the matrix A. The lower triangular part of this array is
              not referenced.
              On entry with UPLO = 'L', the leading N-by-N part of this
              array must contain the strictly lower triangular part of
              the matrix A. The upper triangular part of this array is
              not referenced.

      LDA     INTEGER
              The leading dimension of the array A.  LDA >= MAX(1,N)

      X       (input) DOUBLE PRECISION array, dimension
              ( 1 + ( N - 1 )*abs( INCX ) ).
              On entry, elements 1, INCX+1, .., ( N - 1 )*INCX + 1 of
              this array must contain the elements of the vector X.

      INCX    (input) INTEGER
              The increment for the elements of X. IF INCX < 0 then the
              elements of X are accessed in reversed order.  INCX <> 0.

      BETA    (input) DOUBLE PRECISION
              The scalar beta. If beta is zero then Y need not be set on
              input.

      Y       (input/output) DOUBLE PRECISION array, dimension
              ( 1 + ( N - 1 )*abs( INCY ) ).
              On entry, elements 1, INCY+1, .., ( N - 1 )*INCY + 1 of
              this array must contain the elements of the vector Y.
              On exit, elements 1, INCY+1, .., ( N - 1 )*INCY + 1 of
              this array contain the updated elements of the vector Y.

      INCY    (input) INTEGER
              The increment for the elements of Y. IF INCY < 0 then the
              elements of Y are accessed in reversed order.  INCY <> 0.

Numerical Aspects

      Though being almost identical with the vanilla implementation
      of the BLAS routine DSYMV the performance of this routine could
      be significantly lower in the case of vendor supplied, highly
      optimized BLAS.

Further Comments

      None

Example

Program Text

      None

Program Data

      None

Program Results

      None

Return to Supporting Routines index