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/static_assert.hh>
13 #include <dune/common/typetraits.hh>
15 #include <dune/geometry/type.hh>
28 template<
class LocalBasisTraits, std::
size_t dimDomainGlobal_>
40 typedef FieldMatrix<RangeField, dimRange, dimDomainGlobal>
Jacobian;
65 template<
class LocalBasis,
class Geometry>
67 dune_static_assert(LocalBasis::Traits::dimRange == 1,
68 "ScalarLocalToGlobalBasisAdaptor can only wrap a "
69 "scalar local basis.");
70 dune_static_assert((is_same<
typename LocalBasis::Traits::DomainFieldType,
71 typename Geometry::ctype>::
value),
72 "ScalarLocalToGlobalBasisAdaptor: LocalBasis must use "
73 "the same ctype as Geometry");
75 ( static_cast<std::size_t>(LocalBasis::Traits::dimDomain) ==
76 static_cast<std::size_t>(Geometry::mydimension),
77 "ScalarLocalToGlobalBasisAdaptor: LocalBasis domain dimension must "
78 "match local dimension of Geometry");
80 const LocalBasis& localBasis;
98 const Geometry& geometry_) :
99 localBasis(localBasis_), geometry(geometry_)
102 std::size_t
size()
const {
return localBasis.size(); }
112 if(geometry.affine())
114 return localBasis.order();
121 std::vector<typename Traits::Range>& out)
const
123 localBasis.evaluateFunction(in, out);
127 std::vector<typename Traits::Jacobian>& out)
const
129 std::vector<typename LocalBasis::Traits::JacobianType>
130 localJacobian(
size());
131 localBasis.evaluateJacobian(in, localJacobian);
133 const typename Geometry::Jacobian &geoJacobian =
134 geometry.jacobianInverseTransposed(in);
137 for(std::size_t i = 0; i <
size(); ++i)
138 geoJacobian.mv(localJacobian[i][0], out[i][0]);
149 template<
class LocalInterpolation,
class Traits_>
151 const LocalInterpolation& localInterpolation;
166 (
const LocalInterpolation& localInterpolation_) :
167 localInterpolation(localInterpolation_)
170 template<
class Function,
class Coeff>
171 void interpolate(
const Function&
function, std::vector<Coeff>& out)
const
172 { localInterpolation.interpolate(
function, out); }
187 template<
class LocalFiniteElement,
class Geometry>
194 Traits::LocalBasisType, Geometry>
Basis;
198 typedef typename LocalFiniteElement::Traits::LocalCoefficientsType
203 const LocalFiniteElement &localFE;
219 (
const LocalFiniteElement& localFE_,
const Geometry &geometry) :
221 basis_(localFE.localBasis(), geometry),
222 interpolation_(localFE.localInterpolation())
227 {
return interpolation_; }
229 {
return localFE.localCoefficients(); }
230 GeometryType
type()
const {
return localFE.type(); }
244 template<
class LocalFiniteElement,
class Geometry>
246 const LocalFiniteElement& localFE;
262 (
const LocalFiniteElement &localFE_) : localFE(localFE_) {}
282 #endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH
FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian
Definition: localtoglobaladaptors.hh:40
void interpolate(const Function &function, std::vector< Coeff > &out) const
Definition: localtoglobaladaptors.hh:171
void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< typename Traits::Jacobian > &out) const
Definition: localtoglobaladaptors.hh:126
number of partial derivatives supported
Definition: localbasis.hh:76
const Traits::Basis & basis() const
Definition: localtoglobaladaptors.hh:225
void evaluateFunction(const typename Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const
Definition: localtoglobaladaptors.hh:120
ImplementationDefined FiniteElement
Type of the finite element.
Definition: interface.hh:115
const FiniteElement make(const Geometry &geometry)
construct ScalarLocalToGlobalFiniteElementAdaptor
Definition: localtoglobaladaptors.hh:275
RF RangeFieldType
Export type for range field.
Definition: localbasis.hh:54
ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry > FiniteElement
Definition: localtoglobaladaptors.hh:250
LocalToGlobalBasisAdaptorTraits< typename LocalBasis::Traits, Geometry::coorddimension > Traits
Definition: localtoglobaladaptors.hh:85
static const std::size_t dimDomainGlobal
Definition: localtoglobaladaptors.hh:32
GeometryType type() const
Definition: localtoglobaladaptors.hh:230
Traits_ Traits
Definition: localtoglobaladaptors.hh:154
ScalarLocalToGlobalBasisAdaptor< typename LocalFiniteElement::Traits::LocalBasisType, Geometry > Basis
Definition: localtoglobaladaptors.hh:194
Convert a simple scalar local basis into a global basis.
Definition: localtoglobaladaptors.hh:66
Convert a local interpolation into a global interpolation.
Definition: localtoglobaladaptors.hh:150
R RangeType
range type
Definition: localbasis.hh:63
ScalarLocalToGlobalFiniteElementAdaptorFactory(const LocalFiniteElement &localFE_)
construct a ScalarLocalToGlobalFiniteElementAdaptorFactory
Definition: localtoglobaladaptors.hh:262
std::size_t order() const
return maximum polynomial order of the base function
Definition: localtoglobaladaptors.hh:111
LocalToGlobalInterpolationAdaptor(const LocalInterpolation &localInterpolation_)
construct a LocalToGlobalInterpolationAdaptor
Definition: localtoglobaladaptors.hh:166
LocalBasisTraits::RangeType Range
Definition: localtoglobaladaptors.hh:38
LocalFiniteElement::Traits::LocalCoefficientsType Coefficients
Definition: localtoglobaladaptors.hh:199
Traits class for local-to-global basis adaptors.
Definition: localtoglobaladaptors.hh:29
LocalToGlobalInterpolationAdaptor< typename LocalFiniteElement::Traits::LocalInterpolationType, typename Basis::Traits > Interpolation
Definition: localtoglobaladaptors.hh:197
FieldVector< DomainField, dimDomainGlobal > DomainGlobal
Definition: localtoglobaladaptors.hh:34
LocalBasisTraits::DomainType DomainLocal
Definition: localtoglobaladaptors.hh:33
dimension of the domain
Definition: localbasis.hh:47
dimension of the range
Definition: localbasis.hh:59
Definition: tensor.hh:165
Definition: localtoglobaladaptors.hh:192
Factory for ScalarLocalToGlobalFiniteElementAdaptor objects.
Definition: localtoglobaladaptors.hh:245
DF DomainFieldType
Export type for domain field.
Definition: localbasis.hh:42
D DomainType
domain type
Definition: localbasis.hh:51
ScalarLocalToGlobalFiniteElementAdaptor(const LocalFiniteElement &localFE_, const Geometry &geometry)
construct a ScalarLocalToGlobalFiniteElementAdaptor
Definition: localtoglobaladaptors.hh:219
static const std::size_t dimDomainLocal
Definition: localtoglobaladaptors.hh:31
const Traits::Interpolation & interpolation() const
Definition: localtoglobaladaptors.hh:226
static const std::size_t dimRange
Definition: localtoglobaladaptors.hh:37
std::size_t size() const
Definition: localtoglobaladaptors.hh:102
ScalarLocalToGlobalBasisAdaptor(const LocalBasis &localBasis_, const Geometry &geometry_)
construct a ScalarLocalToGlobalBasisAdaptor
Definition: localtoglobaladaptors.hh:97
static const std::size_t diffOrder
Definition: localtoglobaladaptors.hh:42
LocalBasisTraits::DomainFieldType DomainField
Definition: localtoglobaladaptors.hh:30
Convert a simple scalar local finite element into a global finite element.
Definition: localtoglobaladaptors.hh:188
const Traits::Coefficients & coefficients() const
Definition: localtoglobaladaptors.hh:228
LocalBasisTraits::RangeFieldType RangeField
Definition: localtoglobaladaptors.hh:36