dune-grid-glue 2.10
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | List of all members
Dune::GridGlue::ContactMerge< dimworld, T > Class Template Referenceabstract

Merge two codimension-1 surfaces that may be a positive distance apart. More...

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

Inheritance diagram for Dune::GridGlue::ContactMerge< dimworld, T >:
Inheritance graph

Public Types

enum  ProjectionType { OUTER_NORMAL , CLOSEST_POINT }
 Type of the projection, closest point or outer normal projection. More...
 
typedef T ctype
 the numeric type used in this interface
 
typedef Dune::FieldVector< T, dimworld > WorldCoords
 the coordinate type used in this interface
 
typedef Dune::FieldVector< T, dim > LocalCoords
 the coordinate type used in this interface
 
using Grid1Coords = typename Base::Grid1Coords
 Type used for local coordinates on the grid1 side.
 
using Grid2Coords = typename Base::Grid2Coords
 Type used for local coordinates on the grid2 side.
 
using IntersectionList = typename Base::IntersectionList
 

Public Member Functions

 ContactMerge (const T allowedOverlap=T(0), std::function< WorldCoords(WorldCoords)> domainDirections=nullptr, std::function< WorldCoords(WorldCoords)> targetDirections=nullptr, ProjectionType type=OUTER_NORMAL)
 Construct merger given overlap and possible projection directions.
 
 ContactMerge (const T allowedOverlap, ProjectionType type)
 Construct merger given overlap and type of the projection.
 
void setSurfaceDirections (std::function< WorldCoords(WorldCoords)> domainDirections, std::function< WorldCoords(WorldCoords)> targetDirections)
 Set surface direction functions.
 
void setOverlap (T overlap)
 Set the allowed overlap of the surfaces.
 
getOverlap () const
 Get the allowed overlap of the surfaces.
 
void minNormalAngle (T angle)
 set minimum angle in radians between normals at x and Φ(x)
 
minNormalAngle () const
 get minimum angle in radians between normals at x and Φ(x)
 
void clear () override
 
std::shared_ptr< IntersectionListintersectionList () const final
 
void enableFallback (bool fallback)
 
void enableBruteForce (bool bruteForce)
 
unsigned int nSimplices () const
 get the number of simplices in the merged grid The indices are then in 0..nSimplices()-1
 
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
 
auto 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>")
 

Public Attributes

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

Protected Types

typedef StandardMerge< T, dimworld-1, dimworld-1, dimworld >::SimplicialIntersection SimplicialIntersection
 
using IntersectionListProvider = SimplicialIntersectionListProvider< grid1Dim, grid2Dim >
 The computed intersections.
 
using RemoteSimplicialIntersection = SimplicialIntersection
 

Protected Member Functions

void build (const std::vector< Dune::FieldVector< T, dimworld > > &grid1Coords, const std::vector< unsigned int > &grid1Elements, const std::vector< Dune::GeometryType > &grid1ElementTypes, const std::vector< Dune::FieldVector< T, dimworld > > &grid2Coords, const std::vector< unsigned int > &grid2Elements, const std::vector< Dune::GeometryType > &grid2ElementTypes) override
 
void computeCyclicOrder (const std::vector< std::array< LocalCoords, 2 > > &polytopeCorners, const LocalCoords &center, std::vector< int > &ordering) const
 Order the corners of the intersection polytope in cyclic order.
 
void setupNodalDirections (const std::vector< WorldCoords > &coords1, const std::vector< unsigned int > &elements1, const std::vector< Dune::GeometryType > &elementTypes1, const std::vector< WorldCoords > &coords2, const std::vector< unsigned int > &elements2, const std::vector< Dune::GeometryType > &elementTypes2)
 Setup the direction vectors containing the directions for each vertex.
 
void computeOuterNormalField (const std::vector< WorldCoords > &coords, const std::vector< unsigned int > &elements, const std::vector< Dune::GeometryType > &elementTypes, std::vector< WorldCoords > &normals)
 If no direction field was specified compute the outer normal field.
 
void removeDoubles (std::vector< std::array< LocalCoords, 2 > > &polytopeCorners)
 Remove all multiples.
 
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< SimplicialIntersection > &intersections)=0
 Compute the intersection between two overlapping elements.
 
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.
 

Protected Attributes

bool valid = false
 
std::shared_ptr< IntersectionListProviderintersectionListProvider_
 
std::shared_ptr< IntersectionListintersectionList_
 
std::vector< std::vector< unsigned int > > grid1ElementCorners_
 Temporary internal data.
 
std::vector< std::vector< unsigned int > > grid2ElementCorners_
 
std::vector< std::vector< int > > elementNeighbors1_
 
std::vector< std::vector< int > > elementNeighbors2_
 

Detailed Description

template<int dimworld, typename T = double>
class Dune::GridGlue::ContactMerge< dimworld, T >

Merge two codimension-1 surfaces that may be a positive distance apart.

Template Parameters
dimworldDimension of the world coordinates.
TType used for coordinates

Member Typedef Documentation

◆ ctype

