DUNE-FEM (unstable)

shapefunctionsets.hh
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
9
10#include <dune/geometry/type.hh>
11
12#include <dune/fem/space/common/allgeomtypes.hh>
13#include <dune/fem/space/common/basesetlocalkeystorage.hh>
15#include <dune/fem/space/shapefunctionset/selectcaching.hh>
16#include <dune/fem/space/shapefunctionset/vectorial.hh>
17#include <dune/fem/storage/singletonlist.hh>
18
19namespace Dune
20{
21
22 namespace Fem
23 {
24
25 // ShapeFunctionSets
26 // -----------------
27
33 {
34 public:
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
78
80 };
81
82
83
84 // CachedShapeFunctionSets
85 // -----------------------
86
87 template< class GridPart, class ShapeFunctionSet,
88 class Factory = Dune::Fem::DefaultSingletonFactory< Dune::GeometryType, ShapeFunctionSet > >
89 class CachedShapeFunctionSets
90 {
91 typedef CachedShapeFunctionSets< GridPart, ShapeFunctionSet, Factory > ThisType;
92
93 public:
95 typedef GridPart GridPartType;
97 typedef Dune::Fem::ShapeFunctionSetProxy< ShapeFunctionSet > ShapeFunctionSetType;
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
105 typedef Dune::Fem::BaseSetLocalKeyStorage< ShapeFunctionSet > ShapeFunctionSetStorageType;
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
132 CachedShapeFunctionSets ( ThisType &&other )
133 : types_( std::move( other.types_ ) ),
134 shapeFunctionSets_( std::move( other.shapeFunctionSets_ ) )
135 {}
136
137 CachedShapeFunctionSets &operator= ( const ThisType & ) = delete;
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 >
196 class SelectCachingShapeFunctionSets
197 {
198 typedef SelectCachingShapeFunctionSets< GridPart, ShapeFunctionSet, Storage > ThisType;
199
200 typedef SelectCachingShapeFunctionSet< ShapeFunctionSet, Storage > CachedShapeFunctionSetType;
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
213 typedef CachedShapeFunctionSets< GridPart, CachedShapeFunctionSetType, Factory > Implementation;
214
215 public:
217 typedef typename Implementation::ShapeFunctionSetType ShapeFunctionSetType;
218
219 static constexpr bool codegenShapeFunctionSet = detail::IsCodegenShapeFunctionSet< CachedShapeFunctionSetType >::value;
220
225 explicit SelectCachingShapeFunctionSets ( const GridPart &gridPart )
226 : impl_( gridPart )
227 {}
228
235 SelectCachingShapeFunctionSets ( const ThisType & ) = delete;
236
237 SelectCachingShapeFunctionSets ( ThisType &&other )
238 : impl_( std::move( other.impl_ ) )
239 {}
240
241 SelectCachingShapeFunctionSets &operator= ( const ThisType & ) = delete;
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 >
270 class VectorialShapeFunctionSets
271 {
272 typedef VectorialShapeFunctionSets< Implementation, Range > ThisType;
273
274 public:
275 static constexpr bool codegenShapeFunctionSet = detail::IsCodegenShapeFunctionSet< Implementation >::value;
276
278 typedef VectorialShapeFunctionSet< typename Implementation::ShapeFunctionSetType, Range > ShapeFunctionSetType;
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
299 VectorialShapeFunctionSets ( const ThisType & ) = delete;
300
301 VectorialShapeFunctionSets ( ThisType & ) = delete;
302
303 VectorialShapeFunctionSets ( ThisType &&other )
304 : impl_( std::move( other.impl_ ) )
305 {}
306
307 VectorialShapeFunctionSets &operator= ( const ThisType & ) = delete;
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
consecutive, persistent index set for the leaf level based on the grid's hierarchy index set
Definition: adaptiveleafindexset.hh:1351
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 for shape function sets.
Definition: shapefunctionset.hh:33
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
Singleton list for key/object pairs.
Definition: singletonlist.hh:53
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:114
Documentation related stuff.
Dune namespace.
Definition: alignedallocator.hh:13
STL namespace.
Provides a proxy class for pointers to a shape function set.
Dummy struct used for documentation purposes.
Definition: documentation.hh:42
A unique label for each type of element that can occur in a grid.
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Nov 13, 23:29, 2024)