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 >
42 typedef HybridMapping< dim, GeometryTraits > Mapping;
45 virtual ~HybridMappingBase() {}
48 using HybridMappingBase< dim, GeometryTraits, codim-1 >::trace;
50 virtual HybridMapping< dim - codim, GeometryTraits > *
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 >
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 >
254 virtual HybridMapping< Topology::dimension, 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 >
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