7 #include "GeoGenericFunctions/FunctionDirectProduct.h" 11 FUNCTION_OBJECT_IMP(FunctionDirectProduct)
13 FunctionDirectProduct::FunctionDirectProduct(const AbsFunction *arg1, const AbsFunction *arg2):
16 _m(arg1->dimensionality()),
17 _n(arg2->dimensionality())
21 FunctionDirectProduct::FunctionDirectProduct(
const FunctionDirectProduct & right):
23 _arg1(right._arg1->clone()),
24 _arg2(right._arg2->clone()),
31 FunctionDirectProduct::~FunctionDirectProduct()
38 double FunctionDirectProduct::operator() (
const Argument & a)
const {
39 unsigned int P = a.dimension();
43 throw std::runtime_error(
"FunctionDirectProduct: dimension mismatch");
46 for (
unsigned int i = 0; i<_m;i++) {
49 for (
unsigned int j = 0;j<_n;j++) {
52 return (*_arg1)(x1) * (*_arg2)(x2);
55 unsigned int FunctionDirectProduct::dimensionality()
const {
59 double FunctionDirectProduct::operator ()(
double)
const 61 throw std::runtime_error(
"FunctionDirectProduct: evaluation with scalar argument");
67 Derivative FunctionDirectProduct::partial(
unsigned int index)
const {
68 if (index>=(_m+_n))
throw std::range_error (
"FunctionDirectProduct: partial derivative index out of range");
70 const Derivative & d1=_arg1->partial(index);
71 const AbsFunction & fPrime = d1%(*_arg2);
72 return Derivative(&fPrime);
75 const Derivative &d2=_arg2->partial(index-_m);
76 const AbsFunction & fPrime = (*_arg1)%d2;
77 return Derivative(&fPrime);