dune-grid-glue  2.3.0
Classes | Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | List of all members
StandardMerge< T, grid1Dim, grid2Dim, dimworld > Class Template Referenceabstract

Common base class for many merger implementations: produce pairs of entities that may intersect. More...

#include <dune/grid-glue/merging/standardmerge.hh>

Inheritance diagram for StandardMerge< T, grid1Dim, grid2Dim, dimworld >:
Inheritance graph

Classes

struct  RemoteSimplicialIntersection
 

Public Types

typedef T ctype
 the numeric type used in this interface More...
 
typedef Merger< T, grid1Dim,
grid2Dim, dimworld >
::Grid1Coords 
Grid1Coords
 Type used for local coordinates on the grid1 side. More...
 
typedef Merger< T, grid1Dim,
grid2Dim, dimworld >
::Grid2Coords 
Grid2Coords
 Type used for local coordinates on the grid2 side. More...
 
typedef Dune::FieldVector< T,
dimworld > 
WorldCoords
 the coordinate type used in this interface More...
 

Public Member Functions

virtual void build (const std::vector< Dune::FieldVector< T, dimworld > > &grid1_Coords, const std::vector< unsigned int > &grid1_elements, const std::vector< Dune::GeometryType > &grid1_element_types, const std::vector< Dune::FieldVector< T, dimworld > > &grid2_coords, const std::vector< unsigned int > &grid2_elements, const std::vector< Dune::GeometryType > &grid2_element_types)
 builds the merged grid More...
 
unsigned int nSimplices () const
 get the number of simplices in the merged grid The indices are then in 0..nSimplices()-1 More...
 
void clear ()
 
unsigned int parents (unsigned int idx) const
 
unsigned int parent (unsigned int idx, unsigned int parId=0) const
 get index of grid-n's parent simplex for given merged grid simplex More...
 
bool simplexRefined (unsigned int idx, std::vector< unsigned int > &indices) const
 get the merged grid simplices refining a given grid-n simplex More...
 
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's index can be obtained via "parent<n>") More...
 

Public Attributes

unsigned int counter
 Counts the number of times the computeIntersection method has been called. More...
 

Protected Member Functions

 StandardMerge ()
 
virtual void computeIntersections (const Dune::GeometryType &grid1ElementType, const std::vector< Dune::FieldVector< T, dimworld > > &grid1ElementCorners, std::bitset<(1<< grid1Dim)> &neighborIntersects1, unsigned int grid1Index, const Dune::GeometryType &grid2ElementType, const std::vector< Dune::FieldVector< T, dimworld > > &grid2ElementCorners, std::bitset<(1<< grid2Dim)> &neighborIntersects2, unsigned int grid2Index, std::vector< RemoteSimplicialIntersection > &intersections)=0
 Compute the intersection between two overlapping elements. More...
 
bool computeIntersection (unsigned int candidate0, unsigned int candidate1, const std::vector< Dune::FieldVector< T, dimworld > > &grid1Coords, const std::vector< Dune::GeometryType > &grid1_element_types, std::bitset<(1<< grid1Dim)> &neighborIntersects1, const std::vector< Dune::FieldVector< T, dimworld > > &grid2Coords, const std::vector< Dune::GeometryType > &grid2_element_types, std::bitset<(1<< grid2Dim)> &neighborIntersects2, bool insert=true)
 Compute the intersection between two overlapping elements. More...
 

Protected Attributes

bool valid
 
std::vector
< RemoteSimplicialIntersection
intersections_
 The computed intersections. More...
 
std::vector< std::vector
< unsigned int > > 
grid1ElementCorners_
 Temporary internal data. More...
 
std::vector< std::vector
< unsigned int > > 
grid2ElementCorners_
 
std::vector< std::vector< int > > elementNeighbors1_
 
std::vector< std::vector< int > > elementNeighbors2_
 

Detailed Description

template<class T, int grid1Dim, int grid2Dim, int dimworld>
class StandardMerge< T, grid1Dim, grid2Dim, dimworld >

Common base class for many merger implementations: produce pairs of entities that may intersect.

Many merger algorithms consist of two parts: on the one hand there is a mechanism that produces pairs of elements that may intersect. On the other hand there is an algorithm that computes the intersection of two given elements. For the pairs-producing algorithm there appears to be a canonical choice, namely the algorithm by Gander and Japhet described in 'An Algorithm for Non-Matching Grid Projections with Linear Complexity, M.J. Gander and C. Japhet, Domain Decomposition Methods in Science and Engineering XVIII, pp. 185–192, Springer-Verlag, 2009.' This class implements this algorithm, calling a pure virtual function computeIntersection() to compute the intersection between two elements. Actual merger implementations can derive from this class and only implement computeIntersection().

