dune-grid  2.6-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 
8 
13 namespace Dune {
14 
15 
16  // External forward declarations
17  template< class Grid >
18  struct HostGridAccess;
19 
20 
29  template<class GridImp>
31  {
32 
33  friend class IdentityGridLeafIntersectionIterator<GridImp>;
34 
35  friend struct HostGridAccess< typename std::remove_const< GridImp >::type >;
36 
37  enum {dim=GridImp::dimension};
38 
39  enum {dimworld=GridImp::dimensionworld};
40 
41  // The type used to store coordinates
42  typedef typename GridImp::ctype ctype;
43 
44  typedef typename GridImp::HostGridType::LeafGridView::Intersection HostLeafIntersection;
45 
46  public:
47 
48  typedef typename GridImp::template Codim<1>::Geometry Geometry;
49  typedef typename GridImp::template Codim<1>::LocalGeometry LocalGeometry;
50  typedef typename GridImp::template Codim<0>::Entity Entity;
51  typedef FieldVector<ctype, dimworld> NormalVector;
52 
54  {}
55 
56  IdentityGridLeafIntersection(const GridImp* identityGrid,
57  const HostLeafIntersection& hostIntersection)
58  : identityGrid_(identityGrid)
59  , hostIntersection_(hostIntersection)
60  {}
61 
62  IdentityGridLeafIntersection(const GridImp* identityGrid,
63  HostLeafIntersection&& hostIntersection)
64  : identityGrid_(identityGrid)
65  , hostIntersection_(std::move(hostIntersection))
66  {}
67 
68  bool equals(const IdentityGridLeafIntersection& other) const
69  {
70  return hostIntersection_ == other.hostIntersection_;
71  }
72 
75  Entity inside() const {
76  return IdentityGridEntity<0,dim,GridImp>(identityGrid_,hostIntersection_.inside());
77  }
78 
79 
82  Entity outside() const {
83  return IdentityGridEntity<0,dim,GridImp>(identityGrid_,hostIntersection_.outside());
84  }
85 
86 
88  bool boundary () const {
89  return hostIntersection_.boundary();
90  }
91 
98  return hostIntersection_.centerUnitOuterNormal();
99  }
100 
102  bool neighbor () const {
103  return hostIntersection_.neighbor();
104  }
105 
107  size_t boundarySegmentIndex() const {
108  return hostIntersection_.boundarySegmentIndex();
109  }
110 
112  bool conforming () const {
113  return hostIntersection_.conforming();
114  }
115 
117  GeometryType type () const {
118  return hostIntersection_.type();
119  }
120 
121 
127  {
128  return LocalGeometry( hostIntersection_.geometryInInside() );
129  }
130 
134  {
135  return LocalGeometry( hostIntersection_.geometryInOutside() );
136  }
137 
141  {
142  return Geometry( hostIntersection_.geometry() );
143  }
144 
145 
147  int indexInInside () const {
148  return hostIntersection_.indexInInside();
149  }
150 
151 
153  int indexInOutside () const {
154  return hostIntersection_.indexInOutside();
155  }
156 
157 
159  FieldVector<ctype, GridImp::dimensionworld> outerNormal (const FieldVector<ctype, GridImp::dimension-1>& local) const {
160  return hostIntersection_.outerNormal(local);
161  }
162 
164  FieldVector<ctype, GridImp::dimensionworld> integrationOuterNormal (const FieldVector<ctype, GridImp::dimension-1>& local) const {
165  return hostIntersection_.integrationOuterNormal(local);
166  }
167 
169  FieldVector<ctype, GridImp::dimensionworld> unitOuterNormal (const FieldVector<ctype, GridImp::dimension-1>& local) const {
170  return hostIntersection_.unitOuterNormal(local);
171  }
172 
173 
174  private:
175  //**********************************************************
176  // private methods
177  //**********************************************************
178 
179  const GridImp* identityGrid_;
180 
181  HostLeafIntersection hostIntersection_;
182  };
183 
184 
185 
186 
188  template<class GridImp>
190  {
191 
193 
194  friend struct HostGridAccess< typename std::remove_const< GridImp >::type >;
195 
196  enum {dim=GridImp::dimension};
197 
198  enum {dimworld=GridImp::dimensionworld};
199 
200  // The type used to store coordinates
201  typedef typename GridImp::ctype ctype;
202 
203  typedef typename GridImp::HostGridType::LevelGridView::Intersection HostLevelIntersection;
204 
205  public:
206 
207  typedef typename GridImp::template Codim<1>::Geometry Geometry;
208  typedef typename GridImp::template Codim<1>::LocalGeometry LocalGeometry;
209  typedef typename GridImp::template Codim<0>::Entity Entity;
210  typedef FieldVector<ctype, dimworld> NormalVector;
211 
213  {}
214 
215  IdentityGridLevelIntersection(const GridImp* identityGrid,
216  const HostLevelIntersection& hostIntersection)
217  : identityGrid_(identityGrid)
218  , hostIntersection_(hostIntersection)
219  {}
220 
221  IdentityGridLevelIntersection(const GridImp* identityGrid,
222  HostLevelIntersection&& hostIntersection)
223  : identityGrid_(identityGrid)
224  , hostIntersection_(std::move(hostIntersection))
225  {}
226 
227  bool equals(const IdentityGridLevelIntersection& other) const
228  {
229  return hostIntersection_ == other.hostIntersection_;
230  }
231 
234  Entity inside() const {
235  return IdentityGridEntity<0,dim,GridImp>(identityGrid_,hostIntersection_.inside());
236  }
237 
238 
241  Entity outside() const {
242  return IdentityGridEntity<0,dim,GridImp>(identityGrid_,hostIntersection_.outside());
243  }
244 
245 
248  bool boundary () const {
249  return hostIntersection_.boundary();
250  }
251 
258  return hostIntersection_.centerUnitOuterNormal();
259  }
260 
262  bool neighbor () const {
263  return hostIntersection_.neighbor();
264  }
265 
267  size_t boundarySegmentIndex() const {
268  return hostIntersection_.boundarySegmentIndex();
269  }
270 
272  bool conforming () const {
273  return hostIntersection_.conforming();
274  }
275 
277  GeometryType type () const {
278  return hostIntersection_.type();
279  }
280 
281 
287  {
288  return LocalGeometry( hostIntersection_.geometryInInside() );
289  }
290 
294  {
295  return LocalGeometry( hostIntersection_.geometryInOutside() );
296  }
297 
301  {
302  return Geometry( hostIntersection_.geometry() );
303  }
304 
305 
307  int indexInInside () const {
308  return hostIntersection_.indexInInside();
309  }
310 
311 
313  int indexInOutside () const {
314  return hostIntersection_.indexInOutside();
315  }
316 
317 
319  FieldVector<ctype, dimworld> outerNormal (const FieldVector<ctype, dim-1>& local) const {
320  return hostIntersection_.outerNormal(local);
321  }
322 
324  FieldVector<ctype, dimworld> integrationOuterNormal (const FieldVector<ctype, dim-1>& local) const {
325  return hostIntersection_.integrationOuterNormal(local);
326  }
327 
329  FieldVector<ctype, dimworld> unitOuterNormal (const FieldVector<ctype, dim-1>& local) const {
330  return hostIntersection_.unitOuterNormal(local);
331  }
332 
333  private:
334 
335  const GridImp* identityGrid_;
336 
337  HostLevelIntersection hostIntersection_;
338 
339  };
340 
341 
342 } // namespace Dune
343 
344 #endif
Dune::IdentityGridLeafIntersection::centerUnitOuterNormal
NormalVector centerUnitOuterNormal() const
Return unit outer normal (length == 1)
Definition: identitygridintersections.hh:97
Dune::IdentityGridLeafIntersection::conforming
bool conforming() const
Return true if this is a conforming intersection.
Definition: identitygridintersections.hh:112
Dune::IdentityGridLeafIntersection::Geometry
GridImp::template Codim< 1 >::Geometry Geometry
Definition: identitygridintersections.hh:48
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:164
Dune::IdentityGridLevelIntersection::centerUnitOuterNormal
NormalVector centerUnitOuterNormal() const
Return unit outer normal (length == 1)
Definition: identitygridintersections.hh:257
Dune::IdentityGridLevelIntersection::outside
Entity outside() const
Definition: identitygridintersections.hh:241
Dune::IdentityGridLevelIntersection::type
GeometryType type() const
Geometry type of an intersection.
Definition: identitygridintersections.hh:277
Dune::IdentityGridLevelIntersection::unitOuterNormal
FieldVector< ctype, dimworld > unitOuterNormal(const FieldVector< ctype, dim-1 > &local) const
return unit outer normal
Definition: identitygridintersections.hh:329
identitygridentity.hh
The IdentityGridEntity class.
Dune::IdentityGridLeafIntersection::inside
Entity inside() const
Definition: identitygridintersections.hh:75
Dune::IdentityGridLevelIntersection::boundarySegmentIndex
size_t boundarySegmentIndex() const
return the boundary segment index
Definition: identitygridintersections.hh:267
Dune::IdentityGridLevelIntersection::neighbor
bool neighbor() const
return true if across the edge an neighbor on this level exists
Definition: identitygridintersections.hh:262
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:324
Dune::IdentityGridLeafIntersection::unitOuterNormal
FieldVector< ctype, GridImp::dimensionworld > unitOuterNormal(const FieldVector< ctype, GridImp::dimension-1 > &local) const
return unit outer normal
Definition: identitygridintersections.hh:169
Dune::VTK::GeometryType
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
Dune::IdentityGridLeafIntersection::boundarySegmentIndex
size_t boundarySegmentIndex() const
return the boundary segment index
Definition: identitygridintersections.hh:107
Dune::IdentityGridLevelIntersection::geometry
Geometry geometry() const
Definition: identitygridintersections.hh:300
Dune::IdentityGridLevelIntersection::geometryInOutside
LocalGeometry geometryInOutside() const
Definition: identitygridintersections.hh:293
Dune::IdentityGridLeafIntersection::type
GeometryType type() const
Geometry type of an intersection.
Definition: identitygridintersections.hh:117
Dune::IdentityGridLeafIntersection::NormalVector
FieldVector< ctype, dimworld > NormalVector
Definition: identitygridintersections.hh:51
Dune::IdentityGridLevelIntersection::LocalGeometry
GridImp::template Codim< 1 >::LocalGeometry LocalGeometry
Definition: identitygridintersections.hh:208
Dune::IdentityGridLeafIntersectionIterator
Iterator over all element neighbors.
Definition: identitygridentity.hh:27
Dune::IdentityGridLeafIntersection::geometry
Geometry geometry() const
Definition: identitygridintersections.hh:140
Dune::IdentityGridLeafIntersection::neighbor
bool neighbor() const
return true if across the edge an neighbor on this level exists
Definition: identitygridintersections.hh:102
Dune::IdentityGridLevelIntersection::Geometry
GridImp::template Codim< 1 >::Geometry Geometry
Definition: identitygridintersections.hh:207
Dune::IdentityGridLeafIntersection::IdentityGridLeafIntersection
IdentityGridLeafIntersection(const GridImp *identityGrid, const HostLeafIntersection &hostIntersection)
Definition: identitygridintersections.hh:56
Dune::IdentityGridLevelIntersection::IdentityGridLevelIntersection
IdentityGridLevelIntersection(const GridImp *identityGrid, HostLevelIntersection &&hostIntersection)
Definition: identitygridintersections.hh:221
Dune::IdentityGridLeafIntersection::boundary
bool boundary() const
return true if intersection is with boundary.
Definition: identitygridintersections.hh:88
Dune::IdentityGridEntity< 0, dim, GridImp >
Specialization for codim-0-entities.
Definition: identitygridentity.hh:201
Dune::IdentityGridLevelIntersectionIterator
Definition: identitygridentity.hh:24
Dune::IdentityGridLeafIntersection::outside
Entity outside() const
Definition: identitygridintersections.hh:82
Dune::IdentityGridLeafIntersection::equals
bool equals(const IdentityGridLeafIntersection &other) const
Definition: identitygridintersections.hh:68
Dune::IdentityGridLevelIntersection::equals
bool equals(const IdentityGridLevelIntersection &other) const
Definition: identitygridintersections.hh:227
Dune::IdentityGridLeafIntersection::IdentityGridLeafIntersection
IdentityGridLeafIntersection()
Definition: identitygridintersections.hh:53
Dune::IdentityGridLevelIntersection::indexInInside
int indexInInside() const
local number of codim 1 entity in self where intersection is contained in
Definition: identitygridintersections.hh:307
Dune::IdentityGridLevelIntersection::conforming
bool conforming() const
Return true if this is a conforming intersection.
Definition: identitygridintersections.hh:272
Dune::IdentityGridLevelIntersection::IdentityGridLevelIntersection
IdentityGridLevelIntersection(const GridImp *identityGrid, const HostLevelIntersection &hostIntersection)
Definition: identitygridintersections.hh:215
Dune::IdentityGridLevelIntersection::Entity
GridImp::template Codim< 0 >::Entity Entity
Definition: identitygridintersections.hh:209
Dune::IdentityGridLeafIntersection::geometryInInside
LocalGeometry geometryInInside() const
Definition: identitygridintersections.hh:126
Dune::IdentityGridLevelIntersection::inside
Entity inside() const
Definition: identitygridintersections.hh:234
Dune::IdentityGridLeafIntersection::indexInOutside
int indexInOutside() const
local number of codim 1 entity in neighbor where intersection is contained
Definition: identitygridintersections.hh:153
identitygridleafiterator.hh
The IdentityGridLeafIterator class.
Dune::IdentityGridLevelIntersection::indexInOutside
int indexInOutside() const
local number of codim 1 entity in neighbor where intersection is contained
Definition: identitygridintersections.hh:313
Dune::IdentityGridLeafIntersection::indexInInside
int indexInInside() const
local number of codim 1 entity in self where intersection is contained in
Definition: identitygridintersections.hh:147
Dune::IdentityGridLevelIntersection::outerNormal
FieldVector< ctype, dimworld > outerNormal(const FieldVector< ctype, dim-1 > &local) const
return outer normal
Definition: identitygridintersections.hh:319
Dune::IdentityGridLevelIntersection
Definition: identitygridintersections.hh:189
Dune::IdentityGridLevelIntersection::boundary
bool boundary() const
return true if intersection is with boundary.
Definition: identitygridintersections.hh:248
Dune::IdentityGridLeafIntersection::geometryInOutside
LocalGeometry geometryInOutside() const
Definition: identitygridintersections.hh:133
Dune::IdentityGridLevelIntersection::NormalVector
FieldVector< ctype, dimworld > NormalVector
Definition: identitygridintersections.hh:210
Dune::IdentityGridLevelIntersection::IdentityGridLevelIntersection
IdentityGridLevelIntersection()
Definition: identitygridintersections.hh:212
Dune
Include standard header files.
Definition: agrid.hh:58
Dune::IdentityGridLeafIntersection::Entity
GridImp::template Codim< 0 >::Entity Entity
Definition: identitygridintersections.hh:50
Dune::IdentityGridLeafIntersection::IdentityGridLeafIntersection
IdentityGridLeafIntersection(const GridImp *identityGrid, HostLeafIntersection &&hostIntersection)
Definition: identitygridintersections.hh:62
Dune::IdentityGridLeafIntersection
An intersection with a leaf neighbor element.
Definition: identitygridintersections.hh:30
Dune::IdentityGridLevelIntersection::geometryInInside
LocalGeometry geometryInInside() const
Definition: identitygridintersections.hh:286
Dune::IdentityGridLeafIntersection::LocalGeometry
GridImp::template Codim< 1 >::LocalGeometry LocalGeometry
Definition: identitygridintersections.hh:49
Dune::HostGridAccess
provides access to host grid objects from GeometryGrid
Definition: identitygrid.hh:36
Dune::IdentityGridLeafIntersection::outerNormal
FieldVector< ctype, GridImp::dimensionworld > outerNormal(const FieldVector< ctype, GridImp::dimension-1 > &local) const
return outer normal
Definition: identitygridintersections.hh:159