5
using namespace dolfin;
7
void partition(Mesh& mesh, int num_part, int max_cells, char* filename,
8
void (partFunc(Graph&, int, int*)), char* plotname)
10
MeshFunction<dolfin::uint> parts;
11
int num_cells = mesh.numCells();
12
std::ofstream resultfile(filename);
13
resultfile << plotname << " with " << num_part << " partitions" << std::endl;
14
resultfile << "Cells " << "Seconds " << "Edgecut " << "Balance" << std::endl;
15
while(num_cells < max_cells)
18
parts.init(mesh, mesh.topology().dim());
23
std::cout << "\nPartitioning mesh with " << num_cells << " cells" << std::endl;
27
partFunc(graph, num_part, reinterpret_cast<int*>(parts.values()));
32
real runtime = time/runs;
33
int edgecut = GraphPartition::edgecut(graph, num_part, parts.values());
35
resultfile << num_cells << " " << runtime << " " << edgecut << std::endl;
36
std::cout << "Time to partition: " << runtime << std::endl;
37
std::cout << "Edge cut: " << edgecut << std::endl;
39
std::cout << "Refining mesh... " << std::endl;
41
num_cells = mesh.numCells();
46
int main(int argc, char* argv[])
50
std::cerr << "Usage: " << argv[0] <<
51
" <metis1|metis2|scotch> <meshfile> <num_part> <max_cells> <resultfile>\n";
55
char* partitioner = argv[1];
56
char* infilename = argv[2];
57
int num_part = atoi(argv[3]);
58
int max_cells = atoi(argv[4]);
59
char* outfilename = argv[5];
61
Mesh mesh(infilename);
62
if(strcmp(partitioner, "metis1") == 0)
64
std::cout << "Using Metis Kway to partition mesh into " << num_part << " partitions " << std::endl;
65
partition(mesh, num_part, max_cells, outfilename,
66
metisKwayPartitioning, "Metis Kway");
69
else if(strcmp(partitioner, "metis2") == 0)
71
std::cout << "Using Metis recursive to partition mesh into " << num_part << " partitions " << std::endl;
72
partition(mesh, num_part, max_cells, outfilename,
73
metisRecursivePartitioning, "Metis recursive");
76
else if(strcmp(partitioner, "scotch") == 0)
78
std::cout << "Using Scotch to partition mesh into " << num_part << " partitions " << std::endl;
79
partition(mesh, num_part, max_cells, outfilename,
80
scotchPartitioning, "Scotch");
85
std::cerr << "Usage: " << argv[0] <<
86
" <metis1|metis2|scotch> <meshfile> <num_part> <max_cells> <resultfile>\n";