9#include <kernel/space/node_functional_base.hpp> 
   40        static constexpr int max_assigned_dofs = 3;
 
   42        template<
typename Function_>
 
   49        typedef typename Space_::TrafoType TrafoType;
 
   50        typedef typename Space_::ShapeType ShapeType;
 
   52        typedef typename TrafoEvalType::EvalTraits TrafoEvalTraits;
 
   53        typedef typename TrafoEvalTraits::DomainPointType DomainPointType;
 
   56        typedef typename TrafoEvalType::template ConfigTraits<TrafoTags::img_point>::EvalDataType TrafoEvalData;
 
   58        TrafoEvalType _trafo_eval;
 
   63          _trafo_eval(space.get_trafo())
 
   70          _trafo_eval.prepare(cell_index);
 
   81          return max_assigned_dofs;
 
   84        template<
typename NodeData_, 
typename Function_>
 
   85        void operator()(NodeData_& node_data, 
const Function_& function)
 const 
   87          static_assert(std::is_base_of<Analytic::Function, Function_>::value, 
"invalid function object");
 
   88          static_assert(Function_::can_value, 
"function cannot compute values");
 
   89          static_assert(Function_::can_grad, 
"function cannot compute gradients");
 
   92          typedef Analytic::EvalTraits<DataType_, Function_> FuncEvalTraits;
 
   95          typename Function_::template Evaluator<FuncEvalTraits> func_eval(function);
 
   99          TrafoEvalData trafo_data;
 
  103          const auto func_value = func_eval.value(trafo_data.img_point);
 
  104          const auto func_grad = func_eval.gradient(trafo_data.img_point);
 
  107          node_data[0] = func_value;
 
  108          node_data[1] = func_grad[0];
 
  109          node_data[2] = func_grad[1];
 
  121        static constexpr int max_assigned_dofs = 1;
 
  123        template<
typename Function_>
 
  130        typedef typename Space_::TrafoType TrafoType;
 
  131        typedef typename Space_::ShapeType ShapeType;
 
  133        typedef typename TrafoEvalType::EvalTraits TrafoEvalTraits;
 
  134        typedef typename TrafoEvalTraits::DomainPointType DomainPointType;
 
  137        typedef typename TrafoEvalType::template ConfigTraits<TrafoTags::img_point>::EvalDataType TrafoEvalData;
 
  139        TrafoEvalType _trafo_eval;
 
  144          _trafo_eval(space.get_trafo())
 
  151          _trafo_eval.prepare(cell_index);
 
  156          _trafo_eval.finish();
 
  162          return max_assigned_dofs;
 
  165        template<
typename NodeData_, 
typename Function_>
 
  166        void operator()(NodeData_& node_data, 
const Function_& function)
 const 
  168          static_assert(std::is_base_of<Analytic::Function, Function_>::value, 
"invalid function object");
 
  169          static_assert(Function_::can_value, 
"function cannot compute values");
 
  172          typedef Analytic::EvalTraits<DataType_, Function_> FuncEvalTraits;
 
  175          typename Function_::template Evaluator<FuncEvalTraits> func_eval(function);
 
  178          DomainPointType 
dom_point(DataType_(1) / DataType_(3));
 
  179          TrafoEvalData trafo_data;
 
  183          node_data[0] = func_eval.value(trafo_data.img_point);
 
  195        static constexpr int max_assigned_dofs = 2;
 
  197        template<
typename Function_>
 
  204        typedef typename Space_::TrafoType TrafoType;
 
  205        typedef typename Space_::ShapeType ShapeType;
 
  207        typedef typename TrafoEvalType::EvalTraits TrafoEvalTraits;
 
  208        typedef typename TrafoEvalTraits::DomainPointType DomainPointType;
 
  211        typedef typename TrafoEvalType::template ConfigTraits<TrafoTags::img_point>::EvalDataType TrafoEvalData;
 
  213        TrafoEvalType _trafo_eval;
 
  218          _trafo_eval(space.get_trafo())
 
  225          _trafo_eval.prepare(cell_index);
 
  230          _trafo_eval.finish();
 
  236          return max_assigned_dofs;
 
  239        template<
typename NodeData_, 
typename Function_>
 
  240        void operator()(NodeData_& node_data, 
const Function_& function)
 const 
  242          static_assert(std::is_base_of<Analytic::Function, Function_>::value, 
"invalid function object");
 
  243          static_assert(Function_::can_value, 
"function cannot compute values");
 
  244          static_assert(Function_::can_grad, 
"function cannot compute gradients");
 
  247          typedef Analytic::EvalTraits<DataType_, Function_> FuncEvalTraits;
 
  250          typename Function_::template Evaluator<FuncEvalTraits> func_eval(function);
 
  254          TrafoEvalData trafo_data;
 
  258          const auto func_value = func_eval.value(trafo_data.img_point);
 
  259          const auto func_grad = func_eval.gradient(trafo_data.img_point);
 
  262          node_data[0] = func_value;
 
  263          node_data[1] = func_grad[0];
 
  275        static constexpr int max_assigned_dofs = 4;
 
  277        template<
typename Function_>
 
  284        typedef typename Space_::TrafoType TrafoType;
 
  285        typedef typename Space_::ShapeType ShapeType;
 
  287        typedef typename TrafoEvalType::EvalTraits TrafoEvalTraits;
 
  288        typedef typename TrafoEvalTraits::DomainPointType DomainPointType;
 
  291        typedef typename TrafoEvalType::template ConfigTraits<TrafoTags::img_point>::EvalDataType TrafoEvalData;
 
  293        TrafoEvalType _trafo_eval;
 
  298          _trafo_eval(space.get_trafo())
 
  305          _trafo_eval.prepare(cell_index);
 
  310          _trafo_eval.finish();
 
  317          return max_assigned_dofs;
 
  320        template<
typename NodeData_, 
typename Function_>
 
  321        void operator()(NodeData_& node_data, 
const Function_& function)
 const 
  323          static_assert(std::is_base_of<Analytic::Function, Function_>::value, 
"invalid function object");
 
  324          static_assert(Function_::can_value, 
"function cannot compute values");
 
  325          static_assert(Function_::can_grad, 
"function cannot compute gradients");
 
  326          static_assert(Function_::can_hess, 
"function cannot compute hessians");
 
  329          typedef Analytic::EvalTraits<DataType_, Function_> FuncEvalTraits;
 
  332          typename Function_::template Evaluator<FuncEvalTraits> func_eval(function);
 
  336          TrafoEvalData trafo_data;
 
  340          const auto func_value = func_eval.value(trafo_data.img_point);
 
  341          const auto func_grad = func_eval.gradient(trafo_data.img_point);
 
  342          const auto func_hess = func_eval.hessian(trafo_data.img_point);
 
  345          node_data[0] = func_value;
 
  346          node_data[1] = func_grad[0];
 
  347          node_data[2] = func_grad[1];
 
  348          node_data[3] = func_hess[0][1];
 
Hermite-3 Element Evaluator class template declaration.
Node-functional base class template.
void finish()
Releases the node-functional from the current cell.
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