9#include <kernel/space/evaluator_base.hpp>
10#include <kernel/space/details.hpp>
19 template<
bool _enable>
20 struct ParamBasisEvalHelper;
44 typename SpaceEvaluator_,
45 typename TrafoEvaluator_,
46 typename SpaceEvalTraits_,
49 public EvaluatorBase<SpaceEvaluator_, TrafoEvaluator_, SpaceEvalTraits_>
91 static constexpr int domain_dim = SpaceEvalTraits::domain_dim;
93 static constexpr int image_dim = SpaceEvalTraits::image_dim;
100 template<SpaceTags cfg_>
151 template<SpaceTags space_cfg_>
154 const typename SpaceEvalTraits::DomainPointType&
dom_point)
const
165 template<SpaceTags space_cfg_, TrafoTags trafo_cfg_>
171 cast().reference_eval(space_data, trafo_data.
dom_point);
174 Intern::ParamBasisEvalHelper<*(space_cfg_ &
SpaceTags::value)>::trans_values(space_data, trafo_data);
176 Intern::ParamBasisEvalHelper<*(space_cfg_ &
SpaceTags::grad)>::trans_gradients(space_data, trafo_data);
178 Intern::ParamBasisEvalHelper<*(space_cfg_ &
SpaceTags::hess)>::trans_hessians(space_data, trafo_data);
185 template<
bool _enable>
186 struct ParamBasisEvalHelper
188 template<
typename SpaceData_,
typename Evaluator_,
typename DomPo
int_>
189 static void eval_ref_values(SpaceData_&,
const Evaluator_&,
const DomPoint_&) {}
191 template<
typename SpaceData_,
typename Evaluator_,
typename DomPo
int_>
192 static void eval_ref_gradients(SpaceData_&,
const Evaluator_&,
const DomPoint_&) {}
194 template<
typename SpaceData_,
typename Evaluator_,
typename DomPo
int_>
195 static void eval_ref_hessians(SpaceData_&,
const Evaluator_&,
const DomPoint_&) {}
197 template<
typename SpaceData_,
typename TrafoData_>
198 static void trans_values(SpaceData_&,
const TrafoData_&) {}
200 template<
typename SpaceData_,
typename TrafoData_>
201 static void trans_gradients(SpaceData_&,
const TrafoData_&) {}
203 template<
typename SpaceData_,
typename TrafoData_>
204 static void trans_hessians(SpaceData_&,
const TrafoData_&) {}
208 struct ParamBasisEvalHelper<true>
210 template<
typename SpaceData_,
typename Evaluator_,
typename DomPo
int_>
211 static void eval_ref_values(SpaceData_& space_data,
const Evaluator_& evaluator,
const DomPoint_& dom_point)
213 evaluator.eval_ref_values(space_data, dom_point);
216 template<
typename SpaceData_,
typename Evaluator_,
typename DomPo
int_>
217 static void eval_ref_gradients(SpaceData_& space_data,
const Evaluator_& evaluator,
const DomPoint_& dom_point)
219 evaluator.eval_ref_gradients(space_data, dom_point);
222 template<
typename SpaceData_,
typename Evaluator_,
typename DomPo
int_>
223 static void eval_ref_hessians(SpaceData_& space_data,
const Evaluator_& evaluator,
const DomPoint_& dom_point)
225 evaluator.eval_ref_hessians(space_data, dom_point);
228 template<
typename SpaceData_,
typename TrafoData_>
229 static void trans_values(SpaceData_& space_data,
const TrafoData_&)
231 ParametricEvalHelper::trans_values(space_data);
234 template<
typename SpaceData_,
typename TrafoData_>
235 static void trans_gradients(SpaceData_& space_data,
const TrafoData_& trafo_data)
237 ParametricEvalHelper::trans_gradients(space_data, trafo_data.jac_inv);
240 template<
typename SpaceData_,
typename TrafoData_>
241 static void trans_hessians(SpaceData_& space_data,
const TrafoData_& trafo_data)
243 ParametricEvalHelper::trans_hessians(space_data, trafo_data.jac_inv, trafo_data.hess_inv);
Space evaluation data structure.
Basic Space Evaluator CRTP base-class template.
Finite-Element Parametric Evaluator CRTP base-class template.
TrafoEvaluator_ TrafoEvaluator
trafo evaluator type
static constexpr int image_dim
image dimension
SpaceEvaluator_ SpaceEvaluator
space evaluator type
SpaceEvalTraits_ SpaceEvalTraits
space evaluator traits
static constexpr SpaceTags eval_caps
our evaluation capabilities
static constexpr int domain_dim
domain dimension
TrafoEvaluator::EvalTraits TrafoEvalTraits
trafo evaluator traits
static constexpr int max_local_dofs
maximum number of local dofs
EvaluatorBase< SpaceEvaluator_, TrafoEvaluator_, SpaceEvalTraits_ > BaseClass
base class typedef
static constexpr TrafoTags trafo_caps
the capabilities of the trafo evaluator
void operator()(EvalData< SpaceEvalTraits, space_cfg_ > &space_data, const Trafo::EvalData< TrafoEvalTraits, trafo_cfg_ > &trafo_data) const
Space evaluation operator.
void reference_eval(EvalData< SpaceEvalTraits, space_cfg_ > &space_ref_data, const typename SpaceEvalTraits::DomainPointType &dom_point) const
Space reference evaluation function.
Trafo evaluation data structure.
EvalTraits::DomainPointType dom_point
domain point
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
@ ref_value
specifies whether the space should supply reference basis function values
@ ref_hess
specifies whether the space should supply reference basis function hessians
@ ref_grad
specifies whether the space should supply reference basis function gradients
@ grad
specifies whether the space should supply basis function gradients
TrafoTags
Trafo configuration tags enum.
@ hess_inv
specifies whether the trafo should supply inverse hessian tensors
@ dom_point
specifies whether the trafo should supply domain point coordinates
@ jac_inv
specifies whether the trafo should supply inverse jacobian matrices
Space configuration traits class template.
static constexpr TrafoTags trafo_config
trafo evaluation configuration
Space::EvalData< SpaceEvalTraits, config > EvalDataType
evaluation data typedef
static constexpr SpaceTags config
space evaluation config