From e5756fb2ff1f7f7b1d816948185ce3c50c90bbe6 Mon Sep 17 00:00:00 2001 From: Pietro Incardona <i-bird@localhost.localdomain> Date: Sat, 3 Sep 2016 20:07:32 +0200 Subject: [PATCH] Adding nnprcs test --- openfpm_data | 2 +- src/Decomposition/nn_processor_unit_test.hpp | 212 +++++++++++++++---- 2 files changed, 175 insertions(+), 39 deletions(-) diff --git a/openfpm_data b/openfpm_data index 360031739..a5ff72b52 160000 --- a/openfpm_data +++ b/openfpm_data @@ -1 +1 @@ -Subproject commit 360031739584423b20497b1364d2c3bcf26c5143 +Subproject commit a5ff72b524862871657f5769aa4d814c2486df0c diff --git a/src/Decomposition/nn_processor_unit_test.hpp b/src/Decomposition/nn_processor_unit_test.hpp index c9c76ce2e..bc904d7b9 100644 --- a/src/Decomposition/nn_processor_unit_test.hpp +++ b/src/Decomposition/nn_processor_unit_test.hpp @@ -89,7 +89,7 @@ BOOST_AUTO_TEST_CASE( nn_processor_np_test) nn_prcs<2,float> nnp(v_cl); nnp.create(box_nn_processor, sub_domains); - BOOST_REQUIRE_EQUAL(nnp.getNNProcessors(),3); + BOOST_REQUIRE_EQUAL(nnp.getNNProcessors(),3ul); if (v_cl.getProcessUnitID() == 0) { @@ -201,67 +201,203 @@ BOOST_AUTO_TEST_CASE( nn_processor_np_test) BOOST_AUTO_TEST_CASE( nn_processor_box_periodic_test) { - constexpr unsigned int dim = 3; - typedef float T; + // Vcluster + Vcluster & v_cl = create_vcluster(); - Box<dim,T> domain({0.0,0.0,0.0},{1.0,1.0,1.0}); - Point<dim,T> middle({0.5,0.5,0.5}); + /*! + * + * We test this situation + * + * \verbatim + +-------+-------+ + | | | + | 0 | 1 | + | | | + | | | + +---------------+ + | | | + | 2 | 3 | + | | | + | | | + +-------+-------+ - const size_t bc[dim] = {PERIODIC,PERIODIC,PERIODIC}; + * \endverbatim + * + * + */ - // Vcluster - Vcluster & v_cl = create_vcluster(); + if (v_cl.getProcessingUnits() != 4) + return; - Ghost<dim,T> ghost(0.01); + Box<2,float> domain({0.0,0.0},{1.0,1.0}); + const size_t bc[2] = {PERIODIC,PERIODIC}; - ////////////// + Ghost<2,float> ghost(0.01); - nn_prcs<dim,T> nnp(v_cl); + openfpm::vector<openfpm::vector<long unsigned int>> box_nn_processor; + openfpm::vector<SpaceBox<2,float>> sub_domains; -/* std::unordered_map<size_t, N_box<dim,T>> & nnp_sub = nnp.get_nn_processor_subdomains(); - openfpm::vector<size_t> & nnp_np = nnp.get_nn_processors(); + create_decomposition2x2(box_nn_processor,sub_domains); - // we add the boxes + ////////////// - size_t tot_n = 0; - HyperCube<dim> hyp; + nn_prcs<2,float> nnp(v_cl); + nnp.create(box_nn_processor, sub_domains); + + // check that nn_processor contain the correct boxes - for (long int i = dim-1 ; i >= 0 ; i--) + nnp.applyBC(domain,ghost,bc); + + if (v_cl.getProcessUnitID() == 0) { - std::vector<comb<dim>> cmbs = hyp.getCombinations_R(i); + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(1).size(),4); + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(2).size(),4); + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(3).size(),4); - for (size_t j = 0 ; j < cmbs.size() ; j++) - { - // Create a fake processor number - size_t prc = i; + openfpm::vector<Box<2,float>> bv; - Point<dim,T> p1 = (middle * toPoint<dim,T>::convert(cmbs[j]) + middle)* 1.0/1.1; - Point<dim,T> p2 = p1 + Point<dim,T>({0.1,0.1,0.1}) * 1.0/1.1; + bv.add(Box<2,float>({0.5,0},{1.0,0.5})); + bv.add(Box<2,float>({-0.5,0.0},{0.0,0.5})); + bv.add(Box<2,float>({0.5,1.0},{1.0,1.5})); + bv.add(Box<2,float>({-0.5,1.0},{0.0,1.5})); - Box<dim,T> bx(p1,p2); - nnp_sub[prc+1].id = prc; - nnp_sub[prc+1].bx.add(bx); + bool ret = nnp.getNearSubdomains(1) == bv; + BOOST_REQUIRE_EQUAL(ret,true); - tot_n++; - } + bv.clear(); + + bv.add(Box<2,float>({0.0,0.5},{0.5,1.0})); + bv.add(Box<2,float>({1.0,0.5},{1.5,1.0})); + bv.add(Box<2,float>({0.0,-0.5},{0.5,0.0})); + bv.add(Box<2,float>({1.0,-0.5},{1.5,0.0})); + + ret = nnp.getNearSubdomains(2) == bv; + BOOST_REQUIRE_EQUAL(ret,true); + + bv.clear(); + + bv.add(Box<2,float>({0.5,0.5},{1.0,1.0})); + bv.add(Box<2,float>({-0.5,0.5},{0.0,1.0})); + bv.add(Box<2,float>({0.5,-0.5},{1.0,0.0})); + bv.add(Box<2,float>({-0.5,-0.5},{0.0,0.0})); + + ret = nnp.getNearSubdomains(3) == bv; + BOOST_REQUIRE_EQUAL(ret,true); } + else if (v_cl.getProcessUnitID() == 1) + { + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(0).size(),4); + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(2).size(),4); + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(3).size(),4); + + openfpm::vector<Box<2,float>> bv; + + bv.add(Box<2,float>({0.0,0},{0.5,0.5})); + bv.add(Box<2,float>({1.0,0.0},{1.5,0.5})); + bv.add(Box<2,float>({0.0,1.0},{0.5,1.5})); + bv.add(Box<2,float>({1.0,1.0},{1.5,1.5})); + + bool ret = nnp.getNearSubdomains(0) == bv; + BOOST_REQUIRE_EQUAL(ret,true); - for (size_t i = 0; i < dim; i++) + bv.clear(); + + bv.add(Box<2,float>({0.0,0.5},{0.5,1.0})); + bv.add(Box<2,float>({1.0,0.5},{1.5,1.0})); + bv.add(Box<2,float>({0.0,-0.5},{0.5,0.0})); + bv.add(Box<2,float>({1.0,-0.5},{1.5,0.0})); + + ret = nnp.getNearSubdomains(2) == bv; + BOOST_REQUIRE_EQUAL(ret,true); + + bv.clear(); + + bv.add(Box<2,float>({0.5,0.5},{1.0,1.0})); + bv.add(Box<2,float>({-0.5,0.5},{0.0,1.0})); + bv.add(Box<2,float>({0.5,-0.5},{1.0,0.0})); + bv.add(Box<2,float>({-0.5,-0.5},{0.0,0.0})); + + ret = nnp.getNearSubdomains(3) == bv; + BOOST_REQUIRE_EQUAL(ret,true); + } + else if (v_cl.getProcessUnitID() == 2) { - nnp_np.add(i+1); - }*/ + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(0).size(),4); + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(1).size(),4); + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(3).size(),4); - // check that nn_processor contain the correct boxes + openfpm::vector<Box<2,float>> bv; - nnp.applyBC(domain,ghost,bc); + bv.add(Box<2,float>({0.0,0},{0.5,0.5})); + bv.add(Box<2,float>({1.0,0.0},{1.5,0.5})); + bv.add(Box<2,float>({0.0,1.0},{0.5,1.5})); + bv.add(Box<2,float>({1.0,1.0},{1.5,1.5})); - if (v_cl.getProcessUnitID() == 0) + bool ret = nnp.getNearSubdomains(0) == bv; + BOOST_REQUIRE_EQUAL(ret,true); + + bv.clear(); + + bv.add(Box<2,float>({0.5,0},{1.0,0.5})); + bv.add(Box<2,float>({-0.5,0.0},{0.0,0.5})); + bv.add(Box<2,float>({0.5,1.0},{1.0,1.5})); + bv.add(Box<2,float>({-0.5,1.0},{0.0,1.5})); + + ret = nnp.getNearSubdomains(1) == bv; + BOOST_REQUIRE_EQUAL(ret,true); + + bv.clear(); + + bv.add(Box<2,float>({0.5,0.5},{1.0,1.0})); + bv.add(Box<2,float>({-0.5,0.5},{0.0,1.0})); + bv.add(Box<2,float>({0.5,-0.5},{1.0,0.0})); + bv.add(Box<2,float>({-0.5,-0.5},{0.0,0.0})); + + ret = nnp.getNearSubdomains(3) == bv; + BOOST_REQUIRE_EQUAL(ret,true); + } + else if (v_cl.getProcessUnitID() == 3) { + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(0).size(),4); + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(1).size(),4); + BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(2).size(),4); + + openfpm::vector<Box<2,float>> bv; + + bv.add(Box<2,float>({0.0,0},{0.5,0.5})); + bv.add(Box<2,float>({1.0,0.0},{1.5,0.5})); + bv.add(Box<2,float>({0.0,1.0},{0.5,1.5})); + bv.add(Box<2,float>({1.0,1.0},{1.5,1.5})); + + bool ret = nnp.getNearSubdomains(0) == bv; + BOOST_REQUIRE_EQUAL(ret,true); + + bv.clear(); + + bv.add(Box<2,float>({0.5,0},{1.0,0.5})); + bv.add(Box<2,float>({-0.5,0.0},{0.0,0.5})); + bv.add(Box<2,float>({0.5,1.0},{1.0,1.5})); + bv.add(Box<2,float>({-0.5,1.0},{0.0,1.5})); + + ret = nnp.getNearSubdomains(1) == bv; + BOOST_REQUIRE_EQUAL(ret,true); + + bv.clear(); + + bv.add(Box<2,float>({0.0,0.5},{0.5,1.0})); + bv.add(Box<2,float>({1.0,0.5},{1.5,1.0})); + bv.add(Box<2,float>({0.0,-0.5},{0.5,0.0})); + bv.add(Box<2,float>({1.0,-0.5},{1.5,0.0})); + +/* for (size_t i = 0 ; i < nnp.getNearSubdomains(2).size() ; i++) + { + Box<2,float> b = nnp.getNearSubdomains(2).get(i); + std::cout << "BOX: " << b.toString() << std::endl; + }*/ + ret = nnp.getNearSubdomains(2) == bv; + BOOST_REQUIRE_EQUAL(ret,true); } -// BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(nnp.IDtoProc(2)).size(),12ul); -// BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(nnp.IDtoProc(0)).size(),8ul*8ul); -// BOOST_REQUIRE_EQUAL(nnp.getNearSubdomains(nnp.IDtoProc(1)).size(),12ul*4ul); } BOOST_AUTO_TEST_SUITE_END() -- GitLab