4 #ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH 5 #define DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH 10 #include <dune/common/fmatrix.hh> 11 #include <dune/common/fvector.hh> 12 #include <dune/common/typetraits.hh> 14 #include <dune/geometry/type.hh> 27 template<
class LocalBasisTraits, std::
size_t dimDomainGlobal_>
39 typedef FieldMatrix<RangeField, dimRange, dimDomainGlobal>
Jacobian;
64 template<
class LocalBasis,
class Geometry>
66 static_assert(LocalBasis::Traits::dimRange == 1,
67 "ScalarLocalToGlobalBasisAdaptor can only wrap a " 68 "scalar local basis.");
69 static_assert((is_same<
typename LocalBasis::Traits::DomainFieldType,
70 typename Geometry::ctype>::
value),
71 "ScalarLocalToGlobalBasisAdaptor: LocalBasis must use " 72 "the same ctype as Geometry");
74 ( static_cast<std::size_t>(LocalBasis::Traits::dimDomain) ==
75 static_cast<std::size_t>(Geometry::mydimension),
76 "ScalarLocalToGlobalBasisAdaptor: LocalBasis domain dimension must " 77 "match local dimension of Geometry");
79 const LocalBasis& localBasis;
97 const Geometry& geometry_) :
98 localBasis(localBasis_), geometry(geometry_)
101 std::size_t
size()
const {
return localBasis.size(); }
111 if(geometry.affine())
113 return localBasis.order();
116 return localBasis.order() + Traits::dimDomainGlobal - 1;
120 std::vector<typename Traits::Range>& out)
const 122 localBasis.evaluateFunction(in, out);
126 std::vector<typename Traits::Jacobian>& out)
const 128 std::vector<typename LocalBasis::Traits::JacobianType>
129 localJacobian(size());
130 localBasis.evaluateJacobian(in, localJacobian);
132 const typename Geometry::JacobianInverseTransposed &geoJacobian =
133 geometry.jacobianInverseTransposed(in);
136 for(std::size_t i = 0; i < size(); ++i)
137 geoJacobian.mv(localJacobian[i][0], out[i][0]);
148 template<
class LocalInterpolation,
class Traits_>
150 const LocalInterpolation& localInterpolation;
165 (
const LocalInterpolation& localInterpolation_) :
166 localInterpolation(localInterpolation_)
169 template<
class Function,
class Coeff>
170 void interpolate(
const Function&
function, std::vector<Coeff>& out)
const 171 { localInterpolation.interpolate(
function, out); }
186 template<
class LocalFiniteElement,
class Geometry>
193 Traits::LocalBasisType, Geometry>
Basis;
195 Traits::LocalInterpolationType,
typename Basis::Traits>
197 typedef typename LocalFiniteElement::Traits::LocalCoefficientsType
202 const LocalFiniteElement &localFE;
218 (
const LocalFiniteElement& localFE_,
const Geometry &geometry) :
220 basis_(localFE.localBasis(), geometry),
221 interpolation_(localFE.localInterpolation())
226 {
return interpolation_; }
228 {
return localFE.localCoefficients(); }
229 GeometryType
type()
const {
return localFE.type(); }
243 template<
class LocalFiniteElement,
class Geometry>
245 const LocalFiniteElement& localFE;
261 (
const LocalFiniteElement &localFE_) : localFE(localFE_) {}
274 const FiniteElement
make(
const Geometry& geometry) {
275 return FiniteElement(localFE, geometry);
281 #endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian
Definition: localtoglobaladaptors.hh:39
Definition: tensor.hh:165
const Traits::Basis & basis() const
Definition: localtoglobaladaptors.hh:224
void interpolate(const Function &function, std::vector< Coeff > &out) const
Definition: localtoglobaladaptors.hh:170
LocalToGlobalInterpolationAdaptor< typename LocalFiniteElement::Traits::LocalInterpolationType, typename Basis::Traits > Interpolation
Definition: localtoglobaladaptors.hh:196
const FiniteElement make(const Geometry &geometry)
construct ScalarLocalToGlobalFiniteElementAdaptor
Definition: localtoglobaladaptors.hh:274
number of partial derivatives supported
Definition: localbasis.hh:74
void evaluateFunction(const typename Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const
Definition: localtoglobaladaptors.hh:119
RF RangeFieldType
Export type for range field.
Definition: localbasis.hh:52
std::size_t size() const
Definition: localtoglobaladaptors.hh:101
static const std::size_t dimDomainGlobal
Definition: localtoglobaladaptors.hh:31
Traits_ Traits
Definition: localtoglobaladaptors.hh:153
Convert a local interpolation into a global interpolation.
Definition: localtoglobaladaptors.hh:149
R RangeType
range type
Definition: localbasis.hh:61
Factory for ScalarLocalToGlobalFiniteElementAdaptor objects.
Definition: localtoglobaladaptors.hh:244
LocalToGlobalBasisAdaptorTraits< typename LocalBasis::Traits, Geometry::coorddimension > Traits
Definition: localtoglobaladaptors.hh:84
std::size_t order() const
return maximum polynomial order of the base function
Definition: localtoglobaladaptors.hh:110
GeometryType type() const
Definition: localtoglobaladaptors.hh:229
LocalBasisTraits::RangeType Range
Definition: localtoglobaladaptors.hh:37
Definition: brezzidouglasmarini1cube2dlocalbasis.hh:14
Traits class for local-to-global basis adaptors.
Definition: localtoglobaladaptors.hh:28
Convert a simple scalar local finite element into a global finite element.
Definition: localtoglobaladaptors.hh:187
ScalarLocalToGlobalBasisAdaptor< typename LocalFiniteElement::Traits::LocalBasisType, Geometry > Basis
Definition: localtoglobaladaptors.hh:193
FieldVector< DomainField, dimDomainGlobal > DomainGlobal
Definition: localtoglobaladaptors.hh:33
LocalBasisTraits::DomainType DomainLocal
Definition: localtoglobaladaptors.hh:32
dimension of the domain
Definition: localbasis.hh:45
dimension of the range
Definition: localbasis.hh:57
DF DomainFieldType
Export type for domain field.
Definition: localbasis.hh:40
const Traits::Interpolation & interpolation() const
Definition: localtoglobaladaptors.hh:225
D DomainType
domain type
Definition: localbasis.hh:49
static const std::size_t dimDomainLocal
Definition: localtoglobaladaptors.hh:30
ScalarLocalToGlobalBasisAdaptor(const LocalBasis &localBasis_, const Geometry &geometry_)
construct a ScalarLocalToGlobalBasisAdaptor
Definition: localtoglobaladaptors.hh:96
LocalFiniteElement::Traits::LocalCoefficientsType Coefficients
Definition: localtoglobaladaptors.hh:198
ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry > FiniteElement
Definition: localtoglobaladaptors.hh:249
const Traits::Coefficients & coefficients() const
Definition: localtoglobaladaptors.hh:227
static const std::size_t dimRange
Definition: localtoglobaladaptors.hh:36
Convert a simple scalar local basis into a global basis.
Definition: localtoglobaladaptors.hh:65
static const std::size_t diffOrder
Definition: localtoglobaladaptors.hh:41
LocalBasisTraits::DomainFieldType DomainField
Definition: localtoglobaladaptors.hh:29
LocalBasisTraits::RangeFieldType RangeField
Definition: localtoglobaladaptors.hh:35
void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< typename Traits::Jacobian > &out) const
Definition: localtoglobaladaptors.hh:125