diff --git a/src/Vector/vector_dist_cell_list_tests.hpp b/src/Vector/vector_dist_cell_list_tests.hpp index a7dda06b0fc10cdf81b0f8742632f9c1fdfc4ccf..7c65ee47764323483fd89abb3f258fa19aded1d5 100644 --- a/src/Vector/vector_dist_cell_list_tests.hpp +++ b/src/Vector/vector_dist_cell_list_tests.hpp @@ -784,171 +784,176 @@ BOOST_AUTO_TEST_CASE( vector_dist_symmetric_verlet_list_no_bottom ) typedef aggregate<size_t,size_t,size_t,openfpm::vector<point_and_gid>,openfpm::vector<point_and_gid>> part_prop; - // Distributed vector - vector_dist<3,float, part_prop > vd(k,box,bc,ghost,BIND_DEC_TO_GHOST); - vector_dist<3,float, part_prop > vd2(k,box,bc,ghost2,BIND_DEC_TO_GHOST); - size_t start = vd.init_size_accum(k); - - auto it = vd.getIterator(); - - while (it.isNext()) + // 3D test + for (size_t s = 0 ; s < 8 ; s++) { - auto key = it.get(); - vd.getPos(key)[0] = ud(eg); - vd.getPos(key)[1] = ud(eg); - vd.getPos(key)[2] = ud(eg); + // Distributed vector + vector_dist<3,float, part_prop > vd(k,box,bc,ghost,BIND_DEC_TO_GHOST); + vector_dist<3,float, part_prop > vd2(k,box,bc,ghost2,BIND_DEC_TO_GHOST); + size_t start = vd.init_size_accum(k); - vd2.getPos(key)[0] = vd.getPos(key)[0]; - vd2.getPos(key)[1] = vd.getPos(key)[1]; - vd2.getPos(key)[2] = vd.getPos(key)[2]; + auto it = vd.getIterator(); - // Fill some properties randomly + while (it.isNext()) + { + auto key = it.get(); - vd.getProp<0>(key) = 0; - vd.getProp<1>(key) = 0; - vd.getProp<2>(key) = key.getKey() + start; + vd.getPos(key)[0] = ud(eg); + vd.getPos(key)[1] = ud(eg); + vd.getPos(key)[2] = ud(eg); - vd2.getProp<0>(key) = 0; - vd2.getProp<1>(key) = 0; - vd2.getProp<2>(key) = key.getKey() + start; + vd2.getPos(key)[0] = vd.getPos(key)[0]; + vd2.getPos(key)[1] = vd.getPos(key)[1]; + vd2.getPos(key)[2] = vd.getPos(key)[2]; - ++it; - } + // Fill some properties randomly - vd.map(); - vd2.map(); + vd.getProp<0>(key) = 0; + vd.getProp<1>(key) = 0; + vd.getProp<2>(key) = key.getKey() + start; - // sync the ghost - vd.ghost_get<0,2>(); - vd2.ghost_get<0,2>(); + vd2.getProp<0>(key) = 0; + vd2.getProp<1>(key) = 0; + vd2.getProp<2>(key) = key.getKey() + start; - auto NN = vd.getVerlet(r_cut); - auto p_it = vd.getDomainIterator(); + ++it; + } - while (p_it.isNext()) - { - auto p = p_it.get(); + vd.map(); + vd2.map(); - Point<3,float> xp = vd.getPos(p); + // sync the ghost + vd.ghost_get<0,2>(); + vd2.ghost_get<0,2>(); - auto Np = NN.getNNIterator(p.getKey()); + auto NN = vd.getVerlet(r_cut); + auto p_it = vd.getDomainIterator(); - while (Np.isNext()) + while (p_it.isNext()) { - auto q = Np.get(); + auto p = p_it.get(); - if (p.getKey() == q) + Point<3,float> xp = vd.getPos(p); + + auto Np = NN.getNNIterator(p.getKey()); + + while (Np.isNext()) { - ++Np; - continue; - } + auto q = Np.get(); - // repulsive + if (p.getKey() == q) + { + ++Np; + continue; + } - Point<3,float> xq = vd.getPos(q); - Point<3,float> f = (xp - xq); + // repulsive - float distance = f.norm(); + Point<3,float> xq = vd.getPos(q); + Point<3,float> f = (xp - xq); - // Particle should be inside 2 * r_cut range + float distance = f.norm(); - if (distance < r_cut ) - { - vd.getProp<0>(p)++; - vd.getProp<3>(p).add(); - vd.getProp<3>(p).last().xq = xq; - vd.getProp<3>(p).last().id = vd.getProp<2>(q); + // Particle should be inside 2 * r_cut range + + if (distance < r_cut ) + { + vd.getProp<0>(p)++; + vd.getProp<3>(p).add(); + vd.getProp<3>(p).last().xq = xq; + vd.getProp<3>(p).last().id = vd.getProp<2>(q); + } + + ++Np; } - ++Np; + ++p_it; } - ++p_it; - } + // We now try symmetric Cell-list - // We now try symmetric Cell-list + auto NN2 = vd2.getVerletSym(r_cut); - auto NN2 = vd2.getVerletSym(r_cut); + auto p_it2 = vd2.getDomainIterator(); - auto p_it2 = vd2.getDomainIterator(); + while (p_it2.isNext()) + { + auto p = p_it2.get(); - while (p_it2.isNext()) - { - auto p = p_it2.get(); + Point<3,float> xp = vd2.getPos(p); - Point<3,float> xp = vd2.getPos(p); + auto Np = NN2.getNNIterator<NO_CHECK>(p.getKey()); - auto Np = NN2.getNNIterator<NO_CHECK>(p.getKey()); + while (Np.isNext()) + { + auto q = Np.get(); - while (Np.isNext()) - { - auto q = Np.get(); + if (p.getKey() == q) + { + ++Np; + continue; + } - if (p.getKey() == q) - { - ++Np; - continue; - } + // repulsive - // repulsive + Point<3,float> xq = vd2.getPos(q); + Point<3,float> f = (xp - xq); - Point<3,float> xq = vd2.getPos(q); - Point<3,float> f = (xp - xq); + float distance = f.norm(); - float distance = f.norm(); + // Particle should be inside r_cut range - // Particle should be inside r_cut range + if (distance < r_cut ) + { + vd2.getProp<1>(p)++; + vd2.getProp<1>(q)++; - if (distance < r_cut ) - { - vd2.getProp<1>(p)++; - vd2.getProp<1>(q)++; + vd2.getProp<4>(p).add(); + vd2.getProp<4>(q).add(); - vd2.getProp<4>(p).add(); - vd2.getProp<4>(q).add(); + vd2.getProp<4>(p).last().xq = xq; + vd2.getProp<4>(q).last().xq = xp; + vd2.getProp<4>(p).last().id = vd2.getProp<2>(q); + vd2.getProp<4>(q).last().id = vd2.getProp<2>(p); + } - vd2.getProp<4>(p).last().xq = xq; - vd2.getProp<4>(q).last().xq = xp; - vd2.getProp<4>(p).last().id = vd2.getProp<2>(q); - vd2.getProp<4>(q).last().id = vd2.getProp<2>(p); + ++Np; } - ++Np; + + ++p_it2; } + vd2.ghost_put<add_,1>(); + vd2.ghost_put<merge_,4>(); - ++p_it2; - } - - vd2.ghost_put<add_,1>(); - vd2.ghost_put<merge_,4>(); + auto p_it3 = vd.getDomainIterator(); - auto p_it3 = vd.getDomainIterator(); + bool ret = true; + while (p_it3.isNext()) + { + auto p = p_it3.get(); - bool ret = true; - while (p_it3.isNext()) - { - auto p = p_it3.get(); + ret &= vd2.getProp<1>(p) == vd.getProp<0>(p); - ret &= vd2.getProp<1>(p) == vd.getProp<0>(p); + vd.getProp<3>(p).sort(); + vd2.getProp<4>(p).sort(); - vd.getProp<3>(p).sort(); - vd2.getProp<4>(p).sort(); + ret &= vd.getProp<3>(p).size() == vd2.getProp<4>(p).size(); - ret &= vd.getProp<3>(p).size() == vd2.getProp<4>(p).size(); + for (size_t i = 0 ; i < vd.getProp<3>(p).size() ; i++) + ret &= vd.getProp<3>(p).get(i).id == vd2.getProp<4>(p).get(i).id; - for (size_t i = 0 ; i < vd.getProp<3>(p).size() ; i++) - ret &= vd.getProp<3>(p).get(i).id == vd2.getProp<4>(p).get(i).id; + if (ret == false) + break; - if (ret == false) - break; + ++p_it3; + } - ++p_it3; + BOOST_REQUIRE_EQUAL(ret,true); } - - BOOST_REQUIRE_EQUAL(ret,true); } #endif /* SRC_VECTOR_VECTOR_DIST_CELL_LIST_TESTS_HPP_ */