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