dune-grid  2.3.1-rc1
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  AlbertaGridIntersectionBase ( const EntityImp &entity, const int oppVertex );
61 
62  EntityPointer inside () const;
63 
64  bool boundary () const;
65  int boundaryId () const;
66  size_t boundarySegmentIndex () const;
67 
68  int indexInInside () const;
69 
70  GeometryType type () const;
71 
75 
76  NormalVector integrationOuterNormal ( const LocalCoordType &local ) const;
77  NormalVector outerNormal ( const LocalCoordType &local ) const;
78  NormalVector unitOuterNormal ( const LocalCoordType &local ) const;
79 
80 
82 
83 
84  const Grid &grid () const;
85  const ElementInfo &elementInfo () const;
86 
87  protected:
88  const Grid *grid_;
91  };
92 
93 
94 
95  // AlbertaGridLeafIntersection
96  // ---------------------------
97 
98  template< class GridImp >
100  : public AlbertaGridIntersectionBase< GridImp >
101  {
104 
105  friend class AlbertaGridEntity< 0, GridImp::dimension, GridImp >;
106 
107  public:
109 
110  static const int dimension = Base::dimension;
112 
115 
116  typedef typename Base::Entity Entity;
118 
119  typedef typename Base::Geometry Geometry;
121 
122  typedef typename Base::ElementInfo ElementInfo;
123 
124  protected:
125  typedef typename Base::EntityImp EntityImp;
126 
129 
130  typedef typename Base::GlobalCoordReader GlobalCoordReader;
131  typedef typename Base::LocalCoordReader LocalCoordReader;
132 
133  public:
134  using Base::grid;
135  using Base::elementInfo;
136 
137  using Base::inside;
138 
139  AlbertaGridLeafIntersection ( const EntityImp &entity, const int n );
140 
141  AlbertaGridLeafIntersection ( const This &other );
142 
143  This &operator= ( const This &other );
144 
145  bool operator== ( const This &other ) const;
146 
147  void next ();
148 
149  EntityPointer outside () const;
150 
151  bool neighbor () const;
152 
153  bool conforming () const;
154 
157 
158  Geometry geometry () const;
159 
160  int indexInOutside () const;
161 
162 
163  int twistInInside () const;
164  int twistInOutside () const;
165 
166  protected:
167  using Base::oppVertex_;
168 
169  private:
170  mutable ElementInfo neighborInfo_;
171  };
172 
173 } // namespace Dune
174 
175 #endif // #if HAVE_ALBERTA
176 
177 #endif // #ifndef DUNE_ALBERTA_INTERSECTION_HH
Base::LocalGeometry LocalGeometry
Definition: albertagrid/intersection.hh:120
Base::Geometry Geometry
Definition: albertagrid/intersection.hh:119
Base::Entity Entity
Definition: albertagrid/intersection.hh:116
FieldVector< ctype, dimensionworld > NormalVector
Definition: albertagrid/intersection.hh:39
NormalVector centerOuterNormal() const
Definition: albertagrid/intersection.cc:161
Grid::template Codim< 1 >::Geometry Geometry
Definition: albertagrid/intersection.hh:45
int twistInOutside() const
Definition: albertagrid/intersection.cc:474
static const int dimension
Definition: albertagrid/intersection.hh:110
void next()
Definition: albertagrid/intersection.cc:379
Base::LocalCoordReader LocalCoordReader
Definition: albertagrid/intersection.hh:131
int oppVertex_
Definition: albertagrid/intersection.hh:90
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
Definition: albertagrid/intersection.hh:29
ElementInfo elementInfo_
Definition: albertagrid/intersection.hh:89
int boundaryId() const
Definition: albertagrid/intersection.cc:40
Definition: albertagrid/transformation.hh:15
LocalGeometry geometryInInside() const
Definition: albertagrid/intersection.cc:420
NormalVector centerIntegrationOuterNormal() const
Definition: albertagrid/intersection.cc:81
GeometryType type() const
Definition: albertagrid/intersection.cc:72
int indexInOutside() const
Definition: albertagrid/intersection.cc:455
Base::GeometryImpl GeometryImpl
Definition: albertagrid/intersection.hh:127
EntityPointer inside() const
Definition: albertagrid/intersection.cc:25
Grid::ctype ctype
Definition: albertagrid/intersection.hh:34
bool conforming() const
Definition: albertagrid/intersection.cc:405
LocalGeometry geometryInOutside() const
Definition: albertagrid/intersection.cc:431
Geometry geometry() const
Definition: albertagrid/intersection.cc:446
The dimension of the world the grid lives in.
Definition: common/grid.hh:406
Base::NormalVector NormalVector
Definition: albertagrid/intersection.hh:113
const Grid * grid_
Definition: albertagrid/intersection.hh:88
NormalVector outerNormal(const LocalCoordType &local) const
Definition: albertagrid/intersection.cc:187
The dimension of the grid.
Definition: common/grid.hh:400
static const int dimensionworld
Definition: albertagrid/intersection.hh:37
Grid::template Codim< 0 >::Entity Entity
Definition: albertagrid/intersection.hh:42
Alberta::ElementInfo< dimension > ElementInfo
Definition: albertagrid/intersection.hh:48
int twistInInside() const
Definition: albertagrid/intersection.cc:466
NormalVector unitOuterNormal(const LocalCoordType &local) const
Definition: albertagrid/intersection.cc:195
provides a wrapper for ALBERTA's el_info structure
size_t boundarySegmentIndex() const
Definition: albertagrid/intersection.cc:54
Grid::template Codim< 0 >::EntityPointer EntityPointer
Definition: albertagrid/intersection.hh:43
const Grid & grid() const
Definition: albertagrid/intersection.cc:210
Base::LocalGeometryImpl LocalGeometryImpl
Definition: albertagrid/intersection.hh:128
AlbertaGridEntity< 0, dimension, Grid > EntityImp
Definition: albertagrid/intersection.hh:51
int indexInInside() const
Definition: albertagrid/intersection.cc:64
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:386
Grid::template Codim< 1 >::LocalGeometry LocalGeometry
Definition: albertagrid/intersection.hh:46
Base::LocalCoordType LocalCoordType
Definition: albertagrid/intersection.hh:114
Base::EntityPointer EntityPointer
Definition: albertagrid/intersection.hh:117
ct ctype
Define type used for coordinates in grid module.
Definition: common/grid.hh:546
EntityPointer outside() const
Definition: albertagrid/intersection.cc:388
NormalVector centerUnitOuterNormal() const
Definition: albertagrid/intersection.cc:169
static const int dimension
Definition: albertagrid/intersection.hh:36
static const int dimensionworld
Definition: albertagrid/intersection.hh:111
Definition: albertagrid/entity.hh:30
Base::GlobalCoordReader GlobalCoordReader
Definition: albertagrid/intersection.hh:130
Grid::Traits::template Codim< 1 >::LocalGeometryImpl LocalGeometryImpl
Definition: albertagrid/intersection.hh:54
bool neighbor() const
Definition: albertagrid/intersection.cc:411
Definition: albertagrid/entity.hh:45
bool boundary() const
Definition: albertagrid/intersection.cc:33
FieldVector< ctype, dimension-1 > LocalCoordType
Definition: albertagrid/intersection.hh:40
AlbertaGridIntersectionBase(const EntityImp &entity, const int oppVertex)
Definition: albertagrid/intersection.cc:16
AlbertaTransformation transformation() const
Definition: albertagrid/intersection.cc:203
NormalVector integrationOuterNormal(const LocalCoordType &local) const
Definition: albertagrid/intersection.cc:179
const ElementInfo & elementInfo() const
Definition: albertagrid/intersection.cc:218
Grid::Traits::template Codim< 1 >::GeometryImpl GeometryImpl
Definition: albertagrid/intersection.hh:53