dune-fem 2.8.0
Loading...
Searching...
No Matches
shapefunctionsets.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_SPACE_DISCONTINUOUSGALERKIN_SHAPEFUNCTIONSETS_HH
2#define DUNE_FEM_SPACE_DISCONTINUOUSGALERKIN_SHAPEFUNCTIONSETS_HH
3
4#include <algorithm>
5#include <utility>
6#include <vector>
7
8#include <dune/common/documentation.hh>
9
10#include <dune/geometry/type.hh>
11
18
19namespace Dune
20{
21
22 namespace Fem
23 {
24
25 // ShapeFunctionSets
26 // -----------------
27
33 {
34 public:
36 typedef ImplementationDefined ShapeFunctionSetType;
37
44
53
56
63 const std::vector< Dune::GeometryType > &types () const;
64
66 int order () const;
67
69 int order ( Dune::GeometryType type ) const;
70
77 ShapeFunctionSetType shapeFunctionSet ( const Dune::GeometryType &type ) const;
78
80 };
81
82
83
84 // CachedShapeFunctionSets
85 // -----------------------
86
87 template< class GridPart, class ShapeFunctionSet,
90 {
92
93 public:
95 typedef GridPart GridPartType;
98
99 private:
100 static const int dimension = GridPartType::dimension;
101 static const int mydimension = ShapeFunctionSet::FunctionSpaceType::dimDomain;
102 static const int codimension = dimension - mydimension;
103
106
107 public:
112 explicit CachedShapeFunctionSets ( const GridPartType &gridPart )
113 : types_( types( gridPart ) )
114 {
115 typedef typename std::vector< Dune::GeometryType >::const_iterator const_iterator;
116 const const_iterator end = types_.end();
117 for( const_iterator it = types_.begin(); it != end; ++it )
118 {
119 const Dune::GeometryType type = *it;
120 shapeFunctionSets_.template insert< SingletonProviderType >( type );
121 }
122 }
123
130 CachedShapeFunctionSets ( const ThisType & ) = delete;
131
133 : types_( std::move( other.types_ ) ),
134 shapeFunctionSets_( std::move( other.shapeFunctionSets_ ) )
135 {}
136
138
146 const std::vector< Dune::GeometryType > &types () const { return types_; }
147
149 int order () const
150 {
151 int order = 0;
152
153 typedef typename std::vector< Dune::GeometryType >::const_iterator const_iterator;
154 const const_iterator end = types_.end();
155 for( const_iterator it = types_.begin(); it != end; ++it )
156 {
157 const Dune::GeometryType type = *it;
158 order = std::max( this->order( type ), order );
159 }
160
161 return order;
162 }
163
165 int order ( Dune::GeometryType type ) const
166 {
167 return shapeFunctionSet( type ).order();
168 }
169
171 ShapeFunctionSetType shapeFunctionSet ( const Dune::GeometryType &type ) const
172 {
173 return ShapeFunctionSetType( &shapeFunctionSets_[ type ] );
174 }
175
178 private:
179 static std::vector< Dune::GeometryType > types ( const GridPartType &gridPart )
180 {
181 typedef typename GridPartType::GridType GridType;
182 typedef typename GridPartType::IndexSetType IndexSetType;
183 return Dune::Fem::AllGeomTypes< IndexSetType, GridType >( gridPart.indexSet() ).geomTypes( codimension );
184 }
185
186 std::vector< Dune::GeometryType > types_;
187 ShapeFunctionSetStorageType shapeFunctionSets_;
188 };
189
190
191
192 // SelectCachingShapeFunctionSets
193 // ------------------------------
194
195 template< class GridPart, class ShapeFunctionSet, class Storage >
197 {
199
201
202 struct Factory
203 {
204 static CachedShapeFunctionSetType *createObject ( const Dune::GeometryType &type )
205 {
206 typedef typename CachedShapeFunctionSetType::ImplementationType ImplementationType;
207 return new CachedShapeFunctionSetType( type, ImplementationType( type ) );
208 }
209
210 static void deleteObject ( CachedShapeFunctionSetType *object ) { delete object; }
211 };
212
214
215 public:
218
219 static constexpr bool codegenShapeFunctionSet = detail::IsCodegenShapeFunctionSet< CachedShapeFunctionSetType >::value;
220
225 explicit SelectCachingShapeFunctionSets ( const GridPart &gridPart )
226 : impl_( gridPart )
227 {}
228
236
238 : impl_( std::move( other.impl_ ) )
239 {}
240
242
246 const std::vector< Dune::GeometryType > &types () const { return impl_.types(); }
247
249 int order () const { return impl_.order(); }
250
252 int order ( Dune::GeometryType type ) const { return impl_.order( type ); }
253
255 ShapeFunctionSetType shapeFunctionSet ( const Dune::GeometryType &type ) const
256 {
257 return impl_.shapeFunctionSet( type );
258 }
259
260 private:
261 Implementation impl_;
262 };
263
264
265
266 // VectorialShapeFunctionSets
267 // --------------------------
268
269 template< class Implementation, class Range >
271 {
273
274 public:
275 static constexpr bool codegenShapeFunctionSet = detail::IsCodegenShapeFunctionSet< Implementation >::value;
276
279
284 explicit VectorialShapeFunctionSets ( Implementation &&impl )
285 : impl_( impl )
286 {}
287
288 template< class... Args >
289 explicit VectorialShapeFunctionSets ( Args &&...args )
290 : impl_( std::forward< Args >( args )... )
291 {}
292
300
302
304 : impl_( std::move( other.impl_ ) )
305 {}
306
308
316 const std::vector< Dune::GeometryType > &types () const { return impl().types(); }
317
319 int order () const { return impl().order(); }
320
322 int order ( Dune::GeometryType type ) const { return impl().order( type ); }
323
325 ShapeFunctionSetType shapeFunctionSet ( const Dune::GeometryType &type ) const
326 {
327 return ShapeFunctionSetType( impl().shapeFunctionSet( type ) );
328 }
329
332 private:
333 const Implementation &impl () const { return impl_; }
334
335 Implementation impl_;
336 };
337
338 } // namespace Fem
339
340} // namespace Dune
341
342#endif // #ifndef DUNE_FEM_SPACE_DISCONTINUOUSGALERKIN_SHAPEFUNCTIONSETS_HH
Provides a proxy class for pointers to a shape function set.
STL namespace.
double max(const Dune::Fem::Double &v, const double p)
Definition: double.hh:965
Definition: bindguard.hh:11
default implementation uses method geomTypes of given index set. Used in DiscreteFunctionSpaces.
Definition: allgeomtypes.hh:99
const std ::vector< GeometryType > & geomTypes(unsigned int codim) const
returns vector with geometry tpyes this index set has indices for
Definition: allgeomtypes.hh:171
@ dimDomain
dimension of domain vector space
Definition: functionspaceinterface.hh:46
interface class representing a family of shape function sets
Definition: shapefunctionsets.hh:33
ShapeFunctionSets(ShapeFunctionSets &&)
move constructor
int order(Dune::GeometryType type) const
return order per geometry type
ShapeFunctionSetType shapeFunctionSet(const Dune::GeometryType &type) const
return shape function set
ImplementationDefined ShapeFunctionSetType
shape function set type
Definition: shapefunctionsets.hh:36
ShapeFunctionSets & operator=(const ShapeFunctionSets &)=delete
assignment operator
ShapeFunctionSets(const ShapeFunctionSets &)=delete
copy constructor
const std::vector< Dune::GeometryType > & types() const
return vector of geometry types
int order() const
return maximum order
Definition: shapefunctionsets.hh:90
CachedShapeFunctionSets(ThisType &&other)
Definition: shapefunctionsets.hh:132
GridPart GridPartType
grid part type
Definition: shapefunctionsets.hh:95
Dune::Fem::ShapeFunctionSetProxy< ShapeFunctionSet > ShapeFunctionSetType
shape function set type
Definition: shapefunctionsets.hh:97
CachedShapeFunctionSets(const GridPartType &gridPart)
Definition: shapefunctionsets.hh:112
ShapeFunctionSetType shapeFunctionSet(const Dune::GeometryType &type) const
return shape function set
Definition: shapefunctionsets.hh:171
CachedShapeFunctionSets & operator=(const ThisType &)=delete
const std::vector< Dune::GeometryType > & types() const
return vector of geometry types
Definition: shapefunctionsets.hh:146
CachedShapeFunctionSets(const ThisType &)=delete
int order(Dune::GeometryType type) const
return maximum order
Definition: shapefunctionsets.hh:165
int order() const
return maximum order
Definition: shapefunctionsets.hh:149
Definition: shapefunctionsets.hh:197
Implementation::ShapeFunctionSetType ShapeFunctionSetType
shape function set type
Definition: shapefunctionsets.hh:217
SelectCachingShapeFunctionSets(const GridPart &gridPart)
Definition: shapefunctionsets.hh:225
int order(Dune::GeometryType type) const
return maximum order
Definition: shapefunctionsets.hh:252
SelectCachingShapeFunctionSets(ThisType &&other)
Definition: shapefunctionsets.hh:237
static constexpr bool codegenShapeFunctionSet
Definition: shapefunctionsets.hh:219
SelectCachingShapeFunctionSets(const ThisType &)=delete
int order() const
return maximum order
Definition: shapefunctionsets.hh:249
ShapeFunctionSetType shapeFunctionSet(const Dune::GeometryType &type) const
return shape function set
Definition: shapefunctionsets.hh:255
SelectCachingShapeFunctionSets & operator=(const ThisType &)=delete
const std::vector< Dune::GeometryType > & types() const
return vector of geometry types
Definition: shapefunctionsets.hh:246
Definition: shapefunctionsets.hh:271
VectorialShapeFunctionSets(ThisType &&other)
Definition: shapefunctionsets.hh:303
int order() const
return maximum order
Definition: shapefunctionsets.hh:319
ShapeFunctionSetType shapeFunctionSet(const Dune::GeometryType &type) const
return shape function set
Definition: shapefunctionsets.hh:325
VectorialShapeFunctionSets & operator=(const ThisType &)=delete
VectorialShapeFunctionSet< typename Implementation::ShapeFunctionSetType, Range > ShapeFunctionSetType
shape function set type
Definition: shapefunctionsets.hh:278
VectorialShapeFunctionSets(Args &&...args)
Definition: shapefunctionsets.hh:289
VectorialShapeFunctionSets(ThisType &)=delete
VectorialShapeFunctionSets(const ThisType &)=delete
static constexpr bool codegenShapeFunctionSet
Definition: shapefunctionsets.hh:275
const std::vector< Dune::GeometryType > & types() const
return vector of geometry types
Definition: shapefunctionsets.hh:316
VectorialShapeFunctionSets(Implementation &&impl)
Definition: shapefunctionsets.hh:284
int order(Dune::GeometryType type) const
return maximum order
Definition: shapefunctionsets.hh:322
Definition: proxy.hh:35
int order() const
Definition: proxy.hh:67
Definition: selectcaching.hh:26
Interface class for shape function sets.
Definition: shapefunctionset/shapefunctionset.hh:33
Definition: shapefunctionset/vectorial.hh:447
Definition: singletonlist.hh:25
Singleton list for key/object pairs.
Definition: singletonlist.hh:53