3 #ifndef DUNE_GEOGRID_GEOMETRY_HH 4 #define DUNE_GEOGRID_GEOMETRY_HH 8 #include <dune/common/nullptr.hh> 9 #include <dune/common/typetraits.hh> 11 #include <dune/geometry/referenceelements.hh> 12 #include <dune/geometry/multilineargeometry.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 = GenericGeometry::CubeTopology< 1 >::type::id;
45 template<
class hasSingleGeometryType,
int dim >
48 static const bool v =
true;
49 static const unsigned int topologyId = GenericGeometry::CubeTopology< 0 >::type::id;
57 template<
class Gr
id >
60 typedef typename remove_const< Grid >::type::Traits
Traits;
62 typedef typename Traits::ctype
ctype;
64 typedef GenericGeometry::MatrixHelper< GenericGeometry::DuneCoordTraits< ctype > >
MatrixHelper;
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 remove_const< Grid >::type::Traits Traits;
92 template<
int,
int,
class >
friend class Geometry;
95 typedef typename Traits::ctype
ctype;
97 static const int mydimension = mydim;
98 static const int coorddimension = cdim;
99 static const int dimension = Traits::dimension;
100 static const int codimension = dimension - mydimension;
103 typedef CachedMultiLinearGeometry< ctype, mydimension, coorddimension, GeometryTraits< Grid > >
BasicMapping;
106 :
public BasicMapping
108 template<
class CoordVector >
110 : BasicMapping( type, coords ),
118 unsigned int refCount_;
128 Geometry () : grid_( nullptr ), mapping_( nullptr ) {}
130 explicit Geometry (
const Grid &grid ) : grid_( &grid ), mapping_( nullptr ) {}
132 template<
class CoordVector >
136 assert(
int( type.dim() ) == mydimension );
137 void *mappingStorage = grid.allocateStorage(
sizeof(
Mapping ) );
138 mapping_ =
new( mappingStorage )
Mapping( type, coords );
143 : grid_( other.grid_ ),
144 mapping_( other.mapping_ )
147 mapping_->addReference();
151 : grid_( other.grid_ ),
152 mapping_( other.mapping_ )
154 other.grid_ =
nullptr;
155 other.mapping_ =
nullptr;
160 if( mapping_ && mapping_->removeReference() )
164 const This &operator= (
const This &other )
168 if( mapping_ && mapping_->removeReference() )
171 mapping_ = other.mapping_;
175 const This &operator= ( This&& other )
178 swap( grid_, other.grid_ );
179 swap( mapping_, other.mapping_ );
183 operator bool ()
const {
return bool( mapping_ ); }
185 bool affine ()
const {
return mapping_->affine(); }
188 int corners ()
const {
return mapping_->corners(); }
189 GlobalCoordinate
corner (
const int i )
const {
return mapping_->corner( i ); }
190 GlobalCoordinate
center ()
const {
return mapping_->center(); }
192 GlobalCoordinate
global (
const LocalCoordinate &local )
const {
return mapping_->global( local ); }
193 LocalCoordinate
local (
const GlobalCoordinate &global )
const {
return mapping_->local( global ); }
195 ctype
integrationElement (
const LocalCoordinate &local )
const {
return mapping_->integrationElement( local ); }
196 ctype
volume ()
const {
return mapping_->volume(); }
198 JacobianTransposed
jacobianTransposed (
const LocalCoordinate &local )
const {
return mapping_->jacobianTransposed( local ); }
199 JacobianInverseTransposed
jacobianInverseTransposed (
const LocalCoordinate &local )
const {
return mapping_->jacobianInverseTransposed( local ); }
201 const Grid &
grid ()
const { assert( grid_ );
return *grid_; }
204 void destroyMapping ()
206 mapping_->~Mapping();
207 grid().deallocateStorage( mapping_,
sizeof(
Mapping ) );
218 #endif // #ifndef DUNE_GEOGRID_GEOMETRY_HH Traits::ctype ctype
Definition: geometrygrid/geometry.hh:62
GeoGrid::CornerStorage< mydim, cdim, Grid > Type
Definition: geometrygrid/geometry.hh:71
Definition: geometrygrid/geometry.hh:58
void addReference()
Definition: geometrygrid/geometry.hh:114
int corners() const
Definition: geometrygrid/geometry.hh:188
Geometry(This &&other)
Definition: geometrygrid/geometry.hh:150
GlobalCoordinate center() const
Definition: geometrygrid/geometry.hh:190
bool affine() const
Definition: geometrygrid/geometry.hh:185
Definition: geometrygrid/geometry.hh:27
Definition: cornerstorage.hh:20
CachedMultiLinearGeometry< ctype, mydimension, coorddimension, GeometryTraits< Grid > > BasicMapping
Definition: geometrygrid/geometry.hh:103
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
ctype volume() const
Definition: geometrygrid/geometry.hh:196
Geometry()
Definition: geometrygrid/geometry.hh:128
Mapping::LocalCoordinate LocalCoordinate
Definition: geometrygrid/geometry.hh:122
Mapping::JacobianInverseTransposed JacobianInverseTransposed
Definition: geometrygrid/geometry.hh:126
static const bool v
Definition: geometrygrid/geometry.hh:34
const Grid & grid() const
Definition: geometrygrid/geometry.hh:201
GlobalCoordinate corner(const int i) const
Definition: geometrygrid/geometry.hh:189
Definition: cornerstorage.hh:172
JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const
Definition: geometrygrid/geometry.hh:198
Geometry(const This &other)
Definition: geometrygrid/geometry.hh:142
Mapping::GlobalCoordinate GlobalCoordinate
Definition: geometrygrid/geometry.hh:123
Definition: geometrygrid/geometry.hh:105
Traits::ctype ctype
Definition: geometrygrid/geometry.hh:95
GlobalCoordinate global(const LocalCoordinate &local) const
Definition: geometrygrid/geometry.hh:192
Definition: geometrygrid/geometry.hh:69
static const unsigned int topologyId
Definition: geometrygrid/geometry.hh:35
Mapping(const GeometryType &type, const CoordVector &coords)
Definition: geometrygrid/geometry.hh:109
LocalCoordinate local(const GlobalCoordinate &global) const
Definition: geometrygrid/geometry.hh:193
remove_const< Grid >::type::Traits Traits
Definition: geometrygrid/geometry.hh:60
Geometry(const Grid &grid, const GeometryType &type, const CoordVector &coords)
Definition: geometrygrid/geometry.hh:133
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:388
Include standard header files.
Definition: agrid.hh:59
~Geometry()
Definition: geometrygrid/geometry.hh:158
bool removeReference()
Definition: geometrygrid/geometry.hh:115
Geometry(const Grid &grid)
Definition: geometrygrid/geometry.hh:130
Definition: geometrygrid/geometry.hh:75
A set of traits classes to store static information about grid implementation.
ctype integrationElement(const LocalCoordinate &local) const
Definition: geometrygrid/geometry.hh:195
Mapping::JacobianTransposed JacobianTransposed
Definition: geometrygrid/geometry.hh:125
Definition: geometrygrid/geometry.hh:86
JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate &local) const
Definition: geometrygrid/geometry.hh:199
GenericGeometry::MatrixHelper< GenericGeometry::DuneCoordTraits< ctype > > MatrixHelper
Definition: geometrygrid/geometry.hh:64
static ctype tolerance()
Definition: geometrygrid/geometry.hh:66
GeometryType type() const
Definition: geometrygrid/geometry.hh:186