3 #ifndef DUNE_GEOMETRY_GENERICGEOMETRY_CACHED_MAPPING_HH
4 #define DUNE_GEOMETRY_GENERICGEOMETRY_CACHED_MAPPING_HH
15 namespace GenericGeometry
21 template<
unsigned int,
class >
24 template<
unsigned int,
class >
32 template<
unsigned int dim,
class GeometryTraits >
39 static const unsigned int dimWorld = GeometryTraits::dimWorld;
43 typedef typename GeometryTraits::Caching
Caching;
68 template<
unsigned int dim,
class GeometryTraits >
86 operator bool ()
const
96 template<
class X,
class Y >
97 void mv (
const X &x, Y &y )
const
99 static_cast< const FieldMatrix &
>( *this ).mv( x, y );
102 template<
class X,
class Y >
103 void mtv (
const X &x, Y &y )
const
105 static_cast< const FieldMatrix &
>( *this ).mtv( x, y );
108 template<
class X,
class Y >
109 void umv (
const X &x, Y &y )
const
111 static_cast< const FieldMatrix &
>( *this ).umv( x, y );
114 template<
class X,
class Y >
115 void umtv (
const X &x, Y &y )
const
117 static_cast< const FieldMatrix &
>( *this ).umtv( x, y );
120 template<
class X,
class Y >
121 void mmv (
const X &x, Y &y )
const
123 static_cast< const FieldMatrix &
>( *this ).mmv( x, y );
126 template<
class X,
class Y >
127 void mmtv (
const X &x, Y &y )
const
129 static_cast< const FieldMatrix &
>( *this ).mmtv( x, y );
134 if( !storage().integrationElementComputed )
143 Storage &storage ()
const {
return storage_; }
145 mutable Storage storage_;
153 template<
unsigned int dim,
class GeometryTraits >
154 class CachedJacobianInverseTransposed
172 operator bool ()
const
182 template<
class X,
class Y >
183 void mv (
const X &x, Y &y )
const
185 static_cast< const FieldMatrix &
>( *this ).mv( x, y );
188 template<
class X,
class Y >
189 void mtv (
const X &x, Y &y )
const
191 static_cast< const FieldMatrix &
>( *this ).mtv( x, y );
194 template<
class X,
class Y >
195 void umv (
const X &x, Y &y )
const
197 static_cast< const FieldMatrix &
>( *this ).umv( x, y );
200 template<
class X,
class Y >
201 void umtv (
const X &x, Y &y )
const
203 static_cast< const FieldMatrix &
>( *this ).umtv( x, y );
206 template<
class X,
class Y >
207 void mmv (
const X &x, Y &y )
const
209 static_cast< const FieldMatrix &
>( *this ).mmv( x, y );
212 template<
class X,
class Y >
213 void mmtv (
const X &x, Y &y )
const
215 static_cast< const FieldMatrix &
>( *this ).mmtv( x, y );
225 JacobianTransposed &jacobianTransposed () {
return jacobianTransposed_; }
226 const JacobianTransposed &jacobianTransposed ()
const {
return jacobianTransposed_; }
228 Storage &storage ()
const {
return jacobianTransposed().storage(); }
230 JacobianTransposed jacobianTransposed_;
238 template<
class Topology,
class GeometryTraits >
266 typedef typename GeometryTraits::Caching
Caching;
272 template<
class CoordVector >
279 computeJacobianTransposed( baryCenter() );
283 template<
class CoordVector >
284 explicit CachedMapping (
const std::pair< const CoordVector &, bool > &coords )
285 : mapping_( coords.first )
287 storage().
affine = coords.second;
328 MatrixHelper::template xTRightInvA< dimension, dimWorld >( JT, z, x );
337 const EvaluationType evaluateI = Caching::evaluateIntegrationElement;
338 const EvaluationType evaluateJ = Caching::evaluateJacobianInverseTransposed;
354 const EvaluationType evaluate = Caching::evaluateJacobianTransposed;
359 computeJacobianTransposed( x );
366 const EvaluationType evaluate = Caching::evaluateJacobianInverseTransposed;
371 computeJacobianInverseTransposed( x );
385 return jacobianInverseTransposed().storage();
390 return jacobianInverseTransposed().jacobianTransposed();
395 return jacobianInverseTransposed_;
405 computeJacobianTransposed( baryCenter() );
407 if( Caching::evaluateJacobianInverseTransposed ==
PreCompute )
408 computeJacobianInverseTransposed( baryCenter() );
409 else if( Caching::evaluateIntegrationElement ==
PreCompute )
419 void computeJacobianInverseTransposed (
const LocalCoordinate &x )
const
436 #endif // #ifndef DUNE_GEOMETRY_GENERICGEOMETRY_CACHED_MAPPING_HH
static const unsigned int dimWorld
Definition: geometrytraits.hh:57
Traits::JacobianType FieldMatrix
Definition: cachedmapping.hh:170
static const unsigned int numCorners
Definition: genericgeometry/referenceelements.hh:33
Traits::GlobalCoordinate GlobalCoordinate
Definition: cachedmapping.hh:255
static bool checkInside(const CoordinateType &x)
Definition: genericgeometry/referenceelements.hh:70
Definition: genericgeometry/referenceelements.hh:28
Definition: matrixhelper.hh:33
GenericGeometry::Mapping< typename GeometryTraits::CoordTraits, Topology, GeometryTraits::dimWorld, MappingImpl > Mapping
Definition: cachedmapping.hh:248
int numCorners() const
Definition: cachedmapping.hh:294
Traits::FieldType ctype
Definition: cachedmapping.hh:79
CoordTraits::template Matrix< dimension, dimWorld >::type JacobianTransposedType
Definition: geometrytraits.hh:66
GeometryTraits::Caching Caching
Definition: cachedmapping.hh:266
Traits::JacobianType jacobianInverseTransposed
Definition: cachedmapping.hh:53
EvaluationType
If not affine only volume is cached (based on intElCompute) otherwise all quantities can be cached...
Definition: geometrytraits.hh:76
CachedMapping(const std::pair< const CoordVector &, bool > &coords)
Definition: cachedmapping.hh:284
static const unsigned int dimension
Definition: cachedmapping.hh:250
A unique label for each type of element that can occur in a grid.
static ctype volume()
Definition: genericgeometry/referenceelements.hh:82
GlobalCoordinate center() const
Definition: cachedmapping.hh:296
static const unsigned int dimension
Definition: geometrytraits.hh:56
void umv(const X &x, Y &y) const
Definition: cachedmapping.hh:109
MappingTraits< typename GeometryTraits::CoordTraits, dimension, dimWorld > Traits
Definition: cachedmapping.hh:41
ctype det() const
Definition: cachedmapping.hh:132
static const bool alwaysAffine
Definition: cachedmapping.hh:264
Traits::JacobianTransposedType jacobianTransposed
Definition: cachedmapping.hh:52
CachedStorage()
Definition: cachedmapping.hh:45
void umtv(const X &x, Y &y) const
Definition: cachedmapping.hh:201
GlobalCoordinate global(const LocalCoordinate &x) const
Definition: cachedmapping.hh:300
const Mapping & mapping() const
Definition: cachedmapping.hh:375
bool affine() const
Definition: cachedmapping.hh:291
Dune::GeometryType type() const
Definition: cachedmapping.hh:292
static const FieldVector< ctype, dimension > & baryCenter()
Return the element barycenter.
Definition: genericgeometry/referenceelements.hh:59
GeometryTraits::Caching Caching
Definition: cachedmapping.hh:43
CoordTraits::template Vector< dimWorld >::type GlobalCoordinate
Definition: geometrytraits.hh:61
static const unsigned int dimWorld
Definition: cachedmapping.hh:39
CachedJacobianInverseTransposed< dimension, GeometryTraits > JacobianInverseTransposed
Definition: cachedmapping.hh:259
Definition: cachedmapping.hh:239
static const unsigned int dimWorld
Definition: cachedmapping.hh:251
void mtv(const X &x, Y &y) const
Definition: cachedmapping.hh:189
void umtv(const X &x, Y &y) const
Definition: cachedmapping.hh:115
Traits::FieldType integrationElement
Definition: cachedmapping.hh:54
assign in constructor using barycenter
Definition: geometrytraits.hh:81
Definition: cachedmapping.hh:25
static bool checkInside(const LocalCoordinate &x)
Definition: cachedmapping.hh:298
void global(const LocalCoordinate &x, GlobalCoordinate &y) const
Definition: mapping.hh:81
FieldType volume() const
Definition: cachedmapping.hh:345
CachedStorage< dimension, GeometryTraits > Storage
Definition: cachedmapping.hh:257
void mv(const X &x, Y &y) const
Definition: cachedmapping.hh:97
Definition: cachedmapping.hh:33
static const int cols
Definition: cachedmapping.hh:168
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &x) const
Definition: cachedmapping.hh:364
bool jacobianTransposedComputed
Definition: cachedmapping.hh:58
Traits::FieldType FieldType
Definition: cachedmapping.hh:253
bool integrationElementComputed
Definition: cachedmapping.hh:60
static const int rows
Definition: cachedmapping.hh:81
Implements some reference element functionality needed by the generic geometries. ...
static const int cols
Definition: cachedmapping.hh:82
static const unsigned int dimension
Definition: cachedmapping.hh:38
LocalCoordinate local(const GlobalCoordinate &y) const
Definition: cachedmapping.hh:315
Default mapping traits using Dune::FieldVector and Dune::FieldMatrix.
Definition: cornermapping.hh:21
Definition: cachedmapping.hh:22
static const int rows
Definition: cachedmapping.hh:167
void umv(const X &x, Y &y) const
Definition: cachedmapping.hh:195
CoordTraits::template Vector< dimension >::type LocalCoordinate
Definition: geometrytraits.hh:60
static const bool alwaysAffine
Definition: mapping.hh:61
Traits::JacobianTransposedType FieldMatrix
Definition: cachedmapping.hh:84
const GlobalCoordinate & corner(int i) const
Definition: mapping.hh:76
Traits::LocalCoordinate LocalCoordinate
Definition: cachedmapping.hh:254
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &x) const
Definition: cachedmapping.hh:352
void mmv(const X &x, Y &y) const
Definition: cachedmapping.hh:121
ctype det() const
Definition: cachedmapping.hh:218
bool affine
Definition: cachedmapping.hh:56
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:24
GenericGeometry::ReferenceElement< Topology, FieldType > ReferenceElement
Definition: cachedmapping.hh:261
bool jacobianTransposed(const LocalCoordinate &x, JacobianTransposedType &JT) const
Definition: mapping.hh:104
void mv(const X &x, Y &y) const
Definition: cachedmapping.hh:183
Traits::FieldType ctype
Definition: cachedmapping.hh:165
FieldType integrationElement(const LocalCoordinate &x) const
Definition: cachedmapping.hh:335
CoordTraits::ctype FieldType
Definition: geometrytraits.hh:59
void mmtv(const X &x, Y &y) const
Definition: cachedmapping.hh:213
MappingTraits< typename GeometryTraits::CoordTraits, Topology::dimension, GeometryTraits::dimWorld > Traits
Definition: cachedmapping.hh:246
bool jacobianInverseTransposedComputed
Definition: cachedmapping.hh:59
CachedMapping(const CoordVector &coords)
Definition: cachedmapping.hh:273
void mmtv(const X &x, Y &y) const
Definition: cachedmapping.hh:127
void mtv(const X &x, Y &y) const
Definition: cachedmapping.hh:103
GlobalCoordinate corner(int i) const
Definition: cachedmapping.hh:295
void local(const GlobalCoordinate &y, LocalCoordinate &x) const
Definition: mapping.hh:86
CoordTraits::template Matrix< dimWorld, dimension >::type JacobianType
Definition: geometrytraits.hh:64
Definition: topologytypes.hh:271
CachedJacobianTransposed< dimension, GeometryTraits > JacobianTransposed
Definition: cachedmapping.hh:258
void mmv(const X &x, Y &y) const
Definition: cachedmapping.hh:207