3 #ifndef DUNE_GEOGRID_GEOMETRY_HH
4 #define DUNE_GEOGRID_GEOMETRY_HH
8 #include <dune/common/typetraits.hh>
10 #include <dune/geometry/multilineargeometry.hh>
11 #include <dune/geometry/referenceelements.hh>
12 #include <dune/geometry/type.hh>
26 template<
class hasSingleGeometryType,
int dim,
int mydim >
30 static const unsigned int id = hasSingleGeometryType::topologyId;
31 static const unsigned int idMask = (1u << mydim) - 1u;
34 static const bool v = hasSingleGeometryType::v && ((mydim == dim) || ((
id | 1u) == 1u) || ((
id | 1u) == idMask));
35 static const unsigned int topologyId = (
v ?
id & idMask : ~0u);
38 template<
class hasSingleGeometryType,
int dim >
41 static const bool v =
true;
42 static const unsigned int topologyId = GeometryTypes::cube(1).id();
45 template<
class hasSingleGeometryType,
int dim >
48 static const bool v =
true;
49 static const unsigned int topologyId = GeometryTypes::cube(1).id();
57 template<
class Gr
id >
60 typedef typename std::remove_const< Grid >::type::Traits
Traits;
62 typedef typename Traits::ctype
ctype;
66 static ctype tolerance () {
return 16 * std::numeric_limits< ctype >::epsilon(); }
68 template<
int mydim,
int cdim >
85 template<
int mydim,
int cdim,
class Gr
id >
90 typedef typename std::remove_const< Grid >::type::Traits Traits;
92 template<
int,
int,
class >
friend class Geometry;
95 typedef typename Traits::ctype
ctype;
103 typedef CachedMultiLinearGeometry< ctype, mydimension, coorddimension, GeometryTraits< Grid > >
BasicMapping;
108 template<
class CoordVector >
118 unsigned int refCount_;
128 Geometry () : grid_( nullptr ), mapping_( nullptr ) {}
132 template<
class CoordVector >
137 void *mappingStorage =
grid.allocateStorage(
sizeof(
Mapping ) );
138 mapping_ =
new( mappingStorage )
Mapping(
type, coords );
143 : grid_( other.grid_ ),
144 mapping_( other.mapping_ )
151 : grid_( other.grid_ ),
152 mapping_( other.mapping_ )
154 other.grid_ =
nullptr;
155 other.mapping_ =
nullptr;
171 mapping_ = other.mapping_;
178 swap( grid_, other.grid_ );
179 swap( mapping_, other.mapping_ );
183 explicit operator bool ()
const {
return bool( mapping_ ); }
185 bool affine ()
const {
return mapping_->affine(); }
188 int corners ()
const {
return mapping_->corners(); }
201 const Grid &
grid ()
const { assert( grid_ );
return *grid_; }
204 void destroyMapping ()
206 mapping_->~Mapping();
207 grid().deallocateStorage( mapping_,
sizeof( Mapping ) );
Include standard header files.
Definition: agrid.hh:59
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:180
Grid abstract base class.
Definition: common/grid.hh:373
Definition: cornerstorage.hh:20
Definition: cornerstorage.hh:172
Definition: geometrygrid/geometry.hh:28
static const unsigned int topologyId
Definition: geometrygrid/geometry.hh:35
static const bool v
Definition: geometrygrid/geometry.hh:34
Definition: geometrygrid/geometry.hh:59
std::remove_const< Grid >::type::Traits Traits
Definition: geometrygrid/geometry.hh:60
Traits::ctype ctype
Definition: geometrygrid/geometry.hh:62
Impl::FieldMatrixHelper< ctype > MatrixHelper
Definition: geometrygrid/geometry.hh:64
static ctype tolerance()
Definition: geometrygrid/geometry.hh:66
Definition: geometrygrid/geometry.hh:70
GeoGrid::CornerStorage< mydim, cdim, Grid > Type
Definition: geometrygrid/geometry.hh:71
Definition: geometrygrid/geometry.hh:77
Definition: geometrygrid/geometry.hh:87
GlobalCoordinate global(const LocalCoordinate &local) const
Definition: geometrygrid/geometry.hh:192
Geometry(const Grid &grid)
Definition: geometrygrid/geometry.hh:130
int corners() const
Definition: geometrygrid/geometry.hh:188
static const int codimension
Definition: geometrygrid/geometry.hh:100
Traits::ctype ctype
Definition: geometrygrid/geometry.hh:95
JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate &local) const
Definition: geometrygrid/geometry.hh:199
Geometry(const Grid &grid, const GeometryType &type, const CoordVector &coords)
Definition: geometrygrid/geometry.hh:133
static const int dimension
Definition: geometrygrid/geometry.hh:99
Geometry(const This &other)
Definition: geometrygrid/geometry.hh:142
static const int mydimension
Definition: geometrygrid/geometry.hh:97
CachedMultiLinearGeometry< ctype, mydimension, coorddimension, GeometryTraits< Grid > > BasicMapping
Definition: geometrygrid/geometry.hh:103
bool affine() const
Definition: geometrygrid/geometry.hh:185
Geometry(This &&other)
Definition: geometrygrid/geometry.hh:150
const This & operator=(const This &other)
Definition: geometrygrid/geometry.hh:164
GlobalCoordinate corner(const int i) const
Definition: geometrygrid/geometry.hh:189
Geometry()
Definition: geometrygrid/geometry.hh:128
static const int coorddimension
Definition: geometrygrid/geometry.hh:98
Mapping::JacobianTransposed JacobianTransposed
Definition: geometrygrid/geometry.hh:125
GeometryType type() const
Definition: geometrygrid/geometry.hh:186
ctype volume() const
Definition: geometrygrid/geometry.hh:196
GlobalCoordinate center() const
Definition: geometrygrid/geometry.hh:190
~Geometry()
Definition: geometrygrid/geometry.hh:158
ctype integrationElement(const LocalCoordinate &local) const
Definition: geometrygrid/geometry.hh:195
JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const
Definition: geometrygrid/geometry.hh:198
Mapping::GlobalCoordinate GlobalCoordinate
Definition: geometrygrid/geometry.hh:123
Mapping::JacobianInverseTransposed JacobianInverseTransposed
Definition: geometrygrid/geometry.hh:126
Mapping::LocalCoordinate LocalCoordinate
Definition: geometrygrid/geometry.hh:122
const Grid & grid() const
Definition: geometrygrid/geometry.hh:201
Definition: geometrygrid/geometry.hh:107
Mapping(const GeometryType &type, const CoordVector &coords)
Definition: geometrygrid/geometry.hh:109
bool removeReference()
Definition: geometrygrid/geometry.hh:115
void addReference()
Definition: geometrygrid/geometry.hh:114
A set of traits classes to store static information about grid implementation.