4 #ifndef DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH 5 #define DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH 11 #include <dune/common/fmatrix.hh> 12 #include <dune/common/std/type_traits.hh> 26 template<
class FiniteElement,
class Dummy =
void>
29 typedef typename FiniteElement::Traits::Basis
Basis;
36 static const Basis &
basis(
const FiniteElement& fe)
37 {
return fe.basis(); }
40 {
return fe.interpolation(); }
43 {
return fe.coefficients(); }
68 typedef std::shared_ptr<const FiniteElement>
Store;
75 static void setStore(Store& store,
const FiniteElement& fe)
76 { store.reset(
new FiniteElement(fe)); }
80 template<
class FiniteElement>
85 typename std::enable_if<Std::to_true_type<typename FiniteElement::Traits::
86 LocalBasisType>::value>::type
90 typedef typename FiniteElement::Traits::LocalBasisType
Basis;
92 typedef typename FiniteElement::Traits::LocalInterpolationType
95 typedef typename FiniteElement::Traits::LocalCoefficientsType
Coefficients;
98 static const Basis &
basis(
const FiniteElement& fe)
99 {
return fe.localBasis(); }
101 static const Interpolation &
interpolation(
const FiniteElement& fe)
102 {
return fe.localInterpolation(); }
104 static const Coefficients &
coefficients(
const FiniteElement& fe)
105 {
return fe.localCoefficients(); }
108 typedef const FiniteElement *
Store;
110 static void setStore(Store& store,
const FiniteElement& fe)
131 template<
class Basis,
class Dummy =
void>
136 static const std::size_t dimDomainLocal = Basis::Traits::dimDomainLocal;
143 static const std::size_t dimRange = Basis::Traits::dimRange;
145 typedef typename Basis::Traits::Range
Range;
148 static const std::size_t diffOrder = Basis::Traits::diffOrder;
161 template<
typename Geometry>
163 const DomainLocal& xl,
164 std::vector<FieldMatrix<RangeField, 1,
165 Geometry::coorddimension> >& grad)
167 grad.resize(basis.size());
168 basis.evaluateJacobian(xl, grad);
173 template<
class Basis>
176 typename std::enable_if<
178 std::integral_constant<
180 Basis::Traits::dimDomain
187 typedef typename Basis::Traits::DomainFieldType
DomainField;
189 static const std::size_t dimDomainLocal = Basis::Traits::dimDomain;
191 typedef typename Basis::Traits::DomainType
DomainLocal;
194 typedef typename Basis::Traits::RangeFieldType
RangeField;
196 static const std::size_t dimRange = Basis::Traits::dimRange;
198 typedef typename Basis::Traits::RangeType
Range;
201 static const std::size_t diffOrder = Basis::Traits::diffOrder;
204 template<
typename Geometry>
205 static void gradient(
const Basis&
basis,
const Geometry& geometry,
206 const DomainLocal& xl,
207 std::vector<FieldMatrix<RangeField, 1,
208 Geometry::coorddimension> >& grad)
210 std::vector<typename Basis::Traits::JacobianType> lgrad(basis.size());
211 basis.evaluateJacobian(xl, lgrad);
213 const typename Geometry::JacobianInverseTransposed& jac =
214 geometry.jacobianInverseTransposed(xl);
216 grad.resize(basis.size());
217 for(std::size_t i = 0; i < basis.size(); ++i)
218 jac.mv(lgrad[i][0], grad[i][0]);
225 #endif // DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH static const Interpolation & interpolation(const FiniteElement &fe)
access interpolation
Definition: interfaceswitch.hh:39
std::shared_ptr< const FiniteElement > Store
Type for storing finite elements.
Definition: interfaceswitch.hh:68
Basis::Traits::DomainLocal DomainLocal
export vector type of the local coordinates
Definition: interfaceswitch.hh:138
static const Coefficients & coefficients(const FiniteElement &fe)
access coefficients
Definition: interfaceswitch.hh:42
FiniteElement::Traits::Coefficients Coefficients
export the type of the coefficients
Definition: interfaceswitch.hh:33
Definition: brezzidouglasmarini1cube2dlocalbasis.hh:15
Basis::Traits::RangeField RangeField
export field type of the values
Definition: interfaceswitch.hh:141
FiniteElement::Traits::Basis Basis
export the type of the basis
Definition: interfaceswitch.hh:29
Basis::Traits::DomainField DomainField
export field types of the coordinates
Definition: interfaceswitch.hh:134
Switch for uniform treatment of local and global basis classes.
Definition: interfaceswitch.hh:132
static void setStore(Store &store, const FiniteElement &fe)
Store a finite element in the store.
Definition: interfaceswitch.hh:75
static const Basis & basis(const FiniteElement &fe)
access basis
Definition: interfaceswitch.hh:36
FiniteElement::Traits::Interpolation Interpolation
export the type of the interpolation
Definition: interfaceswitch.hh:31
Basis::Traits::Range Range
export vector type of the values
Definition: interfaceswitch.hh:145
Switch for uniform treatment of finite element with either the local or the global interface...
Definition: interfaceswitch.hh:27
static void gradient(const Basis &basis, const Geometry &geometry, const DomainLocal &xl, std::vector< FieldMatrix< RangeField, 1, Geometry::coorddimension > > &grad)
Compute global gradient for scalar valued bases.
Definition: interfaceswitch.hh:162