dune-fem  2.8-git
basisfunctionset/hpdg/vectorial.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_HPDG_SPACE_BASISFUNCTIONSETS_VECTORIAL_HH
2 #define DUNE_FEM_HPDG_SPACE_BASISFUNCTIONSETS_VECTORIAL_HH
3 
4 #include <cstddef>
5 
6 #include <dune/common/exceptions.hh>
7 
8 #include <dune/geometry/type.hh>
9 
11 
12 #include "basisfunctionsets.hh"
13 
14 namespace Dune
15 {
16 
17  namespace Fem
18  {
19 
20  namespace hpDG
21  {
22 
23  // Internal forward declaration
24  // ----------------------------
25 
26  template< class BasisFunctionSets, class Range >
27  class VectorialBasisFunctionSets;
28 
29 
30 
31 #ifndef DOXYGEN
32 
33  // VectorialBasisFunctionSetTraits
34  // -------------------------------
35 
36  template< class BasisFunctionSets, class Range >
37  class VectorialBasisFunctionSetsTraits
38  {
39  public:
40  using ImplementationType = VectorialBasisFunctionSets< BasisFunctionSets, Range >;
41 
42  using GridPartType = typename BasisFunctionSets::GridPartType;
43  using Types = typename BasisFunctionSets::Types;
44 
45  using KeyType = typename BasisFunctionSets::KeyType;
47  static const int localBlockSize = Range::dimension * BasisFunctionSets::localBlockSize;
48 
49  using DataType = void *;
50  };
51 
52 #endif // #ifndef DOXYGEN
53 
54 
55 
56  // VectorialBasisFunctionSet
57  // -------------------------
58 
66  template< class BasisFunctionSets, class Range >
68  : public Dune::Fem::hpDG::BasisFunctionSets< VectorialBasisFunctionSetsTraits< BasisFunctionSets, Range > >
69  {
71 
72  public:
74  using KeyType = typename BaseType::KeyType;
75 
79  using EntityType = typename BaseType::EntityType;
80 
82  using DataType = typename BaseType::DataType;
83 
88  explicit VectorialBasisFunctionSets ( const BasisFunctionSets &basisFunctionSets )
89  : basisFunctionSets_( basisFunctionSets )
90  {}
91 
99  typename BaseType::Types types () const { return impl().types(); }
100 
102  std::size_t maxBlocks () const { return impl().maxBlocks(); }
103 
105  std::size_t maxBlocks ( GeometryType type ) const { return impl().maxBlocks(); }
106 
108  std::size_t blocks ( GeometryType type, const KeyType &key ) const { return impl().maxBlocks(); }
109 
111  DataType encode ( const KeyType &key ) const
112  {
113  DUNE_THROW( NotImplemented, "Method encode() not implemented yet" );
114  }
115 
117  KeyType decode ( const DataType &data ) const
118  {
119  DUNE_THROW( NotImplemented, "Method decode() not implemented yet" );
120  }
121 
123  static constexpr bool orthogonal () noexcept { return BasisFunctionSets::orthogonal(); }
124 
126  int order () const { return impl().order(); }
127 
129  int order ( GeometryType type ) const { return impl().order( type ); }
130 
132  int order ( GeometryType type, const KeyType &key ) const { return impl().order( type, key ); }
133 
135  std::size_t size ( GeometryType type, const KeyType &key ) const
136  {
137  return static_cast< std::size_t >( Range::dimension ) * impl().order( type, key );
138  }
139 
141  BasisFunctionSetType basisFunctionSet ( const EntityType &entity, const KeyType &key ) const
142  {
143  return BasisFunctionSetType( impl().basisFunctionSet( entity, key ) );
144  }
145 
153  const BasisFunctionSets &impl() const { return basisFunctionSets_; }
154 
157  private:
158  BasisFunctionSets basisFunctionSets_;
159  };
160 
161  } // namespace hpDG
162 
163  } // namespace Fem
164 
165 } // namespace Dune
166 
167 #endif // #ifndef DUNE_FEM_HPDG_SPACE_BASISFUNCTIONSETS_VECTORIAL_HH
Definition: bindguard.hh:11
abstract interface class for a family of local basis function sets
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:30
typename Traits::DataType DataType
data type
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:53
std::size_t maxBlocks() const
return maximum number of blocks used
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:77
typename Traits::Types Types
a range of geometry types
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:47
typename Traits::BasisFunctionSetType BasisFunctionSetType
basis function set type
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:42
static const int localBlockSize
block size
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:50
Types types() const
return range of supported geometry types
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:64
typename BasisFunctionSetType::EntityType EntityType
entity type
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:44
int order() const
return maximum polynomial order
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:130
static constexpr bool orthogonal() noexcept
return true if basis function sets are always orthogonal, false otherwise
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:124
typename Traits::KeyType KeyType
key type
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:39
typename Traits::GridPartType GridPartType
grid part type
Definition: basisfunctionset/hpdg/basisfunctionsets.hh:36
A meta implemenation of a family of local basis function sets.
Definition: basisfunctionset/hpdg/vectorial.hh:69
BasisFunctionSetType basisFunctionSet(const EntityType &entity, const KeyType &key) const
return basis function set for given entity
Definition: basisfunctionset/hpdg/vectorial.hh:141
int order() const
return maximum order
Definition: basisfunctionset/hpdg/vectorial.hh:126
DataType encode(const KeyType &key) const
map key to data type
Definition: basisfunctionset/hpdg/vectorial.hh:111
std::size_t maxBlocks() const
Definition: basisfunctionset/hpdg/vectorial.hh:102
const BasisFunctionSets & impl() const
return scalar basis function sets
Definition: basisfunctionset/hpdg/vectorial.hh:153
int order(GeometryType type) const
return maximum order
Definition: basisfunctionset/hpdg/vectorial.hh:129
BaseType::Types types() const
Definition: basisfunctionset/hpdg/vectorial.hh:99
KeyType decode(const DataType &data) const
map data to key type
Definition: basisfunctionset/hpdg/vectorial.hh:117
typename BaseType::DataType DataType
Definition: basisfunctionset/hpdg/vectorial.hh:82
VectorialBasisFunctionSets(const BasisFunctionSets &basisFunctionSets)
Definition: basisfunctionset/hpdg/vectorial.hh:88
int order(GeometryType type, const KeyType &key) const
return maximum order
Definition: basisfunctionset/hpdg/vectorial.hh:132
typename BaseType::KeyType KeyType
Definition: basisfunctionset/hpdg/vectorial.hh:74
typename BaseType::EntityType EntityType
entity type
Definition: basisfunctionset/hpdg/vectorial.hh:79
std::size_t size(GeometryType type, const KeyType &key) const
Definition: basisfunctionset/hpdg/vectorial.hh:135
std::size_t maxBlocks(GeometryType type) const
Definition: basisfunctionset/hpdg/vectorial.hh:105
static constexpr bool orthogonal() noexcept
Definition: basisfunctionset/hpdg/vectorial.hh:123
typename BaseType::BasisFunctionSetType BasisFunctionSetType
basis function set
Definition: basisfunctionset/hpdg/vectorial.hh:77
std::size_t blocks(GeometryType type, const KeyType &key) const
Definition: basisfunctionset/hpdg/vectorial.hh:108
Builds a vectorial basis function set from given scalar basis function set.
Definition: basisfunctionset/vectorial.hh:279