Template Parameters
TThe type used for coordinates (assumed to be the same for both grids)
grid1DimDimension of the grid1 grid
grid2DimDimension of the grid2 grid
dimworldDimension of the world space where the coupling takes place

Member Typedef Documentation

template<class T, int grid1Dim, int grid2Dim, int dimworld>
typedef T StandardMerge< T, grid1Dim, grid2Dim, dimworld >::ctype

the numeric type used in this interface

template<class T, int grid1Dim, int grid2Dim, int dimworld>
typedef Merger<T,grid1Dim,grid2Dim,dimworld>::Grid1Coords StandardMerge< T, grid1Dim, grid2Dim, dimworld >::Grid1Coords

Type used for local coordinates on the grid1 side.

template<class T, int grid1Dim, int grid2Dim, int dimworld>
typedef Merger<T,grid1Dim,grid2Dim,dimworld>::Grid2Coords StandardMerge< T, grid1Dim, grid2Dim, dimworld >::Grid2Coords

Type used for local coordinates on the grid2 side.

template<class T, int grid1Dim, int grid2Dim, int dimworld>
typedef Dune::FieldVector<T, dimworld> StandardMerge< T, grid1Dim, grid2Dim, dimworld >::WorldCoords

the coordinate type used in this interface

Constructor & Destructor Documentation

template<class T, int grid1Dim, int grid2Dim, int dimworld>
StandardMerge< T, grid1Dim, grid2Dim, dimworld >::StandardMerge ( )
inlineprotected

Member Function Documentation

template<typename T, int grid1Dim, int grid2Dim, int dimworld>
void StandardMerge< T, grid1Dim, grid2Dim, dimworld >::build ( const std::vector< Dune::FieldVector< T, dimworld > > &  grid1_Coords,
const std::vector< unsigned int > &  grid1_elements,
const std::vector< Dune::GeometryType > &  grid1_element_types,
const std::vector< Dune::FieldVector< T, dimworld > > &  grid2_coords,
const std::vector< unsigned int > &  grid2_elements,
const std::vector< Dune::GeometryType > &  grid2_element_types 
)
virtual

builds the merged grid

Note that the indices are used consequently throughout the whole class interface just like they are introduced here.

Parameters
grid1_coordsthe grid1 vertices' coordinates ordered like e.g. in 3D x_0 y_0 z_0 x_1 y_1 ... y_(n-1) z_(n-1)
grid1_elementsarray with all grid1 elements represented as corner indices into grid1_coords
grid1_element_typesarray with the GeometryType of the elements listed grid1_elements
grid2_coordsthe grid2 vertices' coordinates ordered like e.g. in 3D x_0 y_0 z_0 x_1 y_1 ... y_(n-1) z_(n-1)
grid2_elementsjust like with the grid1_elements and grid1_coords
grid2_element_typesarray with the GeometryType of the elements listed grid2_elements

Implements Merger< T, grid1Dim, grid2Dim, dimworld >.

References StandardMerge< T, grid1Dim, grid2Dim, dimworld >::clear(), StandardMerge< T, grid1Dim, grid2Dim, dimworld >::computeIntersection(), Merger< T, grid1Dim, grid2Dim, dimworld >::counter, StandardMerge< T, grid1Dim, grid2Dim, dimworld >::elementNeighbors1_, StandardMerge< T, grid1Dim, grid2Dim, dimworld >::elementNeighbors2_, StandardMerge< T, grid1Dim, grid2Dim, dimworld >::grid1ElementCorners_, and StandardMerge< T, grid1Dim, grid2Dim, dimworld >::grid2ElementCorners_.

template<class T, int grid1Dim, int grid2Dim, int dimworld>
void StandardMerge< T, grid1Dim, grid2Dim, dimworld >::clear ( )
inlinevirtual
template<typename T, int grid1Dim, int grid2Dim, int dimworld>
bool StandardMerge< T, grid1Dim, grid2Dim, dimworld >::computeIntersection ( unsigned int  candidate0,
unsigned int  candidate1,
const std::vector< Dune::FieldVector< T, dimworld > > &  grid1Coords,
const std::vector< Dune::GeometryType > &  grid1_element_types,
std::bitset<(1<< grid1Dim)> &  neighborIntersects1,
const std::vector< Dune::FieldVector< T, dimworld > > &  grid2Coords,
const std::vector< Dune::GeometryType > &  grid2_element_types,
std::bitset<(1<< grid2Dim)> &  neighborIntersects2,
bool  insert = true 
)
protected

Compute the intersection between two overlapping elements.

Returns
true if at least one intersection point was found