template<int dimworld, typename T = double>
typedef T Dune::GridGlue::ContactMerge< dimworld, T >::ctype

the numeric type used in this interface

◆ Grid1Coords

template<class T , int grid1Dim, int grid2Dim, int dimworld>
using Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::Grid1Coords = typename Base::Grid1Coords
inherited

Type used for local coordinates on the grid1 side.

◆ Grid2Coords

template<class T , int grid1Dim, int grid2Dim, int dimworld>
using Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::Grid2Coords = typename Base::Grid2Coords
inherited

Type used for local coordinates on the grid2 side.

◆ IntersectionList

template<class T , int grid1Dim, int grid2Dim, int dimworld>
using Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::IntersectionList = typename Base::IntersectionList
inherited

◆ IntersectionListProvider

template<class T , int grid1Dim, int grid2Dim, int dimworld>
using Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::IntersectionListProvider = SimplicialIntersectionListProvider<grid1Dim, grid2Dim>
protectedinherited

The computed intersections.

◆ LocalCoords

template<int dimworld, typename T = double>
typedef Dune::FieldVector<T, dim> Dune::GridGlue::ContactMerge< dimworld, T >::LocalCoords

the coordinate type used in this interface

◆ RemoteSimplicialIntersection

template<class T , int grid1Dim, int grid2Dim, int dimworld>
using Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::RemoteSimplicialIntersection = SimplicialIntersection
protectedinherited

◆ SimplicialIntersection

template<int dimworld, typename T = double>
typedef StandardMerge<T,dimworld-1,dimworld-1,dimworld>::SimplicialIntersection Dune::GridGlue::ContactMerge< dimworld, T >::SimplicialIntersection
protected

◆ WorldCoords

template<int dimworld, typename T = double>
typedef Dune::FieldVector<T, dimworld> Dune::GridGlue::ContactMerge< dimworld, T >::WorldCoords

the coordinate type used in this interface

Member Enumeration Documentation

◆ ProjectionType

template<int dimworld, typename T = double>
enum Dune::GridGlue::ContactMerge::ProjectionType

Type of the projection, closest point or outer normal projection.

Enumerator
OUTER_NORMAL 
CLOSEST_POINT 

Constructor & Destructor Documentation

◆ ContactMerge() [1/2]

template<int dimworld, typename T = double>
Dune::GridGlue::ContactMerge< dimworld, T >::ContactMerge ( const T  allowedOverlap = T(0),
std::function< WorldCoords(WorldCoords)>  domainDirections = nullptr,
std::function< WorldCoords(WorldCoords)>  targetDirections = nullptr,
ProjectionType  type = OUTER_NORMAL 
)
inline

Construct merger given overlap and possible projection directions.

Parameters
allowedOverlapAllowed overlap of the surfaces
domainDirectionsProjection direction field for the first surface that differ from the default normal field
targetDirectionsProjection direction field for the second surface that differ from the default normal field

◆ ContactMerge() [2/2]

template<int dimworld, typename T = double>
Dune::GridGlue::ContactMerge< dimworld, T >::ContactMerge ( const T  allowedOverlap,
ProjectionType  type 
)
inline

Construct merger given overlap and type of the projection.

Parameters
allowedOverlapAllowed overlap of the surfacs
typeType of the projection

Member Function Documentation

◆ build()

template<int dimworld, typename T = double>
void Dune::GridGlue::ContactMerge< dimworld, T >::build ( const std::vector< Dune::FieldVector< T, dimworld > > &  grid1Coords,
const std::vector< unsigned int > &  grid1Elements,
const std::vector< Dune::GeometryType > &  grid1ElementTypes,
const std::vector< Dune::FieldVector< T, dimworld > > &  grid2Coords,
const std::vector< unsigned int > &  grid2Elements,
const std::vector< Dune::GeometryType > &  grid2ElementTypes 
)
inlineoverrideprotectedvirtual

◆ clear()

template<class T , int grid1Dim, int grid2Dim, int dimworld>
void Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::clear ( )
inlineoverridevirtualinherited

◆ computeCyclicOrder()

template<int dimworld, typename T >
void Dune::GridGlue::ContactMerge< dimworld, T >::computeCyclicOrder ( const std::vector< std::array< LocalCoords, 2 > > &  polytopeCorners,
const LocalCoords center,
std::vector< int > &  ordering 
) const
protected

Order the corners of the intersection polytope in cyclic order.

◆ computeIntersection()

template<typename T , int grid1Dim, int grid2Dim, int dimworld>
bool Dune::GridGlue::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 
)
protectedinherited

Compute the intersection between two overlapping elements.

Returns
true if at least one intersection point was found

◆ computeIntersections()

template<class T , int grid1Dim, int grid2Dim, int dimworld>
virtual void Dune::GridGlue::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< SimplicialIntersection > &  intersections 
)
protectedpure virtualinherited

Compute the intersection between two overlapping elements.

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

◆ computeOuterNormalField()

template<int dimworld, typename T >
void Dune::GridGlue::ContactMerge< dimworld, T >::computeOuterNormalField ( const std::vector< WorldCoords > &  coords,
const std::vector< unsigned int > &  elements,
const std::vector< Dune::GeometryType > &  elementTypes,
std::vector< WorldCoords > &  normals 
)
protected

