3 #ifndef DUNE_GRIDGLUE_MERGING_MERGER_HH 4 #define DUNE_GRIDGLUE_MERGING_MERGER_HH 8 #include <dune/common/fvector.hh> 9 #include <dune/geometry/type.hh> 15 template <
class ctype,
int gr
id1Dim,
int gr
id2Dim,
int dimworld>
21 template <
class ctype,
int gr
id1Dim,
int gr
id2Dim,
int dimworld,
int n>
22 struct MergerGridPolicy;
24 template <
class ctype,
int gr
id1Dim,
int gr
id2Dim,
int dimworld>
25 struct MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, 0>
30 typedef Dune::FieldVector<ctype, grid1Dim> GridCoords;
33 unsigned int parents(
const Parent & m,
unsigned int idx)
35 return m.grid1Parents(idx);
39 unsigned int parent(
const Parent & m,
unsigned int idx,
unsigned int parId = 0)
41 return m.grid1Parent(idx, parId);
45 GridCoords
parentLocal(
const Parent & m,
unsigned int idx,
unsigned int corner,
unsigned int parId = 0)
47 return m.grid1ParentLocal(idx, corner, parId);
52 template <
class ctype,
int gr
id1Dim,
int gr
id2Dim,
int dimworld>
53 struct MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, 1>
58 typedef Dune::FieldVector<ctype, grid2Dim> GridCoords;
61 unsigned int parents(
const Parent & m,
unsigned int idx)
63 return m.grid2Parents(idx);
67 unsigned int parent(
const Parent & m,
unsigned int idx,
unsigned int parId = 0)
69 return m.grid2Parent(idx, parId);
73 GridCoords
parentLocal(
const Parent & m,
unsigned int idx,
unsigned int corner,
unsigned int parId = 0)
75 return m.grid2ParentLocal(idx, corner, parId);
89 template <
class ctype,
int gr
id1Dim,
int gr
id2Dim,
int dimworld>
94 friend struct MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, 0>;
95 friend struct MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, 1>;
112 typedef MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, n>
Policy;
114 typedef typename MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, n>::GridCoords
Coords;
130 virtual void build(
const std::vector<Dune::FieldVector<ctype,dimworld> >& grid1_coords,
131 const std::vector<unsigned int>& grid1_elements,
132 const std::vector<Dune::GeometryType>& grid1_element_types,
133 const std::vector<Dune::FieldVector<ctype,dimworld> >& grid2_coords,
134 const std::vector<unsigned int>& grid2_elements,
135 const std::vector<Dune::GeometryType>& grid2_element_types) = 0;
142 virtual void clear() = 0;
148 unsigned int parents(
unsigned int idx)
const {
149 return GridTraits<n>::Policy::parents(*
this, idx);
159 unsigned int parent(
unsigned int idx,
unsigned int parId = 0)
const 161 return GridTraits<n>::Policy::parent(*
this, idx, parId);
174 return GridTraits<n>::Policy::simplexRefined(*
this, idx, indices);
188 return GridTraits<n>::Policy::parentLocal(*
this, idx, corner, parId);
200 virtual unsigned int grid1Parents(
unsigned int idx)
const = 0;
202 virtual unsigned int grid2Parents(
unsigned int idx)
const = 0;
209 virtual unsigned int grid1Parent(
unsigned int idx,
unsigned int parId = 0)
const = 0;
216 virtual unsigned int grid2Parent(
unsigned int idx,
unsigned int parId = 0)
const = 0;
225 virtual Grid1Coords grid1ParentLocal(
unsigned int idx,
unsigned int corner,
unsigned int parId = 0)
const = 0;
234 virtual Grid2Coords grid2ParentLocal(
unsigned int idx,
unsigned int corner,
unsigned int parId = 0)
const = 0;
Abstract base for all classes that take extracted grids and build sets of intersections.
Definition: merger.hh:16
bool simplexRefined(unsigned int idx, std::vector< unsigned int > &indices) const
get the merged grid simplices refining a given grid-n simplex
Definition: merger.hh:172
virtual unsigned int nSimplices() const =0
get the number of simplices in the merged grid The indices are then in 0..nSimplices()-1 ...
virtual void build(const std::vector< Dune::FieldVector< ctype, dimworld > > &grid1_coords, const std::vector< unsigned int > &grid1_elements, const std::vector< Dune::GeometryType > &grid1_element_types, const std::vector< Dune::FieldVector< ctype, dimworld > > &grid2_coords, const std::vector< unsigned int > &grid2_elements, const std::vector< Dune::GeometryType > &grid2_element_types)=0
builds the merged grid
Definition: gridglue.hh:31
Dune::FieldVector< ctype, dimworld > WorldCoords
the coordinate type used in this interface
Definition: merger.hh:106
Coordinate corner(unsigned c)
Definition: projection_impl.hh:22
Definition: merger.hh:109
MergerGridPolicy< ctype, grid1Dim, grid2Dim, dimworld, n > Policy
the policy class for this grid number
Definition: merger.hh:112
Dune::FieldVector< ctype, grid2Dim > Grid2Coords
the local coordinate type for the grid2 coordinates
Definition: merger.hh:103
MergerGridPolicy< ctype, grid1Dim, grid2Dim, dimworld, n >::GridCoords Coords
the local coordinate type for the grid-n coordinates
Definition: merger.hh:114
GridTraits< n >::Coords parentLocal(unsigned int idx, unsigned int corner, unsigned int parId=0) const
get the grid-n parent's simplex local coordinates for a particular merged grid simplex corner (parent...
Definition: merger.hh:186
Dune::FieldVector< ctype, grid1Dim > Grid1Coords
the local coordinate type for the grid1 coordinates
Definition: merger.hh:100
unsigned int parents(unsigned int idx) const
Definition: merger.hh:148
unsigned int parent(unsigned int idx, unsigned int parId=0) const
get index of grid-n's parent simplex for given merged grid simplex
Definition: merger.hh:159
unsigned int counter
Counts the number of times the computeIntersection method has been called.
Definition: merger.hh:195