36 #ifndef EVALUTATION_OUTERPRODUCT_HPP 37 #define EVALUTATION_OUTERPRODUCT_HPP 40 #include <lifev/core/LifeV.hpp> 42 #include <lifev/eta/array/OperationSmallOuterProduct.hpp> 44 #include <lifev/eta/expression/ExpressionOuterProduct.hpp> 46 #include <lifev/core/fem/QuadratureRule.hpp> 51 namespace ExpressionAssembly
63 template <
typename EvaluationLType,
typename EvaluationRType>
64 class EvaluationOuterProduct
73 typedef typename EvaluationLType::return_Type Lreturn_Type;
76 typedef typename EvaluationRType::return_Type Rreturn_Type;
103 EvaluationOuterProduct (
const EvaluationOuterProduct& eval)
104 : M_evaluationL (eval.M_evaluationL),
105 M_evaluationR (eval.M_evaluationR)
109 template<
typename ExpressionL,
typename ExpressionR>
110 explicit EvaluationOuterProduct (
const ExpressionOuterProduct<ExpressionL, ExpressionR>& expression)
111 : M_evaluationL (expression.left() ),
112 M_evaluationR (expression.right() )
116 ~EvaluationOuterProduct()
126 void update (
const UInt& iElement)
128 M_evaluationL.update (iElement);
129 M_evaluationR.update (iElement);
133 static void display (std::ostream& out = std::cout)
135 EvaluationLType::display (out);
136 out <<
" outerProduct ";
137 EvaluationRType::display (out);
147 template<
typename CFEType >
148 void setGlobalCFE (
const CFEType* globalCFE)
150 M_evaluationL.setGlobalCFE (globalCFE);
151 M_evaluationR.setGlobalCFE (globalCFE);
155 template<
typename CFEType >
156 void setTestCFE (
const CFEType* testCFE)
158 M_evaluationL.setTestCFE (testCFE);
159 M_evaluationR.setTestCFE (testCFE);
163 template<
typename CFEType >
164 void setSolutionCFE (
const CFEType* solutionCFE)
166 M_evaluationL.setSolutionCFE (solutionCFE);
167 M_evaluationR.setSolutionCFE (solutionCFE);
173 M_evaluationL.setQuadrature (qr);
174 M_evaluationR.setQuadrature (qr);
184 return_Type value_q (
const UInt& q)
const 186 return M_evaluationL.value_q (q).outerProduct ( M_evaluationR.value_q (q) );
191 return_Type value_qi (
const UInt& q,
const UInt& i)
const 193 return M_evaluationL.value_qi (q, i).outerProduct ( M_evaluationR.value_qi (q, i) );
199 return_Type value_qij (
const UInt& q,
const UInt& i,
const UInt& j)
const 202 return M_evaluationL.value_qij (q, i, j).outerProduct ( M_evaluationR.value_qij (q, i, j) );
213 EvaluationOuterProduct();
218 EvaluationLType M_evaluationL;
219 EvaluationRType M_evaluationR;
223 template<
typename EvaluationLType,
typename EvaluationRType>
224 const flag_Type EvaluationOuterProduct<EvaluationLType, EvaluationRType>::S_globalUpdateFlag
225 = EvaluationLType::S_globalUpdateFlag | EvaluationRType::S_globalUpdateFlag;
227 template<
typename EvaluationLType,
typename EvaluationRType>
228 const flag_Type EvaluationOuterProduct<EvaluationLType, EvaluationRType>::S_testUpdateFlag
229 = EvaluationLType::S_testUpdateFlag | EvaluationRType::S_testUpdateFlag;
231 template<
typename EvaluationLType,
typename EvaluationRType>
232 const flag_Type EvaluationOuterProduct<EvaluationLType, EvaluationRType>::S_solutionUpdateFlag
233 = EvaluationLType::S_solutionUpdateFlag | EvaluationRType::S_solutionUpdateFlag;
uint32_type flag_Type
bit-flag with up to 32 different flags
class OperationSmallOuterProduct Class containing information about the element-wise multiplication p...
void updateInverseJacobian(const UInt &iQuadPt)
QuadratureRule - The basis class for storing and accessing quadrature rules.
uint32_type UInt
generic unsigned integer (used mainly for addressing)