8 #define BOOST_TEST_DYN_LINK 
    9 #include <boost/test/unit_test.hpp> 
   11 #include "Vector/vector_dist_multiphase_functions.hpp" 
   12 #include "VCluster/VCluster.hpp" 
   13 #include "Vector/vector_dist.hpp" 
   15 BOOST_AUTO_TEST_SUITE( vector_dist_multiphase_test )
 
   17 BOOST_AUTO_TEST_CASE( vector_dist_multiphase_cell_list_test )
 
   19     if (create_vcluster().getProcessingUnits() > 24)
 
   22     size_t sz[3] = {60,60,40};
 
   25     Box<3,float> box({-1000.0,-1000.0,-1000.0},{2000.0,2000.0,1000.0});
 
   28     size_t bc[3]={PERIODIC,PERIODIC,PERIODIC};
 
   47     auto g_it = phases.get(0).getGridIterator(sz);
 
   51         auto key = g_it.get();
 
   59         phases.get(0).getLastPos()[0] = 
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
 
   60         phases.get(0).getLastPos()[1] = 
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
 
   61         phases.get(0).getLastPos()[2] = 
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
 
   63         phases.get(1).getLastPos()[0] = 
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
 
   64         phases.get(1).getLastPos()[1] = 
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
 
   65         phases.get(1).getLastPos()[2] = 
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
 
   67         phases.get(2).getLastPos()[0] = 
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
 
   68         phases.get(2).getLastPos()[1] = 
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
 
   69         phases.get(2).getLastPos()[2] = 
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
 
   71         phases.get(3).getLastPos()[0] = 
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
 
   72         phases.get(3).getLastPos()[1] = 
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
 
   73         phases.get(3).getLastPos()[2] = 
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
 
   79     for (
size_t i = 0 ; i < 4 ; i++)
 
   86     for (
size_t p = 0 ; p < phases.
size() ; p++)
 
   90         for (
size_t j = 0 ; j < phases.get(p).size_local() ; j++)
 
   92             vt.add(phases.get(p).getPos((j + p*133) % phases.get(p).size_local()));
 
   94         phases.get(p).getPosVector().swap(vt);
 
   98     for (
size_t i = 0 ; i < 4 ; i++)
 
  100         phases.get(i).ghost_get<>();
 
  104     auto CL_phase0 = phases.get(0).getCellList(r_cut);
 
  105     auto CL_phase1 = phases.get(1).getCellList(r_cut);
 
  108     auto NN_ver01 = createVerlet(phases.get(0),phases.get(1),CL_phase1,r_cut);
 
  113     auto it = phases.get(0).getDomainIterator();
 
  118         auto Np = NN_ver01.getNNIterator<NO_CHECK>(p.getKey());
 
  131         ret &= nn_count == 7ul;
 
  136     BOOST_REQUIRE_EQUAL(ret,
true);
 
  139     for (
size_t i = 0 ; i < 4 ; i++)
 
  142         phases.get(i).ghost_get<>();
 
  148     auto CL_all = createCellListM<2>(phases,r_cut);
 
  151     auto NNver0_all = createVerletM<2>(0,phases.get(0),phases,CL_all,r_cut);
 
  153     it = phases.get(0).getDomainIterator();
 
  158         auto Np = NNver0_all.getNNIterator<NO_CHECK>(p.getKey());
 
  160         size_t nn_cout[4] = {0,0,0,0};
 
  166             auto ph_q = Np.getV();
 
  173         ret &= nn_cout[0] == 7;
 
  174         ret &= nn_cout[1] == 7;
 
  175         ret &= nn_cout[2] == 7;
 
  176         ret &= nn_cout[3] == 7;
 
  181     BOOST_REQUIRE_EQUAL(ret,
true);
 
  185 BOOST_AUTO_TEST_CASE( vector_dist_multiphase_cell_list_sym_test )
 
  187     if (create_vcluster().getProcessingUnits() > 24)
 
  190     size_t sz[3] = {60,60,40};
 
  193     Box<3,float> box({-1000.0,-1000.0,-1000.0},{2000.0,2000.0,1000.0});
 
  196     size_t bc[3]={PERIODIC,PERIODIC,PERIODIC};
 
  215     auto g_it = phases.get(0).getGridIterator(sz);
 
  217     while (g_it.isNext())
 
  219         auto key = g_it.get();
 
  227         phases.get(0).getLastPosWrite()[0] = 
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
 
  228         phases.get(0).getLastPosWrite()[1] = 
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
 
  229         phases.get(0).getLastPosWrite()[2] = 
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
 
  231         phases.get(1).getLastPosWrite()[0] = 
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
 
  232         phases.get(1).getLastPosWrite()[1] = 
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
 
  233         phases.get(1).getLastPosWrite()[2] = 
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
 
  235         phases.get(2).getLastPosWrite()[0] = 
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
 
  236         phases.get(2).getLastPosWrite()[1] = 
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
 
  237         phases.get(2).getLastPosWrite()[2] = 
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
 
  239         phases.get(3).getLastPosWrite()[0] = 
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
 
  240         phases.get(3).getLastPosWrite()[1] = 
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
 
  241         phases.get(3).getLastPosWrite()[2] = 
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
 
  247     for (
size_t i = 0 ; i < 4 ; i++)
 
  254     for (
size_t p = 0 ; p < phases.
size() ; p++)
 
  258         for (
size_t j = 0 ; j < phases.get(p).size_local() ; j++)
 
  260             vt.add(phases.get(p).getPos((j + p*133) % phases.get(p).size_local()));
 
  262         phases.get(p).getPosVector().swap(vt);
 
  266     for (
size_t i = 0 ; i < 4 ; i++)
 
  268         phases.get(i).ghost_get<>();
 
  272     auto CL_phase0 = phases.get(0).getCellListSym(r_cut);
 
  273     auto CL_phase1 = phases.get(1).getCellListSym(r_cut);
 
  276     auto NN_ver01 = createVerletSym(phases.get(0),phases.get(1),CL_phase1,r_cut);
 
  281     auto it = phases.get(0).getDomainIterator();
 
  286         auto Np = NN_ver01.getNNIterator<NO_CHECK>(p.getKey());
 
  294             phases.get(0).getPropWrite<0>(p)++;
 
  295             phases.get(1).getPropWrite<0>(q)++;
 
  303     phases.get(0).ghost_put<
