6#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
7#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
17#include <dune/common/exceptions.hh>
18#include <dune/common/fvector.hh>
19#include <dune/common/iteratorfacades.hh>
35 template<
int dimension,
class CoordType>
43 template<
int dimension,
class CoordType>
51 template<
int dimension,
class CoordType>
59 template<
int dimension,
class CoordType>
71 template<
int dimension,
class CoordType,
int codimension>
75 template<
int dimension,
class CoordType>
80 template<
int dimension,
class CoordType>
91 template<
int dimension,
class CoordType>
96 return static_cast<const Common *
>(
this)->backend->vertexIndices();
100 template<
int dimension,
class CoordType>
101 template<
int codimension>
103 :
public ForwardIteratorFacade<typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
132 template<
int dimension,
class CoordType>
133 template<
int codimension>
139 template<
int dimension,
class CoordType>
140 template<
int codimension>
143 : backend(other.backend->clone())
146 template<
int dimension,
class CoordType>
147 template<
int codimension>
148 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
154 template<
int dimension,
class CoordType>
155 template<
int codimension>
156 typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator &
157 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
158 operator=(
const This &other)
161 backend = other.backend->clone();
164 template<
int dimension,
class CoordType>
165 template<
int codimension>
167 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
168 equals(
const This &other)
const
169 {
return *backend == *(other.backend); }
171 template<
int dimension,
class CoordType>
172 template<
int codimension>
174 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
180 template<
int dimension,
class CoordType>
181 template<
int codimension>
183 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
185 {
return backend->index(); }
187 template<
int dimension,
class CoordType>
188 template<
int codimension>
189 typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator::CoordVector
190 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
192 {
return backend->coords(); }
199 template<
int dimension,
class CoordType,
int codimension>
203 template<
int dimension,
class CoordType>
213 template<
int dimension,
class CoordType>
227 template<
int dimension,
class CoordType>
228 template<
int codimension>
257 template<
unsigned topologyId,
class CoordType,
258 unsigned coerceToId,
int dimension>
266 template<
int codimension>
283 template<
unsigned topologyId,
class CoordType,
284 unsigned coerceToId,
int dimension>
285 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension> &
292 template<
unsigned topologyId,
class CoordType,
293 unsigned coerceToId,
int dimension>
300 template<
unsigned topologyId,
class CoordType,
301 unsigned coerceToId,
int dimension>
309 template<
unsigned topologyId,
class CoordType,
310 unsigned coerceToId,
int dimension>
312 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::
318 template<
unsigned topologyId,
class CoordType,
319 unsigned coerceToId,
int dimension>
325 template<
unsigned topologyId,
class CoordType,
326 unsigned coerceToId,
int dimension>
334 template<
unsigned topologyId,
class CoordType,
335 unsigned coerceToId,
int dimension>
337 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::
348 template<
unsigned topologyId,
class CoordType,
349 unsigned coerceToId,
int dimension,
int codimension>
353 template<
unsigned topologyId,
class CoordType,
354 unsigned coerceToId,
int dimension>
356 :
public VirtualRefinement<dimension, CoordType>::template SubEntityIteratorBack<dimension>
361 template<
unsigned topologyId,
class CoordType,
362 unsigned coerceToId,
int dimension>
364 :
public VirtualRefinement<dimension, CoordType>::template SubEntityIteratorBack<0>
368 typedef typename VirtualRefinementImp::template SubEntityIteratorBack<0>
Common;
376 template<
unsigned topologyId,
class CoordType,
377 unsigned coerceToId,
int dimension>
383 vIndices.reserve(StaticRefinement::IndexVector::dimension);
386 for(
int i = 0; i < StaticRefinement::IndexVector::dimension; ++i)
387 vIndices.push_back(sIndices[i]);
392 template<
unsigned topologyId,
class CoordType,
393 unsigned coerceToId,
int dimension>
394 template<
int codimension>
409 bool operator==(
const Base &other)
const;
420 template<
unsigned topologyId,
class CoordType,
421 unsigned coerceToId,
int dimension>
422 template<
int codimension>
428 template<
unsigned topologyId,
class CoordType,
429 unsigned coerceToId,
int dimension>
430 template<
int codimension>
434 backend(other.backend)
437 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
int dimension>
438 template<
int codimension>
442 {
return new This(*
this); }
444 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
int dimension>
445 template<
int codimension>
451 return backend ==
dynamic_cast<const This &
>(other).backend;
453 catch(
const std::bad_cast&)
459 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
int dimension>
460 template<
int codimension>
469 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
int dimension>
470 template<
int codimension>
474 {
return backend.index(); }
476 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
int dimension>
477 template<
int codimension>
481 {
return backend.coords(); }
488 template<
int dimension,
class CoordType>
501 template<
int dimension,
class CoordType>
509 assert(geometryType.
dim() == dimension && coerceTo.
dim() == dimension);
516 template<
int dimension,
class CoordType>
522 build(
unsigned topologyId,
unsigned coerceToId)
527 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
528 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;
561 DUNE_THROW( NotImplemented,
"No Refinement<" << topologyId <<
", CoordType, "
562 << coerceToId <<
" >.");
566 template<
class CoordType>
569 static const std::size_t dimension = 1;
573 build(
unsigned topologyId,
unsigned coerceToId)
578 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
580 if (topologyId == 0 && coerceToId == 0)
583 DUNE_THROW( NotImplemented,
"No Refinement<" << topologyId <<
", CoordType, "
584 << coerceToId <<
" >.");
588 template<
class CoordType>
591 static const std::size_t dimension = 3;
595 build(
unsigned topologyId,
unsigned coerceToId)
600 constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1;
601 constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1;
602 constexpr unsigned idPrism = GeometryTypes::prism.id() & ~1;
603 constexpr unsigned idPyramid = GeometryTypes::pyramid.id() & ~1;
658 DUNE_THROW( NotImplemented,
"No Refinement<" << topologyId <<
", CoordType, "
659 << coerceToId <<
" >.");
A unique label for each type of element that can occur in a grid.
This file simply includes all Refinement implementations so you don't have to do them separately.
Definition affinegeometry.hh:21
VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType geometryType, GeometryType coerceTo)
return a reference to the VirtualRefinement according to the parameters
Definition virtualrefinement.cc:503
Static tag representing a codimension.
Definition dimension.hh:24
Holds the number of refined intervals per axis needed for virtual and static refinement.
Definition base.cc:94
Wrap each Refinement implementation to get a consistent interface.
Definition base.cc:141
static ElementIterator eEnd(Dune::RefinementIntervals tag)
Get an ElementIterator.
Definition base.cc:247
static ElementIterator eBegin(Dune::RefinementIntervals tag)
Get an ElementIterator.
Definition base.cc:237
static int nElements(Dune::RefinementIntervals tag)
Get the number of Elements.
Definition base.cc:227
static int nVertices(Dune::RefinementIntervals tag)
Get the number of Vertices.
Definition base.cc:197
static VertexIterator vBegin(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:207
typedef IndexVector
The IndexVector of the Refinement.
Definition base.cc:177
static VertexIterator vEnd(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:217
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:126
constexpr unsigned int dim() const
Return dimension of the type.
Definition type.hh:372
constexpr unsigned int id() const
Return the topology id of the type.
Definition type.hh:377
Definition virtualrefinement.cc:72
Refinement::template Codim< 0 >::SubEntityIterator Common
Definition virtualrefinement.cc:85
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:84
Refinement::IndexVector IndexVector
Definition virtualrefinement.cc:86
VirtualRefinement< dimension, CoordType >::template Codim< codimension >::SubEntityIterator::CoordVector coords() const
SubEntityIterator(const This &other)
This & operator=(const This &other)
SubEntityIterator(IteratorBack *backend)
Refinement::template SubEntityIteratorBack< codimension > IteratorBack
Definition virtualrefinement.cc:109
Refinement::CoordVector CoordVector
Definition virtualrefinement.cc:110
Refinement::template Codim< codimension >::SubEntityIterator This
Definition virtualrefinement.cc:108
bool equals(const This &other) const
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:107
Definition virtualrefinement.cc:200
virtual ~VirtualRefinementSubEntityIteratorBackSpecial()
Definition virtualrefinement.cc:208
virtual IndexVector vertexIndices() const =0
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:217
Refinement::IndexVector IndexVector
Definition virtualrefinement.cc:218
virtual ~VirtualRefinementSubEntityIteratorBackSpecial()
Definition virtualrefinement.cc:222
Definition virtualrefinement.cc:231
virtual int index() const =0
Refinement::template SubEntityIteratorBack< codimension > This
Definition virtualrefinement.cc:234
virtual This * clone() const =0
Refinement::CoordVector CoordVector
Definition virtualrefinement.cc:235
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:233
virtual bool operator==(const This &other) const =0
virtual CoordVector coords() const =0
virtual ~SubEntityIteratorBack()
Definition virtualrefinement.cc:237
virtual This & operator++()=0
Definition virtualrefinement.cc:261
int nVertices(Dune::RefinementIntervals tag) const
Get the number of Vertices.
Definition virtualrefinement.cc:295
Dune::VirtualRefinement< dimension, CoordType > VirtualRefinement
Definition virtualrefinement.cc:264
int nElements(Dune::RefinementIntervals tag) const
Get the number of Elements.
Definition virtualrefinement.cc:320
static VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > & instance()
Definition virtualrefinement.cc:286
Dune::StaticRefinement< topologyId, CoordType, coerceToId, dimension > StaticRefinement
Definition virtualrefinement.cc:263
Definition virtualrefinement.cc:397
VirtualRefinement::template SubEntityIteratorBack< codimension > Base
Definition virtualrefinement.cc:401
VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >::template SubEntityIteratorBack< codimension > This
Definition virtualrefinement.cc:400
StaticRefinement::template Codim< codimension >::SubEntityIterator BackendIterator
Definition virtualrefinement.cc:399
VirtualRefinement::CoordVector CoordVector
Definition virtualrefinement.cc:402
Definition virtualrefinement.cc:350
VirtualRefinementImp::template SubEntityIteratorBack< 0 > Common
Definition virtualrefinement.cc:368
RefinementBase::IndexVector IndexVector
Definition virtualrefinement.cc:371
VirtualRefinement< dimension, CoordType > RefinementBase
Definition virtualrefinement.cc:370
Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > VirtualRefinementImp
Definition virtualrefinement.cc:367
VirtualRefinementImp::StaticRefinement StaticRefinement
Definition virtualrefinement.cc:369
Definition virtualrefinement.cc:518
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:522
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:573
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:595
VirtualRefinement base class.
Definition virtualrefinement.hh:294
SubEntityIteratorBack< dimension > VertexIteratorBack
Definition virtualrefinement.hh:318
VertexIterator vBegin(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:38
ElementIterator eBegin(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:54
ElementIterator eEnd(Dune::RefinementIntervals tag) const
Get an ElementIterator.
Definition virtualrefinement.cc:62
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the VirtualRefinement.
Definition virtualrefinement.hh:301
VertexIterator vEnd(Dune::RefinementIntervals tag) const
Get an VertexIterator.
Definition virtualrefinement.cc:46
FieldVector< CoordType, dimension > CoordVector
The CoordVector of the VirtualRefinement.
Definition virtualrefinement.hh:308
std::vector< int > IndexVector
The IndexVector of the VirtualRefinement.
Definition virtualrefinement.hh:314
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the VirtualRefinement.
Definition virtualrefinement.hh:299
SubEntityIteratorBack< 0 > ElementIteratorBack
Definition virtualrefinement.hh:319
codim database of VirtualRefinement
Definition virtualrefinement.hh:378