8 #ifndef SRC_VECTOR_PERFORMANCE_VECTOR_DIST_PERFORMANCE_COMMON_HPP_
9 #define SRC_VECTOR_PERFORMANCE_VECTOR_DIST_PERFORMANCE_COMMON_HPP_
11 #include "Vector/vector_dist.hpp"
19 template<
unsigned int dim,
size_t prp = 0,
typename T,
typename V>
void calc_forces(T & NN, V & vd,
float r_cut)
21 auto it_v = vd.getDomainIterator();
25 for (
size_t i = 0; i < dim; i++)
36 for (
size_t i = 0; i < dim; i++)
40 auto cell_it = NN.template getNNIterator<NO_CHECK>(NN.getCell(p));
42 while(cell_it.isNext())
44 auto nnp = cell_it.
get();
59 for (
size_t i = 0; i < dim; i++)
60 num[i] = vd.getPos(key)[i] - vd.getPos(nnp)[i];
63 for (
size_t i = 0; i < dim; i++)
64 denom += num[i] * num[i];
67 for (
size_t i = 0; i < dim; i++)
68 res[i] = num[i] / denom;
70 for (
size_t i = 0; i < dim; i++)
78 for (
size_t i = 0; i < dim; i++)
79 vd.template getProp<prp>(key)[i] += sum[i];
97 template<
unsigned int dim,
unsigned int prp,
typename T,
typename V>
void cross_calc(T & NN, T & NN2, V & vd, V & vd2)
99 auto it_v = vd.getDomainIterator();
101 while (it_v.isNext())
110 auto cell_it = NN2.template getNNIterator<NO_CHECK>(NN2.getCell(p));
114 while(cell_it.isNext())
116 auto nnp = cell_it.
get();
126 vd.template getProp<prp>(key) = sum;
139 template<
unsigned int dim,
typename v_dist>
void vd_initialize(v_dist & vd,
Vcluster & v_cl,
size_t k_int)
143 std::uniform_real_distribution<float> ud(0.0f, 1.0f);
147 auto it = vd.getIterator();
153 for (
size_t i = 0; i < dim; i++)
154 vd.getPos(key)[i] = ud(eg);
169 template<
unsigned int dim,
typename v_dist>
void vd_initialize_double(v_dist & vd,v_dist & vd2,
Vcluster & v_cl,
size_t k_int)
173 std::uniform_real_distribution<float> ud(0.0f, 1.0f);
177 auto it = vd.getIterator();
183 for (
size_t i = 0; i < dim; i++)
185 vd.getPos(key)[i] = ud(eg);
186 vd2.getPos(key)[i] = vd.getPos(key)[i];
204 template<
unsigned int dim,
size_t prp = 0,
typename T,
typename V>
void calc_forces_hilb(T & NN, V & vd,
float r_cut)
206 auto it_cl = NN.getIterator();
210 for (
size_t i = 0; i < dim; i++)
213 while (it_cl.isNext())
216 auto key = it_cl.get();
221 for (
size_t i = 0; i < dim; i++)
225 auto cell_it = NN.template getNNIterator<NO_CHECK>(NN.getCell(p));
227 while(cell_it.isNext())
229 auto nnp = cell_it.
get();
244 for (
size_t i = 0; i < dim; i++)
245 num[i] = vd.getPos(key)[i] - vd.getPos(nnp)[i];
248 for (
size_t i = 0; i < dim; i++)
249 denom += num[i] * num[i];
252 for (
size_t i = 0; i < dim; i++)
253 res[i] = num[i] / denom;
255 for (
size_t i = 0; i < dim; i++)
263 for (
size_t i = 0; i < dim; i++)
264 vd.template getProp<prp>(key)[i] += sum[i];
size_t getProcessUnitID()
Get the process unit id.
This class implement the point shape in an N-dimensional space.
Grid key for a distributed grid.
Implementation of VCluster class.
const T & get(size_t i) const
Get coordinate.
size_t getKey() const
Get the key.
This class is a trick to indicate the compiler a specific specialization pattern. ...
T distance2(const Point< dim, T > &q)
It calculate the square distance between 2 points.
It model an expression expr1 + ... exprn.