1 #ifndef DUNE_MULTIDOMAINGRID_GEOMETRY_HH
2 #define DUNE_MULTIDOMAINGRID_GEOMETRY_HH
3 
4 #include <dune/grid/common/geometry.hh>
5 
6 namespace Dune {
7 
8 namespace mdgrid {
9 
10 template<int mydim, int coorddim, typename GridImp>
11 class GeometryWrapper
12 {
13 
14   template<int,int,typename>
15   friend class EntityWrapperBase;
16 
17   template<int,int,typename>
18   friend class EntityWrapper;
19 
20   template<typename,typename>
21   friend class IntersectionWrapper;
22 
23   template<typename,typename,typename,typename>
24   friend class SubDomainInterface;
25 
26 public:
27 
28   typedef typename GridImp::ctype ctype;
29   static const int dimension = GridImp::dimension;
30   static const int dimensionworld = GridImp::dimensionworld;
31   static const int mydimension = mydim;
32   static const int coorddimension = coorddim;
33 
34 private:
35 
36   typedef FieldVector<ctype,coorddimension> GlobalCoords;
37   typedef FieldVector<ctype,mydimension> LocalCoords;
38   typedef typename GridImp::HostGrid::Traits::template Codim<dimension-mydim>::Geometry HostGeometry; //TODO: fix this
39 
40 public:
41 
42   typedef typename HostGeometry::JacobianInverseTransposed JacobianInverseTransposed;
43   typedef typename HostGeometry::JacobianTransposed JacobianTransposed;
44 
type() const45   GeometryType type() const {
46     return _wrappedGeometry.type();
47   }
48 
corners() const49   int corners() const {
50     return _wrappedGeometry.corners();
51   }
52 
affine() const53   bool affine() const {
54     return _wrappedGeometry.affine();
55   }
56 
corner(int i) const57   GlobalCoords corner(int i) const {
58     return _wrappedGeometry.corner(i);
59   }
60 
global(const LocalCoords & local) const61   GlobalCoords global(const LocalCoords& local) const {
62     return _wrappedGeometry.global(local);
63   }
64 
local(const GlobalCoords & global) const65   LocalCoords local(const GlobalCoords& global) const {
66     return _wrappedGeometry.local(global);
67   }
68 
checkInside(const LocalCoords & local) const69   bool checkInside(const LocalCoords& local) const {
70     return _wrappedGeometry.checkInside(local);
71   }
72 
integrationElement(const LocalCoords & local) const73   ctype integrationElement(const LocalCoords& local) const {
74     return _wrappedGeometry.integrationElement(local);
75   }
76 
volume() const77   ctype volume() const {
78     return _wrappedGeometry.volume();
79   }
80 
center() const81   GlobalCoords center() const {
82     return _wrappedGeometry.center();
83   }
84 
85   const JacobianTransposed
jacobianTransposed(const LocalCoords & local) const86   jacobianTransposed(const LocalCoords& local) const {
87     return _wrappedGeometry.jacobianTransposed(local);
88   }
89 
90   const JacobianInverseTransposed
jacobianInverseTransposed(const LocalCoords & local) const91   jacobianInverseTransposed(const LocalCoords& local) const {
92     return _wrappedGeometry.jacobianInverseTransposed(local);
93   }
94 
95 private:
96 
GeometryWrapper(const HostGeometry & wrappedGeometry)97   GeometryWrapper(const HostGeometry& wrappedGeometry)
98     : _wrappedGeometry(wrappedGeometry)
99   {}
100 
101   const HostGeometry _wrappedGeometry;
102 
103 };
104 
105 } // namespace mdgrid
106 
107 } // namespace Dune
108 
109 #endif // DUNE_MULTIDOMAINGRID_GEOMETRY_HH
110