dune-geometry 2.9.1
Loading...
Searching...
No Matches
Topics | Namespaces | Classes | Functions
Refinement
Collaboration diagram for Refinement:

Topics

 Refinement implementation for hypercubes
 
 Refinement implementation for triangulating hypercubes
 
 Refinement implementation for simplices
 
 Virtual Refinement
 

Namespaces

namespace  Dune::RefinementImp
 This namespace contains the implementation of Refinement.
 

Classes

class  Dune::RefinementIntervals
 Holds the number of refined intervals per axis needed for virtual and static refinement. More...
 
class  Dune::StaticRefinement< topologyId, CoordType, coerceToId, dimension_ >
 Wrap each Refinement implementation to get a consistent interface. More...
 

Functions

RefinementIntervals Dune::refinementIntervals (int intervals)
 Creates a RefinementIntervals object.
 
RefinementIntervals Dune::refinementLevels (int levels)
 Creates a RefinementIntervals object.
 

Detailed Description

General

The Refinement system allows to temporarily refine a grid or single entities without changing the grid itself. You may want to do this because you want to write your data to a file and have to do subsampling, but want to continue the calculation with the unmodified grid afterwards.

What Refinement can do for you

template<unsigned topologyId, class CoordType,
unsigned coerceToId, int dimension_>
class StaticRefinement
{
public:
constexpr static int dimension = dimension_;
template<int codimension>
struct codim
{
class SubEntityIterator;
};
typedef ImplementationDefined VertexIterator; // These are aliases for codim<codim>::SubEntityIterator
typedef ImplementationDefined ElementIterator;
typedef ImplementationDefined IndexVector; // These are FieldVectors
typedef ImplementationDefined CoordVector;
static int nVertices(Dune::RefinementIntervals intervals);
static int nElements(Dune::RefinementIntervals intervals);
}
Holds the number of refined intervals per axis needed for virtual and static refinement.
Definition base.cc:94
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
Codim< 0 >::SubEntityIterator ElementIterator
The ElementIterator of the Refinement.
Definition base.cc:163
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
Codim< dimension >::SubEntityIterator VertexIterator
The VertexIterator of the Refinement.
Definition base.cc:161
typedef CoordVector
The CoordVector of the Refinement.
Definition base.cc:170
typedef IndexVector
The IndexVector of the Refinement.
Definition base.cc:177
static VertexIterator vEnd(Dune::RefinementIntervals tag)
Get a VertexIterator.
Definition base.cc:217

The Iterators can do all the usual things that Iterators can do, except dereferencing. In addition, to do something useful, they support some additional methods:

template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
class VertexIterator
{
public:
typedef ImplementationDefined Refinement;
int index() const;
Refinement::CoordVector coords() const;
}
template<unsigned topologyId, class CoordType, unsigned coerceToId, int dimension>
class ElementIterator
{
public:
typedef ImplementationDefined Refinement;
int index() const;
// Coords of the center of mass of the element
Refinement::CoordVector coords() const;
Refinement::IndexVector vertexIndices() const;
}

How to use it

If you want to write a Refinement implementation for a particular geometry type, e.g. SquaringTheCircle (or a particular set of geometry types) here is how:

This is enough to integrate your implementation into the Refinement system. You probably want to include it into VirtualRefinement also.

Namespaces

Function Documentation

◆ refinementIntervals()

RefinementIntervals Dune::refinementIntervals ( int intervals)
inline

Creates a RefinementIntervals object.

Parameters
intervalsNumber of refined intervals per axis

◆ refinementLevels()

RefinementIntervals Dune::refinementLevels ( int levels)
inline

Creates a RefinementIntervals object.

Parameters
levelsNumber of refinement levels, translates to $2^{levels}$ intervals per axis