dune-grid  2.4.1-rc2
albertagrid/intersection.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_ALBERTA_INTERSECTION_HH
4 #define DUNE_ALBERTA_INTERSECTION_HH
5 
7 
11 
12 #if HAVE_ALBERTA
13 
14 namespace Dune
15 {
16 
17  // External Forward Declarations
18  // -----------------------------
19 
20  template< int codim, int dim, class GridImp >
21  class AlbertaGridEntity;
22 
23 
24 
25  // AlbertaGridIntersectionBase
26  // ---------------------------
27 
28  template< class Grid >
30  {
32 
33  public:
34  typedef typename Grid::ctype ctype;
35 
36  static const int dimension = Grid::dimension;
38 
39  typedef FieldVector< ctype, dimensionworld > NormalVector;
40  typedef FieldVector< ctype, dimension-1 > LocalCoordType;
41 
42  typedef typename Grid::template Codim< 0 >::Entity Entity;
43  typedef typename Grid::template Codim< 0 >::EntityPointer EntityPointer;
44 
45  typedef typename Grid::template Codim< 1 >::Geometry Geometry;
46  typedef typename Grid::template Codim< 1 >::LocalGeometry LocalGeometry;
47 
49 
50  protected:
52 
53  typedef typename Grid::Traits::template Codim< 1 >::GeometryImpl GeometryImpl;
54  typedef typename Grid::Traits::template Codim< 1 >::LocalGeometryImpl LocalGeometryImpl;
55 
56  struct GlobalCoordReader;
57  struct LocalCoordReader;
58 
59  public:
60 
62 
63  AlbertaGridIntersectionBase ( const EntityImp &entity, const int oppVertex );
64 
65  Entity inside () const;
66 
67  bool boundary () const;
68  int boundaryId () const;
69  size_t boundarySegmentIndex () const;
70 
71  int indexInInside () const;
72 
73  GeometryType type () const;
74 
75  NormalVector centerIntegrationOuterNormal () const;
76  NormalVector centerOuterNormal () const;
77  NormalVector centerUnitOuterNormal () const;
78 
79  NormalVector integrationOuterNormal ( const LocalCoordType &local ) const;
80  NormalVector outerNormal ( const LocalCoordType &local ) const;
81  NormalVector unitOuterNormal ( const LocalCoordType &local ) const;
82 
83 
85 
86 
87  const Grid &grid () const;
88  const ElementInfo &elementInfo () const;
89 
90  protected:
91  const Grid *grid_;
92  ElementInfo elementInfo_;
94  };
95 
96 
97 
98  // AlbertaGridLeafIntersection
99  // ---------------------------
100 
101  template< class GridImp >
103  : public AlbertaGridIntersectionBase< GridImp >
104  {
107 
108  friend class AlbertaGridEntity< 0, GridImp::dimension, GridImp >;
109 
110  public:
111  typedef This ImplementationType;
112 
113  static const int dimension = Base::dimension;
114  static const int dimensionworld = Base::dimensionworld;
115 
118 
119  typedef typename Base::Entity Entity;
121 
122  typedef typename Base::Geometry Geometry;
124 
125  typedef typename Base::ElementInfo ElementInfo;
126 
127  protected:
128  typedef typename Base::EntityImp EntityImp;
129 
132 
133  typedef typename Base::GlobalCoordReader GlobalCoordReader;
134  typedef typename Base::LocalCoordReader LocalCoordReader;
135 
136  public:
137  using Base::grid;
138  using Base::elementInfo;
139 
140  using Base::inside;
141 
143  {}
144 
145  AlbertaGridLeafIntersection ( const EntityImp &entity, const int n );
146 
147  AlbertaGridLeafIntersection ( const This &other );
148 
149  bool equals( const AlbertaGridLeafIntersection& other ) const
150  {
151  return (*this) == other;
152  }
153 
154  This &operator= ( const This &other );
155 
156  bool operator== ( const This &other ) const;
157 
158  void next ();
159 
160  typename GridImp::template Codim< 0 >::Entity
161  outside () const;
162 
163  bool neighbor () const;
164 
165  bool conforming () const;
166 
167  LocalGeometry geometryInInside () const;
168  LocalGeometry geometryInOutside () const;
169 
170  Geometry geometry () const;
171 
172  int indexInOutside () const;
173 
174 
175  int twistInInside () const;
176  int twistInOutside () const;
177 
178  protected:
179  using Base::oppVertex_;
180 
181  private:
182  mutable ElementInfo neighborInfo_;
183  };
184 
185 } // namespace Dune
186 
187 #endif // #if HAVE_ALBERTA
188 
189 #endif // #ifndef DUNE_ALBERTA_INTERSECTION_HH
Base::EntityPointer EntityPointer
Definition: albertagrid/intersection.hh:120
Entity inside() const
Definition: albertagrid/intersection.cc:34
int boundaryId() const
Definition: albertagrid/intersection.cc:49
Base::NormalVector NormalVector
Definition: albertagrid/intersection.hh:116
Grid::template Codim< 0 >::EntityPointer EntityPointer
Definition: albertagrid/intersection.hh:43
Grid::ctype ctype
Definition: albertagrid/intersection.hh:34
NormalVector centerIntegrationOuterNormal() const
Definition: albertagrid/intersection.cc:90
Base::Entity Entity
Definition: albertagrid/intersection.hh:119
FieldVector< ctype, dimensionworld > NormalVector
Definition: albertagrid/intersection.hh:39
GeometryType
Type representing VTK&#39;s entity geometry types.
Definition: common.hh:178
NormalVector centerUnitOuterNormal() const
Definition: albertagrid/intersection.cc:179
Definition: albertagrid/transformation.hh:15
Base::Geometry Geometry
Definition: albertagrid/intersection.hh:122
The dimension of the world the grid lives in.
Definition: common/grid.hh:408
Grid::template Codim< 1 >::Geometry Geometry
Definition: albertagrid/intersection.hh:45
Base::LocalGeometry LocalGeometry
Definition: albertagrid/intersection.hh:123
AlbertaGridEntity< 0, dimension, Grid > EntityImp
Definition: albertagrid/intersection.hh:51
Grid::template Codim< 1 >::LocalGeometry LocalGeometry
Definition: albertagrid/intersection.hh:46
int oppVertex_
Definition: albertagrid/intersection.hh:93
Definition: alugrid/common/declaration.hh:20
const Grid & grid() const
Definition: albertagrid/intersection.cc:220
Base::LocalGeometryImpl LocalGeometryImpl
Definition: albertagrid/intersection.hh:131
int indexInInside() const
Definition: albertagrid/intersection.cc:73
GeometryType type() const
Definition: albertagrid/intersection.cc:81
Definition: albertagrid/entity.hh:30
const Grid * grid_
Definition: albertagrid/intersection.hh:91
NormalVector outerNormal(const LocalCoordType &local) const
Definition: albertagrid/intersection.cc:197
size_t boundarySegmentIndex() const
Definition: albertagrid/intersection.cc:63
static const int dimensionworld
Definition: albertagrid/intersection.hh:37
AlbertaTransformation transformation() const
Definition: albertagrid/intersection.cc:213
provides a wrapper for ALBERTA&#39;s el_info structure
Grid::Traits::template Codim< 1 >::GeometryImpl GeometryImpl
Definition: albertagrid/intersection.hh:53
ct ctype
Define type used for coordinates in grid module.
Definition: common/grid.hh:548
Base::GeometryImpl GeometryImpl
Definition: albertagrid/intersection.hh:130
Grid abstract base classThis class is the base class for all grid implementations. Although no virtual functions are used we call it abstract since its methods do not contain an implementation but forward to the methods of the derived class via the Barton-Nackman trick.
Definition: common/grid.hh:388
Base::GlobalCoordReader GlobalCoordReader
Definition: albertagrid/intersection.hh:133
AlbertaGridIntersectionBase()
Definition: albertagrid/intersection.cc:17
NormalVector centerOuterNormal() const
Definition: albertagrid/intersection.cc:171
bool equals(const AlbertaGridLeafIntersection &other) const
Definition: albertagrid/intersection.hh:149
Include standard header files.
Definition: agrid.hh:59
bool boundary() const
Definition: albertagrid/intersection.cc:42
FieldVector< ctype, dimension-1 > LocalCoordType
Definition: albertagrid/intersection.hh:40
Definition: albertagrid/intersection.hh:29
static const int dimension
Definition: albertagrid/intersection.hh:36
Base::LocalCoordReader LocalCoordReader
Definition: albertagrid/intersection.hh:134
NormalVector unitOuterNormal(const LocalCoordType &local) const
Definition: albertagrid/intersection.cc:205
ElementInfo elementInfo_
Definition: albertagrid/intersection.hh:92
Grid::Traits::template Codim< 1 >::LocalGeometryImpl LocalGeometryImpl
Definition: albertagrid/intersection.hh:54
The dimension of the grid.
Definition: common/grid.hh:402
const ElementInfo & elementInfo() const
Definition: albertagrid/intersection.cc:228
Base::LocalCoordType LocalCoordType
Definition: albertagrid/intersection.hh:117
Grid::template Codim< 0 >::Entity Entity
Definition: albertagrid/intersection.hh:42
Definition: albertagrid/entity.hh:45
Alberta::ElementInfo< dimension > ElementInfo
Definition: albertagrid/intersection.hh:48
NormalVector integrationOuterNormal(const LocalCoordType &local) const
Definition: albertagrid/intersection.cc:189