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 
12 namespace 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 
53  {}
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 
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 
218  {}
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
Dune::IdentityGridLevelIntersection::outerNormal
FieldVector< ctype, dimworld > outerNormal(const FieldVector< ctype, dim-1 > &local) const
return outer normal
Definition: identitygridintersections.hh:330
Dune::IdentityGridLevelIntersection::geometryInInside
LocalGeometry geometryInInside() const
Definition: identitygridintersections.hh:297
Dune::IdentityGridLevelIntersection::IdentityGridLevelIntersection
IdentityGridLevelIntersection(const GridImp *identityGrid, HostLevelIntersection &&hostIntersection)
Definition: identitygridintersections.hh:226
Dune::IdentityGridLeafIntersection::boundarySegmentIndex
size_t boundarySegmentIndex() const
return the boundary segment index
Definition: identitygridintersections.hh:112
Dune::IdentityGridLevelIntersection::Geometry
GridImp::template Codim< 1 >::Geometry Geometry
Definition: identitygridintersections.hh:212
Dune
Include standard header files.
Definition: agrid.hh:59
identitygridleafiterator.hh
The IdentityGridLeafIterator class.
Dune::HostGridAccess
provides access to host grid objects from GeometryGrid
Definition: identitygrid.hh:37
Dune::IdentityGridLeafIntersection::NormalVector
FieldVector< ctype, dimworld > NormalVector
Definition: identitygridintersections.hh:50
Dune::IdentityGridLeafIntersection::Entity
GridImp::template Codim< 0 >::Entity Entity
Definition: identitygridintersections.hh:49
Dune::IdentityGridLeafIntersection::inside
Entity inside() const
Definition: identitygridintersections.hh:74
Dune::IdentityGridLeafIntersection::neighbor
bool neighbor() const
return true if across the edge an neighbor on this level exists
Definition: identitygridintersections.hh:101
Dune::IdentityGridLeafIntersection::integrationOuterNormal
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
Dune::IdentityGridLevelIntersection
Definition: identitygridintersections.hh:194
Dune::VTK::GeometryType
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
Dune::IdentityGridLevelIntersection::Entity
GridImp::template Codim< 0 >::Entity Entity
Definition: identitygridintersections.hh:214
Dune::IdentityGridLeafIntersection::outside
Entity outside() const
Definition: identitygridintersections.hh:81
Dune::IdentityGridLevelIntersection::outside
Entity outside() const
Definition: identitygridintersections.hh:246
Dune::IdentityGridLeafIntersection::geometry
Geometry geometry() const
Definition: identitygridintersections.hh:145
Dune::IdentityGridLeafIntersection::boundaryId
int boundaryId() const
return information about the Boundary
Definition: identitygridintersections.hh:107
Dune::IdentityGridLevelIntersection::type
GeometryType type() const
Geometry type of an intersection.
Definition: identitygridintersections.hh:288
Dune::IdentityGridLeafIntersection::IdentityGridLeafIntersection
IdentityGridLeafIntersection(const GridImp *identityGrid, const HostLeafIntersection &hostIntersection)
Definition: identitygridintersections.hh:55
Dune::IdentityGridLevelIntersection::indexInInside
int indexInInside() const
local number of codim 1 entity in self where intersection is contained in
Definition: identitygridintersections.hh:318
Dune::IdentityGridLeafIntersection
An intersection with a leaf neighbor element.
Definition: identitygridintersections.hh:29
Dune::IdentityGridLevelIntersection::equals
bool equals(const IdentityGridLevelIntersection &other) const
Definition: identitygridintersections.hh:232
Dune::IdentityGridLeafIntersection::IdentityGridLeafIntersection
IdentityGridLeafIntersection(const GridImp *identityGrid, HostLeafIntersection &&hostIntersection)
Definition: identitygridintersections.hh:61
Dune::IdentityGridLeafIntersection::type
GeometryType type() const
Geometry type of an intersection.
Definition: identitygridintersections.hh:122
Dune::IdentityGridLeafIntersection::centerUnitOuterNormal
NormalVector centerUnitOuterNormal() const
Return unit outer normal (length == 1)
Definition: identitygridintersections.hh:96
Dune::IdentityGridLeafIntersection::indexInInside
int indexInInside() const
local number of codim 1 entity in self where intersection is contained in
Definition: identitygridintersections.hh:152
Dune::IdentityGridLevelIntersection::integrationOuterNormal
FieldVector< ctype, dimworld > integrationOuterNormal(const FieldVector< ctype, dim-1 > &local) const
return outer normal multiplied by the integration element
Definition: identitygridintersections.hh:335
Dune::IdentityGridLeafIntersection::equals
bool equals(const IdentityGridLeafIntersection &other) const
Definition: identitygridintersections.hh:67
Dune::IdentityGridLevelIntersection::geometryInOutside
LocalGeometry geometryInOutside() const
Definition: identitygridintersections.hh:304
Dune::IdentityGridLeafIntersection::unitOuterNormal
FieldVector< ctype, GridImp::dimensionworld > unitOuterNormal(const FieldVector< ctype, GridImp::dimension-1 > &local) const
return unit outer normal
Definition: identitygridintersections.hh:174
Dune::IdentityGridLeafIntersection::outerNormal
FieldVector< ctype, GridImp::dimensionworld > outerNormal(const FieldVector< ctype, GridImp::dimension-1 > &local) const
return outer normal
Definition: identitygridintersections.hh:164
Dune::IdentityGridLeafIntersection::indexInOutside
int indexInOutside() const
local number of codim 1 entity in neighbor where intersection is contained
Definition: identitygridintersections.hh:158
Dune::IdentityGridLevelIntersection::LocalGeometry
GridImp::template Codim< 1 >::LocalGeometry LocalGeometry
Definition: identitygridintersections.hh:213
Dune::IdentityGridLevelIntersection::boundary
bool boundary() const
return true if intersection is with boundary.
Definition: identitygridintersections.hh:253
Dune::IdentityGridLevelIntersection::NormalVector
FieldVector< ctype, dimworld > NormalVector
Definition: identitygridintersections.hh:215
Dune::IdentityGridLeafIntersection::LocalGeometry
GridImp::template Codim< 1 >::LocalGeometry LocalGeometry
Definition: identitygridintersections.hh:48
Dune::IdentityGridLevelIntersection::inside
Entity inside() const
Definition: identitygridintersections.hh:239
Dune::IdentityGridLeafIntersection::geometryInOutside
LocalGeometry geometryInOutside() const
Definition: identitygridintersections.hh:138
Dune::IdentityGridLeafIntersection::IdentityGridLeafIntersection
IdentityGridLeafIntersection()
Definition: identitygridintersections.hh:52
Dune::IdentityGridEntity< 0, dim, GridImp >
Specialization for codim-0-entities.
Definition: identitygridentity.hh:209
Dune::IdentityGridLevelIntersection::geometry
Geometry geometry() const
Definition: identitygridintersections.hh:311
Dune::IdentityGridLevelIntersection::IdentityGridLevelIntersection
IdentityGridLevelIntersection()
Definition: identitygridintersections.hh:217
Dune::IdentityGridLevelIntersection::centerUnitOuterNormal
NormalVector centerUnitOuterNormal() const
Return unit outer normal (length == 1)
Definition: identitygridintersections.hh:262
Dune::IdentityGridLeafIntersection::boundary
bool boundary() const
return true if intersection is with boundary.
Definition: identitygridintersections.hh:87
Dune::IdentityGridLeafIntersection::geometryInInside
LocalGeometry geometryInInside() const
Definition: identitygridintersections.hh:131
Dune::IdentityGridLevelIntersection::IdentityGridLevelIntersection
IdentityGridLevelIntersection(const GridImp *identityGrid, const HostLevelIntersection &hostIntersection)
Definition: identitygridintersections.hh:220
Dune::IdentityGridLevelIntersection::unitOuterNormal
FieldVector< ctype, dimworld > unitOuterNormal(const FieldVector< ctype, dim-1 > &local) const
return unit outer normal
Definition: identitygridintersections.hh:340
Dune::IdentityGridLeafIntersectionIterator
Iterator over all element neighbors.
Definition: identitygridentity.hh:30
Dune::IdentityGridLevelIntersection::indexInOutside
int indexInOutside() const
local number of codim 1 entity in neighbor where intersection is contained
Definition: identitygridintersections.hh:324
Dune::IdentityGridLevelIntersection::neighbor
bool neighbor() const
return true if across the edge an neighbor on this level exists
Definition: identitygridintersections.hh:267
Dune::IdentityGridLeafIntersection::conforming
bool conforming() const
Return true if this is a conforming intersection.
Definition: identitygridintersections.hh:117
Dune::IdentityGridLevelIntersection::conforming
bool conforming() const
Return true if this is a conforming intersection.
Definition: identitygridintersections.hh:283
Dune::IdentityGridLevelIntersection::boundarySegmentIndex
size_t boundarySegmentIndex() const
return the boundary segment index
Definition: identitygridintersections.hh:278
Dune::IdentityGridLevelIntersection::boundaryId
int boundaryId() const
return information about the Boundary
Definition: identitygridintersections.hh:273
Dune::IdentityGridLeafIntersection::Geometry
GridImp::template Codim< 1 >::Geometry Geometry
Definition: identitygridintersections.hh:47
Dune::IdentityGridLevelIntersectionIterator
Definition: identitygridentity.hh:27