PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
MetisUtilities.hpp
Go to the documentation of this file.
1// _LICENSE_HEADER_
2//
3// Copyright (C) 2019 - 2025.
4// Terms register on the GPL-3.0 license.
5//
6// This file can be redistributed and/or modified under the license terms.
7//
8// See top level LICENSE file for more details.
9//
10// This file can be used citing references in CITATION.cff file.
11
12#ifndef __METIS_UTILITIES_H
13#define __METIS_UTILITIES_H
14
15#include "Eigen/Eigen"
16#include "IMeshDAO.hpp"
17#include <vector>
18
19namespace Gedim
20{
22{
23 public:
25 {
26 enum struct PartitionTypes
27 {
28 Unknown = -1,
29 CutBalancing = 0,
30 VolBalancing = 1
31 };
32
34 {
35 Default = -1, // METIS_CTYPE_SHEM
38 };
39
41 {
42 Default = -1, // METIS_IPTYPE_METISRB
48 };
49
51 {
52 Default = -1, // METIS_RTYPE_GREEDY
57 };
58
59 enum struct DebugLevels
60 {
61 None = -1,
62 METIS_DBG_INFO = 1,
63 METIS_DBG_TIME = 2,
66 METIS_DBG_IPART = 16,
69 METIS_DBG_CONNINFO = 128,
71 METIS_DBG_MEMORY = 2048
72 };
73
79 unsigned int NumberOfParts = 0;
80 unsigned int NumberRefinementIterations = 10;
82 bool CompressGraph = false;
84 int RandomSeed = -1;
85 unsigned int MasterWeight = 100;
86 };
87
89 {
91 {
92 std::vector<unsigned int> Rows;
93 std::vector<unsigned int> Cols;
94 };
95
97 std::vector<bool> EdgesConstrained;
98 std::vector<unsigned int> NodesWeight = {};
99 std::vector<unsigned int> EdgesWeight = {};
100 };
101
103 {
104 std::vector<unsigned int> EdgesMeshCellIndex;
106 };
107
108 public:
111
113 const IMeshDAO &mesh,
114 const std::vector<unsigned int> &cell3DsWeight = {},
115 const std::vector<bool> &cell2DsConstrained = {},
116 const Eigen::SparseMatrix<unsigned int> &networkEdgesWeight = Eigen::SparseMatrix<unsigned int>()) const;
117 MetisUtilities::MeshToNetwork Mesh2DToDualGraph(
118 const IMeshDAO &mesh,
119 const std::vector<unsigned int> &cell2DsWeight = {},
120 const std::vector<bool> &cell1DsConstrained = {},
121 const Eigen::SparseMatrix<unsigned int> &networkEdgesWeight = Eigen::SparseMatrix<unsigned int>()) const;
122 MetisUtilities::MetisNetwork MeshToGraph(const unsigned int &numVertices,
123 const Eigen::MatrixXi &edges,
124 const bool &undirectEdges,
125 const std::vector<unsigned int> &verticesWeight = {},
126 const std::vector<unsigned int> &edgesWeight = {}) const;
127
128 MetisNetwork::MetisAdjacency GraphAdjacencyToMetisAdjacency(const std::vector<std::vector<unsigned int>> &graphAdjacency) const;
129 std::vector<std::vector<unsigned int>> MetisAdjacencyToGraphAdjacency(const MetisNetwork::MetisAdjacency &metisAdjacency) const;
130
131 std::vector<unsigned int> NetworkPartition(const NetworkPartitionOptions &options, const MetisNetwork &network) const;
132
133 std::vector<unsigned int> PartitionCheckConstraints(const MetisNetwork &network, const std::vector<unsigned int> &partitions) const;
134 std::vector<unsigned int> PartitionCheckConnectedComponents(const MetisNetwork &network,
135 const std::vector<unsigned int> &partitions) const;
136};
137} // namespace Gedim
138
139#endif // __METIS_UTILITIES_H
Eigen column vector.
Definition Eigen_Array.hpp:23
The IMeshDAO (mesh data access object) class to read and write mesh data.
Definition IMeshDAO.hpp:24
Definition MetisUtilities.hpp:22
MetisUtilities::MetisNetwork MeshToGraph(const unsigned int &numVertices, const Eigen::MatrixXi &edges, const bool &undirectEdges, const std::vector< unsigned int > &verticesWeight={}, const std::vector< unsigned int > &edgesWeight={}) const
Definition MetisUtilities.cpp:130
MetisUtilities::MeshToNetwork Mesh3DToDualGraph(const IMeshDAO &mesh, const std::vector< unsigned int > &cell3DsWeight={}, const std::vector< bool > &cell2DsConstrained={}, const Eigen::SparseMatrix< unsigned int > &networkEdgesWeight=Eigen::SparseMatrix< unsigned int >()) const
Definition MetisUtilities.cpp:33
std::vector< unsigned int > PartitionCheckConstraints(const MetisNetwork &network, const std::vector< unsigned int > &partitions) const
Definition MetisUtilities.cpp:563
~MetisUtilities()
Definition MetisUtilities.cpp:29
std::vector< unsigned int > NetworkPartition(const NetworkPartitionOptions &options, const MetisNetwork &network) const
Definition MetisUtilities.cpp:328
std::vector< std::vector< unsigned int > > MetisAdjacencyToGraphAdjacency(const MetisNetwork::MetisAdjacency &metisAdjacency) const
Definition MetisUtilities.cpp:215
MetisNetwork::MetisAdjacency GraphAdjacencyToMetisAdjacency(const std::vector< std::vector< unsigned int > > &graphAdjacency) const
Definition MetisUtilities.cpp:192
std::vector< unsigned int > PartitionCheckConnectedComponents(const MetisNetwork &network, const std::vector< unsigned int > &partitions) const
Definition MetisUtilities.cpp:595
MetisUtilities()
Definition MetisUtilities.cpp:26
MetisUtilities::MeshToNetwork Mesh2DToDualGraph(const IMeshDAO &mesh, const std::vector< unsigned int > &cell2DsWeight={}, const std::vector< bool > &cell1DsConstrained={}, const Eigen::SparseMatrix< unsigned int > &networkEdgesWeight=Eigen::SparseMatrix< unsigned int >()) const
Definition MetisUtilities.cpp:231
Definition Eigen_Array.cpp:22
Definition MetisUtilities.hpp:103
std::vector< unsigned int > EdgesMeshCellIndex
Definition MetisUtilities.hpp:104
MetisNetwork Network
Definition MetisUtilities.hpp:105
std::vector< unsigned int > Cols
Definition MetisUtilities.hpp:93
std::vector< unsigned int > Rows
Definition MetisUtilities.hpp:92
Definition MetisUtilities.hpp:89
MetisAdjacency Adjacency
Definition MetisUtilities.hpp:96
std::vector< unsigned int > NodesWeight
Definition MetisUtilities.hpp:98
std::vector< unsigned int > EdgesWeight
Definition MetisUtilities.hpp:99
std::vector< bool > EdgesConstrained
Definition MetisUtilities.hpp:97
Definition MetisUtilities.hpp:25
CoarseningSchemes CoarseningSchema
Definition MetisUtilities.hpp:75
bool CompressGraph
Definition MetisUtilities.hpp:82
RefinementSchemes RefinementSchema
Definition MetisUtilities.hpp:76
InitialPartitioningSchemes
Definition MetisUtilities.hpp:41
CoarseningSchemes
Definition MetisUtilities.hpp:34
DebugLevels DebugLevel
Definition MetisUtilities.hpp:78
bool MinimizeConnectivity
Definition MetisUtilities.hpp:83
unsigned int NumberRefinementIterations
Definition MetisUtilities.hpp:80
RefinementSchemes
Definition MetisUtilities.hpp:51
PartitionTypes PartitionType
Definition MetisUtilities.hpp:74
InitialPartitioningSchemes InitialPartitioningSchema
Definition MetisUtilities.hpp:77
int RandomSeed
Definition MetisUtilities.hpp:84
DebugLevels
Definition MetisUtilities.hpp:60
PartitionTypes
Definition MetisUtilities.hpp:27
unsigned int NumberOfParts
Definition MetisUtilities.hpp:79
bool ContigousPartitions
Definition MetisUtilities.hpp:81
unsigned int MasterWeight
0 de-activated; 100 activated totally
Definition MetisUtilities.hpp:85