3#ifndef DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
4#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
36 namespace RefinementImp
45 namespace HCubeTriangulation {
61 template<
int dimension,
class CoordType,
int codimension>
64 template<
int dimension_,
class CoordType>
72 template<
int codimension>
93 template<
int dimension,
class CoordType>
94 template<
int codimension>
97 class SubEntityIterator;
101 template<
int dimension,
class CoordType>
106 return BackendRefinement::nVertices(level) * Factorial<dimension>::factorial;
109 template<
int dimension,
class CoordType>
117 template<
int dimension,
class CoordType>
125 template<
int dimension,
class CoordType>
130 return BackendRefinement::nElements(level) * Factorial<dimension>::factorial;
133 template<
int dimension,
class CoordType>
141 template<
int dimension,
class CoordType>
155 template<
int dimension,
class CoordType>
175 enum { nKuhnSimplices = Factorial<dimension>::factorial };
184 template<
int dimension,
class CoordType>
187 : level_(level), kuhnIndex(0),
192 kuhnIndex = nKuhnSimplices;
195 template<
int dimension,
class CoordType>
201 if (backend == backendEnd)
203 backend = BackendRefinement::vBegin(level_);
208 template<
int dimension,
class CoordType>
213 return referenceToKuhn(backend.coords(), getPermutation<dimension>(kuhnIndex));
216 template<
int dimension,
class CoordType>
220 std::vector<CoordVector> corners(1);
221 corners[0] = referenceToKuhn(backend.coords(), getPermutation<dimension>(kuhnIndex));
225 template<
int dimension,
class CoordType>
230 return kuhnIndex*BackendRefinement::nVertices(level_) + backend.index();
234 template<
int dimension,
class CoordType>
260 enum { nKuhnSimplices = Factorial<dimension>::factorial };
269 template<
int dimension,
class CoordType>
272 : level_(level), kuhnIndex(0),
277 kuhnIndex = nKuhnSimplices;
279 template<
int dimension,
class CoordType>
282 : level_(other.level_), kuhnIndex(other.kuhnIndex),
283 backend(other.backend),
284 backendEnd(other.backendEnd)
287 template<
int dimension,
class CoordType>
293 if (backend == backendEnd)
295 backend = BackendRefinement::eBegin(level_);
300 template<
int dimension,
class CoordType>
307 int base = kuhnIndex * BackendRefinement::nVertices(level_);
313 template<
int dimension,
class CoordType>
318 return kuhnIndex*BackendRefinement::nElements(level_) + backend.index();
321 template<
int dimension,
class CoordType>
326 return global(backend.coords());
329 template<
int dimension,
class CoordType>
333 const typename BackendIterator::Geometry &bgeo =
335 std::vector<CoordVector> corners(dimension+1);
336 for(
int i = 0; i <= dimension; ++i)
337 corners[i] = global(bgeo.corner(i));
339 return Geometry(bgeo.type(), corners);
342 template<
int dimension,
class CoordType>
345 global(
const CoordVector &local)
const
347 return referenceToKuhn(local, getPermutation<dimension>(kuhnIndex));
351 template<
int dimension,
class CoordType>
352 template<
int codimension>
354 :
public ForwardIteratorFacade<typename RefinementImp<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
359 typedef SubEntityIterator
This;
370 template<
int dimension,
class CoordType>
371 template<
int codimension>
377 template<
int dimension,
class CoordType>
378 template<
int codimension>
381 equals(
const This &other)
const
382 {
return kuhnIndex == other.kuhnIndex && backend == other.backend; }
389 namespace RefinementImp
397 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
400 topologyId, CoordType, coerceToId, dim,
401 typename std::enable_if<
403 (GenericGeometry::CubeTopology<dim>::type::id >> 1) ==
405 (GenericGeometry::SimplexTopology<dim>::type::id >> 1) ==
410 typedef HCubeTriangulation::RefinementImp<dim, CoordType> Imp;
This file contains the parts independent of a particular Refinement implementation.
This file contains the Refinement implementation for simplices (triangles, tetrahedrons....
Definition affinegeometry.hh:19
FieldVector< int, n > getPermutation(int m)
Calculate permutation from it's index.
Definition simplex.cc:325
FieldVector< CoordType, dimension > referenceToKuhn(FieldVector< CoordType, dimension > point, const FieldVector< int, dimension > &kuhn)
Map from the reference simplex to some Kuhn simplex.
Definition simplex.cc:383
Static tag representing a codimension.
Definition dimension.hh:22
generic geometry implementation based on corner coordinates
Definition multilineargeometry.hh:191
Definition hcubetriangulation.cc:62
Definition hcubetriangulation.cc:66
static VertexIterator vEnd(int level)
Definition hcubetriangulation.cc:120
static ElementIterator eBegin(int level)
Definition hcubetriangulation.cc:136
static ElementIterator eEnd(int level)
Definition hcubetriangulation.cc:144
FieldVector< CoordType, dimension > CoordVector
Definition hcubetriangulation.cc:75
CoordType ctype
Definition hcubetriangulation.cc:70
static int nElements(int level)
Definition hcubetriangulation.cc:128
Codim< 0 >::SubEntityIterator ElementIterator
Definition hcubetriangulation.cc:76
FieldVector< int, dimension+1 > IndexVector
Definition hcubetriangulation.cc:77
static int nVertices(int level)
Definition hcubetriangulation.cc:104
Codim< dimension >::SubEntityIterator VertexIterator
Definition hcubetriangulation.cc:74
static VertexIterator vBegin(int level)
Definition hcubetriangulation.cc:112
@ dimension
Definition hcubetriangulation.cc:68
Definition hcubetriangulation.cc:96
Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition hcubetriangulation.cc:98
int kuhnIndex
Definition hcubetriangulation.cc:179
Refinement::CoordVector CoordVector
Definition hcubetriangulation.cc:160
Refinement::template Codim< dimension >::Geometry Geometry
Definition hcubetriangulation.cc:161
BackendRefinement::template Codim< dimension >::SubEntityIterator BackendIterator
Definition hcubetriangulation.cc:174
Refinement::BackendRefinement BackendRefinement
Definition hcubetriangulation.cc:173
int level_
Definition hcubetriangulation.cc:177
BackendIterator backend
Definition hcubetriangulation.cc:180
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:159
const BackendIterator backendEnd
Definition hcubetriangulation.cc:181
BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator
Definition hcubetriangulation.cc:259
BackendIterator backend
Definition hcubetriangulation.cc:265
Refinement::CoordVector CoordVector
Definition hcubetriangulation.cc:240
const BackendIterator backendEnd
Definition hcubetriangulation.cc:266
int kuhnIndex
Definition hcubetriangulation.cc:264
Refinement::BackendRefinement BackendRefinement
Definition hcubetriangulation.cc:258
Refinement::IndexVector IndexVector
Definition hcubetriangulation.cc:239
int level_
Definition hcubetriangulation.cc:262
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:238
Refinement::template Codim< 0 >::Geometry Geometry
Definition hcubetriangulation.cc:241
SubEntityIterator(int level, bool end=false)
bool equals(const This &other) const
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:358
SubEntityIterator This
Definition hcubetriangulation.cc:359
Definition simplex.cc:422
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:25