dune-fem 2.8.0
Loading...
Searching...
No Matches
discontinuousgalerkin/interpolation.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_SPACE_DISCONTINUOUSGALERKIN_INTERPOLATION_HH
2#define DUNE_FEM_SPACE_DISCONTINUOUSGALERKIN_INTERPOLATION_HH
3
4#include <type_traits>
5#include <utility>
6
7#include <dune/grid/common/capabilities.hh>
8
11
14
15namespace Dune
16{
17
18 namespace Fem
19 {
20
21 // Internal forward declaration
22 // ----------------------------
23
24 template< class GridPart, class BasisFunctionSet,
25 class Quadrature = CachingQuadrature< GridPart, BasisFunctionSet::EntityType::codimension > >
26 class DiscontinuousGalerkinLocalL2Projection;
27
28 template< class GridPart, class BasisFunctionSet,
29 class Quadrature = CachingQuadrature< GridPart, BasisFunctionSet::EntityType::codimension > >
30 class LocalOrthonormalL2Projection;
31
32
33 // LocalOrthonormalL2Projection
34 // ----------------------------
35
37 template< class GridPart, class BasisFunctionSet, class Quadrature >
39 : public LocalL2Projection< BasisFunctionSet, LocalOrthonormalL2Projection< GridPart, BasisFunctionSet, Quadrature > >
40 {
43
44 public:
48 typedef typename BasisFunctionSetType :: EntityType EntityType;
49
50 private:
51 typedef GridPart GridPartType;
52 typedef typename GridPartType::GridType GridType;
53 typedef typename BasisFunctionSetType :: RangeType RangeType;
54
55 public:
62 {}
63
66 {}
67
75
77
78 ThisType &operator= ( const ThisType & ) = default;
79
80 ThisType &operator= ( ThisType &&other ) = default;
81
90 {
91 return basisFunctionSet_;
92 }
93
95 template< class LocalFunction, class LocalDofVector >
96 void apply ( const LocalFunction &localFunction, LocalDofVector &localDofVector ) const
97 {
98 // get entity and geometry
99 const EntityType &entity = localFunction.entity();
100
101 if( entity.type().isNone() )
102 {
104 ElementQuadratureType quadrature( entity, localFunction.order() + basisFunctionSet().order() );
105 computeL2Projection( entity, quadrature, localFunction, localDofVector );
106 }
107 else
108 {
109 // create quadrature with appropriate order
110 Quadrature quadrature( entity, localFunction.order() + basisFunctionSet().order() );
111 computeL2Projection( entity, quadrature, localFunction, localDofVector );
112 }
113 }
114
117 protected:
118 template <class QuadImpl, class LocalFunction, class LocalDofVector >
119 void computeL2Projection( const EntityType& entity,
120 const QuadImpl& quadrature,
121 const LocalFunction &localFunction, LocalDofVector &localDofVector ) const
122 {
123 // set all dofs to zero
124 localDofVector.clear();
125
126 const int nop = quadrature.nop();
127 // adjust size of values
128 values_.resize( nop );
129
130 // evaluate local function for all quadrature points
131 localFunction.evaluateQuadrature( quadrature, values_ );
132
133 // apply weight only (for orthonormal basis set integration element and
134 // mass matrix can be ignored even if geometry is non-affine)
135 for(auto qp : quadrature )
136 values_[ qp.index() ] *= qp.weight();
137
138 // add values to local dof vector
139 basisFunctionSet().axpy( quadrature, values_, localDofVector );
140 }
141
143 mutable std::vector< RangeType > values_;
144 };
145
146
147 // DiscontinuousGalerkinLocalL2Projection
148 // --------------------------------------
149
150 template< class GridPart, class BasisFunctionSet, class Quadrature >
152 : public LocalL2Projection< BasisFunctionSet, DiscontinuousGalerkinLocalL2Projection< GridPart, BasisFunctionSet, Quadrature > >
153 {
156
157 public:
160
161 private:
162 typedef GridPart GridPartType;
163 typedef typename GridPartType::GridType GridType;
164 static const bool cartesian = Dune::Capabilities::isCartesian< GridType >::v;
165
166 typedef typename std::conditional< cartesian,
169 >::type LocalRieszProjectionType;
170
172
173 public:
179 : impl_( LocalRieszProjectionType( basisFunctionSet ) )
180 {}
181
183 : impl_( LocalRieszProjectionType( std::forward< BasisFunctionSetType >( basisFunctionSet ) ) )
184 {}
185
193
195 : impl_( std::move( other.impl_ ) )
196 {}
197
198 ThisType &operator= ( const ThisType & ) = default;
199
201 {
202 impl_ = std::move( other.impl_ );
203 return *this;
204 }
205
214 {
215 return impl_.basisFunctionSet();
216 }
217
219 template< class LocalFunction, class LocalDofVector >
220 void apply ( const LocalFunction &localFunction, LocalDofVector &localDofVector ) const
221 {
222 impl_( localFunction, localDofVector );
223 }
224
225 void unbind() {}
226
229 private:
230 Implementation impl_;
231 };
232
233 } // namespace Fem
234
235} // namespace Dune
236
237#endif // #ifndef DUNE_FEM_SPACE_DISCONTINUOUSGALERKIN_INTERPOLATION_HH
STL namespace.
Definition: bindguard.hh:11
static GridFunctionView< GF > localFunction(const GF &gf)
Definition: gridfunctionview.hh:118
interface for local functions
Definition: localfunction.hh:77
please doc me
Definition: l2projection.hh:29
BasisFunctionSetType basisFunctionSet() const
return basis function set
Definition: l2projection.hh:179
Definition: operator/projection/local/riesz/orthonormal.hh:25
quadrature on the codim-0 reference element
Definition: elementquadrature.hh:58
actual interface class for quadratures
Definition: quadrature.hh:405
Interface class for basis function sets.
Definition: basisfunctionset/basisfunctionset.hh:31
void axpy(const Quadrature &quad, const Vector &values, DofVector &dofs) const
evaluate all basis function and multiply with given values and add to dofs
Definition: discontinuousgalerkin/interpolation.hh:153
BasisFunctionSet basisFunctionSet() const
return basis function set
Definition: discontinuousgalerkin/interpolation.hh:213
void unbind()
Definition: discontinuousgalerkin/interpolation.hh:225
BaseType::BasisFunctionSetType BasisFunctionSetType
basis function set type
Definition: discontinuousgalerkin/interpolation.hh:159
ThisType & operator=(const ThisType &)=default
DiscontinuousGalerkinLocalL2Projection(const BasisFunctionSetType &basisFunctionSet)
Definition: discontinuousgalerkin/interpolation.hh:178
DiscontinuousGalerkinLocalL2Projection(const ThisType &)=default
DiscontinuousGalerkinLocalL2Projection(BasisFunctionSetType &&basisFunctionSet)
Definition: discontinuousgalerkin/interpolation.hh:182
DiscontinuousGalerkinLocalL2Projection(ThisType &&other)
Definition: discontinuousgalerkin/interpolation.hh:194
void apply(const LocalFunction &localFunction, LocalDofVector &localDofVector) const
please doc me
Definition: discontinuousgalerkin/interpolation.hh:220
specialization of local L2 projection for orthonormal DG spaces
Definition: discontinuousgalerkin/interpolation.hh:40
BasisFunctionSetType basisFunctionSet_
Definition: discontinuousgalerkin/interpolation.hh:142
LocalOrthonormalL2Projection(ThisType &&other)=default
ThisType & operator=(const ThisType &)=default
void apply(const LocalFunction &localFunction, LocalDofVector &localDofVector) const
please doc me
Definition: discontinuousgalerkin/interpolation.hh:96
std::vector< RangeType > values_
Definition: discontinuousgalerkin/interpolation.hh:143
BasisFunctionSetType::EntityType EntityType
Definition: discontinuousgalerkin/interpolation.hh:48
LocalOrthonormalL2Projection(BasisFunctionSetType &&basisFunctionSet)
Definition: discontinuousgalerkin/interpolation.hh:64
void computeL2Projection(const EntityType &entity, const QuadImpl &quadrature, const LocalFunction &localFunction, LocalDofVector &localDofVector) const
Definition: discontinuousgalerkin/interpolation.hh:119
LocalOrthonormalL2Projection(const ThisType &)=default
BaseType::BasisFunctionSetType BasisFunctionSetType
basis function set type
Definition: discontinuousgalerkin/interpolation.hh:46
const BasisFunctionSet & basisFunctionSet() const
return basis function set
Definition: discontinuousgalerkin/interpolation.hh:89
LocalOrthonormalL2Projection(const BasisFunctionSetType &basisFunctionSet)
Definition: discontinuousgalerkin/interpolation.hh:60