Loading [MathJax]/extensions/tex2jax.js

DUNE MultiDomainGrid (2.8)

entity.hh
1#ifndef DUNE_MULTIDOMAINGRID_ENTITY_HH
2#define DUNE_MULTIDOMAINGRID_ENTITY_HH
3
4#include <dune/common/deprecated.hh>
5
6#include <dune/grid/common/entity.hh>
7#include <dune/grid/common/gridenums.hh>
8
9namespace Dune {
10
11namespace mdgrid {
12
13template<int codim, int dim, typename GridImp>
14class EntityWrapper;
15
16template<typename GridImp>
17class LeafIntersectionIteratorWrapper;
18
19template<typename GridImp>
20class LevelIntersectionIteratorWrapper;
21
22template<typename GridImp>
23class HierarchicIteratorWrapper;
24
25template<typename, typename>
26class IntersectionIteratorWrapper;
27
28template<typename HostGrid, typename MDGridTraits>
29class MultiDomainGrid;
30
31template<typename>
32class LevelGridView;
33
34template<typename>
35class LeafGridView;
36
37
38template<typename HostES>
39class EntitySeedWrapper
40{
41
42 typedef HostES HostEntitySeed;
43
44 template<typename, typename>
45 friend class MultiDomainGrid;
46
47 template<int, int, typename>
48 friend class EntityWrapper;
49
50public:
51
52 static const std::size_t codimension = HostEntitySeed::codimension;
53
54 EntitySeedWrapper()
55 {}
56
57 EntitySeedWrapper(const HostEntitySeed& hostEntitySeed)
58 : _hostEntitySeed(hostEntitySeed)
59 {}
60
61 const HostEntitySeed& hostEntitySeed() const
62 {
63 return _hostEntitySeed;
64 }
65
66 bool isValid() const
67 {
68 return _hostEntitySeed.isValid();
69 }
70
71 HostEntitySeed _hostEntitySeed;
72
73};
74
75
76template<int codim, int dim, typename GridImp>
77class EntityWrapperBase :
78 public EntityDefaultImplementation<codim,dim,GridImp,EntityWrapper>
79{
80
81 template<typename,typename>
82 friend class MultiDomainGrid;
83
84 typedef typename GridImp::HostGrid::Traits::template Codim<codim>::Entity HostEntity;
85
86public:
87
88 typedef typename GridImp::template Codim<codim>::Geometry Geometry;
89
90 typedef EntitySeedWrapper<typename HostEntity::EntitySeed> EntitySeed;
91
92 EntityWrapperBase()
93 {}
94
95 explicit EntityWrapperBase(const HostEntity& e)
96 : _hostEntity(e)
97 {}
98
99 explicit EntityWrapperBase(HostEntity&& e)
100 : _hostEntity(std::move(e))
101 {}
102
103 int level() const {
104 return _hostEntity.level();
105 }
106
107 PartitionType partitionType() const {
108 return _hostEntity.partitionType();
109 }
110
111 unsigned int subEntities(unsigned int codimSubEntitiy) const {
112 return _hostEntity.subEntities(codimSubEntitiy);
113 }
114
115 Geometry geometry() const {
116 return Geometry(_hostEntity.geometry());
117 }
118
119 EntitySeed seed() const {
120 return EntitySeed(_hostEntity.seed());
121 }
122
123 bool equals(const EntityWrapperBase& other) const
124 {
125 return hostEntity() == other.hostEntity();
126 }
127
128private:
129
130 HostEntity _hostEntity;
131
132protected:
133
134 const HostEntity& hostEntity() const {
135 return _hostEntity;
136 }
137
138};
139
140
141template<int codim, int dim, typename GridImp>
142class EntityWrapper :
143 public EntityWrapperBase<codim,dim,GridImp>
144{
145
146 using Base = EntityWrapperBase<codim,dim,GridImp>;
147
148 template<typename,typename>
149 friend class MultiDomainGrid;
150
151public:
152
153 // inherit constructors
154 using Base::Base;
155
156};
157
158template<int dim, typename GridImp>
159class EntityWrapper<0,dim,GridImp> :
160 public EntityWrapperBase<0,dim,GridImp>
161{
162
163 using Base = EntityWrapperBase<0,dim,GridImp>;
164
165 template<typename,typename>
166 friend class MultiDomainGrid;
167
168 template<typename>
169 friend class LevelGridView;
170
171 template<typename>
172 friend class LeafGridView;
173
174 using Base::hostEntity;
175
176public:
177
178 using LocalGeometry = typename GridImp::template Codim<0>::LocalGeometry;
179 using LeafIntersectionIterator = typename GridImp::Traits::LeafIntersectionIterator;
180 using LevelIntersectionIterator = typename GridImp::Traits::LevelIntersectionIterator;
181 using HierarchicIterator = typename GridImp::Traits::HierarchicIterator;
182
183 // inherit constructors
184 using Base::Base;
185
186 unsigned int subEntities(unsigned int codim) const {
187 return hostEntity().subEntities(codim);
188 }
189
190 template<int cc>
191 typename GridImp::template Codim<cc>::Entity subEntity(int i) const {
192 return {EntityWrapper<cc,dim,GridImp>(hostEntity().template subEntity<cc>(i))};
193 }
194
195 typename GridImp::template Codim<0>::Entity father() const {
196 return {EntityWrapper(hostEntity().father())};
197 }
198
199 bool hasFather() const {
200 return hostEntity().hasFather();
201 }
202
203 bool isLeaf() const {
204 return hostEntity().isLeaf();
205 }
206
207 bool isRegular() const {
208 return hostEntity().isRegular();
209 }
210
211 LocalGeometry geometryInFather() const {
212 return LocalGeometry(hostEntity().geometryInFather());
213 }
214
215 HierarchicIterator hbegin(int maxLevel) const {
216 return HierarchicIteratorWrapper<GridImp>(hostEntity().hbegin(maxLevel));
217 }
218
219 HierarchicIterator hend(int maxLevel) const {
220 return HierarchicIteratorWrapper<GridImp>(hostEntity().hend(maxLevel));
221 }
222
223 LevelIntersectionIterator ilevelbegin() const {
224 return IntersectionIteratorWrapper<
225 GridImp,
226 typename GridImp::HostGrid::LevelGridView::IntersectionIterator
227 >(
228 hostEntity().ilevelbegin()
229 );
230 }
231
232 LevelIntersectionIterator ilevelend() const {
233 return IntersectionIteratorWrapper<
234 GridImp,
235 typename GridImp::HostGrid::LevelGridView::IntersectionIterator
236 >(
237 hostEntity().ilevelend()
238 );
239 }
240
241 LeafIntersectionIterator ileafbegin() const {
242 return IntersectionIteratorWrapper<
243 GridImp,
244 typename GridImp::HostGrid::LeafGridView::IntersectionIterator
245 >(
246 hostEntity().ileafbegin()
247 );
248 }
249
250 LeafIntersectionIterator ileafend() const {
251 return IntersectionIteratorWrapper<
252 GridImp,
253 typename GridImp::HostGrid::LeafGridView::IntersectionIterator
254 >(
255 hostEntity().ileafend()
256 );
257 }
258
259 bool isNew() const {
260 return hostEntity().isNew();
261 }
262
263 bool mightVanish() const {
264 return hostEntity().mightVanish();
265 }
266
267 bool hasBoundaryIntersections () const
268 {
269 return hostEntity().hasBoundaryIntersections();
270 }
271
272};
273
274} // namespace mdgrid
275
276} // namespace Dune
277
278#endif // DUNE_MULTIDOMAINGRID_ENTITY_HH
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Apr 15, 23:04, 2025)