Finite Element Domain Decomposition Library
FEDDLib
Loading...
Searching...
No Matches
FEDD::MeshPartitioner< SC, LO, GO, NO > Class Template Reference

Public Types

typedef Domain< SC, LO, GO, NO > Domain_Type
 
typedef Domain_Type::DomainPtr_Type DomainPtr_Type
 
typedef Domain_Type::CommConstPtr_Type CommConstPtr_Type
 
typedef std::vector< DomainPtr_Type > DomainPtrArray_Type
 
typedef Domain_Type::MeshUnstr_Type MeshUnstr_Type
 
typedef Domain_Type::MeshUnstrPtr_Type MeshUnstrPtr_Type
 
typedef Domain_Type::MapConstPtr_Type MapConstPtr_Type
 
typedef Elements Elements_Type
 
typedef Teuchos::RCP< Elements_TypeElementsPtr_Type
 
typedef EdgeElements EdgeElements_Type
 
typedef Teuchos::RCP< EdgeElements_TypeEdgeElementsPtr_Type
 
typedef std::vector< idx_t > vec_idx_Type
 

Public Member Functions

 MeshPartitioner (DomainPtrArray_Type domains, ParameterListPtr_Type pL, std::string feType, int dimension)
 
void readAndPartition (int volumeID=10)
 Main Function of partitioner. Called with volume ID in order to set in case it is not equal to ten. Always make sure the volumeID corresponds to the highest given flag.
 
void setEdgesToSurfaces (int meshNumber)
 Only used in 3D to set the edges as subelements to surfaces.
 
void setSurfacesToElements (int meshNumber)
 Setting surfaces, i.e. edges in 2D and triangles in 3D, as subelements to the corresponding elements.
 
void partitionMesh (MeshUnstrPtr_Type &mesh, int meshNumber)
 Main function, that reads and partions and distributes the mesh to the different processors. Here all necessary maps and lists are created.
 
void buildEdgeListParallel (MeshUnstrPtr_Type mesh, ElementsPtr_Type elementsGlobal)
 Making the edge list parallel.
 
void buildEdgeList (MeshUnstrPtr_Type mesh, ElementsPtr_Type &elementsGlobal)
 Building the edge list.
 
void setLocalEdgeIndices (vec2D_int_Type &localEdgeIndices)
 Setting surfaces, i.e. edges in 2D and triangles in 3D, as subelements to the corresponding elements.
 
void determineRanks ()
 
void determineRanksFromNumberRanks (vec_int_Type &ranks)
 
void determineRanksFromFractions (vec_int_Type &fractions)
 
void makeContinuousElements (ElementsPtr_Type elements, vec_idx_Type &eind_vec, vec_idx_Type &eptr_vec)
 
void findAndSetSurfacesPartitioned (vec2D_int_Type &surfElements_vec, vec2D_int_Type &surfElements_vec_unsorted, vec_int_Type &surfElementsFlag_vec, FiniteElement &element, vec2D_int_Type &permutation, vec_GO_Type &linearSurfacePartitionOffset, int globalElID)
 Finding the surfaces corresponding to a specfic element and then setting subelements.
 
void setLocalSurfaceEdgeIndices (vec2D_int_Type &localSurfaceEdgeIndices, int edgesElementOrder)
 Setting local IDs to the edges in 3D case with respect to the local numbering of elements.
 
void findAndSetSurfaceEdges (vec2D_int_Type &edgeElements_vec, vec_int_Type &edgeElementsFlag_vec, FiniteElement &element, vec2D_int_Type &permutation, MapConstPtr_Type mapRepeated)
 Only relevant in 3D. Finding the edges corresponding to the specfic element and then setting as subsubelement.
 
int searchInSurfaces (vec2D_int_Type &surfaces, vec_int_Type searchSurface)
 Searching on particular surface in a surface list.
 
void setLocalSurfaceIndices (vec2D_int_Type &localSurfaceIndices, int surfaceElementOrder)
 

Member Function Documentation

◆ findAndSetSurfacesPartitioned()

template<class SC, class LO, class GO, class NO>
void FEDD::MeshPartitioner< SC, LO, GO, NO >::findAndSetSurfacesPartitioned ( vec2D_int_Type & surfElements_vec,
vec2D_int_Type & surfElements_vec_unsorted,
vec_int_Type & surfElementsFlag_vec,
FiniteElement & element,
vec2D_int_Type & permutation,
vec_GO_Type & linearSurfacePartitionOffset,
int globalElID )

Finding the surfaces corresponding to a specfic element and then setting subelements.

Function that sets edges (2D) or surfaces(3D) to the corresponding element. It determines for the specific element 'element' if it has a surface with a non volumeflag that can be set as subelement

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setEdgesToSurfaces()

template<class SC, class LO, class GO, class NO>
void FEDD::MeshPartitioner< SC, LO, GO, NO >::setEdgesToSurfaces ( int meshNumber)

Only used in 3D to set the edges as subelements to surfaces.

Function that (addionally) adds edges as subelements in the 3D case. This is relevant when the .mesh file also contains edge information in 3D. Otherwise edges are not set as subelements in 3D.

Here is the call graph for this function:

◆ setSurfacesToElements()

template<class SC, class LO, class GO, class NO>
void FEDD::MeshPartitioner< SC, LO, GO, NO >::setSurfacesToElements ( int meshNumber)

Setting surfaces, i.e. edges in 2D and triangles in 3D, as subelements to the corresponding elements.

Adding surfaces as subelements to the corresponding elements. This adresses surfaces in 3D or edges in 2D. If in the 3D case edges are also part of the .mesh file, they will be added as subelements later.

Here is the call graph for this function:

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