diff --git a/src/Vector/vector_dist_comm.hpp b/src/Vector/vector_dist_comm.hpp index ca70fd9939a5700a4e3b440bca71e1c14a14634f..fa00ed674652c072007b6a18ba385ff9cc6ccd47 100644 --- a/src/Vector/vector_dist_comm.hpp +++ b/src/Vector/vector_dist_comm.hpp @@ -749,6 +749,7 @@ public: * */ vector_dist_comm(const vector_dist_comm<dim,St,prop,Decomposition,Memory> & v) + :v_cl(create_vcluster()),dec(create_vcluster()) { this->operator=(v); } @@ -1043,7 +1044,7 @@ public: */ vector_dist_comm<dim,St,prop,Decomposition,Memory> & operator=(vector_dist_comm<dim,St,prop,Decomposition,Memory> && vc) { - dec.swap(vc.dec); + dec = vc.dec; return *this; } diff --git a/src/Vector/vector_dist_unit_test.hpp b/src/Vector/vector_dist_unit_test.hpp index a4ef5334411213d14d28b17f5bffb1b6a307eaaa..88a7275a268faa0eebc47208390061bb33de8a76 100644 --- a/src/Vector/vector_dist_unit_test.hpp +++ b/src/Vector/vector_dist_unit_test.hpp @@ -1771,6 +1771,52 @@ BOOST_AUTO_TEST_CASE( vector_dist_ghost_put ) } } +BOOST_AUTO_TEST_CASE( vector_of_vector_dist ) +{ + Vcluster & v_cl = create_vcluster(); + + if (v_cl.getProcessingUnits() > 48) + return; + + // Boundary conditions + size_t bc[3]={PERIODIC,PERIODIC,PERIODIC}; + + // Box + Box<3,float> box({0.0,0.0,0.0},{1.0,1.0,1.0}); + + // ghost + Ghost<3,float> ghost(0.1); + + openfpm::vector< vector_dist<3,float, aggregate<double,double>> > phases; + + // first phase + phases.add( vector_dist<3,float, aggregate<double,double>>(4096,box,bc,ghost) ); + + // The other 3 phases + phases.add( vector_dist<3,float, aggregate<double,double>>(phases.get(0).getDecomposition(),4096) ); + phases.add( vector_dist<3,float, aggregate<double,double>>(phases.get(0).getDecomposition(),4096) ); + phases.add( vector_dist<3,float, aggregate<double,double>>(phases.get(0).getDecomposition(),4096) ); + + phases.get(0).map(); + phases.get(0).ghost_get<>(); + phases.get(1).map(); + phases.get(1).ghost_get<>(); + phases.get(2).map(); + phases.get(2).ghost_get<>(); + phases.get(3).map(); + phases.get(3).ghost_get<>(); + + size_t cnt = 0; + + for (size_t i = 0 ; i < phases.size() ; i++) + cnt += phases.get(i).size_local(); + + v_cl.sum(cnt); + v_cl.execute(); + + BOOST_REQUIRE_EQUAL(cnt,4*4096ul); +} + #include "vector_dist_cell_list_tests.hpp" #include "vector_dist_NN_tests.hpp" #include "vector_dist_complex_prp_unit_test.hpp"