FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
evaluator.hpp
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#pragma once
7
8// includes, FEAT
9#include <kernel/space/parametric_evaluator.hpp>
10
11namespace FEAT
12{
13 namespace Space
14 {
15 namespace CaiDouSanSheYe
16 {
23
29 template<
30 typename Space_,
31 typename TrafoEvaluator_,
32 typename SpaceEvalTraits_,
33 typename Shape_ = typename Space_::ShapeType>
34 class Evaluator DOXY({});
35
41 template<
42 typename Space_,
43 typename TrafoEvaluator_,
44 typename SpaceEvalTraits_>
45 class Evaluator<Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Quadrilateral> :
47 Evaluator< Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Quadrilateral>,
48 TrafoEvaluator_,
49 SpaceEvalTraits_,
50 ref_caps>
51 {
52 public:
55
57 typedef Space_ SpaceType;
58
60 typedef SpaceEvalTraits_ SpaceEvalTraits;
61
63 typedef typename SpaceEvalTraits::EvalPolicy EvalPolicy;
64
66 typedef typename EvalPolicy::DomainPointType DomainPointType;
67
69 typedef typename SpaceEvalTraits::DataType DataType;
70
71 public:
78 explicit Evaluator(const SpaceType& DOXY(space))
79 {
80 }
81
83 virtual ~Evaluator()
84 {
85 }
86
94 {
95 return 5;
96 }
97
107 template<typename EvalData_>
109 EvalData_& data,
110 const DomainPointType& point) const
111 {
112 const DataType x = point[0];
113 const DataType y = point[1];
114 const DataType x2 = x*x;
115 const DataType y2 = y*y;
116 // edge midpoints dofs
117 data.phi[0].ref_value = DataType(0.25) - DataType(0.5)*y + ( DataType(0.375) - DataType(0.625)*x2)*x2 + (-DataType(0.375) + DataType(0.625)*y2)*y2;
118 data.phi[1].ref_value = DataType(0.25) + DataType(0.5)*y + ( DataType(0.375) - DataType(0.625)*x2)*x2 + (-DataType(0.375) + DataType(0.625)*y2)*y2;
119 data.phi[2].ref_value = DataType(0.25) - DataType(0.5)*x + (-DataType(0.375) + DataType(0.625)*x2)*x2 + ( DataType(0.375) - DataType(0.625)*y2)*y2;
120 data.phi[3].ref_value = DataType(0.25) + DataType(0.5)*x + (-DataType(0.375) + DataType(0.625)*x2)*x2 + ( DataType(0.375) - DataType(0.625)*y2)*y2;
121 // bubble dof
122 data.phi[4].ref_value = DataType(2.25)*x*y;
123 }
124
134 template<typename EvalData_>
136 EvalData_& data,
137 const DomainPointType& point) const
138 {
139 const DataType x = point[0];
140 const DataType y = point[1];
141 const DataType x2 = x*x;
142 const DataType y2 = y*y;
143 // edge midpoint dofs
144 data.phi[0].ref_grad[0] = ( DataType(0.75) - DataType(2.5)*x2)*x;
145 data.phi[0].ref_grad[1] = (-DataType(0.75) + DataType(2.5)*y2)*y - DataType(0.5);
146 data.phi[1].ref_grad[0] = ( DataType(0.75) - DataType(2.5)*x2)*x;
147 data.phi[1].ref_grad[1] = (-DataType(0.75) + DataType(2.5)*y2)*y + DataType(0.5);
148 data.phi[2].ref_grad[0] = (-DataType(0.75) + DataType(2.5)*x2)*x - DataType(0.5);
149 data.phi[2].ref_grad[1] = ( DataType(0.75) - DataType(2.5)*y2)*y;
150 data.phi[3].ref_grad[0] = (-DataType(0.75) + DataType(2.5)*x2)*x + DataType(0.5);
151 data.phi[3].ref_grad[1] = ( DataType(0.75) - DataType(2.5)*y2)*y;
152 // bubble dof
153 data.phi[4].ref_grad[0] = DataType(2.25)*y;
154 data.phi[4].ref_grad[1] = DataType(2.25)*x;
155 }
156 }; // Evaluator<..., Shape::Quadrilateral>
157 } // namespace CaiDouSanSheYe
158 } // namespace Space
159} // namespace FEAT
ParametricEvaluator< Evaluator, TrafoEvaluator_, SpaceEvalTraits_, ref_caps > BaseClass
base-class typedef
Definition: evaluator.hpp:54
void eval_ref_values(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function values on the reference cell.
Definition: evaluator.hpp:108
void eval_ref_gradients(EvalData_ &data, const DomainPointType &point) const
Evaluates the basis function gradients on the reference cell.
Definition: evaluator.hpp:135
Cai-Douglas-Santos-Sheen-Ye Element Evaluator class template declaration.
Definition: evaluator.hpp:34
Finite-Element Parametric Evaluator CRTP base-class template.
static constexpr SpaceTags ref_caps
Cai-Douglas-Santos-Sheen-Ye Element Evaluator reference capabilities.
Definition: evaluator.hpp:22
FEAT namespace.
Definition: adjactor.hpp:12
SpaceTags
Space configuration tags enum.
Definition: eval_tags.hpp:97
@ ref_value
specifies whether the space should supply reference basis function values
@ ref_grad
specifies whether the space should supply reference basis function gradients