3 #ifndef DUNE_GEOMETRY_GENERICGEOMETRY_HYBRIDMAPPING_HH
4 #define DUNE_GEOMETRY_GENERICGEOMETRY_HYBRIDMAPPING_HH
8 #include <dune/common/typetraits.hh>
17 namespace GenericGeometry
23 template<
unsigned int dim,
class GeometryTraits >
26 template<
class Topology,
class GeometryTraits >
35 template<
unsigned int dim,
class GeometryTraits,
unsigned int codim = dim >
36 class HybridMappingBase;
38 template<
unsigned int dim,
class GeometryTraits,
unsigned int codim >
39 class HybridMappingBase
40 :
public virtual HybridMappingBase< dim, GeometryTraits, codim-1 >
45 virtual ~HybridMappingBase() {}
48 using HybridMappingBase< dim, GeometryTraits, codim-1 >::trace;
51 trace ( integral_constant< int, codim >,
unsigned int i,
char *mappingStorage )
const = 0;
54 template<
unsigned int dim,
class GeometryTraits >
55 class HybridMappingBase< dim, GeometryTraits, 0 >
57 typedef HybridMapping< dim, GeometryTraits > Mapping;
60 virtual ~HybridMappingBase() {}
63 virtual HybridMapping< dim, GeometryTraits > *
64 trace ( integral_constant< int, 0 >,
unsigned int i,
char *mappingStorage )
const = 0;
80 template<
unsigned int dim,
class GeometryTraits >
83 :
public virtual HybridMappingBase< dim, GeometryTraits >
86 typedef HybridMapping< dim, GeometryTraits > This;
102 template<
int codim >
108 typedef typename GeometryTraits::Caching
Caching;
109 typedef typename GeometryTraits::UserData
UserData;
115 virtual bool affine ()
const = 0;
199 using HybridMappingBase< dim, GeometryTraits >::trace;
202 virtual This *
clone ()
const = 0;
203 virtual This *
clone (
char *mappingStorage )
const = 0;
205 template<
int codim >
206 typename Codim< codim >::Trace *
trace (
unsigned int i,
char *mappingStorage )
const
208 integral_constant< int, codim > codimVariable;
209 return trace( codimVariable, i, mappingStorage );
225 template<
class Topology,
class GeometryTraits,
unsigned int codim = Topology::dimension >
226 class VirtualMappingBase;
228 template<
class Topology,
class GeometryTraits,
unsigned int codim >
229 class VirtualMappingBase
230 :
public VirtualMappingBase< Topology, GeometryTraits, codim-1 >,
231 public virtual HybridMappingBase< Topology::dimension, GeometryTraits, codim >
237 using VirtualMappingBase< Topology, GeometryTraits, codim-1 >::trace;
239 virtual HybridMapping< Topology::dimension - codim, GeometryTraits > *
240 trace ( integral_constant< int, codim >,
unsigned int i,
char *mappingStorage )
const
242 return static_cast< const VirtualMapping &
>( *this ).template trace< codim >( i, mappingStorage );
246 template<
class Topology,
class GeometryTraits >
247 class VirtualMappingBase< Topology, GeometryTraits, 0 >
248 :
public virtual HybridMappingBase< Topology::dimension, GeometryTraits, 0 >
250 typedef GenericGeometry::VirtualMapping< Topology, GeometryTraits >
255 trace ( integral_constant< int, 0 >,
unsigned int i,
char *mappingStorage )
const
257 return static_cast< const VirtualMapping &
>( *this ).template trace< 0 >( i, mappingStorage );
264 template<
class Topology,
class GeometryTraits >
266 :
public HybridMapping< Topology::dimension, GeometryTraits >,
268 public VirtualMappingBase< Topology, GeometryTraits >
272 typedef VirtualMapping< Topology, GeometryTraits > This;
276 typedef CachedMapping< Topology, GeometryTraits > Mapping;
291 template<
unsigned int codim >
297 typedef typename GeometryTraits::Caching
Caching;
299 template<
class CoordVector >
301 : mapping_( coordVector )
323 virtual Base*
clone (
char *mappingStorage )
const {
return new( mappingStorage )
This( *
this ); }
325 template<
int codim >
332 using VirtualMappingBase< Topology, GeometryTraits >::trace;
350 template<
class Topology,
class GeometryTraits >
373 template<
unsigned int codim >
379 typedef typename GeometryTraits::Caching
Caching;
380 typedef typename GeometryTraits::UserData
UserData;
382 template<
class CoordVector >
384 : mapping_( coordVector )
472 This *
clone (
char *mappingStorage )
const {
return new( mappingStorage )
This( *
this ); }
474 template<
int codim >
492 #endif // #ifndef DUNE_GEOMETRY_GENERICGEOMETRY_HYBRIDMAPPING_HH
CachedJacobianTransposed< dimension, GeometryTraits > JacobianTransposed
Definition: hybridmapping.hh:368
static const unsigned int dimWorld
Definition: geometrytraits.hh:57
Traits::LocalCoordinate LocalCoordinate
Definition: hybridmapping.hh:283
Dune::GeometryType type() const
obtain the name of the reference element
Definition: hybridmapping.hh:390
static const unsigned int dimension
Definition: hybridmapping.hh:279
virtual GlobalCoordinate center() const =0
obtain the centroid of the mapping's image
virtual Base * clone(char *mappingStorage) const
Definition: hybridmapping.hh:323
NonHybridMapping(const CoordVector &coordVector)
Definition: hybridmapping.hh:383
CachedJacobianInverseTransposed< dimension, GeometryTraits > JacobianInverseTransposed
Definition: hybridmapping.hh:100
Definition: genericgeometry/referenceelements.hh:28
Definition: hybridmapping.hh:27
int numCorners() const
Definition: cachedmapping.hh:294
TraceProvider< Topology, GeometryTraits, codim, false >::Trace Trace
Definition: hybridmapping.hh:376
This * clone() const
Definition: hybridmapping.hh:471
HybridMapping< dimension-codim, GeometryTraits > Trace
Definition: hybridmapping.hh:105
Definition: hybridmapping.hh:374
CachedJacobianInverseTransposed< dimension, GeometryTraits > JacobianInverseTransposed
Definition: hybridmapping.hh:369
VirtualMapping(const CoordVector &coordVector)
Definition: hybridmapping.hh:300
Traits::GlobalCoordinate GlobalCoordinate
Definition: hybridmapping.hh:97
Traits::FieldType FieldType
Definition: hybridmapping.hh:364
static const unsigned int dimWorld
Definition: hybridmapping.hh:362
UserData & userData()
Definition: hybridmapping.hh:481
GlobalCoordinate center() const
Definition: cachedmapping.hh:296
static const unsigned int dimension
Definition: geometrytraits.hh:56
static const unsigned int dimension
Definition: hybridmapping.hh:361
virtual bool affine() const
is this mapping affine?
Definition: hybridmapping.hh:304
Codim< codim >::Trace * trace(unsigned int i, char *mappingStorage) const
Definition: hybridmapping.hh:326
virtual GlobalCoordinate global(const LocalCoordinate &local) const
evaluate the mapping
Definition: hybridmapping.hh:311
GlobalCoordinate center() const
obtain the centroid of the mapping's image
Definition: hybridmapping.hh:397
UserData & userData()
Definition: hybridmapping.hh:213
FieldType integrationElement(const LocalCoordinate &local) const
obtain the integration element
Definition: hybridmapping.hh:442
virtual GlobalCoordinate corner(int i) const =0
obtain coordinates of the i-th corner
CachedJacobianTransposed< dimension, GeometryTraits > JacobianTransposed
Definition: hybridmapping.hh:99
GlobalCoordinate global(const LocalCoordinate &x) const
Definition: cachedmapping.hh:300
Mapping::ReferenceElement ReferenceElement
Definition: hybridmapping.hh:371
Traits::LocalCoordinate LocalCoordinate
Definition: hybridmapping.hh:96
const Mapping & mapping() const
Definition: cachedmapping.hh:375
int numCorners() const
obtain number of corners of the corresponding reference element
Definition: hybridmapping.hh:393
bool affine() const
Definition: cachedmapping.hh:291
Dune::GeometryType type() const
Definition: cachedmapping.hh:292
virtual This * clone() const =0
virtual ~HybridMapping()
Definition: hybridmapping.hh:111
bool affine() const
is this mapping affine?
Definition: hybridmapping.hh:388
virtual const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
obtain the transposed of the Jacobian
Definition: hybridmapping.hh:319
static const unsigned int dimWorld
Definition: hybridmapping.hh:280
GlobalCoordinate corner(int i) const
obtain coordinates of the i-th corner
Definition: hybridmapping.hh:395
Factory::Trace Trace
Definition: traceprovider.hh:60
CachedMapping< Topology, GeometryTraits > Mapping
Definition: hybridmapping.hh:358
Codim< codim >::Trace * trace(unsigned int i, char *mappingStorage) const
Definition: hybridmapping.hh:475
TraceProvider< Topology, GeometryTraits, codim, true >::Trace Trace
Definition: hybridmapping.hh:294
virtual Dune::GeometryType type() const =0
obtain the name of the reference element
const UserData & userData() const
Definition: hybridmapping.hh:212
virtual const JacobianTransposed & jacobianTransposed(const LocalCoordinate &x) const =0
obtain the transposed of the Jacobian
CoordTraits::template Vector< dimWorld >::type GlobalCoordinate
Definition: geometrytraits.hh:61
virtual Dune::GeometryType type() const
obtain the name of the reference element
Definition: hybridmapping.hh:305
Definition: cachedmapping.hh:239
GeometryTraits::UserData UserData
Definition: hybridmapping.hh:380
virtual LocalCoordinate local(const GlobalCoordinate &y) const =0
evaluate the inverse mapping
MappingTraits< typename GeometryTraits::CoordTraits, dim, GeometryTraits::dimWorld > Traits
Definition: hybridmapping.hh:89
Traits::LocalCoordinate LocalCoordinate
Definition: hybridmapping.hh:365
static bool checkInside(const LocalCoordinate &x)
Definition: cachedmapping.hh:298
abstract base class for generic mapping
Definition: hybridmapping.hh:24
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &local) const
obtain the transposed of the Jacobian
Definition: hybridmapping.hh:462
FieldType volume() const
Definition: cachedmapping.hh:345
bool checkInside(const LocalCoordinate &local) const
check whether a point lies within the reference element
Definition: hybridmapping.hh:426
virtual GlobalCoordinate center() const
obtain the centroid of the mapping's image
Definition: hybridmapping.hh:309
virtual GlobalCoordinate corner(int i) const
obtain coordinates of the i-th corner
Definition: hybridmapping.hh:308
Definition: hybridmapping.hh:292
Base::JacobianTransposed JacobianTransposed
Definition: hybridmapping.hh:286
Traits::FieldType FieldType
Definition: hybridmapping.hh:95
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &x) const
Definition: cachedmapping.hh:364
virtual const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &x) const =0
obtain the transposed of the Jacobian's inverse
static Trace * construct(const Mapping &mapping, unsigned int i, char *traceStorage)
Definition: traceprovider.hh:65
virtual int numCorners() const =0
obtain number of corners of the corresponding reference element
Definition: hybridmapping.hh:103
interface for a mapping
Definition: mapping.hh:30
GeometryTraits::UserData UserData
Definition: hybridmapping.hh:109
GeometryTraits::Caching Caching
Definition: hybridmapping.hh:108
virtual LocalCoordinate local(const GlobalCoordinate &global) const
evaluate the inverse mapping
Definition: hybridmapping.hh:312
Codim< codim >::Trace * trace(unsigned int i, char *mappingStorage) const
Definition: hybridmapping.hh:206
FieldType volume() const
obtain the volume of the mapping's image
Definition: hybridmapping.hh:451
LocalCoordinate local(const GlobalCoordinate &y) const
Definition: cachedmapping.hh:315
LocalCoordinate local(const GlobalCoordinate &global) const
evaluate the inverse mapping
Definition: hybridmapping.hh:417
Traits::GlobalCoordinate GlobalCoordinate
Definition: hybridmapping.hh:366
Default mapping traits using Dune::FieldVector and Dune::FieldMatrix.
Definition: cornermapping.hh:21
Definition: cachedmapping.hh:22
CoordTraits::template Vector< dimension >::type LocalCoordinate
Definition: geometrytraits.hh:60
const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
obtain the transposed of the Jacobian's inverse
Definition: hybridmapping.hh:469
Mapping::ReferenceElement ReferenceElement
Definition: hybridmapping.hh:289
Traits::GlobalCoordinate GlobalCoordinate
Definition: hybridmapping.hh:284
virtual GlobalCoordinate global(const LocalCoordinate &x) const =0
evaluate the mapping
const JacobianTransposed & jacobianTransposed(const LocalCoordinate &x) const
Definition: cachedmapping.hh:352
This * clone(char *mappingStorage) const
Definition: hybridmapping.hh:472
virtual FieldType integrationElement(const LocalCoordinate &x) const =0
obtain the integration element
virtual FieldType integrationElement(const LocalCoordinate &local) const
obtain the integration element
Definition: hybridmapping.hh:316
const UserData & userData() const
Definition: hybridmapping.hh:480
MappingTraits< typename GeometryTraits::CoordTraits, Topology::dimension, GeometryTraits::dimWorld > Traits
Definition: hybridmapping.hh:356
non-virtual geometric mapping
Definition: hybridmapping.hh:351
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:24
virtual Base * clone() const
Definition: hybridmapping.hh:322
virtual FieldType volume() const
obtain the volume of the mapping's image
Definition: hybridmapping.hh:317
static const unsigned int dimWorld
Definition: hybridmapping.hh:93
static const unsigned int dimension
Definition: hybridmapping.hh:92
virtual bool checkInside(const LocalCoordinate &x) const =0
check whether a point lies within the reference element
FieldType integrationElement(const LocalCoordinate &x) const
Definition: cachedmapping.hh:335
GeometryTraits::Caching Caching
Definition: hybridmapping.hh:379
GeometryTraits::Caching Caching
Definition: hybridmapping.hh:297
CoordTraits::ctype FieldType
Definition: geometrytraits.hh:59
GlobalCoordinate global(const LocalCoordinate &local) const
evaluate the mapping
Definition: hybridmapping.hh:405
virtual FieldType volume() const =0
obtain the volume of the mapping's image
virtual int numCorners() const
obtain number of corners of the corresponding reference element
Definition: hybridmapping.hh:307
virtual const JacobianInverseTransposed & jacobianInverseTransposed(const LocalCoordinate &local) const
obtain the transposed of the Jacobian's inverse
Definition: hybridmapping.hh:320
virtual bool checkInside(const LocalCoordinate &local) const
check whether a point lies within the reference element
Definition: hybridmapping.hh:314
GlobalCoordinate corner(int i) const
Definition: cachedmapping.hh:295
virtual bool affine() const =0
is this mapping affine?
Base::JacobianInverseTransposed JacobianInverseTransposed
Definition: hybridmapping.hh:287
Traits::FieldType FieldType
Definition: hybridmapping.hh:282