dune-fem  2.8-git
dofstorage.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_DOFSTORAGE_HH
2 #define DUNE_FEM_DOFSTORAGE_HH
3 
4 #include <cassert>
5 
6 namespace Dune
7 {
8 
9  namespace Fem
10  {
11 
17 
20  template <DofStoragePolicy p>
22 
24  template <>
26  public:
29  DofConversionUtility(int numComponents) :
30  numComponents_(numComponents)
31  {}
32 
34  static DofStoragePolicy policy() { return PointBased; }
35 
40  void newSize(int size) {} // just do nothing
41 
44  int component(int combinedIndex) const {
45  return combinedIndex%numComponents_;
46  }
48  int containedDof(int combinedIndex) const {
49  return combinedIndex/numComponents_;
50  }
51 
54  int combinedDof(int containedIndex, int component) const {
55  return containedIndex*numComponents_ + component;
56  }
57 
58  private:
59  const int numComponents_;
60  };
61 
63  template <>
65  public:
69  size_(size)
70  {}
71 
73  static DofStoragePolicy policy() { return VariableBased; }
74 
76  void newSize(int size) { size_ = size; }
77 
80  int component(int combinedIndex) const {
81  return combinedIndex/size_;
82  }
83 
85  int containedDof(int combinedIndex) const {
86  return combinedIndex%size_;
87  }
88 
91  int combinedDof(int containedIndex, int component) const {
92  return containedIndex + component*size_;
93  }
94 
95  private:
96  int size_;
97  };
98 
100  template <unsigned int dimRange>
102  public:
106  {
107  // make sure that we use the correct number of components
108  assert( numComponents == int(dimRange) );
109  }
110 
112  static DofStoragePolicy policy() { return PointBased; }
113 
118  void newSize(const int size) {} // just do nothing
119 
122  int component(const int combinedIndex) const
123  {
124  return combinedIndex % dimRange;
125  }
127  int containedDof(const int combinedIndex) const
128  {
129  return combinedIndex / dimRange;
130  }
131 
134  int combinedDof(const int containedIndex,
135  const int component) const
136  {
137  return containedIndex * dimRange + component;
138  }
139  };
140 
141  } // namespace Fem
142 
143 } // namespace Dune
144 
145 #endif // #ifndef DUNE_FEM_DOFSTORAGE_HH
Definition: bindguard.hh:11
DofStoragePolicy
Definition: dofstorage.hh:16
@ PointBased
Definition: dofstorage.hh:16
@ VariableBased
Definition: dofstorage.hh:16
Definition: dofstorage.hh:21
static DofStoragePolicy policy()
Find out what type of policy this is.
Definition: dofstorage.hh:34
DofConversionUtility(int numComponents)
Definition: dofstorage.hh:29
int containedDof(int combinedIndex) const
Number of the (scalar) base function belonging to base function index.
Definition: dofstorage.hh:48
void newSize(int size)
Definition: dofstorage.hh:40
int combinedDof(int containedIndex, int component) const
Definition: dofstorage.hh:54
int component(int combinedIndex) const
Definition: dofstorage.hh:44
int containedDof(int combinedIndex) const
Number of the (scalar) base function belonging to base function index.
Definition: dofstorage.hh:85
DofConversionUtility(int size)
Definition: dofstorage.hh:68
void newSize(int size)
Set new size after adaptation.
Definition: dofstorage.hh:76
int component(int combinedIndex) const
Definition: dofstorage.hh:80
int combinedDof(int containedIndex, int component) const
Definition: dofstorage.hh:91
static DofStoragePolicy policy()
Find out what type of policy this is.
Definition: dofstorage.hh:73
Specialisation for PointBased approach.
Definition: dofstorage.hh:101
int component(const int combinedIndex) const
Definition: dofstorage.hh:122
void newSize(const int size)
Definition: dofstorage.hh:118
static DofStoragePolicy policy()
Find out what type of policy this is.
Definition: dofstorage.hh:112
PointBasedDofConversionUtility(int numComponents)
Definition: dofstorage.hh:105
int combinedDof(const int containedIndex, const int component) const
Definition: dofstorage.hh:134
int containedDof(const int combinedIndex) const
Number of the (scalar) base function belonging to base function index.
Definition: dofstorage.hh:127