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;
200 using HybridMappingBase< dim, GeometryTraits >::trace;
203 virtual This *
clone ()
const = 0;
204 virtual This *
clone (
char *mappingStorage )
const = 0;
206 template<
int codim >
207 typename Codim< codim >::Trace *
trace (
unsigned int i,
char *mappingStorage )
const
209 integral_constant< int, codim > codimVariable;
210 return trace( codimVariable, i, mappingStorage );
226 template<
class Topology,
class GeometryTraits,
unsigned int codim = Topology::dimension >
227 class VirtualMappingBase;
229 template<
class Topology,
class GeometryTraits,
unsigned int codim >
230 class VirtualMappingBase
231 :
public VirtualMappingBase< Topology, GeometryTraits, codim-1 >,
232 public virtual HybridMappingBase< Topology::dimension, GeometryTraits, codim >
238 using VirtualMappingBase< Topology, GeometryTraits, codim-1 >::trace;
240 virtual HybridMapping< Topology::dimension - codim, GeometryTraits > *
241 trace ( integral_constant< int, codim >,
unsigned int i,
char *mappingStorage )
const
243 return static_cast< const VirtualMapping &
>( *this ).template trace< codim >( i, mappingStorage );
247 template<
class Topology,
class GeometryTraits >
248 class VirtualMappingBase< Topology, GeometryTraits, 0 >
249 :
public virtual HybridMappingBase< Topology::dimension, GeometryTraits, 0 >
251 typedef GenericGeometry::VirtualMapping< Topology, GeometryTraits >
255 virtual HybridMapping< Topology::dimension, GeometryTraits > *
256 trace ( integral_constant< int, 0 >,
unsigned int i,
char *mappingStorage )
const
258 return static_cast< const VirtualMapping &
>( *this ).template trace< 0 >( i, mappingStorage );
265 template<
class Topology,
class GeometryTraits >
267 :
public HybridMapping< Topology::dimension, GeometryTraits >,
269 public VirtualMappingBase< Topology, GeometryTraits >
292 template<
unsigned int codim >
298 typedef typename GeometryTraits::Caching
Caching;
300 template<
class CoordVector >
302 : mapping_( coordVector )
324 virtual Base*
clone (
char *mappingStorage )
const {
return new( mappingStorage )
This( *
this ); }
326 template<
int codim >
333 using VirtualMappingBase< Topology, GeometryTraits >::trace;
351 template<
class Topology,
class GeometryTraits >
374 template<
unsigned int codim >
380 typedef typename GeometryTraits::Caching
Caching;
381 typedef typename GeometryTraits::UserData
UserData;
383 template<
class CoordVector >
385 : mapping_( coordVector )
474 This *
clone (
char *mappingStorage )
const {
return new( mappingStorage )
This( *
this ); }
476 template<
int codim >
494 #endif // #ifndef DUNE_GEOMETRY_GENERICGEOMETRY_HYBRIDMAPPING_HH