9#include <kernel/space/parametric_evaluator.hpp>
10#include <kernel/space/discontinuous/variant.hpp>
16 namespace Discontinuous
20 typename TrafoEvaluator_,
21 typename SpaceEvalTraits_,
23 typename Shape_ =
typename Space_::ShapeType>
28 typename TrafoEvaluator_,
29 typename SpaceEvalTraits_,
31 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Variant::StdPolyP<0>, Shape_> :
33 Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Variant::StdPolyP<0>, Shape_>,
45 typedef typename SpaceEvalTraits::DataType
DataType;
78 template<SpaceTags space_cfg_, TrafoTags trafo_cfg_>
91 typename TrafoEvaluator_,
92 typename SpaceEvalTraits_,
100 Variant::StdPolyP<1>,
101 Shape::Simplex<shape_dim_> >,
123 typedef typename SpaceEvalTraits::DataType
DataType;
144 return (shape_dim_ + 1);
156 template<
typename EvalData_>
161 data.phi[0].ref_value =
DataType(1);
162 for(
int i(0); i < shape_dim_; ++i)
163 data.phi[0].ref_value -= (data.phi[i+1].ref_value = point[i]);
175 template<
typename EvalData_>
180 for(
int i(0); i < shape_dim_; ++i)
182 data.phi[0].ref_grad[i] = -
DataType(1);
183 for(
int j(0); j < shape_dim_; ++j)
184 data.phi[i+1].ref_grad[j] =
DataType(i == j ? 1 : 0);
191 typename TrafoEvaluator_,
192 typename SpaceEvalTraits_,
196 Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Variant::StdPolyP<1>, Shape::Hypercube<shape_dim_>>,
223 typedef typename SpaceEvalTraits::DataType
DataType;
240 template<SpaceTags cfg_>
247 static constexpr TrafoTags trafo_config = TrafoTags::img_point;
290 return Index(shape_dim_ + 1);
309 _inv_lin_mat = trafo_data.jac_inv;
310 _inv_lin_vec = trafo_data.img_point;
314 template<SpaceTags space_cfg_, TrafoTags trafo_cfg_>
321 pt.set_mat_vec_mult(_inv_lin_mat, trafo_data.
img_point - _inv_lin_vec);
325 for(
int i(0); i < shape_dim_; ++i)
330 template<SpaceTags space_cfg_, TrafoTags trafo_cfg_>
337 pt.set_mat_vec_mult(_inv_lin_mat, trafo_data.
img_point - _inv_lin_vec);
340 for(
int i(0); i < (shape_dim_+1); ++i)
343 for(
int j(0); j < shape_dim_; ++j)
344 loc_grad[j] =
DataType(i == (j+1) ? 1 : 0);
347 data.
phi[i].
grad.set_vec_mat_mult(loc_grad, _inv_lin_mat);
EvalTraits_::BasisValueType value
basis function value object
EvalTraits_::BasisGradientType grad
basis gradient object
virtual ~Evaluator()
virtual destructor
TrafoEvaluator_::EvalTraits TrafoEvalTraits
trafo evaluation traits
Evaluator(const Space_ &space)
Constructor.
void eval_values(EvalData< SpaceEvalTraits, space_cfg_ > &data, const Trafo::EvalData< TrafoEvalTraits, trafo_cfg_ > &trafo_data) const
Evaluates the basis function values on the real cell.
SpaceEvalTraits::DataType DataType
basis value coefficient type
int get_num_local_dofs() const
Returns the number of local DOFs.
SpaceEvalTraits_ SpaceEvalTraits
space evaluation traits
Evaluator(const SpaceType &space)
Constructor.
int get_num_local_dofs() const
Returns the number of local DOFs.
SpaceEvalTraits_ SpaceEvalTraits
space evaluation traits
Space_ SpaceType
space type
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps_p1 > BaseClass
base-class typedef
SpaceEvalTraits::DataType DataType
data type
EvalPolicy::DomainPointType DomainPointType
domain point type
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
SpaceEvalTraits::EvalPolicy EvalPolicy
evaluation policy
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
EvalPolicy::JacobianInverseType JacobianInverseType
jacobian inverse matrix type
EvalPolicy::ImagePointType ImagePointType
image point type
SpaceEvalTraits_ SpaceEvalTraits
space evaluation traits
EvalPolicy::DomainPointType DomainPointType
domain point type
Evaluator(const SpaceType &space)
Constructor.
void prepare(const TrafoEvaluator &trafo_eval)
Prepares the evaluator for a given cell.
SpaceEvalTraits::EvalPolicy EvalPolicy
evaluation policy
virtual ~Evaluator()
virtual destructor
int get_num_local_dofs() const
Returns the number of local DOFs.
TrafoEvaluator::template ConfigTraits< inv_lin_trafo_config >::EvalDataType InvLinTrafoData
inverse linearized trafo data
TrafoEvaluator::TrafoType TrafoType
trafo type
Space_ SpaceType
space type
void eval_values(EvalData< SpaceEvalTraits, space_cfg_ > &data, const Trafo::EvalData< TrafoEvalTraits, trafo_cfg_ > &trafo_data) const
Evaluates the basis function values on the real cell.
TrafoEvaluator::EvalTraits TrafoEvalTraits
trafo evaluator traits
void eval_gradients(EvalData< SpaceEvalTraits, space_cfg_ > &data, const Trafo::EvalData< TrafoEvalTraits, trafo_cfg_ > &trafo_data) const
JacobianInverseType _inv_lin_mat
inverse linearized trafo matrix
TrafoType::MeshType MeshType
mesh type
EvalPolicy::JacobianMatrixType JacobianMatrixType
jacobian matrix type
EvaluatorBase< Evaluator, TrafoEvaluator_, SpaceEvalTraits_ > BaseClass
base-class typedef
TrafoEvaluator_ TrafoEvaluator
trafo evaluator type
SpaceEvalTraits::DataType DataType
data type
Space evaluation data structure.
BasisDataType phi[max_local_dofs]
the basis function data vector
Basic Space Evaluator CRTP base-class template.
Finite-Element Parametric Evaluator CRTP base-class template.
Trafo evaluation data structure.
EvalTraits::ImagePointType img_point
image point
SpaceTags
Space configuration tags enum.
@ value
specifies whether the space should supply basis function values
@ grad
specifies whether the space should supply basis function gradients
std::uint64_t Index
Index data type.
TrafoTags
Trafo configuration tags enum.
@ img_point
specifies whether the trafo should supply image point coordinates
@ dom_point
specifies whether the trafo should supply domain point coordinates
@ jac_inv
specifies whether the trafo should supply inverse jacobian matrices
Hypercube shape tag struct template.
Simplex shape tag struct template.
Space::EvalData< SpaceEvalTraits, config > EvalDataType
evaluation data typedef