If no direction field was specified compute the outer normal field.

◆ enableBruteForce()

template<class T , int grid1Dim, int grid2Dim, int dimworld>
void Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::enableBruteForce ( bool  bruteForce)
inlineinherited

◆ enableFallback()

template<class T , int grid1Dim, int grid2Dim, int dimworld>
void Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::enableFallback ( bool  fallback)
inlineinherited

◆ getOverlap()

template<int dimworld, typename T = double>
T Dune::GridGlue::ContactMerge< dimworld, T >::getOverlap ( ) const
inline

Get the allowed overlap of the surfaces.

◆ intersectionList()

template<class T , int grid1Dim, int grid2Dim, int dimworld>
std::shared_ptr< IntersectionList > Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::intersectionList ( ) const
inlinefinalvirtualinherited

list of intersections

Note
only valid after build() was called

Implements Dune::GridGlue::Merger< T, grid1Dim, grid2Dim, dimworld >.

◆ minNormalAngle() [1/2]

template<int dimworld, typename T = double>
T Dune::GridGlue::ContactMerge< dimworld, T >::minNormalAngle ( ) const
inline

get minimum angle in radians between normals at x and Φ(x)

◆ minNormalAngle() [2/2]

template<int dimworld, typename T = double>
void Dune::GridGlue::ContactMerge< dimworld, T >::minNormalAngle ( angle)
inline

set minimum angle in radians between normals at x and Φ(x)

◆ nSimplices()

unsigned int Dune::GridGlue::Merger< T , grid1Dim, grid2Dim, dimworld >::nSimplices ( ) const
inlineinherited

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

◆ parent()

unsigned int Dune::GridGlue::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

◆ parentLocal()

auto Dune::GridGlue::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

◆ parents()

unsigned int Dune::GridGlue::Merger< T , grid1Dim, grid2Dim, dimworld >::parents ( unsigned int  idx) const
inlineinherited

doc me

◆ removeDoubles()

template<int dimworld, typename T >
void Dune::GridGlue::ContactMerge< dimworld, T >::removeDoubles ( std::vector< std::array< LocalCoords, 2 > > &  polytopeCorners)
protected

Remove all multiples.

◆ setOverlap()

template<int dimworld, typename T = double>
void Dune::GridGlue::ContactMerge< dimworld, T >::setOverlap ( overlap)
inline

Set the allowed overlap of the surfaces.

◆ setSurfaceDirections()

template<int dimworld, typename T = double>
void Dune::GridGlue::ContactMerge< dimworld, T >::setSurfaceDirections ( std::function< WorldCoords(WorldCoords)>  domainDirections,
std::function< WorldCoords(WorldCoords)>  targetDirections 
)
inline

Set surface direction functions.

The matching of the geometries offers the possibility to specify a function for the exact evaluation of domain surface normals. If no such function is specified (default) normals are interpolated.

Parameters
valuethe new function (or nullptr to unset the function)

◆ setupNodalDirections()

template<int dimworld, typename T >
void Dune::GridGlue::ContactMerge< dimworld, T >::setupNodalDirections ( const std::vector< WorldCoords > &  coords1,
const std::vector< unsigned int > &  elements1,
const std::vector< Dune::GeometryType > &  elementTypes1,
const std::vector< WorldCoords > &  coords2,
const std::vector< unsigned int > &  elements2,
const std::vector< Dune::GeometryType > &  elementTypes2 
)
protected

Setup the direction vectors containing the directions for each vertex.

Member Data Documentation

◆ counter

unsigned int Dune::GridGlue::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

◆ elementNeighbors1_

template<class T , int grid1Dim, int grid2Dim, int dimworld>
std::vector<std::vector<int> > Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::elementNeighbors1_
protectedinherited

◆ elementNeighbors2_

template<class T , int grid1Dim, int grid2Dim, int dimworld>
std::vector<std::vector<int> > Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::elementNeighbors2_
protectedinherited

◆ grid1ElementCorners_

template<class T , int grid1Dim, int grid2Dim, int dimworld>
std::vector<std::vector<unsigned int> > Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::grid1ElementCorners_
protectedinherited

Temporary internal data.

◆ grid2ElementCorners_

template<class T , int grid1Dim, int grid2Dim, int dimworld>
std::vector<std::vector<unsigned int> > Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::grid2ElementCorners_
protectedinherited

◆ intersectionList_

template<class T , int grid1Dim, int grid2Dim, int dimworld>
std::shared_ptr<IntersectionList> Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::intersectionList_
protectedinherited

◆ intersectionListProvider_

template<class T , int grid1Dim, int grid2Dim, int dimworld>
std::shared_ptr<IntersectionListProvider> Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::intersectionListProvider_
protectedinherited

◆ valid

template<class T , int grid1Dim, int grid2Dim, int dimworld>
bool Dune::GridGlue::StandardMerge< T, grid1Dim, grid2Dim, dimworld >::valid = false
protectedinherited

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