diff --git a/src/.deps/pdata-main.Po b/src/.deps/pdata-main.Po index 8e5c0d408d14cae764f2af8461a83b20ddd07d16..9e9db061c5ee3ac8fb935bdf13bcaca219fa7471 100644 --- a/src/.deps/pdata-main.Po +++ b/src/.deps/pdata-main.Po @@ -1309,11 +1309,6 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \ ../../OpenFPM_vcluster/src/MPI_wrapper/MPI_IallreduceW.hpp \ ../../OpenFPM_vcluster/src/MPI_wrapper/MPI_IrecvW.hpp \ ../../OpenFPM_vcluster/src/MPI_wrapper/MPI_IsendW.hpp \ - ../../OpenFPM_data/src/util/check_no_pointers.hpp \ - ../../OpenFPM_data/src/util/common.hpp \ - ../../OpenFPM_data/src/util/util_debug.hpp \ - /usr/include/c++/4.9.2/cxxabi.h \ - /usr/include/c++/4.9.2/x86_64-redhat-linux/bits/cxxabi_tweaks.h \ ../../OpenFPM_vcluster/src/util/Vcluster_log.hpp \ ../../OpenFPM_data/src/timer.hpp \ ../../OpenFPM_data/src/Space/SpaceBox.hpp \ @@ -1327,7 +1322,10 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \ ../../OpenFPM_data/src/util/object_util.hpp \ ../../OpenFPM_data/src/util/object_creator.hpp \ ../../OpenFPM_data/src/util/util_debug.hpp \ + /usr/include/c++/4.9.2/cxxabi.h \ + /usr/include/c++/4.9.2/x86_64-redhat-linux/bits/cxxabi_tweaks.h \ ../../OpenFPM_data/src/util/check_no_pointers.hpp \ + ../../OpenFPM_data/src/util/common.hpp \ ../../OpenFPM_data/src/util/object_s_di.hpp \ ../../OpenFPM_data/src/util/object_si_d.hpp \ ../../OpenFPM_devices/src/memory/ExtPreAlloc.hpp \ @@ -1402,6 +1400,7 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \ ../../OpenFPM_vcluster/src/Packer.hpp \ ../../OpenFPM_data/src/Grid/util.hpp \ ../../OpenFPM_data/src/Vector/util.hpp \ + ../../OpenFPM_data/src/util/util_debug.hpp \ ../../OpenFPM_vcluster/src/Pack_stat.hpp \ ../../OpenFPM_vcluster/src/Pack_selector.hpp \ ../../OpenFPM_vcluster/src/Unpacker.hpp \ @@ -4324,16 +4323,6 @@ Grid/grid_dist_id.hpp: ../../OpenFPM_vcluster/src/MPI_wrapper/MPI_IsendW.hpp: -../../OpenFPM_data/src/util/check_no_pointers.hpp: - -../../OpenFPM_data/src/util/common.hpp: - -../../OpenFPM_data/src/util/util_debug.hpp: - -/usr/include/c++/4.9.2/cxxabi.h: - -/usr/include/c++/4.9.2/x86_64-redhat-linux/bits/cxxabi_tweaks.h: - ../../OpenFPM_vcluster/src/util/Vcluster_log.hpp: ../../OpenFPM_data/src/timer.hpp: @@ -4362,8 +4351,14 @@ Grid/grid_dist_key.hpp: ../../OpenFPM_data/src/util/util_debug.hpp: +/usr/include/c++/4.9.2/cxxabi.h: + +/usr/include/c++/4.9.2/x86_64-redhat-linux/bits/cxxabi_tweaks.h: + ../../OpenFPM_data/src/util/check_no_pointers.hpp: +../../OpenFPM_data/src/util/common.hpp: + ../../OpenFPM_data/src/util/object_s_di.hpp: ../../OpenFPM_data/src/util/object_si_d.hpp: @@ -4512,6 +4507,8 @@ Grid/grid_dist_key.hpp: ../../OpenFPM_data/src/Vector/util.hpp: +../../OpenFPM_data/src/util/util_debug.hpp: + ../../OpenFPM_vcluster/src/Pack_stat.hpp: ../../OpenFPM_vcluster/src/Pack_selector.hpp: diff --git a/src/Decomposition/CartDecomposition.hpp b/src/Decomposition/CartDecomposition.hpp index fba3abea11785a4b73cf780edaed46e62dbabc55..a45e69ee40f67383d283de582238348f717f21e1 100644 --- a/src/Decomposition/CartDecomposition.hpp +++ b/src/Decomposition/CartDecomposition.hpp @@ -357,6 +357,7 @@ private: sub_domains.add(sub_d); ss_box = sub_d; + ss_box -= ss_box.getP1(); bbox = sub_d; } @@ -414,10 +415,10 @@ private: // Get the processor bounding Box ::Box<dim,T> bound = getProcessorBounds(); - // calculate the sub-divisions (0.5 for rounding error) + // calculate the sub-divisions size_t div[dim]; for (size_t i = 0 ; i < dim ; i++) - div[i] = (size_t)((bound.getHigh(i) - bound.getLow(i)) / unit.getHigh(i) + 0.5); + div[i] = (size_t)((bound.getHigh(i) - bound.getLow(i)) / unit.getHigh(i)); // Create shift Point<dim,T> orig; diff --git a/src/Grid/grid_dist_id_unit_test.hpp b/src/Grid/grid_dist_id_unit_test.hpp index 61a3e4b361a6ae1464c65563a9dd4f632371c21d..aae75c5ee3719a774f2d497ad41ccf711aec5124 100644 --- a/src/Grid/grid_dist_id_unit_test.hpp +++ b/src/Grid/grid_dist_id_unit_test.hpp @@ -92,8 +92,12 @@ BOOST_AUTO_TEST_CASE( grid_dist_id_domain_grid_unit_converter_test) void Test2D(const Box<2,float> & domain, long int k) { + long int big_step = k / 30; + big_step = (big_step == 0)?1:big_step; + long int small_step = 1; + // 2D test - for ( ; k >= 2 ; k-= (k >= 66)?33:1 ) + for ( ; k >= 2 ; k-= (k > 2*big_step)?big_step:small_step ) { BOOST_TEST_CHECKPOINT( "Testing 2D grid k=" << k ); @@ -117,42 +121,6 @@ void Test2D(const Box<2,float> & domain, long int k) bool val = g_dist.getDecomposition().check_consistency(); BOOST_REQUIRE_EQUAL(val,true); - /////////////// DEBUG ///////////////////// - - // get the decomposition - auto & dec = g_dist.getDecomposition(); - - Vcluster & v_cl = *global_v_cluster; - - // check the consistency of the decomposition - val = dec.check_consistency(); - BOOST_REQUIRE_EQUAL(val,true); - - // for each local volume - // Get the number of local grid needed - size_t n_grid = dec.getNLocalHyperCube(); - - size_t vol = 0; - - // Allocate the grids - for (size_t i = 0 ; i < n_grid ; i++) - { - // Get the local hyper-cube - SpaceBox<2,float> sub = dec.getLocalHyperCube(i); - - Box<2,size_t> g_box = g_dist.getCellDecomposer().convertDomainSpaceIntoGridUnits(sub); - - vol += g_box.getVolumeKey(); - } - - v_cl.reduce(vol); - v_cl.execute(); - - BOOST_REQUIRE_EQUAL(vol,k*k); - - ///////////////////////////////////// - - // Grid sm grid_sm<2,void> info(sz); @@ -228,8 +196,12 @@ void Test2D(const Box<2,float> & domain, long int k) void Test3D(const Box<3,float> & domain, long int k) { - // 3D test - for ( ; k >= 2 ; k-= (k >= 33)?5:1 ) + long int big_step = k / 30; + big_step = (big_step == 0)?1:big_step; + long int small_step = 1; + + // 2D test + for ( ; k >= 2 ; k-= (k > 2*big_step)?big_step:small_step ) { BOOST_TEST_CHECKPOINT( "Testing 3D grid k=" << k ); if (global_v_cluster->getProcessUnitID() == 0) @@ -323,8 +295,6 @@ void Test3D(const Box<3,float> & domain, long int k) ++domg; } - - } } @@ -338,8 +308,8 @@ BOOST_AUTO_TEST_CASE( grid_dist_id_iterator_test_use) long int k = 1024*1024*global_v_cluster->getProcessingUnits(); k = std::pow(k, 1/2.); - Test2D(domain,k); + Test2D(domain,k); // Domain Box<3,float> domain3({0.0,0.0,0.0},{1.0,1.0,1.0}); diff --git a/src/Makefile b/src/Makefile index 769d13a2033147540b45cbfdf1fb301410b2819f..26346125c1cf143605135b319bc18ec0a465dbd2 100644 --- a/src/Makefile +++ b/src/Makefile @@ -216,8 +216,8 @@ LIBS = LTLIBOBJS = MAKEINFO = ${SHELL} /home/i-bird/Desktop/MOSAIC/OpenFPM_project/OpenFPM_pdata/missing makeinfo METIS = -METIS_INCLUDE = -I/home/i-bird/METIS/include -METIS_LIB = -L/home/i-bird/METIS/lib +METIS_INCLUDE = -I/home/i-bird/Desktop/MOSAIC/OpenFPM_project/metis_install//include +METIS_LIB = -L/home/i-bird/Desktop/MOSAIC/OpenFPM_project/metis_install//lib MKDIR_P = /usr/bin/mkdir -p NVCC = /usr/local/cuda/bin/nvcc NVCCFLAGS = -O3 diff --git a/src/gargabe.hpp b/src/gargabe.hpp index 8d29593419553bbce8ec7238afee472e7a611e9b..2677089871668fc790e737c517125aa44761abcf 100644 --- a/src/gargabe.hpp +++ b/src/gargabe.hpp @@ -125,4 +125,44 @@ #endif + + + /////////////// DEBUG ///////////////////// + + // get the decomposition + auto & dec = g_dist.getDecomposition(); + + Vcluster & v_cl = *global_v_cluster; + + // check the consistency of the decomposition + val = dec.check_consistency(); + BOOST_REQUIRE_EQUAL(val,true); + + // for each local volume + // Get the number of local grid needed + size_t n_grid = dec.getNLocalHyperCube(); + + size_t vol = 0; + + openfpm::vector<Box<2,size_t>> v_b; + + // Allocate the grids + for (size_t i = 0 ; i < n_grid ; i++) + { + // Get the local hyper-cube + SpaceBox<2,float> sub = dec.getLocalHyperCube(i); + + Box<2,size_t> g_box = g_dist.getCellDecomposer().convertDomainSpaceIntoGridUnits(sub); + v_b.add(g_box); + + vol += g_box.getVolumeKey(); + } + + v_cl.reduce(vol); + v_cl.execute(); + + BOOST_REQUIRE_EQUAL(vol,k*k); + + ///////////////////////////////////// + #endif /* GARGABE_HPP_ */ diff --git a/src/metis_util.hpp b/src/metis_util.hpp index 7bef3b6ae78f6f3ca4b49c080a3d7d81d6f54d0e..5fae0a30654b78364f59984487cae01ef2ff2cb7 100644 --- a/src/metis_util.hpp +++ b/src/metis_util.hpp @@ -254,7 +254,7 @@ public: if (Mg.nparts[0] != 1) { // Decompose - METIS_PartGraphKway(Mg.nvtxs,Mg.ncon,Mg.xadj,Mg.adjncy,Mg.vwgt,Mg.vsize,Mg.adjwgt, + METIS_PartGraphRecursive(Mg.nvtxs,Mg.ncon,Mg.xadj,Mg.adjncy,Mg.vwgt,Mg.vsize,Mg.adjwgt, Mg.nparts,Mg.tpwgts,Mg.ubvec,Mg.options,Mg.objval,Mg.part); // vertex id