1 | /* |
2 | * metis_util_unit_test.hpp |
3 | * |
4 | * Created on: Dec 21, 2014 |
5 | * Author: i-bird |
6 | */ |
7 | |
8 | #ifndef METIS_UTIL_UNIT_TEST_HPP_ |
9 | #define METIS_UTIL_UNIT_TEST_HPP_ |
10 | |
11 | #include "Graph/CartesianGraphFactory.hpp" |
12 | #include "Graph/map_graph.hpp" |
13 | #include "metis_util.hpp" |
14 | |
15 | #undef GS_SIZE |
16 | #define GS_SIZE 8 |
17 | |
18 | /*! |
19 | * |
20 | * Test node |
21 | * |
22 | */ |
23 | |
24 | BOOST_AUTO_TEST_SUITE( Metis_test ) |
25 | |
26 | BOOST_AUTO_TEST_CASE( Metis_test_use) |
27 | { |
28 | Vcluster<> & v_cl = create_vcluster(); |
29 | |
30 | if (v_cl.getProcessingUnits() != 3) |
31 | return; |
32 | |
33 | if (v_cl.getProcessUnitID() != 0) |
34 | return; |
35 | |
36 | CartesianGraphFactory<3,Graph_CSR<nm_v<3>,nm_e>> g_factory; |
37 | CartesianGraphFactory<3,Graph_CSR<nm_part_v,nm_part_e>> g_factory_part; |
38 | |
39 | // Cartesian grid |
40 | size_t sz[3] = {GS_SIZE,GS_SIZE,GS_SIZE}; |
41 | |
42 | // Box |
43 | Box<3,float> box({0.0,0.0,0.0},{1.0,1.0,1.0}); |
44 | |
45 | // Boundary conditions, non periodic |
46 | size_t bc[] = {NON_PERIODIC,NON_PERIODIC,NON_PERIODIC}; |
47 | |
48 | // Graph to decompose |
49 | Graph_CSR<nm_v<3>,nm_e> g = g_factory.construct<nm_e::communication,NO_VERTEX_ID,float,2,0>(sz,box,bc); |
50 | |
51 | // Processor graph |
52 | Graph_CSR<nm_part_v,nm_part_e> gp = g_factory_part.construct<NO_EDGE,NO_VERTEX_ID,float,2>(sz,box,bc); |
53 | |
54 | // Convert the graph to metis |
55 | |
56 | Metis<Graph_CSR<nm_v<3>,nm_e>> met(g,8); |
57 | |
58 | // decompose |
59 | |
60 | met.decompose<nm_part_v::id>(gp); |
61 | met.decompose<nm_v_proc_id>(); |
62 | |
63 | // Write the VTK file |
64 | |
65 | VTKWriter<Graph_CSR<nm_part_v,nm_part_e>,VTK_GRAPH> vtk(gp); |
66 | vtk.write("vtk_metis_util_gp.vtk" ); |
67 | |
68 | VTKWriter<Graph_CSR<nm_v<3>,nm_e>,VTK_GRAPH> vtk2(g); |
69 | vtk2.write("vtk_metis_util_g.vtk" ); |
70 | |
71 | // check that match |
72 | |
73 | #ifdef HAVE_OSX |
74 | bool test = compare("vtk_metis_util_gp.vtk" ,"src/Decomposition/Distribution/test_data/vtk_metis_util_gp_osx_test.vtk" ); |
75 | bool test2 = compare("vtk_metis_util_g.vtk" ,"src/Decomposition/Distribution/test_data/vtk_metis_util_g_osx_test.vtk" ); |
76 | #else |
77 | bool test = compare("vtk_metis_util_gp.vtk" ,"src/Decomposition/Distribution/test_data/vtk_metis_util_gp_test.vtk" ); |
78 | bool test2 = compare("vtk_metis_util_g.vtk" ,"src/Decomposition/Distribution/test_data/vtk_metis_util_g_test.vtk" ); |
79 | #endif |
80 | |
81 | BOOST_REQUIRE_EQUAL(true,test); |
82 | BOOST_REQUIRE_EQUAL(true,test2); |
83 | } |
84 | |
85 | BOOST_AUTO_TEST_SUITE_END() |
86 | |
87 | #endif |
88 | |