Flow123d  jenkins-Flow123d-linux-release-multijob-198
Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
Partitioning Class Reference

Class for the mesh partitioning. This should provide: More...

#include <partitioning.hh>

Collaboration diagram for Partitioning:
Collaboration graph
[legend]

Public Member Functions

 Partitioning (Mesh *mesh, Input::Record in)
 
const Distributionget_init_distr () const
 
const int * get_loc_part () const
 
shared_ptr< vector< int > > subdomain_id_field_data ()
 
void id_maps (int n_ids, int *id_4_old, Distribution *&new_ds, int *&id_4_loc, int *&new_4_id)
 
 ~Partitioning ()
 Destructor. More...
 

Static Public Member Functions

static void id_maps (int n_ids, int *id_4_old, const Distribution &old_ds, int *loc_part, Distribution *&new_ds, int *&id_4_loc, int *&new_4_id)
 

Static Public Attributes

static Input::Type::Selection graph_type_sel
 Input specification objects. More...
 
static Input::Type::Selection tool_sel
 
static Input::Type::Record input_type
 

Private Types

enum  PartitionTool { PETSc, METIS }
 
enum  PartitionGraphType { any_neighboring, any_weight_lower_dim_cuts, same_dimension_neighboring }
 

Private Member Functions

void make_element_connection_graph ()
 
void make_partition ()
 

Private Attributes

Meshmesh_
 The input mesh. More...
 
Input::Record in_
 Input Record accessor. More...
 
SparseGraphgraph_
 Graph used to partitioning the mesh. More...
 
int * loc_part_
 Partition numbers for local elements in original distribution of elements given be init_el_ds_. More...
 
Distributioninit_el_ds_
 Original distribution of elements. Depends on type of partitioner. More...
 
shared_ptr< vector< int > > seq_part_
 Sequential partitioning for output. More...
 

Detailed Description

Class for the mesh partitioning. This should provide:

Definition at line 29 of file partitioning.hh.

Member Enumeration Documentation

Types of weights used for element partitioning.

Enumerator
any_neighboring 

Add edge for any pair of neighboring elements.

any_weight_lower_dim_cuts 

Same as before and assign higher weight to cuts of lower dimension in order to make them stick to one face.

same_dimension_neighboring 

Add edge for any pair of neighboring elements of same dimension (bad for matrix multiply)

Definition at line 82 of file partitioning.hh.

Types of partitioning algorithms.

Enumerator
PETSc 

Use PETSc interface to various partitioing tools.

METIS 

Use direct interface to Metis.

Definition at line 74 of file partitioning.hh.

Constructor & Destructor Documentation

Partitioning::Partitioning ( Mesh mesh,
Input::Record  in 
)

Constructor. A pointer to the mesh and accessor to an input record have to be provided.

Definition at line 41 of file partitioning.cc.

Partitioning::~Partitioning ( )

Destructor.

Definition at line 49 of file partitioning.cc.

Member Function Documentation

const Distribution * Partitioning::get_init_distr ( ) const

Get initial distribution.

Definition at line 58 of file partitioning.cc.

Here is the caller graph for this function:

const int * Partitioning::get_loc_part ( ) const

Get local part of mesh partition.

Definition at line 65 of file partitioning.cc.

Here is the caller graph for this function:

void Partitioning::id_maps ( int  n_ids,
int *  id_4_old,
Distribution *&  new_ds,
int *&  id_4_loc,
int *&  new_4_id 
)

Obsolete see source file for doc.

Definition at line 201 of file partitioning.cc.

Here is the caller graph for this function:

void Partitioning::id_maps ( int  n_ids,
int *  id_4_old,
const Distribution old_ds,
int *  loc_part,
Distribution *&  new_ds,
int *&  id_4_loc,
int *&  new_4_id 
)
static

Old UGLY, PETSC dependent method for getting new numbering after partitioning.

n_ids - given maximal ID used in id_4_old id_4_old - given array of size init_el_ds_.size() - assign ID to an old index

new_ds - new distribution of elements according to current distributed partitioning loc_part_ id_4_loc - IDs for local elements in new distribution, has size new_ds->lsize() new_4_id - for given ID, the new index, -1 for unknown IDs

Definition at line 157 of file partitioning.cc.

void Partitioning::make_element_connection_graph ( )
private

Creates sparse parallel graph from the mesh (using algorithm given by the key "graph_type" of the input record accessor in_

Definition at line 72 of file partitioning.cc.

Here is the caller graph for this function:

void Partitioning::make_partition ( )
private

Creates sparse parallel graph from the mesh (using algorithm given by the key "graph_type" of the input record accessor in_) calls partitioning tool given by the key "tool" of the input record accessor in_) result is local part of the partitioning. Can be retrieved by get_loc_part().

Definition at line 122 of file partitioning.cc.

Here is the caller graph for this function:

shared_ptr< vector< int > > Partitioning::subdomain_id_field_data ( )

Creates and returns vector with element partitioning for output.

Definition at line 207 of file partitioning.cc.

Member Data Documentation

SparseGraph* Partitioning::graph_
private

Graph used to partitioning the mesh.

Definition at line 94 of file partitioning.hh.

IT::Selection Partitioning::graph_type_sel
static
Initial value:
=IT::Selection("GraphType",
"Different algorithms to make the sparse graph with weighted edges\n"
"from the multidimensional mesh. Main difference is dealing with \n"
"neighborings of elements of different dimension.")
.add_value(any_neighboring, "any_neighboring", "Add edge for any pair of neighboring elements.")
.add_value(any_weight_lower_dim_cuts, "any_wight_lower_dim_cuts", "Same as before and assign higher weight to cuts of lower dimension in order to make them stick to one face.")
.add_value(same_dimension_neighboring, "same_dimension_neghboring", "Add edge for any pair of neighboring elements of same dimension (bad for matrix multiply).")
.close()

Input specification objects.

Definition at line 33 of file partitioning.hh.

Input::Record Partitioning::in_
private

Input Record accessor.

Definition at line 91 of file partitioning.hh.

Distribution* Partitioning::init_el_ds_
private

Original distribution of elements. Depends on type of partitioner.

Definition at line 98 of file partitioning.hh.

IT::Record Partitioning::input_type
static
Initial value:
= IT::Record("Partition","Setting for various types of mesh partitioning." )
.declare_key("tool", Partitioning::tool_sel, IT::Default("METIS"), "Software package used for partitioning. See corresponding selection.")
.declare_key("graph_type", Partitioning::graph_type_sel, IT::Default("any_neighboring"), "Algorithm for generating graph and its weights from a multidimensional mesh.")
.allow_auto_conversion("graph_type")
.close()

Definition at line 35 of file partitioning.hh.

int* Partitioning::loc_part_
private

Partition numbers for local elements in original distribution of elements given be init_el_ds_.

Definition at line 96 of file partitioning.hh.

Mesh* Partitioning::mesh_
private

The input mesh.

Definition at line 89 of file partitioning.hh.

shared_ptr< vector<int> > Partitioning::seq_part_
private

Sequential partitioning for output.

Definition at line 100 of file partitioning.hh.

IT::Selection Partitioning::tool_sel
static
Initial value:
=IT::Selection("PartTool", "Select the partitioning tool to use.")
.add_value(PETSc, "PETSc", "Use PETSc interface to various partitioning tools.")
.add_value(METIS, "METIS", "Use direct interface to Metis.")
.close()

Definition at line 34 of file partitioning.hh.


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