dune-spgrid 2.8.0
Loading...
Searching...
No Matches
geometry.hh
Go to the documentation of this file.
1#ifndef DUNE_SPGRID_GEOMETRY_HH
2#define DUNE_SPGRID_GEOMETRY_HH
3
4#include <type_traits>
5
6#include <dune/geometry/type.hh>
7
8#include <dune/common/typetraits.hh>
9
10#include <dune/geometry/type.hh>
11#include <dune/geometry/referenceelements.hh>
12
15
16namespace Dune
17{
18
19 // SPBasicGeometry
20 // ---------------
21
22 template< int mydim, int cdim, class Grid, class Impl >
24 {
26
27 protected:
28 typedef typename std::remove_const< Grid >::type::Traits Traits;
29
30 public:
31 typedef typename Traits::ReferenceCube::ctype ctype;
32
33 static const int mydimension = mydim;
34 static const int coorddimension = cdim;
35 static const int dimension = Traits::ReferenceCube::dimension;
36 static const int codimension = dimension - mydimension;
37
40
41 static const int numCorners = (1 << mydimension);
42
45
46 // just to make the Dune interface happy
49
52
53 protected:
55 {}
56
57 public:
58 GeometryType type () const { return GeometryTypes::cube( mydimension ); }
59
60 int corners () const { return numCorners; }
61 GlobalVector corner ( const int i ) const { return global( ReferenceCube::corner( i ) ); }
63
64 bool affine () const { return true; }
65
66 GlobalVector global ( const LocalVector &local ) const;
67 LocalVector local ( const GlobalVector &global ) const;
68
69 ctype volume () const { return asImpl().geometryCache().volume(); }
70 ctype integrationElement ( const LocalVector &local ) const { return volume(); }
71
72 const JacobianTransposed &jacobianTransposed ( const LocalVector &local ) const;
74
75 protected:
76 const Impl &asImpl () const { return static_cast< const Impl & >( *this ); }
77 };
78
79
80
81 // SPGeometry
82 // ----------
83
84 template< int mydim, int cdim, class Grid >
86 : public SPBasicGeometry< mydim, cdim, Grid, SPGeometry< mydim, cdim, Grid > >
87 {
90
91 protected:
92 typedef typename Base::Traits Traits;
93
94 public:
95 typedef typename Base::ctype ctype;
96
97 static const int mydimension = Base::mydimension;
98 static const int dimension = Base::dimension;
99 static const int codimension = Base::codimension;
100
103
106
109
110 private:
111 typedef typename EntityInfo::MultiIndex MultiIndex;
112
113 public:
114 explicit SPGeometry ( const GridLevel &gridLevel )
115 : entityInfo_( gridLevel )
116 {}
117
118 explicit SPGeometry ( const EntityInfo &entityInfo )
119 : entityInfo_( entityInfo ),
120 origin_( computeOrigin() )
121 {}
122
124 : entityInfo_( gridLevel, id ),
125 origin_( computeOrigin() )
126 {}
127
130
131 GlobalVector origin () const { return origin_; }
132 const GeometryCache &geometryCache () const { return entityInfo().geometryCache(); }
133
134 const GridLevel &gridLevel () const { return entityInfo().gridLevel(); }
135
136 const EntityInfo &entityInfo () const { return entityInfo_; }
137 EntityInfo &entityInfo () { return entityInfo_; }
138
139 private:
140 GlobalVector computeOrigin () const
141 {
142 const GlobalVector &h = gridLevel().h();
143 GlobalVector origin = gridLevel().domain().cube().origin();
144 for( int i = 0; i < dimension; ++i )
145 origin[ i ] += (entityInfo().id()[ i ] / 2) * h[ i ];
146 return origin;
147 }
148
149 EntityInfo entityInfo_;
150 GlobalVector origin_;
151 };
152
153
154
155 // SPLocalGeometry
156 // ---------------
157
158 template< int mydim, int cdim, class Grid >
160 : public SPBasicGeometry< mydim, cdim, Grid, SPLocalGeometry< mydim, cdim, Grid > >
161 {
164
165 protected:
166 typedef typename Base::Traits Traits;
167
168 public:
169 typedef typename Base::ctype ctype;
170
171 static const int mydimension = Base::mydimension;
172 static const int dimension = Base::dimension;
173 static const int codimension = Base::codimension;
174
177
180
181 public:
183 const GlobalVector &origin )
184 : geometryCache_( geometryCache ),
185 origin_( origin )
186 {}
187
190
191 GlobalVector origin () const { return origin_; }
192 const GeometryCache &geometryCache () const { return geometryCache_; }
193
194 private:
195 GeometryCache geometryCache_;
196 GlobalVector origin_;
197 };
198
199
200
201 // Implementation of SPBasicGeometry
202 // ---------------------------------
203
204 template< int mydim, int cdim, class Grid, class Impl >
207 {
208 GlobalVector y( asImpl().origin() );
209 asImpl().geometryCache().jacobianTransposed().umtv( local, y );
210 return y;
211 }
212
213
214 template< int mydim, int cdim, class Grid, class Impl >
216 SPBasicGeometry< mydim, cdim, Grid, Impl >::local ( const GlobalVector &global ) const
217 {
218 LocalVector x;
219 GlobalVector y = global - asImpl().origin();
220 asImpl().geometryCache().jacobianInverseTransposed().mtv( y, x );
221 return x;
222 }
223
224
225 template< int mydim, int cdim, class Grid, class Impl >
228 {
229 return asImpl().geometryCache().jacobianTransposed();
230 }
231
232
233 template< int mydim, int cdim, class Grid, class Impl >
236 {
237 return asImpl().geometryCache().jacobianInverseTransposed();
238 }
239
240} // namespace Dune
241
242#endif // #ifndef DUNE_SPGRID_GEOMETRY_HH
Definition: iostream.hh:7
const GeometryCache & geometryCache() const
Definition: entityinfo.hh:87
const GridLevel & gridLevel() const
Definition: entityinfo.hh:66
const GlobalVector & h() const
Definition: geometricgridlevel.hh:59
Definition: geometry.hh:24
ctype volume() const
Definition: geometry.hh:69
static const int codimension
Definition: geometry.hh:36
GlobalVector corner(const int i) const
Definition: geometry.hh:61
Traits::ReferenceCube::ctype ctype
Definition: geometry.hh:31
bool affine() const
Definition: geometry.hh:64
GeometryCache::LocalVector LocalVector
Definition: geometry.hh:44
const JacobianTransposed & jacobianTransposed(const LocalVector &local) const
Definition: geometry.hh:227
std::remove_const< Grid >::type::Traits Traits
Definition: geometry.hh:28
GlobalVector GlobalCoordinate
Definition: geometry.hh:47
static const int mydimension
Definition: geometry.hh:33
ctype integrationElement(const LocalVector &local) const
Definition: geometry.hh:70
int corners() const
Definition: geometry.hh:60
GeometryCache::GlobalVector GlobalVector
Definition: geometry.hh:43
LocalVector LocalCoordinate
Definition: geometry.hh:48
GeometryCache::JacobianTransposed JacobianTransposed
Definition: geometry.hh:50
GlobalVector global(const LocalVector &local) const
Definition: geometry.hh:206
GeometryCache::JacobianInverseTransposed JacobianInverseTransposed
Definition: geometry.hh:51
static const int coorddimension
Definition: geometry.hh:34
GeometryType type() const
Definition: geometry.hh:58
GlobalVector center() const
Definition: geometry.hh:62
static const int numCorners
Definition: geometry.hh:41
SPBasicGeometry()
Definition: geometry.hh:54
static const int dimension
Definition: geometry.hh:35
const Impl & asImpl() const
Definition: geometry.hh:76
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalVector &local) const
Definition: geometry.hh:235
SPGeometryCache< ctype, dimension, codimension > GeometryCache
Definition: geometry.hh:39
SPReferenceCube< ctype, mydimension > ReferenceCube
Definition: geometry.hh:38
Definition: geometry.hh:87
EntityInfo::GridLevel GridLevel
Definition: geometry.hh:102
Base::ReferenceCube ReferenceCube
Definition: geometry.hh:104
Base::GlobalVector GlobalVector
Definition: geometry.hh:107
static const int mydimension
Definition: geometry.hh:97
SPGeometry(const EntityInfo &entityInfo)
Definition: geometry.hh:118
const GridLevel & gridLevel() const
Definition: geometry.hh:134
Base::Traits Traits
Definition: geometry.hh:92
Base::ctype ctype
Definition: geometry.hh:95
GlobalVector origin() const
Definition: geometry.hh:131
static const int codimension
Definition: geometry.hh:99
const GeometryCache & geometryCache() const
Definition: geometry.hh:132
Base::LocalVector LocalVector
Definition: geometry.hh:108
__SPGrid::EntityInfo< Grid, codimension > EntityInfo
Definition: geometry.hh:101
Base::GeometryCache GeometryCache
Definition: geometry.hh:105
SPGeometry(const GridLevel &gridLevel, const MultiIndex &id)
Definition: geometry.hh:123
SPGeometry(const GridLevel &gridLevel)
Definition: geometry.hh:114
static const int dimension
Definition: geometry.hh:98
EntityInfo & entityInfo()
Definition: geometry.hh:137
const EntityInfo & entityInfo() const
Definition: geometry.hh:136
Definition: geometry.hh:161
static const int codimension
Definition: geometry.hh:173
GlobalVector origin() const
Definition: geometry.hh:191
Base::ctype ctype
Definition: geometry.hh:169
const GeometryCache & geometryCache() const
Definition: geometry.hh:192
Base::GlobalVector GlobalVector
Definition: geometry.hh:178
static const int mydimension
Definition: geometry.hh:171
Base::LocalVector LocalVector
Definition: geometry.hh:179
SPLocalGeometry(const GeometryCache &geometryCache, const GlobalVector &origin)
Definition: geometry.hh:182
Base::ReferenceCube ReferenceCube
Definition: geometry.hh:175
Base::GeometryCache GeometryCache
Definition: geometry.hh:176
static const int dimension
Definition: geometry.hh:172
Base::Traits Traits
Definition: geometry.hh:166
void mtv(const X &x, Y &y) const
Definition: geometrycache.hh:538
Definition: geometrycache.hh:252
FieldVector< ctype, dimension > GlobalVector
Definition: geometrycache.hh:264
FieldVector< ctype, mydimension > LocalVector
Definition: geometrycache.hh:265
Definition: gridlevel.hh:35
const Domain & domain() const
Definition: gridlevel.hh:84
Definition: referencecube.hh:43
static GlobalVector corner(int i)
return i-th corner
Definition: referencecube.hh:120
static GlobalVector center()
return center
Definition: referencecube.hh:136