dune-fem 2.12-git
Loading...
Searching...
No Matches
idgridpart/indexset.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_GRIDPART_IDGRIDPART_INDEXSET_HH
2#define DUNE_FEM_GRIDPART_IDGRIDPART_INDEXSET_HH
3
4#include <type_traits>
5#include <vector>
6
8
11
13
14namespace Dune
15{
16
17 namespace Fem
18 {
19
20 // Internal forward declaration
21 // ----------------------------
22
23 template< class GridFamily >
24 class IdIndexSet;
25
26
27
28 namespace __IdIndexSet
29 {
30
31 // IndexSet
32 // --------
33
34 template< class GridFamily >
36 {
37 protected:
39
40 public:
41 typedef typename Traits::HostGridPartType::IndexSetType HostIndexSetType;
42
43 static const int dimension = HostIndexSetType::dimension;
44
45 template< int codim >
46 struct Codim
47 {
48 typedef typename Traits::template Codim< codim >::Entity Entity;
49 };
50
51 typedef typename HostIndexSetType::IndexType IndexType;
52
53 typedef typename HostIndexSetType::Types Types;
54
58
59 Types types ( int codim ) const
60 {
61 return hostIndexSet().types( codim );
62 }
63
64 const std::vector< GeometryType > &geomTypes ( int codim ) const
65 {
66 return hostIndexSet().geomTypes( codim );
67 }
68
69 template< class Entity >
70 bool contains ( const Entity &entity ) const
71 {
72 return hostIndexSet().contains( entity.impl().hostEntity() );
73 }
74
76 {
77 return hostIndexSet().size( type );
78 }
79
80 IndexType size ( int codim ) const
81 {
82 return hostIndexSet().size( codim );
83 }
84
85 template< class Entity >
86 IndexType index ( const Entity &entity ) const
87 {
88 return index< Entity::codimension >( entity );
89 }
90
91 template< int codim >
92 IndexType index ( const typename Codim< codim >::Entity &entity ) const
93 {
94 return hostIndexSet().template index< codim >( entity.impl().hostEntity() );
95 }
96
97 template< class Entity >
98 IndexType subIndex ( const Entity &entity, int i, unsigned int cd ) const
99 {
100 return subIndex< Entity::codimension >( entity, i, cd );
101 }
102
103 template< int codim >
104 IndexType subIndex ( const typename Codim< codim >::Entity &entity, int i, unsigned int cd ) const
105 {
106 return hostIndexSet().template subIndex< codim >( entity.impl().hostEntity(), i, cd );
107 }
108
110 {
111 assert( hostIndexSet_ );
112 return *hostIndexSet_;
113 }
114
115 void requestCodimensions( const std::vector< int >& codimensions ) const
116 {
117 hostIndexSet().requestCodimensions( codimensions );
118 }
119
120 protected:
122 {
123 assert( hostIndexSet_ );
124 return const_cast< HostIndexSetType & >(*hostIndexSet_);
125 }
126
128 };
129
130
131
132 // ConsecutiveIndexSet
133 // -------------------
134
135 template< class GridFamily >
137 : public IndexSet< GridFamily >
138 {
140
141 public:
143
145
149
150 void resize () { hostIndexSet().resize(); }
151
152 bool compress () { return hostIndexSet().compress(); }
153
154 void insertEntity ( const typename BaseType::template Codim< 0 >::Entity &entity )
155 {
156 hostIndexSet().insertEntity( entity.impl().hostEntity() );
157 }
158
159 void removeEntity ( const typename BaseType::template Codim< 0 >::Entity &entity )
160 {
161 hostIndexSet().removeEntity( entity.impl().hostEntity() );
162 }
163
164 void backup () const { hostIndexSet().backup(); }
165
166 void restore () { hostIndexSet().restore(); }
167
168 template< class T >
170 {
171 hostIndexSet().write( stream );
172 }
173
174 template< class T >
176 {
177 hostIndexSet().read( stream );
178 }
179
180 protected:
182 {
183 return const_cast< HostIndexSetType& >( BaseType::hostIndexSet() );
184 }
185 };
186
187
188
189 // AdaptiveIndexSet
190 // ----------------
191
192 template< class GridFamily >
194 : public ConsecutiveIndexSet< GridFamily >
195 {
197
198 public:
201 {}
202
203 int numberOfHoles ( GeometryType type ) const
204 {
205 return this->hostIndexSet().numberOfHoles( type );
206 }
207
208 int numberOfHoles ( int codim ) const
209 {
210 return this->hostIndexSet().numberOfHoles( codim );
211 }
212
213 int oldIndex ( int hole, GeometryType type ) const
214 {
215 return this->hostIndexSet().oldIndex( hole, type );
216 }
217
218 int oldIndex ( int hole, int codim ) const
219 {
220 return this->hostIndexSet().oldIndex( hole, codim );
221 }
222
223 int newIndex ( int hole, GeometryType type ) const
224 {
225 return this->hostIndexSet().newIndex( hole, type );
226 }
227
228 int newIndex ( int hole, int codim ) const
229 {
230 return this->hostIndexSet().newIndex( hole, codim );
231 }
232 };
233
234
235
236 // Implementation
237 // --------------
238
239 template< class GridFamily,
244 {
245 typedef typename std::conditional< adaptive,
247 typename std::conditional< consecutive,
250 >::type
251 >::type Type;
252 };
253
254 } // namespace __IdIndexSet
255
256
257
258 // IdIndexSet
259 // ----------
260
261 template< class GridFamily >
263 : public __IdIndexSet::Implementation< GridFamily >::Type
264 {
266
267 friend struct Capabilities::isPersistentIndexSet< IdIndexSet< GridFamily > >;
268
269 public:
270 explicit IdIndexSet ( const typename BaseType::HostIndexSetType &hostIndexSet )
271 : BaseType ( hostIndexSet )
272 {}
273 };
274
275
276
277 namespace Capabilities
278 {
279
280 template< class GridFamily >
281 struct isConsecutiveIndexSet< IdIndexSet< GridFamily > >
282 : public isConsecutiveIndexSet< typename IdIndexSet< GridFamily >::HostIndexSetType >
283 {};
284
285 template< class GridFamily >
286 struct isAdaptiveIndexSet< IdIndexSet< GridFamily > >
287 : public isAdaptiveIndexSet< typename IdIndexSet< GridFamily >::HostIndexSetType >
288 {};
289
290 template< class GridFamily >
291 struct isPersistentIndexSet< IdIndexSet< GridFamily > >
292 {
293 private:
295 typedef typename IndexSetType::HostIndexSetType HostIndexSetType;
296
297 public:
299
300 static constexpr PersistentIndexSetInterface *map ( IndexSetType &indexSet ) noexcept
301 {
302 return isPersistentIndexSet< HostIndexSetType >::map( indexSet.hostIndexSet() );
303 }
304 };
305
306 } // namespace Capabilities
307
308 } // namespace Fem
309
310} // namespace Dune
311
312#endif // #ifndef DUNE_FEM_GRIDPART_IDGRIDPART_INDEXSET_HH
Implementation & impl()
specialize with true if index set implements the interface for consecutive index sets
Definition common/indexset.hh:61
specialize with true if index set implements the interface for adaptive index sets
Definition common/indexset.hh:83
virtual base class for persistent index sets
Definition persistentindexset.hh:35
capability for persistent index sets
Definition persistentindexset.hh:92
static constexpr PersistentIndexSetInterface * map(IndexSet &indexSet) noexcept
please doc me
Definition persistentindexset.hh:101
static const bool v
please doc me
Definition persistentindexset.hh:98
Definition idgridpart/indexset.hh:264
IdIndexSet(const typename BaseType::HostIndexSetType &hostIndexSet)
Definition idgridpart/indexset.hh:270
Definition idgridpart/indexset.hh:36
IndexSet(const HostIndexSetType &hostIndexSet)
Definition idgridpart/indexset.hh:55
IndexType size(GeometryType type) const
Definition idgridpart/indexset.hh:75
Traits::HostGridPartType::IndexSetType HostIndexSetType
Definition idgridpart/indexset.hh:41
IndexType subIndex(const Entity &entity, int i, unsigned int cd) const
Definition idgridpart/indexset.hh:98
static const int dimension
Definition idgridpart/indexset.hh:43
HostIndexSetType & hostIndexSet()
Definition idgridpart/indexset.hh:121
IndexType index(const Entity &entity) const
Definition idgridpart/indexset.hh:86
std::remove_const< GridFamily >::type::Traits Traits
Definition idgridpart/indexset.hh:38
HostIndexSetType::Types Types
Definition idgridpart/indexset.hh:53
const HostIndexSetType * hostIndexSet_
Definition idgridpart/indexset.hh:127
IndexType size(int codim) const
Definition idgridpart/indexset.hh:80
void requestCodimensions(const std::vector< int > &codimensions) const
Definition idgridpart/indexset.hh:115
Types types(int codim) const
Definition idgridpart/indexset.hh:59
bool contains(const Entity &entity) const
Definition idgridpart/indexset.hh:70
const std::vector< GeometryType > & geomTypes(int codim) const
Definition idgridpart/indexset.hh:64
IndexType index(const typename Codim< codim >::Entity &entity) const
Definition idgridpart/indexset.hh:92
HostIndexSetType::IndexType IndexType
Definition idgridpart/indexset.hh:51
IndexType subIndex(const typename Codim< codim >::Entity &entity, int i, unsigned int cd) const
Definition idgridpart/indexset.hh:104
const HostIndexSetType & hostIndexSet() const
Definition idgridpart/indexset.hh:109
Definition idgridpart/indexset.hh:47
Traits::template Codim< codim >::Entity Entity
Definition idgridpart/indexset.hh:48
Definition idgridpart/indexset.hh:138
ConsecutiveIndexSet(const HostIndexSetType &hostIndexSet)
Definition idgridpart/indexset.hh:146
void removeEntity(const typename BaseType::template Codim< 0 >::Entity &entity)
Definition idgridpart/indexset.hh:159
BaseType::HostIndexSetType HostIndexSetType
Definition idgridpart/indexset.hh:142
void backup() const
Definition idgridpart/indexset.hh:164
HostIndexSetType & hostIndexSet()
Definition idgridpart/indexset.hh:181
void read(InStreamInterface< T > &stream)
Definition idgridpart/indexset.hh:175
void insertEntity(const typename BaseType::template Codim< 0 >::Entity &entity)
Definition idgridpart/indexset.hh:154
void restore()
Definition idgridpart/indexset.hh:166
bool compress()
Definition idgridpart/indexset.hh:152
void write(OutStreamInterface< T > &stream)
Definition idgridpart/indexset.hh:169
void resize()
Definition idgridpart/indexset.hh:150
Definition idgridpart/indexset.hh:195
AdaptiveIndexSet(const typename BaseType::HostIndexSetType &hostIndexSet)
Definition idgridpart/indexset.hh:199
int oldIndex(int hole, GeometryType type) const
Definition idgridpart/indexset.hh:213
int newIndex(int hole, int codim) const
Definition idgridpart/indexset.hh:228
int numberOfHoles(int codim) const
Definition idgridpart/indexset.hh:208
int newIndex(int hole, GeometryType type) const
Definition idgridpart/indexset.hh:223
int numberOfHoles(GeometryType type) const
Definition idgridpart/indexset.hh:203
int oldIndex(int hole, int codim) const
Definition idgridpart/indexset.hh:218
Definition idgridpart/indexset.hh:244
std::conditional< adaptive, AdaptiveIndexSet< GridFamily >, typenamestd::conditional< consecutive, ConsecutiveIndexSet< GridFamily >, IndexSet< GridFamily > >::type >::type Type
Definition idgridpart/indexset.hh:251
static constexpr PersistentIndexSetInterface * map(IndexSetType &indexSet) noexcept
Definition idgridpart/indexset.hh:300
abstract interface for an output stream
Definition streams.hh:48
abstract interface for an input stream
Definition streams.hh:190