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;
37 {
return fe.basis(); }
40 {
return fe.interpolation(); }
43 {
return fe.coefficients(); }
68 typedef std::shared_ptr<const FiniteElement>
Store;
76 { store.reset(
new FiniteElement(fe)); }
82 template<
class FiniteElement>
83 struct FiniteElementInterfaceSwitch<
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(); }
102 {
return fe.localInterpolation(); }
105 {
return fe.localCoefficients(); }
108 typedef const FiniteElement *
Store;
131 template<
class Basis,
class Dummy =
void>
143 static const std::size_t
dimRange = Basis::Traits::dimRange;
145 typedef typename Basis::Traits::Range
Range;
158 template<
typename Geometry>
159 static void gradient(
const Basis& basis,
const Geometry& geometry,
162 Geometry::coorddimension> >& grad)
164 grad.resize(basis.size());
165 basis.evaluateJacobian(xl, grad);
171 template<
class Basis>
172 struct BasisInterfaceSwitch<Basis,
173 typename std::enable_if<
175 std::integral_constant<
177 Basis::Traits::dimDomain
184 typedef typename Basis::Traits::DomainFieldType
DomainField;
186 static const std::size_t
dimDomainLocal = Basis::Traits::dimDomain;
188 typedef typename Basis::Traits::DomainType
DomainLocal;
191 typedef typename Basis::Traits::RangeFieldType
RangeField;
193 static const std::size_t
dimRange = Basis::Traits::dimRange;
195 typedef typename Basis::Traits::RangeType
Range;
198 template<
typename Geometry>
199 static void gradient(
const Basis& basis,
const Geometry& geometry,
202 Geometry::coorddimension> >& grad)
204 std::vector<typename Basis::Traits::JacobianType> lgrad(basis.size());
205 basis.evaluateJacobian(xl, lgrad);
207 const typename Geometry::JacobianInverseTransposed& jac =
208 geometry.jacobianInverseTransposed(xl);
210 grad.resize(basis.size());
211 for(std::size_t i = 0; i < basis.size(); ++i)
212 jac.mv(lgrad[i][0], grad[i][0]);
Definition: bdfmcube.hh:16
Switch for uniform treatment of finite element with either the local or the global interface.
Definition: interfaceswitch.hh:27
static const Basis & basis(const FiniteElement &fe)
access basis
Definition: interfaceswitch.hh:36
FiniteElement::Traits::Coefficients Coefficients
export the type of the coefficients
Definition: interfaceswitch.hh:33
static void setStore(Store &store, const FiniteElement &fe)
Store a finite element in the store.
Definition: interfaceswitch.hh:75
static const Interpolation & interpolation(const FiniteElement &fe)
access interpolation
Definition: interfaceswitch.hh:39
FiniteElement::Traits::Interpolation Interpolation
export the type of the interpolation
Definition: interfaceswitch.hh:31
std::shared_ptr< const FiniteElement > Store
Type for storing finite elements.
Definition: interfaceswitch.hh:68
static const Coefficients & coefficients(const FiniteElement &fe)
access coefficients
Definition: interfaceswitch.hh:42
FiniteElement::Traits::Basis Basis
export the type of the basis
Definition: interfaceswitch.hh:29
Switch for uniform treatment of local and global basis classes.
Definition: interfaceswitch.hh:132
static const std::size_t dimRange
export dimension of the values
Definition: interfaceswitch.hh:143
static const std::size_t dimDomainLocal
export dimension of local coordinates
Definition: interfaceswitch.hh:136
Basis::Traits::RangeField RangeField
export field type of the values
Definition: interfaceswitch.hh:141
Basis::Traits::Range Range
export vector type of the values
Definition: interfaceswitch.hh:145
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:159
Basis::Traits::DomainLocal DomainLocal
export vector type of the local coordinates
Definition: interfaceswitch.hh:138
Basis::Traits::DomainField DomainField
export field types of the coordinates
Definition: interfaceswitch.hh:134