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>
12 template <
class ctype,
int gr
id1Dim,
int gr
id2Dim,
int dimworld>
18 template <
class ctype,
int gr
id1Dim,
int gr
id2Dim,
int dimworld,
int n>
19 struct MergerGridPolicy;
21 template <
class ctype,
int gr
id1Dim,
int gr
id2Dim,
int dimworld>
22 struct MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, 0>
27 typedef Dune::FieldVector<ctype, grid1Dim> GridCoords;
30 unsigned int parents(
const Parent & m,
unsigned int idx)
32 return m.grid1Parents(idx);
36 unsigned int parent(
const Parent & m,
unsigned int idx,
unsigned int parId = 0)
38 return m.grid1Parent(idx, parId);
42 GridCoords
parentLocal(
const Parent & m,
unsigned int idx,
unsigned int corner,
unsigned int parId = 0)
44 return m.grid1ParentLocal(idx, corner, parId);
49 template <
class ctype,
int gr
id1Dim,
int gr
id2Dim,
int dimworld>
50 struct MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, 1>
55 typedef Dune::FieldVector<ctype, grid2Dim> GridCoords;
58 unsigned int parents(
const Parent & m,
unsigned int idx)
60 return m.grid2Parents(idx);
64 unsigned int parent(
const Parent & m,
unsigned int idx,
unsigned int parId = 0)
66 return m.grid2Parent(idx, parId);
70 GridCoords
parentLocal(
const Parent & m,
unsigned int idx,
unsigned int corner,
unsigned int parId = 0)
72 return m.grid2ParentLocal(idx, corner, parId);
86 template <
class ctype,
int gr
id1Dim,
int gr
id2Dim,
int dimworld>
91 friend struct MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, 0>;
92 friend struct MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, 1>;
109 typedef MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, n>
Policy;
111 typedef typename MergerGridPolicy<ctype, grid1Dim, grid2Dim, dimworld, n>::GridCoords
Coords;
127 virtual void build(
const std::vector<Dune::FieldVector<ctype,dimworld> >& grid1_coords,
128 const std::vector<unsigned int>& grid1_elements,
129 const std::vector<Dune::GeometryType>& grid1_element_types,
130 const std::vector<Dune::FieldVector<ctype,dimworld> >& grid2_coords,
131 const std::vector<unsigned int>& grid2_elements,
132 const std::vector<Dune::GeometryType>& grid2_element_types) = 0;
139 virtual void clear() = 0;
145 unsigned int parents(
unsigned int idx)
const {
146 return GridTraits<n>::Policy::parents(*
this, idx);
156 unsigned int parent(
unsigned int idx,
unsigned int parId = 0)
const
158 return GridTraits<n>::Policy::parent(*
this, idx, parId);
171 return GridTraits<n>::Policy::simplexRefined(*
this, idx, indices);
183 typename GridTraits<n>::Coords
parentLocal(
unsigned int idx,
unsigned int corner,
unsigned int parId = 0)
const
185 return GridTraits<n>::Policy::parentLocal(*
this, idx, corner, parId);
197 virtual unsigned int grid1Parents(
unsigned int idx)
const = 0;
199 virtual unsigned int grid2Parents(
unsigned int idx)
const = 0;
206 virtual unsigned int grid1Parent(
unsigned int idx,
unsigned int parId = 0)
const = 0;
213 virtual unsigned int grid2Parent(
unsigned int idx,
unsigned int parId = 0)
const = 0;
222 virtual Grid1Coords grid1ParentLocal(
unsigned int idx,
unsigned int corner,
unsigned int parId = 0)
const = 0;
231 virtual Grid2Coords grid2ParentLocal(
unsigned int idx,
unsigned int corner,
unsigned int parId = 0)
const = 0;
Definition: merger.hh:106
Dune::FieldVector< ctype, grid2Dim > Grid2Coords
the local coordinate type for the grid2 coordinates
Definition: merger.hh:100
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:156
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:183
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:169
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
unsigned int parents(unsigned int idx) const
Definition: merger.hh:145
MergerGridPolicy< ctype, grid1Dim, grid2Dim, dimworld, n > Policy
the policy class for this grid number
Definition: merger.hh:109
Abstract base for all classes that take extracted grids and build sets of intersections.
Definition: merger.hh:13
unsigned int counter
Counts the number of times the computeIntersection method has been called.
Definition: merger.hh:192
MergerGridPolicy< ctype, grid1Dim, grid2Dim, dimworld, n >::GridCoords Coords
the local coordinate type for the grid-n coordinates
Definition: merger.hh:111
Dune::FieldVector< ctype, dimworld > WorldCoords
the coordinate type used in this interface
Definition: merger.hh:103
Dune::FieldVector< ctype, grid1Dim > Grid1Coords
the local coordinate type for the grid1 coordinates
Definition: merger.hh:97
virtual unsigned int nSimplices() const =0
get the number of simplices in the merged grid The indices are then in 0..nSimplices()-1 ...