# Name

HPL_dgemv y := beta * y + alpha * op(A) * x.

# Synopsis

`#include "hpl.h"`
`void` `HPL_dgemv(` `const enum HPL_ORDER` `ORDER`, `const enum HPL_TRANS` `TRANS`, `const int` `M`, `const int` `N`, `const double` `ALPHA`, `const double *` `A`, `const int` `LDA`, `const double *` `X`, `const int` `INCX`, `const double` `BETA`, `double *` `Y`, `const int` `INCY` `);`

# Description

HPL_dgemv performs one of the matrix-vector operations y := alpha * op( A ) * x + beta * y, where op( X ) is one of op( X ) = X or op( X ) = X^T. where alpha and beta are scalars, x and y are vectors and A is an m by n matrix.

# Arguments

    ORDER   (local input)                 const enum HPL_ORDER
            On entry, ORDER  specifies the storage format of the operands
            as follows:
               ORDER = HplRowMajor,
               ORDER = HplColumnMajor.

    TRANS   (local input)                 const enum HPL_TRANS
            On entry,  TRANS  specifies the  operation to be performed as
            follows:
               TRANS = HplNoTrans y := alpha*A  *x + beta*y,
               TRANS = HplTrans   y := alpha*A^T*x + beta*y.

    M       (local input)                 const int
            On entry,  M  specifies  the number of rows of  the matrix A.
            M must be at least zero.

    N       (local input)                 const int
            On entry, N  specifies the number of columns of the matrix A.
            N must be at least zero.

    ALPHA   (local input)                 const double
            On entry, ALPHA specifies the scalar alpha.   When  ALPHA  is
            supplied as zero then  A and X  need not be set on input.

    A       (local input)                 const double *
            On entry,  A  points  to an array of size equal to or greater
            than LDA * n.  Before  entry, the leading m by n part  of the
            array  A  must contain the matrix coefficients.

    LDA     (local input)                 const int
            On entry,  LDA  specifies  the  leading  dimension  of  A  as
            declared  in  the  calling  (sub) program.  LDA  must  be  at
            least MAX(1,m).

    X       (local input)                 const double *
            On entry,  X  is an incremented array of dimension  at  least
            ( 1 + ( n - 1 ) * abs( INCX ) )  that  contains the vector x.

    INCX    (local input)                 const int
            On entry, INCX specifies the increment for the elements of X.
            INCX must not be zero.

    BETA    (local input)                 const double
            On entry, BETA  specifies the scalar beta.    When  ALPHA  is
            supplied as zero then  Y  need not be set on input.

    Y       (local input/output)          double *
            On entry,  Y  is an incremented array of dimension  at  least
            ( 1 + ( n - 1 ) * abs( INCY ) )  that  contains the vector y.
            Before entry with BETA non-zero, the incremented array Y must
            contain the vector  y.  On exit,  Y  is  overwritten  by  the
            updated vector y.

    INCY    (local input)                 const int
            On entry, INCY specifies the increment for the elements of Y.
            INCY must not be zero.

# Example

`#include "hpl.h"`

    int main(int argc, char *argv[])
    {
       double a[2*2], x[2], y[2];
       a[0] = 1.0; a[1] = 2.0; a[2] = 3.0; a[3] = 3.0;
       x[0] = 2.0; x[1] = 1.0; y[2] = 1.0; y[3] = 2.0;
       HPL_dgemv( HplColumnMajor, HplNoTrans, 2, 2, 2.0,
                  a, 2, x, 1, -1.0, y, 1 );
       printf("y=[%f,%f]\n", y[0], y[1]);
       exit(0); return(0);
    }

# See Also

HPL_dger, HPL_dtrsv.