43 #include "Ifpack_ConfigDefs.h"
44 #include "Ifpack_Partitioner.h"
45 #include "Ifpack_OverlappingPartitioner.h"
46 #include "Ifpack_GreedyPartitioner.h"
47 #include "Ifpack_Graph.h"
49 #include "Epetra_Comm.h"
50 #include "Epetra_BlockMap.h"
51 #include "Epetra_Map.h"
52 #include "Epetra_CrsGraph.h"
53 #include "Teuchos_ParameterList.hpp"
69 ElementsPerPart[i] = div;
70 if (i < mod) ElementsPerPart[i]++;
81 int CurrentPartition = 0;
88 NumEntries, &Indices[0]);
90 if (NumEntries <= 1) {
99 std::vector<int> ThisLevel(1);
100 ThisLevel[0] = RootNode_;
116 while (ThisLevel.size()) {
118 std::vector<int> NextLevel;
120 for (
unsigned int i = 0 ; i < ThisLevel.size() ; ++i) {
122 int CurrentNode = ThisLevel[i];
124 NumEntries, &Indices[0]);
125 IFPACK_CHK_ERR(ierr);
130 for (
int j = 0 ; j < NumEntries ; ++j) {
132 int NextNode = Indices[j];
139 ++Count[CurrentPartition];
141 NextLevel.push_back(NextNode);
147 if (Count[CurrentPartition] >= ElementsPerPart[CurrentPartition])
152 for (
unsigned int i = 0 ; i < NextLevel.size() ; ++i)
153 ThisLevel.push_back(NextLevel[i]);
155 if (ThisLevel.size() == 0 && (TotalCount !=
NumMyRows())) {
157 for (
int i = 0 ; i <
NumMyRows() ; i++) {
159 ThisLevel.push_back(i);
virtual int ExtractMyRowCopy(int MyRow, int LenOfIndices, int &NumIndices, int *Indices) const =0
Extracts a copy of input local row.
int MaxNumEntries() const
Returns the max number of local entries in a row.
int ComputePartitions()
Computes the partitions. Returns 0 if successful.
int NumMyRows() const
Returns the number of local rows.
std::vector< int > Partition_
Partition_[i] contains the ID of non-overlapping part it belongs to.
const Ifpack_Graph * Graph_
Reference to the graph to be partitioned.
int NumLocalParts_
Number of local subgraphs.
int NumLocalParts() const
Returns the number of computed local partitions.