dune-fem  2.8-git
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 
19 namespace Dune
20 {
21 
22  namespace Fem
23  {
24 
25  // ShapeFunctionSets
26  // -----------------
27 
33  {
34  public:
36  typedef ImplementationDefined ShapeFunctionSetType;
37 
44 
52  ShapeFunctionSets ( const ShapeFunctionSets & ) = delete;
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 
299  VectorialShapeFunctionSets ( const ThisType & ) = delete;
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.
Definition: bindguard.hh:11
static constexpr T max(T a)
Definition: utility.hh:77
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
const std::vector< Dune::GeometryType > & types() const
return vector of geometry types
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(const ShapeFunctionSets &)=delete
copy constructor
ShapeFunctionSets & operator=(const ShapeFunctionSets &)=delete
assignment operator
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
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
CachedShapeFunctionSets & operator=(const ThisType &)=delete
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 & operator=(const ThisType &)=delete
VectorialShapeFunctionSets(ThisType &&other)
Definition: shapefunctionsets.hh:303
int order() const
return maximum order
Definition: shapefunctionsets.hh:319
const std::vector< Dune::GeometryType > & types() const
return vector of geometry types
Definition: shapefunctionsets.hh:316
ShapeFunctionSetType shapeFunctionSet(const Dune::GeometryType &type) const
return shape function set
Definition: shapefunctionsets.hh:325
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
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