4#ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
5#define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC
15#include <dune/common/exceptions.hh>
16#include <dune/common/fvector.hh>
17#include <dune/common/iteratorfacades.hh>
33 template<
int dimension,
class CoordType>
41 template<
int dimension,
class CoordType>
49 template<
int dimension,
class CoordType>
57 template<
int dimension,
class CoordType>
69 template<
int dimension,
class CoordType,
int codimension>
73 template<
int dimension,
class CoordType>
78 template<
int dimension,
class CoordType>
89 template<
int dimension,
class CoordType>
94 return static_cast<const Common *
>(
this)->backend->vertexIndices();
98 template<
int dimension,
class CoordType>
99 template<
int codimension>
101 :
public ForwardIteratorFacade<typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator, int>,
130 template<
int dimension,
class CoordType>
131 template<
int codimension>
137 template<
int dimension,
class CoordType>
138 template<
int codimension>
141 : backend(other.backend->clone())
144 template<
int dimension,
class CoordType>
145 template<
int codimension>
146 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
152 template<
int dimension,
class CoordType>
153 template<
int codimension>
154 typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator &
155 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
156 operator=(
const This &other)
159 backend = other.backend->clone();
162 template<
int dimension,
class CoordType>
163 template<
int codimension>
165 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
166 equals(
const This &other)
const
167 {
return *backend == *(other.backend); }
169 template<
int dimension,
class CoordType>
170 template<
int codimension>
172 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
178 template<
int dimension,
class CoordType>
179 template<
int codimension>
181 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
183 {
return backend->index(); }
185 template<
int dimension,
class CoordType>
186 template<
int codimension>
187 typename VirtualRefinement<dimension, CoordType>::template Codim<codimension>::SubEntityIterator::CoordVector
188 VirtualRefinement<dimension, CoordType>::Codim<codimension>::SubEntityIterator::
190 {
return backend->coords(); }
197 template<
int dimension,
class CoordType,
int codimension>
201 template<
int dimension,
class CoordType>
211 template<
int dimension,
class CoordType>
225 template<
int dimension,
class CoordType>
226 template<
int codimension>
255 template<
unsigned topologyId,
class CoordType,
256 unsigned coerceToId,
int dimension>
264 template<
int codimension>
267 int nVertices(
int level)
const;
268 int nElements(
int level)
const;
281 template<
unsigned topologyId,
class CoordType,
282 unsigned coerceToId,
int dimension>
283 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension> &
291 template<
unsigned topologyId,
class CoordType,
292 unsigned coerceToId,
int dimension>
296 template<
unsigned topologyId,
class CoordType,
297 unsigned coerceToId,
int dimension>
304 template<
unsigned topologyId,
class CoordType,
305 unsigned coerceToId,
int dimension>
311 template<
unsigned topologyId,
class CoordType,
312 unsigned coerceToId,
int dimension>
314 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::
315 vEndBack(
int level)
const
318 template<
unsigned topologyId,
class CoordType,
319 unsigned coerceToId,
int dimension>
325 template<
unsigned topologyId,
class CoordType,
326 unsigned coerceToId,
int dimension>
332 template<
unsigned topologyId,
class CoordType,
333 unsigned coerceToId,
int dimension>
335 VirtualRefinementImp<topologyId, CoordType, coerceToId, dimension>::
336 eEndBack(
int level)
const
344 template<
unsigned topologyId,
class CoordType,
345 unsigned coerceToId,
int dimension,
int codimension>
349 template<
unsigned topologyId,
class CoordType,
350 unsigned coerceToId,
int dimension>
352 :
public VirtualRefinement<dimension, CoordType>::template SubEntityIteratorBack<dimension>
357 template<
unsigned topologyId,
class CoordType,
358 unsigned coerceToId,
int dimension>
360 :
public VirtualRefinement<dimension, CoordType>::template SubEntityIteratorBack<0>
364 typedef typename VirtualRefinementImp::template SubEntityIteratorBack<0>
Common;
372 template<
unsigned topologyId,
class CoordType,
373 unsigned coerceToId,
int dimension>
379 vIndices.reserve(StaticRefinement::IndexVector::dimension);
382 for(
int i = 0; i < StaticRefinement::IndexVector::dimension; ++i)
383 vIndices.push_back(sIndices[i]);
388 template<
unsigned topologyId,
class CoordType,
389 unsigned coerceToId,
int dimension>
390 template<
int codimension>
405 bool operator==(
const Base &other)
const;
416 template<
unsigned topologyId,
class CoordType,
417 unsigned coerceToId,
int dimension>
418 template<
int codimension>
424 template<
unsigned topologyId,
class CoordType,
425 unsigned coerceToId,
int dimension>
426 template<
int codimension>
430 backend(other.backend)
433 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
int dimension>
434 template<
int codimension>
438 {
return new This(*
this); }
440 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
int dimension>
441 template<
int codimension>
447 return backend ==
dynamic_cast<const This &
>(other).backend;
455 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
int dimension>
456 template<
int codimension>
465 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
int dimension>
466 template<
int codimension>
470 {
return backend.index(); }
472 template<
unsigned topologyId,
class CoordType,
unsigned coerceToId,
int dimension>
473 template<
int codimension>
477 {
return backend.coords(); }
484 template<
int dimension,
class CoordType>
497 template<
int dimension,
class CoordType>
505 assert(geometryType.
dim() == dimension && coerceTo.
dim() == dimension);
512 template<
int dimension,
class CoordType>
518 build(
unsigned topologyId,
unsigned coerceToId)
557 DUNE_THROW( NotImplemented,
"No Refinement<" << topologyId <<
", CoordType, "
558 << coerceToId <<
" >.");
562 template<
class CoordType>
565 static const std::size_t dimension = 1;
569 build(
unsigned topologyId,
unsigned coerceToId)
576 if (topologyId == 0 && coerceToId == 0)
579 DUNE_THROW( NotImplemented,
"No Refinement<" << topologyId <<
", CoordType, "
580 << coerceToId <<
" >.");
584 template<
class CoordType>
587 static const std::size_t dimension = 3;
591 build(
unsigned topologyId,
unsigned coerceToId)
654 DUNE_THROW( NotImplemented,
"No Refinement<" << topologyId <<
", CoordType, "
655 << coerceToId <<
" >.");
This file simply includes all Refinement implementations so you don't have to do them separately.
A unique label for each type of element that can occur in a grid.
Definition affinegeometry.hh:19
VirtualRefinement< dimension, CoordType > & buildRefinement(GeometryType geometryType, GeometryType coerceTo)
return a reference to the VirtualRefinement according to the parameters
Definition virtualrefinement.cc:499
Static tag representing a codimension.
Definition dimension.hh:22
Definition topologytypes.hh:215
Definition topologytypes.hh:232
Definition topologytypes.hh:249
Definition topologytypes.hh:260
Wrap each Refinement implementation to get a consistent interface.
Definition base.cc:104
static VertexIterator vEnd(int level)
Get a VertexIterator.
static ElementIterator eEnd(int level)
Get an ElementIterator.
static ElementIterator eBegin(int level)
Get an ElementIterator.
static VertexIterator vBegin(int level)
Get a VertexIterator.
static int nVertices(int level)
Get the number of Vertices.
typedef IndexVector
The IndexVector of the Refinement.
Definition base.cc:140
static int nElements(int level)
Get the number of Elements.
Unique label for each type of entities that can occur in DUNE grids.
Definition type.hh:25
unsigned int dim() const
Return dimension of the type.
Definition type.hh:321
unsigned int id() const
Return the topology id the type.
Definition type.hh:326
Definition virtualrefinement.cc:70
Refinement::template Codim< 0 >::SubEntityIterator Common
Definition virtualrefinement.cc:83
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:82
Refinement::IndexVector IndexVector
Definition virtualrefinement.cc:84
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:107
Refinement::CoordVector CoordVector
Definition virtualrefinement.cc:108
Refinement::template Codim< codimension >::SubEntityIterator This
Definition virtualrefinement.cc:106
bool equals(const This &other) const
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:105
Definition virtualrefinement.cc:198
virtual ~VirtualRefinementSubEntityIteratorBackSpecial()
Definition virtualrefinement.cc:206
virtual IndexVector vertexIndices() const =0
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:215
Refinement::IndexVector IndexVector
Definition virtualrefinement.cc:216
virtual ~VirtualRefinementSubEntityIteratorBackSpecial()
Definition virtualrefinement.cc:220
Definition virtualrefinement.cc:229
virtual int index() const =0
Refinement::template SubEntityIteratorBack< codimension > This
Definition virtualrefinement.cc:232
virtual This * clone() const =0
Refinement::CoordVector CoordVector
Definition virtualrefinement.cc:233
VirtualRefinement< dimension, CoordType > Refinement
Definition virtualrefinement.cc:231
virtual bool operator==(const This &other) const =0
virtual CoordVector coords() const =0
virtual ~SubEntityIteratorBack()
Definition virtualrefinement.cc:235
virtual This & operator++()=0
Definition virtualrefinement.cc:259
Dune::VirtualRefinement< dimension, CoordType > VirtualRefinement
Definition virtualrefinement.cc:262
static VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > & instance()
Definition virtualrefinement.cc:284
int nVertices(int level) const
Get the number of Vertices.
Definition virtualrefinement.cc:299
Dune::StaticRefinement< topologyId, CoordType, coerceToId, dimension > StaticRefinement
Definition virtualrefinement.cc:261
int nElements(int level) const
Get the number of Elements.
Definition virtualrefinement.cc:320
Definition virtualrefinement.cc:393
VirtualRefinement::template SubEntityIteratorBack< codimension > Base
Definition virtualrefinement.cc:397
VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension >::template SubEntityIteratorBack< codimension > This
Definition virtualrefinement.cc:396
StaticRefinement::template Codim< codimension >::SubEntityIterator BackendIterator
Definition virtualrefinement.cc:395
VirtualRefinement::CoordVector CoordVector
Definition virtualrefinement.cc:398
Definition virtualrefinement.cc:346
VirtualRefinementImp::template SubEntityIteratorBack< 0 > Common
Definition virtualrefinement.cc:364
RefinementBase::IndexVector IndexVector
Definition virtualrefinement.cc:367
VirtualRefinement< dimension, CoordType > RefinementBase
Definition virtualrefinement.cc:366
Dune::VirtualRefinementImp< topologyId, CoordType, coerceToId, dimension > VirtualRefinementImp
Definition virtualrefinement.cc:363
VirtualRefinementImp::StaticRefinement StaticRefinement
Definition virtualrefinement.cc:365
Definition virtualrefinement.cc:514
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:518
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:569
static VirtualRefinement< dimension, CoordType > & build(unsigned topologyId, unsigned coerceToId)
Definition virtualrefinement.cc:591
VirtualRefinement base class.
Definition virtualrefinement.hh:292
SubEntityIteratorBack< dimension > VertexIteratorBack
Definition virtualrefinement.hh:316
VertexIterator vEnd(int level) const
Get a VertexIterator.
Definition virtualrefinement.cc:44
ElementIterator eBegin(int level) const
Get an ElementIterator.
Definition virtualrefinement.cc:52
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the VirtualRefinement.
Definition virtualrefinement.hh:299
ElementIterator eEnd(int level) const
Get an ElementIterator.
Definition virtualrefinement.cc:60
FieldVector< CoordType, dimension > CoordVector
The CoordVector of the VirtualRefinement.
Definition virtualrefinement.hh:306
VertexIterator vBegin(int level) const
Get a VertexIterator.
Definition virtualrefinement.cc:36
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the VirtualRefinement.
Definition virtualrefinement.hh:297
SubEntityIteratorBack< 0 > ElementIteratorBack
Definition virtualrefinement.hh:317
codim database of VirtualRefinement
Definition virtualrefinement.hh:348