dune-grid  2.7.0
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 >
29  class AlbertaGridIntersectionBase
30  {
31  typedef AlbertaGridIntersectionBase< Grid > This;
32 
33  public:
34  typedef typename Grid::ctype ctype;
35 
36  static const int dimension = Grid::dimension;
37  static const int dimensionworld = Grid::dimensionworld;
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 
44  typedef typename Grid::template Codim< 1 >::Geometry Geometry;
45  typedef typename Grid::template Codim< 1 >::LocalGeometry LocalGeometry;
46 
47  typedef Alberta::ElementInfo< dimension > ElementInfo;
48 
49  protected:
50  typedef AlbertaGridEntity< 0, dimension, Grid > EntityImp;
51 
52  typedef typename Grid::Traits::template Codim< 1 >::GeometryImpl GeometryImpl;
53  typedef typename Grid::Traits::template Codim< 1 >::LocalGeometryImpl LocalGeometryImpl;
54 
55  struct GlobalCoordReader;
56  struct LocalCoordReader;
57 
58  public:
59 
60  AlbertaGridIntersectionBase ();
61 
62  AlbertaGridIntersectionBase ( const EntityImp &entity, const int oppVertex );
63 
64  Entity inside () const;
65 
66  bool boundary () const;
67  int boundaryId () const;
68  size_t boundarySegmentIndex () const;
69 
70  int indexInInside () const;
71 
72  GeometryType type () const;
73 
74  NormalVector centerIntegrationOuterNormal () const;
75  NormalVector centerOuterNormal () const;
76  NormalVector centerUnitOuterNormal () const;
77 
78  NormalVector integrationOuterNormal ( const LocalCoordType &local ) const;
79  NormalVector outerNormal ( const LocalCoordType &local ) const;
80  NormalVector unitOuterNormal ( const LocalCoordType &local ) const;
81 
82 
83  AlbertaTransformation transformation () const;
84 
85 
86  const Grid &grid () const;
87  const ElementInfo &elementInfo () const;
88 
89  protected:
90  const Grid *grid_;
91  ElementInfo elementInfo_;
92  int oppVertex_;
93  };
94 
95 
96 
97  // AlbertaGridLeafIntersection
98  // ---------------------------
99 
100  template< class GridImp >
101  class AlbertaGridLeafIntersection
102  : public AlbertaGridIntersectionBase< GridImp >
103  {
104  typedef AlbertaGridLeafIntersection< GridImp > This;
105  typedef AlbertaGridIntersectionBase< GridImp > Base;
106 
107  friend class AlbertaGridEntity< 0, GridImp::dimension, GridImp >;
108 
109  public:
110  typedef This ImplementationType;
111 
112  static const int dimension = Base::dimension;
113  static const int dimensionworld = Base::dimensionworld;
114 
115  typedef typename Base::NormalVector NormalVector;
116  typedef typename Base::LocalCoordType LocalCoordType;
117 
118  typedef typename Base::Entity Entity;
119 
120  typedef typename Base::Geometry Geometry;
121  typedef typename Base::LocalGeometry LocalGeometry;
122 
123  typedef typename Base::ElementInfo ElementInfo;
124 
125  protected:
126  typedef typename Base::EntityImp EntityImp;
127 
128  typedef typename Base::GeometryImpl GeometryImpl;
129  typedef typename Base::LocalGeometryImpl LocalGeometryImpl;
130 
131  typedef typename Base::GlobalCoordReader GlobalCoordReader;
132  typedef typename Base::LocalCoordReader LocalCoordReader;
133 
134  public:
135  using Base::grid;
136  using Base::elementInfo;
137 
138  using Base::inside;
139 
140  AlbertaGridLeafIntersection () = default;
141 
142  AlbertaGridLeafIntersection ( const EntityImp &entity, int n ) : Base( entity, n ) {}
143 
144  AlbertaGridLeafIntersection ( const This &other ) : Base( other ) {}
145 
146  This &operator= ( const This &other )
147  {
148  *static_cast< Base * >( this ) = other;
149  neighborInfo_ = ElementInfo();
150  return *this;
151  }
152 
153  bool operator== ( const This &other ) const { return (oppVertex_ == other.oppVertex_) && (elementInfo_ == other.elementInfo_); }
154  bool operator!= ( const This &other ) const { return (oppVertex_ != other.oppVertex_) || (elementInfo_ != other.elementInfo_); }
155 
156  bool equals ( const AlbertaGridLeafIntersection& other ) const { return (*this) == other; }
157 
158  void next ();
159 
160  typename GridImp::template Codim< 0 >::Entity outside () const;
161 
162  bool neighbor () const;
163 
164  bool conforming () const { return true; }
165 
166  LocalGeometry geometryInInside () const;
167  LocalGeometry geometryInOutside () const;
168 
169  Geometry geometry () const;
170 
171  int indexInOutside () const;
172 
173  int twistInInside () const { return elementInfo().template twist< 1 >( oppVertex_ ); }
174  int twistInOutside () const { return elementInfo().twistInNeighbor( oppVertex_ ); }
175 
176  protected:
177  using Base::elementInfo_;
178  using Base::oppVertex_;
179 
180  private:
181  mutable ElementInfo neighborInfo_;
182  };
183 
184 } // namespace Dune
185 
186 #endif // #if HAVE_ALBERTA
187 
188 #endif // #ifndef DUNE_ALBERTA_INTERSECTION_HH
Dune::VTK::conforming
@ conforming
Output conforming data.
Definition: common.hh:72
transformation.hh
intersection.hh
Dune::Grid::ctype
ct ctype
Define type used for coordinates in grid module.
Definition: common/grid.hh:522
Dune::Grid::dimensionworld
@ dimensionworld
The dimension of the world the grid lives in.
Definition: common/grid.hh:393
elementinfo.hh
provides a wrapper for ALBERTA's el_info structure
Dune::Grid::dimension
@ dimension
The dimension of the grid.
Definition: common/grid.hh:387
geometry.hh
Dune
Include standard header files.
Definition: agrid.hh:58
Dune::VTK::GeometryType
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:180