diff --git a/openfpm_data b/openfpm_data index 8deb38dbbfc01236406144fdb68b04f08231f66f..faeef943191e3ffbf6607c7f7c2b04eaa702dcb9 160000 --- a/openfpm_data +++ b/openfpm_data @@ -1 +1 @@ -Subproject commit 8deb38dbbfc01236406144fdb68b04f08231f66f +Subproject commit faeef943191e3ffbf6607c7f7c2b04eaa702dcb9 diff --git a/openfpm_numerics b/openfpm_numerics index 2a805e31cd0bc1e5fe89c8f6a03ba22b1691ad2d..dd445d74febaa67c37256178662b205733521031 160000 --- a/openfpm_numerics +++ b/openfpm_numerics @@ -1 +1 @@ -Subproject commit 2a805e31cd0bc1e5fe89c8f6a03ba22b1691ad2d +Subproject commit dd445d74febaa67c37256178662b205733521031 diff --git a/src/Vector/vector_dist_MP_unit_tests.hpp b/src/Vector/vector_dist_MP_unit_tests.hpp index 4f797a7786a7e93363c21d74e58da6e48ccc9671..6d4ff07adac61c1e8661d38d9d4910e5ea7ffcea 100644 --- a/src/Vector/vector_dist_MP_unit_tests.hpp +++ b/src/Vector/vector_dist_MP_unit_tests.hpp @@ -128,7 +128,7 @@ BOOST_AUTO_TEST_CASE( vector_dist_multiphase_cell_list_test ) auto CL_all = createCellListM<2>(phases,r_cut); // This create a Verlet-list between phase 0 and all the other phases - auto NNver0_all = createVerletM<2>(phases.get(0),phases,CL_all,r_cut); + auto NNver0_all = createVerletM<2>(0,phases.get(0),phases,CL_all,r_cut); it = phases.get(0).getDomainIterator(); @@ -227,6 +227,24 @@ BOOST_AUTO_TEST_CASE( vector_dist_multiphase_cell_list_sym_test ) for (size_t i = 0 ; i < 4 ; i++) { phases.get(i).map(); + } + + // randomize a little the particles + + for (size_t p = 0 ; p < phases.size() ; p++) + { + openfpm::vector<Point<3,float>> vt; + + for (size_t j = 0 ; j < phases.get(p).size_local() ; j++) + { + vt.add(phases.get(p).getPos((j + p*133) % phases.get(p).size_local())); + } + phases.get(p).getPosVector().swap(vt); + } + + // Sync all phases + for (size_t i = 0 ; i < 4 ; i++) + { phases.get(i).ghost_get<>(); } @@ -305,15 +323,15 @@ BOOST_AUTO_TEST_CASE( vector_dist_multiphase_cell_list_sym_test ) // This function create an "Empty" Multiphase Cell List auto CL_all = createCellListSymM<2>(phases,r_cut); - typedef decltype(createVerletSymM<2>(phases.get(0),phases,CL_all,r_cut)) verlet_type; + typedef decltype(createVerletSymM<2>(0,phases.get(0),phases,CL_all,r_cut)) verlet_type; verlet_type NNver_all[4]; // This create a Verlet-list between phase all phases to all the other phases - NNver_all[0] = createVerletSymM<2>(phases.get(0),phases,CL_all,r_cut); - NNver_all[1] = createVerletSymM<2>(phases.get(1),phases,CL_all,r_cut); - NNver_all[2] = createVerletSymM<2>(phases.get(2),phases,CL_all,r_cut); - NNver_all[3] = createVerletSymM<2>(phases.get(3),phases,CL_all,r_cut); + NNver_all[0] = createVerletSymM<2>(0,phases.get(0),phases,CL_all,r_cut); + NNver_all[1] = createVerletSymM<2>(1,phases.get(1),phases,CL_all,r_cut); + NNver_all[2] = createVerletSymM<2>(2,phases.get(2),phases,CL_all,r_cut); + NNver_all[3] = createVerletSymM<2>(3,phases.get(3),phases,CL_all,r_cut); // all phases to all phases @@ -360,6 +378,14 @@ BOOST_AUTO_TEST_CASE( vector_dist_multiphase_cell_list_sym_test ) ret &= phases.get(2).getProp<0>(p) == 32; ret &= phases.get(3).getProp<0>(p) == 32; + if (ret == false) + { + std::cout << phases.get(0).getProp<0>(p) << std::endl; + std::cout << phases.get(1).getProp<0>(p) << std::endl; + std::cout << phases.get(2).getProp<0>(p) << std::endl; + std::cout << phases.get(3).getProp<0>(p) << std::endl; + } + ++it; } diff --git a/src/Vector/vector_dist_multiphase_functions.hpp b/src/Vector/vector_dist_multiphase_functions.hpp index 543eb68e0faba13173210154155210abf581a4b7..e34eedf6db2b145fdeb4352aa05881b6620154c3 100644 --- a/src/Vector/vector_dist_multiphase_functions.hpp +++ b/src/Vector/vector_dist_multiphase_functions.hpp @@ -20,7 +20,7 @@ template<typename Vector, typename CL, typename T> VerletList<Vector::dims,typen return ver; } -template<unsigned int sh_byte, typename Vector , typename Vector1,typename CL, typename T> VerletListM<Vector::dims,typename Vector::stype,sh_byte,CL,shift<Vector::dims,typename Vector::stype>> createVerletM(Vector & v, Vector1 & phases, CL & cl, T r_cut) +template<unsigned int sh_byte, typename Vector , typename Vector1,typename CL, typename T> VerletListM<Vector::dims,typename Vector::stype,sh_byte,CL,shift<Vector::dims,typename Vector::stype>> createVerletM(size_t pp, Vector & v, Vector1 & phases, CL & cl, T r_cut) { VerletListM<Vector::dims,typename Vector::stype,sh_byte,CL,shift<Vector::dims,typename Vector::stype>> ver; @@ -29,7 +29,7 @@ template<unsigned int sh_byte, typename Vector , typename Vector1,typename CL, t for (size_t i = 0 ; i < phases.size() ; i++) v_phases.add(pos_v<Vector::dims,typename Vector::stype>(phases.get(i).getPosVector())); - ver.Initialize(cl,r_cut,v.getPosVector(),v_phases,v.size_local()); + ver.Initialize(cl,pp,r_cut,v.getPosVector(),v_phases,v.size_local()); return ver; } @@ -79,7 +79,7 @@ template<typename Vector,typename CL, typename T> VerletList<Vector::dims,typena return ver; } -template<unsigned int sh_byte, typename Vector, typename Vector1 ,typename CL, typename T> VerletListM<Vector::dims,typename Vector::stype,sh_byte,CL,shift<Vector::dims,typename Vector::stype>> createVerletSymM(Vector & v, Vector1 & phases, CL & cl, T r_cut) +template<unsigned int sh_byte, typename Vector, typename Vector1 ,typename CL, typename T> VerletListM<Vector::dims,typename Vector::stype,sh_byte,CL,shift<Vector::dims,typename Vector::stype>> createVerletSymM(size_t pp, Vector & v, Vector1 & phases, CL & cl, T r_cut) { VerletListM<Vector::dims,typename Vector::stype,sh_byte,CL,shift<Vector::dims,typename Vector::stype>> ver; @@ -88,7 +88,7 @@ template<unsigned int sh_byte, typename Vector, typename Vector1 ,typename CL, t for (size_t i = 0 ; i < phases.size() ; i++) v_phases.add(pos_v<Vector::dims,typename Vector::stype>(phases.get(i).getPosVector())); - ver.Initialize(cl,r_cut,v.getPosVector(),v_phases,v.size_local(),VL_SYMMETRIC); + ver.Initialize(cl,pp,r_cut,v.getPosVector(),v_phases,v.size_local(),VL_SYMMETRIC); return ver; }