dune-grid  2.3.1
geometryreference.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_GRID_GEOMETRYREFERENCE_HH
4 #define DUNE_GRID_GEOMETRYREFERENCE_HH
5 
10 #include <dune/common/typetraits.hh>
11 
12 #include <dune/geometry/type.hh>
13 
15 
16 namespace Dune
17 {
18 
19  // Internal Forward Declarations
20  // -----------------------------
21 
22  template< int mydim, int cdim, class Grid >
24 
25  template< int mydim, int cdim, class Grid >
27 
28 
29 
30  // FacadeOptions
31  // -------------
32 
33  namespace FacadeOptions
34  {
35 
36  template< int mydim, int cdim, class GridImp, template< int, int, class > class GeometryImp >
37  struct StoreGeometryReference;
38 
39  template< int mydim, int cdim, class Grid >
41  {
42  static const bool v = false;
43  };
44 
45  template< int mydim, int cdim, class Grid >
47  {
48  static const bool v = false;
49  };
50 
51  } // namespace FacadeOptions
52 
53 
54 
55  // GeometryReference
56  // -----------------
57 
58  template< class Implementation >
60  {
62 
63  public:
64  static const int mydimension = Implementation::mydimension;
65  static const int coorddimension = Implementation::coorddimension;
66 
67  typedef typename Implementation::ctype ctype;
68 
69  typedef typename Implementation::LocalCoordinate LocalCoordinate;
70  typedef typename Implementation::GlobalCoordinate GlobalCoordinate;
71 
72  typedef typename Implementation::JacobianInverseTransposed JacobianInverseTransposed;
73  typedef typename Implementation::JacobianTransposed JacobianTransposed;
74 
75  explicit GeometryReference ( const Implementation &impl )
76  : impl_( &impl )
77  {}
78 
79  GeometryType type () const { return impl().type(); }
80 
81  bool affine() const { return impl().affine(); }
82 
83  int corners () const { return impl().corners(); }
84  GlobalCoordinate corner ( int i ) const { return impl().corner( i ); }
85  GlobalCoordinate center () const { return impl().center(); }
86 
88  {
89  return impl().global( local );
90  }
91 
93  {
94  return impl().local( global );
95  }
96 
98  {
99  return impl().integrationElement( local );
100  }
101 
102  ctype volume () const { return impl().volume(); }
103 
105  {
106  return impl().jacobianTransposed( local );
107  }
108 
110  {
111  return impl().jacobianInverseTransposed( local );
112  }
113 
114  const Implementation &impl () const { return *impl_; }
115 
116  private:
117  const Implementation *impl_;
118  };
119 
120 
121 
122  // GlobalGeometryReference
123  // -----------------------
124 
125  template< int mydim, int cdim, class Grid >
126  class GlobalGeometryReference
127  : public GeometryReference< typename remove_const< Grid >::type::Traits::template Codim< remove_const< Grid >::type::dimension - mydim >::GeometryImpl >
128  {
129  typedef typename remove_const< Grid >::type::Traits::template Codim< remove_const< Grid >::type::dimension - mydim >::GeometryImpl Implementation;
130 
131  public:
132  GlobalGeometryReference ( const Implementation &impl )
133  : GeometryReference< Implementation >( impl )
134  {}
135  };
136 
137 
138 
139  // LocalGeometryReference
140  // -----------------------
141 
142  template< int mydim, int cdim, class Grid >
143  class LocalGeometryReference
144  : public GeometryReference< typename remove_const< Grid >::type::Traits::template Codim< remove_const< Grid >::type::dimension - mydim >::LocalGeometryImpl >
145  {
146  typedef typename remove_const< Grid >::type::Traits::template Codim< remove_const< Grid >::type::dimension - mydim >::LocalGeometryImpl Implementation;
147 
148  public:
149  LocalGeometryReference ( const Implementation &impl )
150  : GeometryReference< Implementation >( impl )
151  {}
152  };
153 
154 
155 
156  // Definitions of GeometryReference
157  // --------------------------------
158 
159  template< class Implementation >
160  const int GeometryReference< Implementation >::mydimension;
161 
162  template< class Implementation >
163  const int GeometryReference< Implementation >::coorddimension;
164 
165 } // namespace Dune
166 
167 #endif // #ifndef DUNE_GRID_GEOMETRYREFERENCE_HH
Definition: geometryreference.hh:26
static const int mydimension
Definition: geometryreference.hh:64
Implementation::JacobianInverseTransposed JacobianInverseTransposed
Definition: geometryreference.hh:72
GlobalCoordinate center() const
Definition: geometryreference.hh:85
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
Implementation::ctype ctype
Definition: geometryreference.hh:67
bool affine() const
Definition: geometryreference.hh:81
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
Definition: geometryreference.hh:109
GlobalCoordinate global(const LocalCoordinate &local) const
Definition: geometryreference.hh:87
ctype integrationElement(const LocalCoordinate &local) const
Definition: geometryreference.hh:97
Traits class determining whether the Dune::Geometry facade class stores the implementation object by ...
Definition: common/geometry.hh:46
int corners() const
Definition: geometryreference.hh:83
GeometryType type() const
Definition: geometryreference.hh:79
static const int coorddimension
Definition: geometryreference.hh:65
Definition: geometryreference.hh:59
LocalGeometryReference(const Implementation &impl)
Definition: geometryreference.hh:149
ctype volume() const
Definition: geometryreference.hh:102
static const bool v
Whether to store by reference.
Definition: common/geometry.hh:49
LocalCoordinate local(const GlobalCoordinate &global) const
Definition: geometryreference.hh:92
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
GeometryReference(const Implementation &impl)
Definition: geometryreference.hh:75
Wrapper and interface classes for element geometries.
Definition: geometryreference.hh:23
const Implementation & impl() const
Definition: geometryreference.hh:114
Implementation::GlobalCoordinate GlobalCoordinate
Definition: geometryreference.hh:70
Implementation::LocalCoordinate LocalCoordinate
Definition: geometryreference.hh:69
GlobalCoordinate corner(int i) const
Definition: geometryreference.hh:84
GlobalGeometryReference(const Implementation &impl)
Definition: geometryreference.hh:132
Implementation::JacobianTransposed JacobianTransposed
Definition: geometryreference.hh:73
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
Definition: geometryreference.hh:104