Dune Core Modules (2.3.1)

intersection.hh
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
6#include <dune/grid/common/intersection.hh>
7
8#include <dune/grid/albertagrid/transformation.hh>
10#include <dune/grid/albertagrid/geometry.hh>
11
12#if HAVE_ALBERTA
13
14namespace 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 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
48 typedef Alberta::ElementInfo< dimension > ElementInfo;
49
50 protected:
51 typedef AlbertaGridEntity< 0, dimension, Grid > EntityImp;
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
72 NormalVector centerIntegrationOuterNormal () const;
73 NormalVector centerOuterNormal () const;
74 NormalVector centerUnitOuterNormal () const;
75
76 NormalVector integrationOuterNormal ( const LocalCoordType &local ) const;
77 NormalVector outerNormal ( const LocalCoordType &local ) const;
78 NormalVector unitOuterNormal ( const LocalCoordType &local ) const;
79
80
81 AlbertaTransformation transformation () const;
82
83
84 const Grid &grid () const;
85 const ElementInfo &elementInfo () const;
86
87 protected:
88 const Grid *grid_;
89 ElementInfo elementInfo_;
90 int oppVertex_;
91 };
92
93
94
95 // AlbertaGridLeafIntersection
96 // ---------------------------
97
98 template< class GridImp >
99 class AlbertaGridLeafIntersection
100 : public AlbertaGridIntersectionBase< GridImp >
101 {
102 typedef AlbertaGridLeafIntersection< GridImp > This;
103 typedef AlbertaGridIntersectionBase< GridImp > Base;
104
105 friend class AlbertaGridEntity< 0, GridImp::dimension, GridImp >;
106
107 public:
108 typedef This ImplementationType;
109
110 static const int dimension = Base::dimension;
111 static const int dimensionworld = Base::dimensionworld;
112
113 typedef typename Base::NormalVector NormalVector;
114 typedef typename Base::LocalCoordType LocalCoordType;
115
116 typedef typename Base::Entity Entity;
117 typedef typename Base::EntityPointer EntityPointer;
118
119 typedef typename Base::Geometry Geometry;
120 typedef typename Base::LocalGeometry LocalGeometry;
121
122 typedef typename Base::ElementInfo ElementInfo;
123
124 protected:
125 typedef typename Base::EntityImp EntityImp;
126
127 typedef typename Base::GeometryImpl GeometryImpl;
128 typedef typename Base::LocalGeometryImpl LocalGeometryImpl;
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
155 LocalGeometry geometryInInside () const;
156 LocalGeometry geometryInOutside () const;
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
@ dimension
The dimension of the grid.
Definition: grid.hh:400
@ dimensionworld
The dimension of the world the grid lives in.
Definition: grid.hh:406
ct ctype
Define type used for coordinates in grid module.
Definition: grid.hh:546
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
provides a wrapper for ALBERTA's el_info structure
Dune namespace.
Definition: alignment.hh:14
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Jul 15, 22:36, 2024)