9#include <kernel/space/node_functional_base.hpp>
39 static constexpr int max_assigned_dofs = 1;
41 template<
typename Function_>
48 typedef typename Space_::TrafoType TrafoType;
50 typedef typename TrafoEvalType::EvalTraits TrafoEvalTraits;
51 typedef typename TrafoEvalTraits::DataType
DataType;
52 typedef typename TrafoEvalTraits::DomainPointType DomainPointType;
55 typedef typename TrafoEvalType::template ConfigTraits<TrafoTags::img_point>::EvalDataType TrafoEvalData;
57 TrafoEvalType _trafo_eval;
62 _trafo_eval(space.get_trafo())
69 _trafo_eval.prepare(cell_index);
80 return max_assigned_dofs;
83 template<
typename NodeData_,
typename Function_>
84 void operator()(NodeData_& node_data,
const Function_& function)
const
86 static_assert(std::is_base_of<Analytic::Function, Function_>::value,
"invalid function object");
87 static_assert(Function_::can_value,
"function cannot compute values");
90 typedef Analytic::EvalTraits<DataType_, Function_> FuncEvalTraits;
93 typename Function_::template Evaluator<FuncEvalTraits> func_eval(function);
97 TrafoEvalData trafo_data;
101 node_data[0] = func_eval.value(trafo_data.img_point);
114 static constexpr int max_assigned_dofs = (1 << shape_dim_);
116 template<
typename Function_>
123 typedef typename Space_::TrafoType TrafoType;
125 typedef typename TrafoEvalType::EvalTraits TrafoEvalTraits;
126 typedef typename TrafoEvalTraits::DataType
DataType;
127 typedef typename TrafoEvalTraits::DomainPointType DomainPointType;
130 typedef typename TrafoEvalType::template ConfigTraits<TrafoTags::img_point>::EvalDataType TrafoEvalData;
132 TrafoEvalType _trafo_eval;
137 _trafo_eval(space.get_trafo())
144 _trafo_eval.prepare(cell_index);
149 _trafo_eval.finish();
155 return max_assigned_dofs;
158 template<
typename NodeData_,
typename Function_>
159 void operator()(NodeData_& node_data,
const Function_& function)
const
161 static_assert(std::is_base_of<Analytic::Function, Function_>::value,
"invalid function object");
162 static_assert(Function_::can_value,
"function cannot compute values");
165 typedef Analytic::EvalTraits<DataType_, Function_> FuncEvalTraits;
168 typename Function_::template Evaluator<FuncEvalTraits> func_eval(function);
172 TrafoEvalData trafo_data;
175 for(
int i(0); i < max_assigned_dofs; ++i)
178 for(
int k(0); k < shape_dim_; ++k)
179 dom_point[k] = DataType_(2*((i >> k) & 1) - 1) / DataType_(3);
185 node_data[i] = func_eval.value(trafo_data.img_point);
198 static constexpr int max_assigned_dofs = 2;
200 template<
typename Function_>
207 typedef typename Space_::TrafoType TrafoType;
209 typedef typename TrafoEvalType::EvalTraits TrafoEvalTraits;
210 typedef typename TrafoEvalTraits::DataType
DataType;
211 typedef typename TrafoEvalTraits::DomainPointType DomainPointType;
214 typedef typename TrafoEvalType::template ConfigTraits<TrafoTags::img_point>::EvalDataType TrafoEvalData;
216 TrafoEvalType _trafo_eval;
221 _trafo_eval(space.get_trafo())
228 _trafo_eval.prepare(cell_index);
233 _trafo_eval.finish();
239 return max_assigned_dofs;
242 template<
typename NodeData_,
typename Function_>
243 void operator()(NodeData_& node_data,
const Function_& function)
const
245 static_assert(std::is_base_of<Analytic::Function, Function_>::value,
"invalid function object");
246 static_assert(Function_::can_value,
"function cannot compute values");
249 typedef Analytic::EvalTraits<DataType_, Function_> FuncEvalTraits;
252 typename Function_::template Evaluator<FuncEvalTraits> func_eval(function);
256 TrafoEvalData trafo_data;
261 node_data[0] = func_eval.value(trafo_data.img_point);
266 node_data[1] = func_eval.value(trafo_data.img_point);
278 static constexpr int max_assigned_dofs = 1;
280 template<
typename Function_>
287 typedef typename Space_::TrafoType TrafoType;
289 typedef typename TrafoEvalType::EvalTraits TrafoEvalTraits;
290 typedef typename TrafoEvalTraits::DataType
DataType;
291 typedef typename TrafoEvalTraits::DomainPointType DomainPointType;
294 typedef typename TrafoEvalType::template ConfigTraits<TrafoTags::img_point>::EvalDataType TrafoEvalData;
296 TrafoEvalType _trafo_eval;
301 _trafo_eval(space.get_trafo())
308 _trafo_eval.prepare(cell_index);
313 _trafo_eval.finish();
319 return max_assigned_dofs;
322 template<
typename NodeData_,
typename Function_>
323 void operator()(NodeData_& node_data,
const Function_& function)
const
325 static_assert(std::is_base_of<Analytic::Function, Function_>::value,
"invalid function object");
326 static_assert(Function_::can_value,
"function cannot compute values");
329 typedef Analytic::EvalTraits<DataType_, Function_> FuncEvalTraits;
332 typename Function_::template Evaluator<FuncEvalTraits> func_eval(function);
336 TrafoEvalData trafo_data;
338 node_data[0] = func_eval.value(trafo_data.img_point);
Lagrange-3 Element Evaluator class template declaration.
Node-functional base class template.
void finish()
Releases the node-functional from the current cell.
DataType_ DataType
data type
void prepare(Index cell_index)
Prepares the node-functional for a given cell.
Null-Node-Functional class template.
int get_num_assigned_dofs() const
Returns the number of assigned dofs on the current cell.
NodeFunctionalBase< Space_, DataType_ > BaseClass
base-class typedef
void operator()(NodeData_ &node_data, const Function_ &function) const
Evaluation operator.
std::uint64_t Index
Index data type.
@ dom_point
specifies whether the trafo should supply domain point coordinates