8 #ifndef SRC_VECTOR_VECTOR_DIST_MP_UNIT_TESTS_HPP_
9 #define SRC_VECTOR_VECTOR_DIST_MP_UNIT_TESTS_HPP_
11 #include "Vector/vector_dist_multiphase_functions.hpp"
13 BOOST_AUTO_TEST_SUITE( vector_dist_multiphase_test )
15 BOOST_AUTO_TEST_CASE( vector_dist_multiphase_cell_list_test )
17 if (create_vcluster().getProcessingUnits() > 24)
20 size_t sz[3] = {60,60,40};
23 Box<3,float> box({-1000.0,-1000.0,-1000.0},{2000.0,2000.0,1000.0});
26 size_t bc[3]={PERIODIC,PERIODIC,PERIODIC};
45 auto g_it = phases.get(0).getGridIterator(sz);
49 auto key = g_it.get();
57 phases.get(0).getLastPos()[0] =
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
58 phases.get(0).getLastPos()[1] =
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
59 phases.get(0).getLastPos()[2] =
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
61 phases.get(1).getLastPos()[0] =
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
62 phases.get(1).getLastPos()[1] =
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
63 phases.get(1).getLastPos()[2] =
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
65 phases.get(2).getLastPos()[0] =
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
66 phases.get(2).getLastPos()[1] =
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
67 phases.get(2).getLastPos()[2] =
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
69 phases.get(3).getLastPos()[0] =
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
70 phases.get(3).getLastPos()[1] =
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
71 phases.get(3).getLastPos()[2] =
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
77 for (
size_t i = 0 ; i < 4 ; i++)
84 for (
size_t p = 0 ; p < phases.
size() ; p++)
88 for (
size_t j = 0 ; j < phases.get(p).size_local() ; j++)
90 vt.add(phases.get(p).getPos((j + p*133) % phases.get(p).size_local()));
92 phases.get(p).getPosVector().swap(vt);
96 for (
size_t i = 0 ; i < 4 ; i++)
98 phases.get(i).ghost_get<>();
102 auto CL_phase0 = phases.get(0).getCellList(r_cut);
103 auto CL_phase1 = phases.get(1).getCellList(r_cut);
106 auto NN_ver01 = createVerlet(phases.get(0),phases.get(1),CL_phase1,r_cut);
111 auto it = phases.get(0).getDomainIterator();
116 auto Np = NN_ver01.getNNIterator<NO_CHECK>(p.getKey());
129 ret &= nn_count == 7ul;
134 BOOST_REQUIRE_EQUAL(ret,
true);
137 for (
size_t i = 0 ; i < 4 ; i++)
140 phases.get(i).ghost_get<>();
146 auto CL_all = createCellListM<2>(phases,r_cut);
149 auto NNver0_all = createVerletM<2>(0,phases.get(0),phases,CL_all,r_cut);
151 it = phases.get(0).getDomainIterator();
156 auto Np = NNver0_all.getNNIterator<NO_CHECK>(p.getKey());
158 size_t nn_cout[4] = {0,0,0,0};
164 auto ph_q = Np.getV();
171 ret &= nn_cout[0] == 7;
172 ret &= nn_cout[1] == 7;
173 ret &= nn_cout[2] == 7;
174 ret &= nn_cout[3] == 7;
179 BOOST_REQUIRE_EQUAL(ret,
true);
183 BOOST_AUTO_TEST_CASE( vector_dist_multiphase_cell_list_sym_test )
185 if (create_vcluster().getProcessingUnits() > 24)
188 size_t sz[3] = {60,60,40};
191 Box<3,float> box({-1000.0,-1000.0,-1000.0},{2000.0,2000.0,1000.0});
194 size_t bc[3]={PERIODIC,PERIODIC,PERIODIC};
213 auto g_it = phases.get(0).getGridIterator(sz);
215 while (g_it.isNext())
217 auto key = g_it.get();
225 phases.get(0).getLastPosWrite()[0] =
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
226 phases.get(0).getLastPosWrite()[1] =
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
227 phases.get(0).getLastPosWrite()[2] =
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
229 phases.get(1).getLastPosWrite()[0] =
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
230 phases.get(1).getLastPosWrite()[1] =
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
231 phases.get(1).getLastPosWrite()[2] =
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
233 phases.get(2).getLastPosWrite()[0] =
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
234 phases.get(2).getLastPosWrite()[1] =
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
235 phases.get(2).getLastPosWrite()[2] =
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
237 phases.get(3).getLastPosWrite()[0] =
key.get(0) * g_it.getSpacing(0) + box.getLow(0);
238 phases.get(3).getLastPosWrite()[1] =
key.get(1) * g_it.getSpacing(1) + box.getLow(1);
239 phases.get(3).getLastPosWrite()[2] =
key.get(2) * g_it.getSpacing(2) + box.getLow(2);
245 for (
size_t i = 0 ; i < 4 ; i++)
252 for (
size_t p = 0 ; p < phases.
size() ; p++)
256 for (
size_t j = 0 ; j < phases.get(p).size_local() ; j++)
258 vt.add(phases.get(p).getPos((j + p*133) % phases.get(p).size_local()));
260 phases.get(p).getPosVector().swap(vt);
264 for (
size_t i = 0 ; i < 4 ; i++)
266 phases.get(i).ghost_get<>();
270 auto CL_phase0 = phases.get(0).getCellListSym(r_cut);
271 auto CL_phase1 = phases.get(1).getCellListSym(r_cut);
274 auto NN_ver01 = createVerletSym(phases.get(0),phases.get(1),CL_phase1,r_cut);
279 auto it = phases.get(0).getDomainIterator();
284 auto Np = NN_ver01.getNNIterator<NO_CHECK>(p.getKey());
292 phases.get(0).getPropWrite<0>(p)++;
293 phases.get(1).getPropWrite<0>(q)++;
301 phases.get(0).ghost_put<
add_,0>();
302 phases.get(1).ghost_put<
add_,0>();
306 phases.get(1).getDomainIterator();
310 it = phases.get(0).getDomainIterator();
315 ret &= phases.get(0).getPropRead<0>(p) == 7;
316 ret &= phases.get(1).getPropRead<0>(p) == 7;
321 BOOST_REQUIRE_EQUAL(ret,
true);
324 for (
size_t i = 0 ; i < 4 ; i++)
327 phases.get(i).ghost_get<>();
332 for (
size_t i = 0 ; i < phases.
size() ; i++)
334 it = phases.get(i).getDomainAndGhostIterator();
339 phases.get(i).getPropWrite<0>(p) = 0;
348 auto CL_all = createCellListSymM<2>(phases,r_cut);
350 typedef decltype(createVerletSymM<2>(0,phases.get(0),phases,CL_all,r_cut)) verlet_type;
352 verlet_type NNver_all[4];
355 NNver_all[0] = createVerletSymM<2>(0,phases.get(0),phases,CL_all,r_cut);
356 NNver_all[1] = createVerletSymM<2>(1,phases.get(1),phases,CL_all,r_cut);
357 NNver_all[2] = createVerletSymM<2>(2,phases.get(2),phases,CL_all,r_cut);
358 NNver_all[3] = createVerletSymM<2>(3,phases.get(3),phases,CL_all,r_cut);
362 for (
size_t i = 0 ; i < phases.size() ; i++)
364 it = phases.get(i).getDomainIterator();
369 auto Np = NNver_all[i].getNNIterator<NO_CHECK>(p.getKey());
378 auto ph_q = Np.getV();
380 phases.get(i).getPropWrite<0>(p)++;
381 phases.get(ph_q).getPropWrite<0>(q)++;
390 phases.get(0).ghost_put<
add_,0>();
391 phases.get(1).ghost_put<
add_,0>();
392 phases.get(2).ghost_put<
add_,0>();
393 phases.get(3).ghost_put<
add_,0>();
397 it = phases.get(1).getDomainIterator();
398 it = phases.get(2).getDomainIterator();
399 it = phases.get(3).getDomainIterator();
403 it = phases.get(0).getDomainIterator();
408 ret &= phases.get(0).getPropRead<0>(p) == 32;
409 ret &= phases.get(1).getPropRead<0>(p) == 32;
410 ret &= phases.get(2).getPropRead<0>(p) == 32;
411 ret &= phases.get(3).getPropRead<0>(p) == 32;
415 std::cout << phases.get(0).getPropRead<0>(p) << std::endl;
416 std::cout << phases.get(1).getPropRead<0>(p) << std::endl;
417 std::cout << phases.get(2).getPropRead<0>(p) << std::endl;
418 std::cout << phases.get(3).getPropRead<0>(p) << std::endl;
424 BOOST_REQUIRE_EQUAL(ret,
true);
427 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.