9#include <kernel/space/eval_data.hpp> 
   10#include <kernel/trafo/eval_data.hpp> 
   19      template<
bool _enable>
 
   20      struct BasisEvalHelper;
 
   42      typename SpaceEvaluator_,
 
   43      typename TrafoEvaluator_,
 
   44      typename SpaceEvalTraits_>
 
   61      static constexpr int domain_dim = SpaceEvalTraits::domain_dim;
 
   63      static constexpr int image_dim = SpaceEvalTraits::image_dim;
 
   67      template<SpaceTags cfg_>
 
   81      static constexpr SpaceTags eval_caps = ...;
 
  128      template<SpaceTags space_cfg_, TrafoTags trafo_cfg_>
 
  140#if defined(FEAT_COMPILER_GNU) && (FEAT_COMPILER_GNU < 70000) 
  142        static constexpr bool want_value = *(EvalDataType::config & 
SpaceTags::value);
 
  143        Intern::BasisEvalHelper<want_value>::eval_values(space_data, cast(), trafo_data);
 
  145        static constexpr bool want_grad = *(EvalDataType::config & 
SpaceTags::grad);
 
  146        Intern::BasisEvalHelper<want_grad>::eval_gradients(space_data, cast(), trafo_data);
 
  148        static constexpr bool want_hess = *(EvalDataType::config & 
SpaceTags::hess);
 
  149        Intern::BasisEvalHelper<want_hess>::eval_hessians(space_data, cast(), trafo_data);
 
  172      template<SpaceTags space_cfg_, TrafoTags trafo_cfg_>
 
  177        XABORTM(
"space evaluator does not support basis function values");
 
  192      template<SpaceTags space_cfg_, TrafoTags trafo_cfg_>
 
  197        XABORTM(
"space evaluator does not support basis function gradients");
 
  212      template<SpaceTags space_cfg_, TrafoTags trafo_cfg_>
 
  217        XABORTM(
"space evaluator does not support basis function hessians");
 
  224      template<
bool _enable>
 
  225      struct BasisEvalHelper
 
  227        template<
typename SpaceData_, 
typename Evaluator_, 
typename TrafoData_>
 
  228        static void eval_values(SpaceData_&, 
const Evaluator_&, 
const TrafoData_&) {}
 
  230        template<
typename SpaceData_, 
typename Evaluator_, 
typename TrafoData_>
 
  231        static void eval_gradients(SpaceData_&, 
const Evaluator_&, 
const TrafoData_&) {}
 
  233        template<
typename SpaceData_, 
typename Evaluator_, 
typename TrafoData_>
 
  234        static void eval_hessians(SpaceData_&, 
const Evaluator_&, 
const TrafoData_&) {}
 
  238      struct BasisEvalHelper<true>
 
  240        template<
typename SpaceData_, 
typename Evaluator_, 
typename TrafoData_>
 
  241        static void eval_values(SpaceData_& space_data, 
const Evaluator_& evaluator, 
const TrafoData_& trafo_data)
 
  243          if(!*(Evaluator_::eval_caps & SpaceTags::value))
 
  244            XABORTM(
"space evaluator does not support basis function values");
 
  245          evaluator.eval_values(space_data, trafo_data);
 
  248        template<
typename SpaceData_, 
typename Evaluator_, 
typename TrafoData_>
 
  249        static void eval_gradients(SpaceData_& space_data, 
const Evaluator_& evaluator, 
const TrafoData_& trafo_data)
 
  251          if(!*(Evaluator_::eval_caps & SpaceTags::grad))
 
  252            XABORTM(
"space evaluator does not support basis function gradients");
 
  253          evaluator.eval_gradients(space_data, trafo_data);
 
  256        template<
typename SpaceData_, 
typename Evaluator_, 
typename TrafoData_>
 
  257        static void eval_hessians(SpaceData_& space_data, 
const Evaluator_& evaluator, 
const TrafoData_& trafo_data)
 
  259          if(!*(Evaluator_::eval_caps & SpaceTags::hess))
 
  260            XABORTM(
"space evaluator does not support basis function hessians");
 
  261          evaluator.eval_hessians(space_data, trafo_data);
 
#define XABORTM(msg)
Abortion macro definition with custom message.
Space evaluation data structure.
Basic Space Evaluator CRTP base-class template.
static constexpr int domain_dim
trafo domain dimension
void eval_values(EvalData< SpaceEvalTraits, space_cfg_ > &space_data, const Trafo::EvalData< TrafoEvalTraits, trafo_cfg_ > &trafo_data) const
Evaluates the basis function values on the real cell.
SpaceEvaluator_ SpaceEvaluator
space evaluator type
void finish()
Releases the evaluator from the current cell.
SpaceEvalTraits_ SpaceEvalTraits
space evaluator traits
TrafoEvaluator::EvalTraits TrafoEvalTraits
trafo evaluator traits
void eval_gradients(EvalData< SpaceEvalTraits, space_cfg_ > &space_data, const Trafo::EvalData< TrafoEvalTraits, trafo_cfg_ > &trafo_data) const
Evaluates the basis function gradients on the real cell.
TrafoEvaluator_ TrafoEvaluator
trafo evaluator type
void prepare(const TrafoEvaluator &trafo_eval)
Prepares the evaluator for a given cell.
void eval_hessians(EvalData< SpaceEvalTraits, space_cfg_ > &space_data, const Trafo::EvalData< TrafoEvalTraits, trafo_cfg_ > &trafo_data) const
Evaluates the basis function hessians on the real cell.
static constexpr int max_local_dofs
maximum number of local DOFs
void operator()(EvalData< SpaceEvalTraits, space_cfg_ > &space_data, const Trafo::EvalData< TrafoEvalTraits, trafo_cfg_ > &trafo_data) const
Space evaluation operator.
static constexpr int image_dim
trafo image dimension
Trafo evaluation data structure.
SpaceTags
Space configuration tags enum.
@ value
specifies whether the space should supply basis function values
@ hess
specifies whether the space should supply basis function hessians
@ grad
specifies whether the space should supply basis function gradients
TrafoTags
Trafo configuration tags enum.
Space::EvalData< SpaceEvalTraits, config > EvalDataType
evaluation data typedef
static constexpr TrafoTags trafo_config
trafo configuration
static constexpr SpaceTags config
evaluation data configuration