#include "DenseVector.h"
namespace ATC_matrix {
void MultMv(const Matrix<double> &A, const Vector<double> &v, DenseVector<double> &c,
const bool At, double a, double b)
{
static char t[2] = {'N','T'};
char *ta=t+At;
int sA[2] = {A.nRows(), A.nCols()}; int sV[2] = {v.size(), 1};
GCK(A, v, sA[!At]!=sV[0], "MultAB<double>: matrix-vector multiply");
if (c.size() != sA[At])
{
c.resize(sA[At]); c.zero();
}
int *M = sA+At; int *N = sV+1; int *K = sA+!At;
double *pa=A.ptr(), *pv=v.ptr(), *pc=c.ptr();
#ifdef COL_STORAGE
dgemm_(ta, t, M, N, K, &a, pa, sA, pv, sV, &b, pc, M);
#else
dgemm_(t, ta, N, M, K, &a, pv, sV+1, pa, sA+1, &b, pc, N);
#endif
}
}