| 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 |  |