8#ifndef model_LinearWeakSum_H_
9#define model_LinearWeakSum_H_
19 template <
typename T1,
typename T2>
23 static_assert(std::is_same<typename T1::TrialFunctionType,typename T2::TrialFunctionType>::value,
"YOU ARE SUMMING TrialExpressionBase OF DIFFERENT TRIALFUNCTIONS.");
26 const std::shared_ptr<T1>
op1;
28 const std::shared_ptr<T2>
op2;
34 throw std::invalid_argument(
"Null FEM expression operand.");
40 if(!(
op2->field().sameField(
field())))
42 throw std::runtime_error(
"Cannot assemble expressions from different FEM field instances.");
44 return op1->globalVector()+
op2->globalVector();
54 template<
class T1,
class T2, std::enable_if_t<std::is_base_of_v<LinearWeakExpression<T1>,T1> && std::is_base_of_v<LinearWeakExpression<T2>,T2>,
int> = 0>
55 auto operator+(
const std::shared_ptr<T1>&
x,
const std::shared_ptr<T2>&
y)
57 return std::make_shared<LinearWeakSum<T1,T2>>(
x,
y);
auto operator+(const std::shared_ptr< T1 > &x, const std::shared_ptr< T2 > &y)
T1::TrialFunctionType TrialFunctionType
const auto & field() const
const std::shared_ptr< T1 > op1
LinearWeakSum(std::shared_ptr< T1 > x, std::shared_ptr< T2 > y)
const std::shared_ptr< T2 > op2
Eigen::Matrix< double, Eigen::Dynamic, 1 > globalVector() const