dune-grid 3.0-git
identitygridintersections.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3#ifndef DUNE_IDENTITYGRID_INTERSECTIONS_HH
4#define DUNE_IDENTITYGRID_INTERSECTIONS_HH
5
7
12namespace Dune {
13
14
15 // External forward declarations
16 template< class Grid >
17 struct HostGridAccess;
18
19
28 template<class GridImp>
30 {
31
32 friend class IdentityGridLeafIntersectionIterator<GridImp>;
33
34 friend struct HostGridAccess< typename std::remove_const< GridImp >::type >;
35
36 enum {dim=GridImp::dimension};
37
38 enum {dimworld=GridImp::dimensionworld};
39
40 // The type used to store coordinates
41 typedef typename GridImp::ctype ctype;
42
43 typedef typename GridImp::HostGridType::LeafGridView::Intersection HostLeafIntersection;
44
45 public:
46
47 typedef typename GridImp::template Codim<1>::Geometry Geometry;
48 typedef typename GridImp::template Codim<1>::LocalGeometry LocalGeometry;
49 typedef typename GridImp::template Codim<0>::Entity Entity;
50 typedef FieldVector<ctype, dimworld> NormalVector;
51
54
55 IdentityGridLeafIntersection(const GridImp* identityGrid,
56 const HostLeafIntersection& hostIntersection)
57 : identityGrid_(identityGrid)
58 , hostIntersection_(hostIntersection)
59 {}
60
61 IdentityGridLeafIntersection(const GridImp* identityGrid,
62 HostLeafIntersection&& hostIntersection)
63 : identityGrid_(identityGrid)
64 , hostIntersection_(std::move(hostIntersection))
65 {}
66
67 bool equals(const IdentityGridLeafIntersection& other) const
68 {
69 return hostIntersection_ == other.hostIntersection_;
70 }
71
74 Entity inside() const {
75 return IdentityGridEntity<0,dim,GridImp>(identityGrid_,hostIntersection_.inside());
76 }
77
78
81 Entity outside() const {
82 return IdentityGridEntity<0,dim,GridImp>(identityGrid_,hostIntersection_.outside());
83 }
84
85
87 bool boundary () const {
88 return hostIntersection_.boundary();
89 }
90
97 return hostIntersection_.centerUnitOuterNormal();
98 }
99
101 bool neighbor () const {
102 return hostIntersection_.neighbor();
103 }
104
105
107 int boundaryId () const {
108 return hostIntersection_.boundaryId();
109 }
110
112 size_t boundarySegmentIndex() const {
113 return hostIntersection_.boundarySegmentIndex();
114 }
115
117 bool conforming () const {
118 return hostIntersection_.conforming();
119 }
120
122 GeometryType type () const {
123 return hostIntersection_.type();
124 }
125
126
132 {
133 return LocalGeometry( hostIntersection_.geometryInInside() );
134 }
135
139 {
140 return LocalGeometry( hostIntersection_.geometryInOutside() );
141 }
142
146 {
147 return Geometry( hostIntersection_.geometry() );
148 }
149
150
152 int indexInInside () const {
153 return hostIntersection_.indexInInside();
154 }
155
156
158 int indexInOutside () const {
159 return hostIntersection_.indexInOutside();
160 }
161
162
164 FieldVector<ctype, GridImp::dimensionworld> outerNormal (const FieldVector<ctype, GridImp::dimension-1>& local) const {
165 return hostIntersection_.outerNormal(local);
166 }
167
169 FieldVector<ctype, GridImp::dimensionworld> integrationOuterNormal (const FieldVector<ctype, GridImp::dimension-1>& local) const {
170 return hostIntersection_.integrationOuterNormal(local);
171 }
172
174 FieldVector<ctype, GridImp::dimensionworld> unitOuterNormal (const FieldVector<ctype, GridImp::dimension-1>& local) const {
175 return hostIntersection_.unitOuterNormal(local);
176 }
177
178
179 private:
180 //**********************************************************
181 // private methods
182 //**********************************************************
183
184 const GridImp* identityGrid_;
185
186 HostLeafIntersection hostIntersection_;
187 };
188
189
190
191
193 template<class GridImp>
195 {
196
197 friend class IdentityGridLevelIntersectionIterator<GridImp>;
198
199 friend struct HostGridAccess< typename std::remove_const< GridImp >::type >;
200
201 enum {dim=GridImp::dimension};
202
203 enum {dimworld=GridImp::dimensionworld};
204
205 // The type used to store coordinates
206 typedef typename GridImp::ctype ctype;
207
208 typedef typename GridImp::HostGridType::LevelGridView::Intersection HostLevelIntersection;
209
210 public:
211
212 typedef typename GridImp::template Codim<1>::Geometry Geometry;
213 typedef typename GridImp::template Codim<1>::LocalGeometry LocalGeometry;
214 typedef typename GridImp::template Codim<0>::Entity Entity;
215 typedef FieldVector<ctype, dimworld> NormalVector;
216
219
220 IdentityGridLevelIntersection(const GridImp* identityGrid,
221 const HostLevelIntersection& hostIntersection)
222 : identityGrid_(identityGrid)
223 , hostIntersection_(hostIntersection)
224 {}
225
226 IdentityGridLevelIntersection(const GridImp* identityGrid,
227 HostLevelIntersection&& hostIntersection)
228 : identityGrid_(identityGrid)
229 , hostIntersection_(std::move(hostIntersection))
230 {}
231
232 bool equals(const IdentityGridLevelIntersection& other) const
233 {
234 return hostIntersection_ == other.hostIntersection_;
235 }
236
239 Entity inside() const {
240 return IdentityGridEntity<0,dim,GridImp>(identityGrid_,hostIntersection_.inside());
241 }
242
243
246 Entity outside() const {
247 return IdentityGridEntity<0,dim,GridImp>(identityGrid_,hostIntersection_.outside());
248 }
249
250
253 bool boundary () const {
254 return hostIntersection_.boundary();
255 }
256
263 return hostIntersection_.centerUnitOuterNormal();
264 }
265
267 bool neighbor () const {
268 return hostIntersection_.neighbor();
269 }
270
271
273 int boundaryId () const {
274 return hostIntersection_.boundaryId();
275 }
276
278 size_t boundarySegmentIndex() const {
279 return hostIntersection_.boundarySegmentIndex();
280 }
281
283 bool conforming () const {
284 return hostIntersection_.conforming();
285 }
286
288 GeometryType type () const {
289 return hostIntersection_.type();
290 }
291
292
298 {
299 return LocalGeometry( hostIntersection_.geometryInInside() );
300 }
301
305 {
306 return LocalGeometry( hostIntersection_.geometryInOutside() );
307 }
308
312 {
313 return Geometry( hostIntersection_.geometry() );
314 }
315
316
318 int indexInInside () const {
319 return hostIntersection_.indexInInside();
320 }
321
322
324 int indexInOutside () const {
325 return hostIntersection_.indexInOutside();
326 }
327
328
330 FieldVector<ctype, dimworld> outerNormal (const FieldVector<ctype, dim-1>& local) const {
331 return hostIntersection_.outerNormal(local);
332 }
333
335 FieldVector<ctype, dimworld> integrationOuterNormal (const FieldVector<ctype, dim-1>& local) const {
336 return hostIntersection_.integrationOuterNormal(local);
337 }
338
340 FieldVector<ctype, dimworld> unitOuterNormal (const FieldVector<ctype, dim-1>& local) const {
341 return hostIntersection_.unitOuterNormal(local);
342 }
343
344 private:
345
346 const GridImp* identityGrid_;
347
348 HostLevelIntersection hostIntersection_;
349
350 };
351
352
353} // namespace Dune
354
355#endif
The IdentityGridLeafIterator class.
STL namespace.
Include standard header files.
Definition agrid.hh:60
provides access to host grid objects from GeometryGrid
Definition identitygrid.hh:37
The implementation of entities in a IdentityGrid.
Definition identitygridentity.hh:56
Definition identitygridintersectioniterator.hh:82
Iterator over all element neighborsMesh entities of codimension 0 ("elements") allow to visit all nei...
Definition identitygridintersectioniterator.hh:27
An intersection with a leaf neighbor elementMesh entities of codimension 0 ("elements") allow to visi...
Definition identitygridintersections.hh:30
Entity inside() const
Definition identitygridintersections.hh:74
IdentityGridLeafIntersection(const GridImp *identityGrid, HostLeafIntersection &&hostIntersection)
Definition identitygridintersections.hh:61
NormalVector centerUnitOuterNormal() const
Return unit outer normal (length == 1)
Definition identitygridintersections.hh:96
GridImp::template Codim< 1 >::LocalGeometry LocalGeometry
Definition identitygridintersections.hh:48
Geometry geometry() const
Definition identitygridintersections.hh:145
Entity outside() const
Definition identitygridintersections.hh:81
LocalGeometry geometryInOutside() const
Definition identitygridintersections.hh:138
int boundaryId() const
return information about the Boundary
Definition identitygridintersections.hh:107
IdentityGridLeafIntersection()
Definition identitygridintersections.hh:52
bool boundary() const
return true if intersection is with boundary.
Definition identitygridintersections.hh:87
GeometryType type() const
Geometry type of an intersection.
Definition identitygridintersections.hh:122
FieldVector< ctype, dimworld > NormalVector
Definition identitygridintersections.hh:50
LocalGeometry geometryInInside() const
Definition identitygridintersections.hh:131
bool conforming() const
Return true if this is a conforming intersection.
Definition identitygridintersections.hh:117
IdentityGridLeafIntersection(const GridImp *identityGrid, const HostLeafIntersection &hostIntersection)
Definition identitygridintersections.hh:55
size_t boundarySegmentIndex() const
return the boundary segment index
Definition identitygridintersections.hh:112
bool equals(const IdentityGridLeafIntersection &other) const
Definition identitygridintersections.hh:67
FieldVector< ctype, GridImp::dimensionworld > outerNormal(const FieldVector< ctype, GridImp::dimension-1 > &local) const
return outer normal
Definition identitygridintersections.hh:164
int indexInOutside() const
local number of codim 1 entity in neighbor where intersection is contained
Definition identitygridintersections.hh:158
FieldVector< ctype, GridImp::dimensionworld > integrationOuterNormal(const FieldVector< ctype, GridImp::dimension-1 > &local) const
return outer normal multiplied by the integration element
Definition identitygridintersections.hh:169
bool neighbor() const
return true if across the edge an neighbor on this level exists
Definition identitygridintersections.hh:101
FieldVector< ctype, GridImp::dimensionworld > unitOuterNormal(const FieldVector< ctype, GridImp::dimension-1 > &local) const
return unit outer normal
Definition identitygridintersections.hh:174
int indexInInside() const
local number of codim 1 entity in self where intersection is contained in
Definition identitygridintersections.hh:152
GridImp::template Codim< 1 >::Geometry Geometry
Definition identitygridintersections.hh:47
GridImp::template Codim< 0 >::Entity Entity
Definition identitygridintersections.hh:49
Definition identitygridintersections.hh:195
Geometry geometry() const
Definition identitygridintersections.hh:311
GridImp::template Codim< 0 >::Entity Entity
Definition identitygridintersections.hh:214
IdentityGridLevelIntersection(const GridImp *identityGrid, const HostLevelIntersection &hostIntersection)
Definition identitygridintersections.hh:220
GridImp::template Codim< 1 >::Geometry Geometry
Definition identitygridintersections.hh:212
bool equals(const IdentityGridLevelIntersection &other) const
Definition identitygridintersections.hh:232
bool neighbor() const
return true if across the edge an neighbor on this level exists
Definition identitygridintersections.hh:267
IdentityGridLevelIntersection()
Definition identitygridintersections.hh:217
NormalVector centerUnitOuterNormal() const
Return unit outer normal (length == 1)
Definition identitygridintersections.hh:262
bool conforming() const
Return true if this is a conforming intersection.
Definition identitygridintersections.hh:283
int indexInInside() const
local number of codim 1 entity in self where intersection is contained in
Definition identitygridintersections.hh:318
FieldVector< ctype, dimworld > outerNormal(const FieldVector< ctype, dim-1 > &local) const
return outer normal
Definition identitygridintersections.hh:330
GridImp::template Codim< 1 >::LocalGeometry LocalGeometry
Definition identitygridintersections.hh:213
FieldVector< ctype, dimworld > NormalVector
Definition identitygridintersections.hh:215
bool boundary() const
return true if intersection is with boundary.
Definition identitygridintersections.hh:253
FieldVector< ctype, dimworld > integrationOuterNormal(const FieldVector< ctype, dim-1 > &local) const
return outer normal multiplied by the integration element
Definition identitygridintersections.hh:335
LocalGeometry geometryInOutside() const
Definition identitygridintersections.hh:304
LocalGeometry geometryInInside() const
Definition identitygridintersections.hh:297
int indexInOutside() const
local number of codim 1 entity in neighbor where intersection is contained
Definition identitygridintersections.hh:324
FieldVector< ctype, dimworld > unitOuterNormal(const FieldVector< ctype, dim-1 > &local) const
return unit outer normal
Definition identitygridintersections.hh:340
size_t boundarySegmentIndex() const
return the boundary segment index
Definition identitygridintersections.hh:278
Entity outside() const
Definition identitygridintersections.hh:246
int boundaryId() const
return information about the Boundary
Definition identitygridintersections.hh:273
Entity inside() const
Definition identitygridintersections.hh:239
GeometryType type() const
Geometry type of an intersection.
Definition identitygridintersections.hh:288
IdentityGridLevelIntersection(const GridImp *identityGrid, HostLevelIntersection &&hostIntersection)
Definition identitygridintersections.hh:226