References StandardMerge< T, grid1Dim, grid2Dim, dimworld >::computeIntersections().

Referenced by StandardMerge< T, grid1Dim, grid2Dim, dimworld >::build().

template<class T, int grid1Dim, int grid2Dim, int dimworld>
virtual void StandardMerge< T, grid1Dim, grid2Dim, dimworld >::computeIntersections ( const Dune::GeometryType &  grid1ElementType,
const std::vector< Dune::FieldVector< T, dimworld > > &  grid1ElementCorners,
std::bitset<(1<< grid1Dim)> &  neighborIntersects1,
unsigned int  grid1Index,
const Dune::GeometryType &  grid2ElementType,
const std::vector< Dune::FieldVector< T, dimworld > > &  grid2ElementCorners,
std::bitset<(1<< grid2Dim)> &  neighborIntersects2,
unsigned int  grid2Index,
std::vector< RemoteSimplicialIntersection > &  intersections 
)
protectedpure virtual

Compute the intersection between two overlapping elements.

The result is a set of simplices stored in the vector intersections.

Referenced by StandardMerge< T, grid1Dim, grid2Dim, dimworld >::computeIntersection().

template<typename T , int grid1Dim, int grid2Dim, int dimworld>
unsigned int StandardMerge< T, grid1Dim, grid2Dim, dimworld >::nSimplices ( ) const
inlinevirtual

get the number of simplices in the merged grid The indices are then in 0..nSimplices()-1

Implements Merger< T, grid1Dim, grid2Dim, dimworld >.

unsigned int Merger< T , grid1Dim, grid2Dim, dimworld >::parent ( unsigned int  idx,
unsigned int  parId = 0 
) const
inlineinherited

get index of grid-n's parent simplex for given merged grid simplex

Template Parameters
nspecify which grid
Parameters
idxindex of the merged grid simplex
Returns
index of the parent simplex
GridTraits<n>::Coords Merger< T , grid1Dim, grid2Dim, dimworld >::parentLocal ( unsigned int  idx,
unsigned int  corner,
unsigned int  parId = 0 
) const
inlineinherited

get the grid-n parent's simplex local coordinates for a particular merged grid simplex corner (parent's index can be obtained via "parent<n>")

Template Parameters
nspecify which grid
Parameters
idxthe index of the merged grid simplex
cornerthe index of the simplex' corner
Returns
local coordinates in grid-n grid1
unsigned int Merger< T , grid1Dim, grid2Dim, dimworld >::parents ( unsigned int  idx) const
inlineinherited

doc me

bool Merger< T , grid1Dim, grid2Dim, dimworld >::simplexRefined ( unsigned int  idx,
std::vector< unsigned int > &  indices 
) const
inlineinherited

get the merged grid simplices refining a given grid-n simplex

Template Parameters
nspecify which grid (grid1/grid2: 0/1)
Parameters
idxindex of grid-n simplex
indiceswill be resized first and then filled with the refining simplices
Returns
TRUE <=> given simplex could be matched and is part of the merged grid

Member Data Documentation

unsigned int Merger< T , grid1Dim, grid2Dim, dimworld >::counter
inherited

Counts the number of times the computeIntersection method has been called.

Used temporarily to speed up the implementation

Referenced by StandardMerge< T, grid1Dim, grid2Dim, dimworld >::build().

template<class T, int grid1Dim, int grid2Dim, int dimworld>
std::vector<std::vector<int> > StandardMerge< T, grid1Dim, grid2Dim, dimworld >::elementNeighbors1_
protected
template<class T, int grid1Dim, int grid2Dim, int dimworld>
std::vector<std::vector<int> > StandardMerge< T, grid1Dim, grid2Dim, dimworld >::elementNeighbors2_
protected
template<class T, int grid1Dim, int grid2Dim, int dimworld>
std::vector<std::vector<unsigned int> > StandardMerge< T, grid1Dim, grid2Dim, dimworld >::grid1ElementCorners_
protected

Temporary internal data.

Referenced by StandardMerge< T, grid1Dim, grid2Dim, dimworld >::build().

template<class T, int grid1Dim, int grid2Dim, int dimworld>
std::vector<std::vector<unsigned int> > StandardMerge< T, grid1Dim, grid2Dim, dimworld >::grid2ElementCorners_
protected
template<class T, int grid1Dim, int grid2Dim, int dimworld>
std::vector<RemoteSimplicialIntersection> StandardMerge< T, grid1Dim, grid2Dim, dimworld >::intersections_
protected

The computed intersections.

template<class T, int grid1Dim, int grid2Dim, int dimworld>
bool StandardMerge< T, grid1Dim, grid2Dim, dimworld >::valid
protected

The documentation for this class was generated from the following file: