3#ifndef DUNE_GEOGRID_GEOMETRY_HH
4#define DUNE_GEOGRID_GEOMETRY_HH
8#include <dune/common/typetraits.hh>
10#include <dune/geometry/referenceelements.hh>
11#include <dune/geometry/multilineargeometry.hh>
25 template<
class hasSingleGeometryType,
int dim,
int mydim >
29 static const unsigned int id = hasSingleGeometryType::topologyId;
30 static const unsigned int idMask = (1u << mydim) - 1u;
33 static const bool v = hasSingleGeometryType::v && ((mydim == dim) || ((
id | 1u) == 1u) || ((
id | 1u) == idMask));
34 static const unsigned int topologyId = (
v ?
id & idMask : ~0u);
37 template<
class hasSingleGeometryType,
int dim >
40 static const bool v =
true;
41 static const unsigned int topologyId = GenericGeometry::CubeTopology< 1 >::type::id;
44 template<
class hasSingleGeometryType,
int dim >
47 static const bool v =
true;
48 static const unsigned int topologyId = GenericGeometry::CubeTopology< 0 >::type::id;
56 template<
class Gr
id >
59 typedef typename std::remove_const< Grid >::type::Traits
Traits;
61 typedef typename Traits::ctype
ctype;
63 typedef GenericGeometry::MatrixHelper< GenericGeometry::DuneCoordTraits< ctype > >
MatrixHelper;
65 static ctype tolerance () {
return 16 * std::numeric_limits< ctype >::epsilon(); }
67 template<
int mydim,
int cdim >
84 template<
int mydim,
int cdim,
class Gr
id >
89 typedef typename std::remove_const< Grid >::type::Traits Traits;
91 template<
int,
int,
class >
friend class Geometry;
94 typedef typename Traits::ctype
ctype;
102 typedef CachedMultiLinearGeometry< ctype, mydimension, coorddimension, GeometryTraits< Grid > >
BasicMapping;
107 template<
class CoordVector >
117 unsigned int refCount_;
127 Geometry () : grid_( nullptr ), mapping_( nullptr ) {}
131 template<
class CoordVector >
136 void *mappingStorage =
grid.allocateStorage(
sizeof(
Mapping ) );
137 mapping_ =
new( mappingStorage )
Mapping(
type, coords );
142 : grid_( other.grid_ ),
143 mapping_( other.mapping_ )
150 : grid_( other.grid_ ),
151 mapping_( other.mapping_ )
153 other.grid_ =
nullptr;
154 other.mapping_ =
nullptr;
170 mapping_ = other.mapping_;
177 swap( grid_, other.grid_ );
178 swap( mapping_, other.mapping_ );
182 operator bool ()
const {
return bool( mapping_ ); }
184 bool affine ()
const {
return mapping_->affine(); }
185 GeometryType
type ()
const {
return mapping_->type(); }
187 int corners ()
const {
return mapping_->corners(); }
200 const Grid &
grid ()
const { assert( grid_ );
return *grid_; }
203 void destroyMapping ()
205 mapping_->~Mapping();
206 grid().deallocateStorage( mapping_,
sizeof( Mapping ) );
void swap(Dune::PersistentContainer< G, T > &a, Dune::PersistentContainer< G, T > &b)
Definition utility/persistentcontainer.hh:81
Include standard header files.
Definition agrid.hh:60
Grid abstract base class.
Definition common/grid.hh:373
Definition cornerstorage.hh:20
Definition cornerstorage.hh:173
Definition geometrygrid/geometry.hh:27
static const unsigned int topologyId
Definition geometrygrid/geometry.hh:34
static const bool v
Definition geometrygrid/geometry.hh:33
Definition geometrygrid/geometry.hh:58
Traits::ctype ctype
Definition geometrygrid/geometry.hh:61
static ctype tolerance()
Definition geometrygrid/geometry.hh:65
std::remove_const< Grid >::type::Traits Traits
Definition geometrygrid/geometry.hh:59
GenericGeometry::MatrixHelper< GenericGeometry::DuneCoordTraits< ctype > > MatrixHelper
Definition geometrygrid/geometry.hh:63
Definition geometrygrid/geometry.hh:69
GeoGrid::CornerStorage< mydim, cdim, Grid > Type
Definition geometrygrid/geometry.hh:70
Definition geometrygrid/geometry.hh:76
Definition geometrygrid/geometry.hh:86
GlobalCoordinate global(const LocalCoordinate &local) const
Definition geometrygrid/geometry.hh:191
Geometry(const Grid &grid)
Definition geometrygrid/geometry.hh:129
int corners() const
Definition geometrygrid/geometry.hh:187
static const int codimension
Definition geometrygrid/geometry.hh:99
LocalCoordinate local(const GlobalCoordinate &global) const
Definition geometrygrid/geometry.hh:192
Traits::ctype ctype
Definition geometrygrid/geometry.hh:94
JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate &local) const
Definition geometrygrid/geometry.hh:198
Geometry(const Grid &grid, const GeometryType &type, const CoordVector &coords)
Definition geometrygrid/geometry.hh:132
static const int dimension
Definition geometrygrid/geometry.hh:98
Geometry(const This &other)
Definition geometrygrid/geometry.hh:141
static const int mydimension
Definition geometrygrid/geometry.hh:96
CachedMultiLinearGeometry< ctype, mydimension, coorddimension, GeometryTraits< Grid > > BasicMapping
Definition geometrygrid/geometry.hh:102
bool affine() const
Definition geometrygrid/geometry.hh:184
Geometry(This &&other)
Definition geometrygrid/geometry.hh:149
GlobalCoordinate corner(const int i) const
Definition geometrygrid/geometry.hh:188
Geometry()
Definition geometrygrid/geometry.hh:127
static const int coorddimension
Definition geometrygrid/geometry.hh:97
Mapping::JacobianTransposed JacobianTransposed
Definition geometrygrid/geometry.hh:124
GeometryType type() const
Definition geometrygrid/geometry.hh:185
ctype volume() const
Definition geometrygrid/geometry.hh:195
GlobalCoordinate center() const
Definition geometrygrid/geometry.hh:189
const Grid & grid() const
Definition geometrygrid/geometry.hh:200
~Geometry()
Definition geometrygrid/geometry.hh:157
ctype integrationElement(const LocalCoordinate &local) const
Definition geometrygrid/geometry.hh:194
const This & operator=(const This &other)
Definition geometrygrid/geometry.hh:163
JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const
Definition geometrygrid/geometry.hh:197
Mapping::GlobalCoordinate GlobalCoordinate
Definition geometrygrid/geometry.hh:122
Mapping::JacobianInverseTransposed JacobianInverseTransposed
Definition geometrygrid/geometry.hh:125
Mapping::LocalCoordinate LocalCoordinate
Definition geometrygrid/geometry.hh:121
Definition geometrygrid/geometry.hh:106
Mapping(const GeometryType &type, const CoordVector &coords)
Definition geometrygrid/geometry.hh:108
bool removeReference()
Definition geometrygrid/geometry.hh:114
void addReference()
Definition geometrygrid/geometry.hh:113
A set of traits classes to store static information about grid implementation.