10#ifndef ROOT_Minuit2_LAVector
11#define ROOT_Minuit2_LAVector
28int Mndaxpy(
unsigned int,
double,
const double *,
int,
double *,
int);
29int Mndscal(
unsigned int,
double,
double *,
int);
30int Mndspmv(
const char *,
unsigned int,
double,
const double *,
const double *,
int,
double,
double *,
int);
45 std::memset(
fData, 0,
size() *
sizeof(
double));
63 std::memcpy(
fData,
v.Data(),
fSize *
sizeof(
double));
72 std::memcpy(
fData,
v.Data(),
fSize *
sizeof(
double));
82 std::memcpy(
fData,
v.Obj().Data(),
fSize *
sizeof(T));
87 template <
class A,
class B,
class T>
92 (*this) =
sum.Obj().A();
93 (*this) +=
sum.Obj().B();
97 template <
class A,
class T>
105 (*this) =
sum.Obj().B();
107 (*this) +=
sum.Obj().A();
112 template <
class A,
class T>
116 (*this) = something.Obj();
117 (*this) *= something.f();
129 Mndspmv(
"U",
fSize, prod.f() * prod.Obj().A().f() * prod.Obj().B().f(), prod.Obj().A().Obj().Data(),
130 prod.Obj().B().Obj().Data(), 1, 0.,
fData, 1);
137 ABSum<
ABObj<
vec,
ABProd<
ABObj<sym, LASymMatrix, T>,
ABObj<vec, LAVector, T>>, T>,
ABObj<vec, LAVector, T>>,
141 (*this) = prod.Obj().B();
142 (*this) += prod.Obj().A();
143 (*this) *=
double(prod.f());
150 assert(
fSize ==
m.size());
158 assert(
fSize ==
m.size());
167 assert(
fSize ==
m.Obj().size());
168 if (
m.Obj().Data() ==
fData) {
177 template <
class A,
class T>
188 Mndspmv(
"U",
fSize, prod.f() * prod.Obj().A().f() * prod.Obj().B().f(), prod.Obj().A().Obj().Data(),
189 prod.Obj().B().Data(), 1, 1.,
fData, 1);
242 assert(
fSize ==
v.Obj().size());
244 std::memcpy(
fData,
v.Obj().Data(),
fSize *
sizeof(
double));
249 template <
class A,
class T>
255 (*this) = something.Obj();
261 (*this) *= something.f();
265 template <
class A,
class B,
class T>
269 (*this) =
sum.Obj().A();
270 (*this) +=
sum.Obj().B();
273 tmp +=
sum.Obj().B();
281 template <
class A,
class T>
285 (*this) =
sum.Obj().B();
286 (*this) +=
sum.Obj().A();
289 tmp +=
sum.Obj().B();
302 fSize = prod.Obj().B().Obj().size();
304 Mndspmv(
"U",
fSize,
double(prod.f() * prod.Obj().A().f() * prod.Obj().B().f()), prod.Obj().A().Obj().Data(),
305 prod.Obj().B().Obj().Data(), 1, 0.,
fData, 1);
309 Mndspmv(
"U",
fSize,
double(prod.f() * prod.Obj().A().f()), prod.Obj().A().Obj().Data(), tmp.
Data(), 1, 0.,
320 ABSum<
ABObj<
vec,
ABProd<
ABObj<sym, LASymMatrix, T>,
ABObj<vec, LAVector, T>>, T>,
ABObj<vec, LAVector, T>>,
324 (*this) = prod.Obj().B();
325 (*this) += prod.Obj().A();
329 tmp += prod.Obj().A();
LAVector & operator=(const ABObj< vec, ABSum< ABObj< vec, A, T >, ABObj< vec, B, T > >, T > &sum)
const double * Data() const
LAVector & operator*=(double scal)
unsigned int size() const
double operator[](unsigned int i) const
double operator()(unsigned int i) const
LAVector & operator+=(const LAVector &m)
LAVector(const ABObj< vec, ABProd< ABObj< sym, LASymMatrix, T >, ABObj< vec, LAVector, T > >, T > &prod)
LAVector(const ABObj< vec, ABObj< vec, A, T >, T > &something)
LAVector & operator=(const ABObj< vec, LAVector, T > &v)
LAVector(const ABObj< vec, ABSum< ABObj< vec, A, T >, ABObj< vec, B, T > >, T > &sum)
double & operator[](unsigned int i)
LAVector & operator=(const ABObj< vec, ABObj< vec, A, T >, T > &something)
LAVector & operator=(const LAVector &v)
LAVector(const ABObj< vec, ABSum< ABObj< vec, LAVector, T >, ABObj< vec, A, T > >, T > &sum)
LAVector & operator+=(const ABObj< vec, A, T > &m)
LAVector(const ABObj< vec, ABSum< ABObj< vec, ABProd< ABObj< sym, LASymMatrix, T >, ABObj< vec, LAVector, T > >, T >, ABObj< vec, LAVector, T > >, T > &prod)
LAVector(const ABObj< vec, LAVector, T > &v)
LAVector & operator-=(const LAVector &m)
LAVector(const LAVector &v)
LAVector & operator=(const ABObj< vec, ABSum< ABObj< vec, ABProd< ABObj< sym, LASymMatrix, T >, ABObj< vec, LAVector, T > >, T >, ABObj< vec, LAVector, T > >, T > &prod)
double & operator()(unsigned int i)
LAVector & operator=(const ABObj< vec, ABSum< ABObj< vec, LAVector, T >, ABObj< vec, A, T > >, T > &sum)
LAVector & operator=(const ABObj< vec, ABProd< ABObj< sym, LASymMatrix, T >, ABObj< vec, LAVector, T > >, T > &prod)
LAVector & operator+=(const ABObj< vec, ABProd< ABObj< sym, LASymMatrix, T >, ABObj< vec, LAVector, T > >, T > &prod)
LAVector & operator+=(const ABObj< vec, LAVector, T > &m)
static StackAllocator & Get()
void * Allocate(size_t nBytes)
int Mndaxpy(unsigned int, double, const double *, int, double *, int)
int Mndscal(unsigned int, double, double *, int)
int Mndspmv(const char *, unsigned int, double, const double *, const double *, int, double, double *, int)
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
static uint64_t sum(uint64_t i)