5#ifndef DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
6#define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC
37 namespace RefinementImp
46 namespace HCubeTriangulation {
62 template<
int dimension,
class CoordType,
int codimension>
65 template<
int dimension_,
class CoordType>
73 template<
int codimension>
94 template<
int dimension,
class CoordType>
95 template<
int codimension>
98 class SubEntityIterator;
102 template<
int dimension,
class CoordType>
107 return BackendRefinement::nVertices(nIntervals) * factorial(
int(dimension));
110 template<
int dimension,
class CoordType>
118 template<
int dimension,
class CoordType>
126 template<
int dimension,
class CoordType>
131 return BackendRefinement::nElements(nIntervals) * factorial(
int(dimension));
134 template<
int dimension,
class CoordType>
142 template<
int dimension,
class CoordType>
156 template<
int dimension,
class CoordType>
176 constexpr static int nKuhnSimplices = factorial(
int(dimension));
185 template<
int dimension,
class CoordType>
188 : nIntervals_(nIntervals), kuhnIndex(0),
193 kuhnIndex = nKuhnSimplices;
196 template<
int dimension,
class CoordType>
202 if (backend == backendEnd)
204 backend = BackendRefinement::vBegin(nIntervals_);
209 template<
int dimension,
class CoordType>
214 return referenceToKuhn(backend.coords(), getPermutation<dimension>(kuhnIndex));
217 template<
int dimension,
class CoordType>
221 std::vector<CoordVector> corners(1);
222 corners[0] = referenceToKuhn(backend.coords(), getPermutation<dimension>(kuhnIndex));
226 template<
int dimension,
class CoordType>
231 return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index();
235 template<
int dimension,
class CoordType>
261 constexpr static int nKuhnSimplices = factorial(dimension);
270 template<
int dimension,
class CoordType>
273 : nIntervals_(nIntervals), kuhnIndex(0),
278 kuhnIndex = nKuhnSimplices;
280 template<
int dimension,
class CoordType>
283 : nIntervals_(other.nIntervals_), kuhnIndex(other.kuhnIndex),
284 backend(other.backend),
285 backendEnd(other.backendEnd)
288 template<
int dimension,
class CoordType>
294 if (backend == backendEnd)
296 backend = BackendRefinement::eBegin(nIntervals_);
301 template<
int dimension,
class CoordType>
308 int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_);
314 template<
int dimension,
class CoordType>
319 return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index();
322 template<
int dimension,
class CoordType>
327 return global(backend.coords());
330 template<
int dimension,
class CoordType>
334 const typename BackendIterator::Geometry &bgeo =
336 std::vector<CoordVector> corners(dimension+1);
337 for(
int i = 0; i <= dimension; ++i)
338 corners[i] = global(bgeo.corner(i));
340 return Geometry(bgeo.type(), corners);
343 template<
int dimension,
class CoordType>
346 global(
const CoordVector &local)
const
348 return referenceToKuhn(local, getPermutation<dimension>(kuhnIndex));
352 template<
int dimension,
class CoordType>
353 template<
int codimension>
355 :
public ForwardIteratorFacade<typename RefinementImp<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
360 typedef SubEntityIterator
This;
371 template<
int dimension,
class CoordType>
372 template<
int codimension>
378 template<
int dimension,
class CoordType>
379 template<
int codimension>
382 equals(
const This &other)
const
383 {
return kuhnIndex == other.kuhnIndex && backend == other.backend; }
390 namespace RefinementImp
398 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
401 topologyId, CoordType, coerceToId, dim,
402 typename std::enable_if<
404 (GeometryTypes::cube(dim).id() >> 1) ==
406 (GeometryTypes::simplex(dim).id() >> 1) ==
411 typedef HCubeTriangulation::RefinementImp<dim, CoordType> Imp;
This file contains the Refinement implementation for simplices (triangles, tetrahedrons....
This file contains the parts independent of a particular Refinement implementation.
A unique label for each type of element that can occur in a grid.
constexpr GeometryType vertex
GeometryType representing a vertex.
Definition type.hh:507
Definition affinegeometry.hh:21
FieldVector< int, n > getPermutation(int m)
Calculate permutation from it's index.
Definition simplex.cc:336
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:394
Static tag representing a codimension.
Definition dimension.hh:24
generic geometry implementation based on corner coordinates
Definition multilineargeometry.hh:181
Definition hcubetriangulation.cc:63
Definition hcubetriangulation.cc:67
static VertexIterator vEnd(int nIntervals)
Definition hcubetriangulation.cc:121
static VertexIterator vBegin(int nIntervals)
Definition hcubetriangulation.cc:113
static int nElements(int nIntervals)
Definition hcubetriangulation.cc:129
FieldVector< CoordType, dimension > CoordVector
Definition hcubetriangulation.cc:76
CoordType ctype
Definition hcubetriangulation.cc:71
Codim< 0 >::SubEntityIterator ElementIterator
Definition hcubetriangulation.cc:77
FieldVector< int, dimension+1 > IndexVector
Definition hcubetriangulation.cc:78
static ElementIterator eBegin(int nIntervals)
Definition hcubetriangulation.cc:137
static ElementIterator eEnd(int nIntervals)
Definition hcubetriangulation.cc:145
static constexpr int dimension
Definition hcubetriangulation.cc:69
Codim< dimension >::SubEntityIterator VertexIterator
Definition hcubetriangulation.cc:75
static int nVertices(int nIntervals)
Definition hcubetriangulation.cc:105
Definition hcubetriangulation.cc:97
Dune::MultiLinearGeometry< CoordType, dimension-codimension, dimension > Geometry
Definition hcubetriangulation.cc:99
int nIntervals_
Definition hcubetriangulation.cc:178
int kuhnIndex
Definition hcubetriangulation.cc:180
Refinement::CoordVector CoordVector
Definition hcubetriangulation.cc:161
Refinement::template Codim< dimension >::Geometry Geometry
Definition hcubetriangulation.cc:162
BackendRefinement::template Codim< dimension >::SubEntityIterator BackendIterator
Definition hcubetriangulation.cc:175
Refinement::BackendRefinement BackendRefinement
Definition hcubetriangulation.cc:174
BackendIterator backend
Definition hcubetriangulation.cc:181
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:160
const BackendIterator backendEnd
Definition hcubetriangulation.cc:182
BackendRefinement::template Codim< 0 >::SubEntityIterator BackendIterator
Definition hcubetriangulation.cc:260
BackendIterator backend
Definition hcubetriangulation.cc:266
Refinement::CoordVector CoordVector
Definition hcubetriangulation.cc:241
const BackendIterator backendEnd
Definition hcubetriangulation.cc:267
int kuhnIndex
Definition hcubetriangulation.cc:265
Refinement::BackendRefinement BackendRefinement
Definition hcubetriangulation.cc:259
int nIntervals_
Definition hcubetriangulation.cc:263
Refinement::IndexVector IndexVector
Definition hcubetriangulation.cc:240
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:239
Refinement::template Codim< 0 >::Geometry Geometry
Definition hcubetriangulation.cc:242
bool equals(const This &other) const
SubEntityIterator(int nIntervals, bool end=false)
RefinementImp< dimension, CoordType > Refinement
Definition hcubetriangulation.cc:359
SubEntityIterator This
Definition hcubetriangulation.cc:360
Definition simplex.cc:433