dune-fem 2.12-git
Loading...
Searching...
No Matches
gridpart/geogridpart/geometry.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_GRIDPART_GEOGRIDPART_GEOMETRY_HH
2#define DUNE_FEM_GRIDPART_GEOGRIDPART_GEOMETRY_HH
3
4#include <type_traits>
5
7
8#include <dune/grid/geometrygrid/geometry.hh>
9
12
13namespace Dune
14{
15
16 namespace Fem
17 {
18
19 // GeoGeometryTraits
20 // -----------------
21
22 template< class GridFamily >
24 {
26
27 typedef typename Traits::HostGridPartType HostGridPartType;
28
29 static const int dimension = std::remove_const< GridFamily >::type::dimension;
30
31 public:
33
34 typedef Dune::Impl::FieldMatrixHelper< ctype > MatrixHelper;
35
37
38 template< int mydim, int cdim >
43
44 template< int mydim >
46 : public Dune::GeoGrid::InferHasSingleGeometryType< GridPartCapabilities::hasSingleGeometryType< HostGridPartType >, dimension, mydim >
47 {};
48 };
49
50
51
52 // GeoGeometry
53 // -----------
54
55 template< int mydim, int cdim, class GridFamily >
57 {
59
60 public:
62
63 static const int mydimension = mydim;
64 static const int coorddimension = cdim;
66 static const int codimension = dimension - mydimension;
67
68 protected:
70
71 public:
74
77
78 typedef typename Mapping::Jacobian Jacobian;
80
82 : mapping_( nullptr )
83 {}
84
85 template< class CoordVector >
86 GeoGeometry ( const GeometryType &type, const CoordVector &coords )
87 {
88 assert( int( type.dim() ) == mydimension );
89 mapping_ = new( mappingStorage_ ) Mapping( type, coords );
90 }
91
92 GeoGeometry ( const ThisType &other )
93 {
94 if( other.mapping_ )
95 mapping_ = new( mappingStorage_ ) Mapping( *other.mapping_ );
96 else
97 mapping_ = nullptr;
98 }
99
101 {
102 if( mapping_ )
103 mapping_->~Mapping();
104 }
105
106 const ThisType &operator= ( const ThisType &other )
107 {
108 if( mapping_ )
109 mapping_->~Mapping();
110 if( other.mapping_ )
111 mapping_ = new( mappingStorage_ ) Mapping( *other.mapping_ );
112 else
113 mapping_ = nullptr;
114 return *this;
115 }
116
117 operator bool () const { return bool( mapping_ ); }
118
119 bool affine () const { return mapping_->affine(); }
120 GeometryType type () const { return mapping_->type(); }
121
122 int corners () const { return mapping_->corners(); }
123 GlobalCoordinate corner ( const int i ) const { return mapping_->corner( i ); }
124 GlobalCoordinate center () const { return mapping_->center(); }
125
126 GlobalCoordinate global ( const LocalCoordinate &local ) const { return mapping_->global( local ); }
127 LocalCoordinate local ( const GlobalCoordinate &global ) const { return mapping_->local( global ); }
128
129 ctype integrationElement ( const LocalCoordinate &local ) const { return mapping_->integrationElement( local ); }
130 ctype volume () const { return mapping_->volume(); }
131
134
135 Jacobian jacobian ( const LocalCoordinate &local ) const { return mapping_->jacobian( local ); }
137
138 private:
139 Mapping* mapping_;
140 char mappingStorage_[ sizeof( Mapping ) ];
141 };
142
143 } // namespace Fem
144
145
146} // namespace Dune
147
148#endif // #ifndef DUNE_FEM_GRIDPART_GEOGRIDPART_GEOMETRY_HH
const GlobalIndex & global() const
LocalIndex & local()
Dune::GeometryType type() const
GlobalCoordinate global(const LocalCoordinate &local) const
LocalCoordinate local(const GlobalCoordinate &global) const
Base::LocalCoordinate LocalCoordinate
JacobianInverse jacobianInverse(const LocalCoordinate &local) const
JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const
GlobalCoordinate corner(int i) const
ctype integrationElement(const LocalCoordinate &local) const
Jacobian jacobian(const LocalCoordinate &local) const
Base::JacobianInverseTransposed JacobianInverseTransposed
Base::JacobianTransposed JacobianTransposed
Base::JacobianInverse JacobianInverse
Base::GlobalCoordinate GlobalCoordinate
GlobalCoordinate center() const
JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate &local) const
constexpr unsigned int dim() const
Definition cornerstorage.hh:279
Definition gridpart/geogridpart/geometry.hh:24
static ctype tolerance()
Definition gridpart/geogridpart/geometry.hh:36
Dune::Impl::FieldMatrixHelper< ctype > MatrixHelper
Definition gridpart/geogridpart/geometry.hh:34
std::remove_const< GridFamily >::type::ctype ctype
Definition gridpart/geogridpart/geometry.hh:32
Definition gridpart/geogridpart/geometry.hh:40
GeoCornerStorage< mydim, cdim, GridFamily > Type
Definition gridpart/geogridpart/geometry.hh:41
Definition gridpart/geogridpart/geometry.hh:47
Definition gridpart/geogridpart/geometry.hh:57
ctype integrationElement(const LocalCoordinate &local) const
Definition gridpart/geogridpart/geometry.hh:129
GeoGeometry(const GeometryType &type, const CoordVector &coords)
Definition gridpart/geogridpart/geometry.hh:86
~GeoGeometry()
Definition gridpart/geogridpart/geometry.hh:100
Mapping::JacobianTransposed JacobianTransposed
Definition gridpart/geogridpart/geometry.hh:75
Mapping::GlobalCoordinate GlobalCoordinate
Definition gridpart/geogridpart/geometry.hh:73
static const int codimension
Definition gridpart/geogridpart/geometry.hh:66
bool affine() const
Definition gridpart/geogridpart/geometry.hh:119
Jacobian jacobian(const LocalCoordinate &local) const
Definition gridpart/geogridpart/geometry.hh:135
Mapping::LocalCoordinate LocalCoordinate
Definition gridpart/geogridpart/geometry.hh:72
int corners() const
Definition gridpart/geogridpart/geometry.hh:122
JacobianInverse jacobianInverse(const LocalCoordinate &local) const
Definition gridpart/geogridpart/geometry.hh:136
JacobianTransposed jacobianTransposed(const LocalCoordinate &local) const
Definition gridpart/geogridpart/geometry.hh:132
GeoGeometry()
Definition gridpart/geogridpart/geometry.hh:81
JacobianInverseTransposed jacobianInverseTransposed(const LocalCoordinate &local) const
Definition gridpart/geogridpart/geometry.hh:133
static const int dimension
Definition gridpart/geogridpart/geometry.hh:65
Mapping::JacobianInverseTransposed JacobianInverseTransposed
Definition gridpart/geogridpart/geometry.hh:76
GeoGeometry(const ThisType &other)
Definition gridpart/geogridpart/geometry.hh:92
LocalCoordinate local(const GlobalCoordinate &global) const
Definition gridpart/geogridpart/geometry.hh:127
static const int mydimension
Definition gridpart/geogridpart/geometry.hh:63
GlobalCoordinate global(const LocalCoordinate &local) const
Definition gridpart/geogridpart/geometry.hh:126
GlobalCoordinate corner(const int i) const
Definition gridpart/geogridpart/geometry.hh:123
const ThisType & operator=(const ThisType &other)
Definition gridpart/geogridpart/geometry.hh:106
ctype volume() const
Definition gridpart/geogridpart/geometry.hh:130
static const int coorddimension
Definition gridpart/geogridpart/geometry.hh:64
std::remove_const< GridFamily >::type::ctype ctype
Definition gridpart/geogridpart/geometry.hh:61
Mapping::JacobianInverse JacobianInverse
Definition gridpart/geogridpart/geometry.hh:79
CachedMultiLinearGeometry< ctype, mydimension, coorddimension, GeoGeometryTraits< GridFamily > > Mapping
Definition gridpart/geogridpart/geometry.hh:69
GeometryType type() const
Definition gridpart/geogridpart/geometry.hh:120
Mapping::Jacobian Jacobian
Definition gridpart/geogridpart/geometry.hh:78
GlobalCoordinate center() const
Definition gridpart/geogridpart/geometry.hh:124
A mapping from one vector space into another This class describes a general mapping from the domain v...
Definition mapping.hh:47
T epsilon(T... args)