add_,0>();
 
  304     phases.get(1).ghost_put<
add_,0>();
 
  308     phases.get(1).getDomainIterator();
 
  312     it = phases.get(0).getDomainIterator();
 
  317         ret &= phases.get(0).getPropRead<0>(p) == 7;
 
  318         ret &= phases.get(1).getPropRead<0>(p) == 7;
 
  323     BOOST_REQUIRE_EQUAL(ret,
true);
 
  326     for (
size_t i = 0 ; i < 4 ; i++)
 
  329         phases.get(i).ghost_get<>();
 
  334     for (
size_t i = 0 ; i < phases.
size() ; i++)
 
  336         it = phases.get(i).getDomainAndGhostIterator();
 
  341             phases.get(i).getPropWrite<0>(p) = 0;
 
  350     auto CL_all = createCellListSymM<2>(phases,r_cut);
 
  352     typedef decltype(createVerletSymM<2>(0,phases.get(0),phases,CL_all,r_cut)) verlet_type;
 
  354     verlet_type NNver_all[4];
 
  357     NNver_all[0] = createVerletSymM<2>(0,phases.get(0),phases,CL_all,r_cut);
 
  358     NNver_all[1] = createVerletSymM<2>(1,phases.get(1),phases,CL_all,r_cut);
 
  359     NNver_all[2] = createVerletSymM<2>(2,phases.get(2),phases,CL_all,r_cut);
 
  360     NNver_all[3] = createVerletSymM<2>(3,phases.get(3),phases,CL_all,r_cut);
 
  364     for (
size_t i = 0 ; i < phases.size() ; i++)
 
  366         it = phases.get(i).getDomainIterator();
 
  371             auto Np = NNver_all[i].getNNIterator<NO_CHECK>(p.getKey());
 
  380                 auto ph_q = Np.getV();
 
  382                 phases.get(i).getPropWrite<0>(p)++;
 
  383                 phases.get(ph_q).getPropWrite<0>(q)++;
 
  392     phases.get(0).ghost_put<
add_,0>();
 
  393     phases.get(1).ghost_put<
add_,0>();
 
  394     phases.get(2).ghost_put<
add_,0>();
 
  395     phases.get(3).ghost_put<
add_,0>();
 
  399     it = phases.get(1).getDomainIterator();
 
  400     it = phases.get(2).getDomainIterator();
 
  401     it = phases.get(3).getDomainIterator();
 
  405     it = phases.get(0).getDomainIterator();
 
  410         ret &= phases.get(0).getPropRead<0>(p) == 32;
 
  411         ret &= phases.get(1).getPropRead<0>(p) == 32;
 
  412         ret &= phases.get(2).getPropRead<0>(p) == 32;
 
  413         ret &= phases.get(3).getPropRead<0>(p) == 32;
 
  417             std::cout << phases.get(0).getPropRead<0>(p) << std::endl;
 
  418             std::cout << phases.get(1).getPropRead<0>(p) << std::endl;
 
  419             std::cout << phases.get(2).getPropRead<0>(p) << std::endl;
 
  420             std::cout << phases.get(3).getPropRead<0>(p) << std::endl;
 
  426     BOOST_REQUIRE_EQUAL(ret,
true);
 
  429 BOOST_AUTO_TEST_SUITE_END()
 
This structure define the operation add to use with copy general. 
 
This class is a trick to indicate the compiler a specific specialization pattern. ...
 
aggregate of properties, from a list of object if create a struct that follow the OPENFPM native stru...
 
Implementation of 1-D std::vector like structure.