8#ifndef model_BilinearForm_H_
9#define model_BilinearForm_H_
21 template <
typename T1,
typename T2>
25 static_assert(std::is_same<typename T1::TrialFunctionType,typename T2::TrialFunctionType>::value,
"YOU ARE CREATING A BilinearForm OF DIFFERENT TrialFunction TYPES.");
26 static_assert(T1::rows==T2::rows,
"YOU ARE CREATING A BilinearForm BETWEEN A TrialExpression AND A TestExpression WITH DIFFERENT NUMBER OF ROWS");
43 const std::shared_ptr<TestExpression<T1>>
testExpr;
44 const std::shared_ptr<TrialExpressionType>
trialExpr;
50 throw std::invalid_argument(
"Null FEM expression operand.");
59 throw std::runtime_error(
"Cannot assemble expressions from different FEM field instances.");
71 template<
class T1,
class T2, std::enable_if_t<std::is_base_of_v<TrialExpressionBase<T2>,T2>,
int> = 0>
74 return std::make_shared<BilinearForm<T1,T2>>(
t,
e);
final point of the source segment t
auto operator,(const std::shared_ptr< TestExpression< T1 > > &t, const std::shared_ptr< T2 > &e)
TestExpression< TrialExpressionType > TestExpressionType