12 #include "Decomposition/CartDecomposition.hpp" 13 #include "DCPSE/Dcpse.hpp" 14 #include "Operators/Vector/vector_dist_operators.hpp" 16 const double dcpse_oversampling_factor = 1.9;
17 const double rcut_verlet = 3.1;
25 template<
typename exp1,
typename DCPSE_type>
34 typedef std::false_type is_ker;
36 typedef std::false_type NN_type;
38 typedef std::false_type is_sort;
40 typedef typename exp1::vtype vtype;
51 inline void init()
const {
62 template<
typename r_type=
typename std::remove_reference<decltype(o1.value(
vect_dist_key_dx()))>::type>
64 return dcp.computeDifferentialOperator(key, o1);
67 template<
typename Sys_eqs,
typename pmap_type,
typename unordered_map_type,
typename coeff_type>
68 inline void value_nz(pmap_type &p_map,
const vect_dist_key_dx &key, unordered_map_type &cols, coeff_type &coeff,
69 unsigned int comp)
const {
71 for (
int j = 0; j < dcp.getNumNN(key); j++) {
72 auto coeff_dc = dcp.getCoeffNN(key, j);
73 auto k = dcp.getIndexNN(key, j);
75 auto k_coeff = coeff_dc * coeff * dcp.getEpsilonInvPrefactor(key);
76 o1.template value_nz<Sys_eqs>(p_map, k, cols, k_coeff, comp);
78 auto kk_coeff = dcp.getSign() * coeff_dc * coeff * dcp.getEpsilonInvPrefactor(key);
79 o1.template value_nz<Sys_eqs>(p_map, key, cols, kk_coeff, comp);
91 return o1.getVector();
101 const vtype &getVector()
const {
102 return o1.getVector();
106 template<
typename exp1,
typename DCPSE_type>
111 DCPSE_type (&dcp)[DCPSE_type::vtype::dims];
113 static const int dims = DCPSE_type::vtype::dims;
114 typedef typename DCPSE_type::vtype::stype stype;
118 typedef std::false_type is_ker;
120 typedef std::false_type NN_type;
122 typedef std::false_type is_sort;
124 typedef typename exp1::vtype vtype;
128 : o1(o1), dcp(dcp) {}
135 inline void init()
const {
146 template<
typename r_type=VectorS<dims, stype> >
150 for (
int i = 0; i < dims; i++) {
151 v_grad.
get(i) = dcp[i].computeDifferentialOperator(key, o1);
157 template<
typename Sys_eqs,
typename pmap_type,
typename unordered_map_type,
typename coeff_type>
158 inline void value_nz(pmap_type &p_map,
const vect_dist_key_dx &key, unordered_map_type &cols, coeff_type &coeff,
159 unsigned int comp)
const {
160 for (
int i = 0; i < DCPSE_type::vtype::dims; i++) {
162 for (
int j = 0; j < dcp[i].getNumNN(key); j++) {
163 auto coeff_dc = dcp[i].getCoeffNN(key, j);
164 auto k = dcp[i].getIndexNN(key, j);
166 auto k_coeff = coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key);
167 o1.template value_nz<Sys_eqs>(p_map, k, cols, k_coeff, comp);
169 auto kk_coeff = dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key);
170 o1.template value_nz<Sys_eqs>(p_map, key, cols, kk_coeff, comp);
188 return o1.getVector();
198 const vtype &getVector()
const {
199 return o1.getVector();
205 template<
typename exp1,
typename DCPSE_type>
210 DCPSE_type (&dcp)[DCPSE_type::vtype::dims];
212 static const int dims = DCPSE_type::vtype::dims;
213 typedef typename DCPSE_type::vtype::stype stype;
217 typedef std::false_type is_ker;
219 typedef std::false_type NN_type;
221 typedef std::false_type is_sort;
223 typedef typename exp1::vtype vtype;
227 : o1(o1), dcp(dcp) {}
234 inline void init()
const {
245 template<
typename r_type=VectorS<dims, stype> >
248 v_grad.
get(0) = dcp[0].computeDifferentialOperator(key, o1);
249 v_grad.
get(1) = -dcp[1].computeDifferentialOperator(key, o1);
254 template<
typename Sys_eqs,
typename pmap_type,
typename unordered_map_type,
typename coeff_type>
255 inline void value_nz(pmap_type &p_map,
const vect_dist_key_dx &key, unordered_map_type &cols, coeff_type &coeff,
256 unsigned int comp)
const {
257 for (
int i = 0; i < DCPSE_type::vtype::dims; i++) {
259 for (
int j = 0; j < dcp[i].getNumNN(key); j++) {
260 auto coeff_dc = dcp[i].getCoeffNN(key, j);
261 auto k = dcp[i].getIndexNN(key, j);
263 auto k_coeff = coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key);
264 o1.template value_nz<Sys_eqs>(p_map, k, cols, k_coeff, comp);
266 auto kk_coeff = dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key);
267 o1.template value_nz<Sys_eqs>(p_map, key, cols, kk_coeff, comp);
285 return o1.getVector();
295 const vtype &getVector()
const {
296 return o1.getVector();
312 typedef std::false_type is_ker;
314 typedef std::false_type NN_type;
316 typedef std::false_type is_sort;
321 template<
typename Sys_eqs,
typename pmap_type,
typename unordered_map_type,
typename coeff_type>
322 inline void value_nz(pmap_type &p_map,
const vect_dist_key_dx &key, unordered_map_type &cols, coeff_type &coeff,
323 unsigned int comp)
const {
324 if (l1.template get<0>(i) != key.
getKey()) {
325 std::cout <<
"ERROR" << std::endl;
328 cols[p_map.template getProp<0>(key) * Sys_eqs::nvar + comp] += coeff;
329 std::cout <<
"L2: " << l2.template get<0>(i) << std::endl;
330 cols[p_map.template getProp<0>(l2.template get<0>(i)) * Sys_eqs::nvar + comp] -= coeff;
347 typedef std::false_type is_ker;
349 typedef std::false_type NN_type;
351 typedef std::false_type is_sort;
354 : l1(l1), l2_key(l2_key) {}
356 template<
typename Sys_eqs,
typename pmap_type,
typename unordered_map_type,
typename coeff_type>
357 inline void value_nz(pmap_type &p_map,
const vect_dist_key_dx &key, unordered_map_type &cols, coeff_type &coeff,
358 unsigned int comp)
const {
359 if (l1.template get<0>(i) != key.
getKey()) {
360 std::cout <<
"ERROR" << std::endl;
363 cols[p_map.template getProp<0>(key) * Sys_eqs::nvar + comp] += coeff;
364 cols[p_map.template getProp<0>(l2_key) * Sys_eqs::nvar + comp] -= coeff;
370 template<
typename exp1,
typename DCPSE_type>
375 DCPSE_type (&dcp)[DCPSE_type::vtype::dims];
377 static const int dims = DCPSE_type::vtype::dims;
378 typedef typename DCPSE_type::vtype::stype stype;
382 typedef std::false_type is_ker;
384 typedef std::false_type NN_type;
386 typedef std::false_type is_sort;
388 typedef typename exp1::vtype vtype;
391 : o1(o1), dcp(dcp) {}
393 inline void init()
const {
397 template<
typename r_type=
typename std::remove_reference<decltype(o1.value(
vect_dist_key_dx(0)))>::type>
401 typename std::remove_reference<decltype(o1.value(key))>::type v_lap;
405 for (
int i = 0; i < dims; i++) {
406 v_lap += dcp[i].computeDifferentialOperator(key, o1);
412 template<
typename Sys_eqs,
typename pmap_type,
typename unordered_map_type,
typename coeff_type>
413 inline void value_nz(pmap_type &p_map,
const vect_dist_key_dx &key, unordered_map_type &cols, coeff_type &coeff,
414 unsigned int comp)
const {
415 for (
int i = 0; i < DCPSE_type::vtype::dims; i++) {
417 for (
int j = 0; j < dcp[i].getNumNN(key); j++) {
418 auto coeff_dc = dcp[i].getCoeffNN(key, j);
419 auto k = dcp[i].getIndexNN(key, j);
421 auto coeff_k = coeff_dc * coeff * dcp[i].getEpsilonInvPrefactor(key);
422 o1.template value_nz<Sys_eqs>(p_map, k, cols, coeff_k, comp);
424 auto coeff_kk = dcp[i].getSign() * coeff_dc * coeff * dcp[i].getEpsilonInvPrefactor(key);
425 o1.template value_nz<Sys_eqs>(p_map, key, cols, coeff_kk, comp);
438 return o1.getVector();
448 const vtype &getVector()
const {
449 return o1.getVector();
454 template<
typename exp1,
typename DCPSE_type>
459 DCPSE_type (&dcp)[DCPSE_type::vtype::dims];
461 static const int dims = DCPSE_type::vtype::dims;
462 typedef typename DCPSE_type::vtype::stype stype;
466 typedef std::false_type is_ker;
468 typedef std::false_type NN_type;
470 typedef std::false_type is_sort;
472 typedef typename exp1::vtype vtype;
475 : o1(o1), dcp(dcp) {}
477 inline void init()
const {
481 template<
typename r_type=
typename std::remove_reference<decltype(o1.value(
vect_dist_key_dx(0)))>::type::coord_type>
485 typename std::remove_reference<decltype(o1.value(key))>::type::coord_type v_div;
488 for (
int i = 0; i < dims; i++) {
489 v_div += dcp[i].computeDifferentialOperator(key, o1, i);
495 template<
typename Sys_eqs,
typename pmap_type,
typename unordered_map_type,
typename coeff_type>
496 inline void value_nz(pmap_type &p_map,
const vect_dist_key_dx &key, unordered_map_type &cols, coeff_type &coeff,
497 unsigned int comp)
const {
498 for (
int i = 0; i < DCPSE_type::vtype::dims; i++) {
500 for (
int j = 0; j < dcp[i].getNumNN(key); j++) {
501 auto coeff_dc = dcp[i].getCoeffNN(key, j);
502 auto k = dcp[i].getIndexNN(key, j);
504 auto k_coeff = coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key);
505 o1.template value_nz<Sys_eqs>(p_map, k, cols, k_coeff, comp);
507 auto kk_coeff = dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key);
508 o1.template value_nz<Sys_eqs>(p_map, key, cols, kk_coeff, comp);
526 return o1.getVector();
536 const vtype &getVector()
const {
537 return o1.getVector();
541 template<
typename exp1,
typename exp2_pr>
543 typedef typename std::tuple_element<1, exp2_pr>::type DCPSE_type;
544 typedef typename std::tuple_element<0, exp2_pr>::type exp2;
550 DCPSE_type (&dcp)[DCPSE_type::vtype::dims];
552 static const int dims = DCPSE_type::vtype::dims;
553 typedef typename DCPSE_type::vtype::stype stype;
557 typedef std::false_type is_ker;
559 typedef std::false_type NN_type;
561 typedef std::false_type is_sort;
569 : o1(o1), o2(o2), dcp(dcp) {}
571 inline void init()
const {
577 template<
typename r_type=
typename std::remove_reference<decltype(o2.value(
vect_dist_key_dx(0)))>::type>
580 typename std::remove_reference<decltype(o2.value(key))>::type adv;
582 for (
int i = 0; i < dims; i++) {
583 adv += o1.value(key)[i] * dcp[i].computeDifferentialOperator(key, o2);
590 template<
typename Sys_eqs,
typename pmap_type,
typename unordered_map_type,
typename coeff_type>
591 inline void value_nz(pmap_type &p_map,
const vect_dist_key_dx &key, unordered_map_type &cols, coeff_type &coeff,
592 unsigned int comp)
const {
593 for (
int i = 0; i < DCPSE_type::vtype::dims; i++) {
595 for (
int j = 0; j < dcp[i].getNumNN(key); j++) {
596 auto coeff_dc = dcp[i].getCoeffNN(key, j);
597 auto k = dcp[i].getIndexNN(key, j);
599 auto k_coeff = o1.value(k) * coeff_dc * coeff * dcp[i].getEpsilonInvPrefactor(key);
600 o2.template value_nz<Sys_eqs>(p_map, k, cols, k_coeff, comp);
603 o1.value(key) * dcp[i].getSign() * coeff_dc * coeff * dcp[i].getEpsilonInvPrefactor(key);
604 o2.template value_nz<Sys_eqs>(p_map, key, cols, kk_coeff, comp);
630 const vtype &getVector()
const {
678 template<
typename particles_type>
680 double oversampling_factor = dcpse_oversampling_factor,
681 support_options opt = support_options::RADIUS) {
686 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
690 template<
typename particles_type>
692 delete (Dcpse<particles_type::dims, particles_type> *) dcpse;
695 template<
typename operand_type>
697 operator()(operand_type arg) {
698 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
703 template<
unsigned int prp,
typename particles_type>
705 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
706 dcpse_temp->template DrawKernel<prp>(
particles, k);
710 template<
unsigned int prp,
typename particles_type>
712 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
713 dcpse_temp->template DrawKernelNN<prp>(
particles, k);
717 template<
typename particles_type>
719 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
729 template<
typename particles_type>
731 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
768 template<
typename particles_type>
770 double oversampling_factor = dcpse_oversampling_factor,
771 support_options opt = support_options::RADIUS) {
776 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
778 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
780 new(dcpse_ptr) Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
785 template<
typename particles_type>
787 delete (Dcpse<particles_type::dims, particles_type> *) dcpse;
790 template<
typename operand_type>
793 operator()(operand_type arg) {
794 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
799 template<
unsigned int prp,
typename particles_type>
801 auto dcpse2 = (Dcpse<particles_type::dims, particles_type> *) dcpse;
802 dcpse2->template DrawKernel<prp>(
particles, k);
806 template<
typename particles_type>
808 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
818 template<
typename particles_type>
820 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
855 template<
typename particles_type>
857 double oversampling_factor = dcpse_oversampling_factor,
858 support_options opt = support_options::RADIUS) {
863 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
866 template<
typename particles_type>
868 delete (Dcpse<particles_type::dims, particles_type> *) dcpse;
871 template<
typename operand_type>
873 operator()(operand_type arg) {
874 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
884 template<
typename particles_type>
886 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
891 template<
typename particles_type>
893 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
933 template<
typename particles_type>
935 double oversampling_factor = dcpse_oversampling_factor,
936 support_options opt = support_options::RADIUS) {
937 typedef Dcpse<particles_type::dims, particles_type> DCPSE_type;
941 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
947 new(dcpse_ptr) Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
952 template<
typename particles_type>
955 delete &(((Dcpse<particles_type::dims, particles_type> *) dcpse)[i]);
959 template<
typename operand_type>
961 operator()(operand_type arg) {
962 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
965 *(dcpse_type(*)[operand_type::vtype::dims]) dcpse);
968 template<
unsigned int prp,
typename particles_type>
970 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
973 dcpse_ptr[i].template DrawKernel<prp>(
particles, i, k);
983 template<
typename particles_type>
985 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
987 dcpse_ptr[i].initializeUpdate(
particles);
1026 template<
typename particles_type>
1028 double oversampling_factor = dcpse_oversampling_factor, support_options opt = support_options::RADIUS) {
1029 typedef Dcpse<particles_type::dims, particles_type> DCPSE_type;
1033 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1037 new(dcpse_ptr) Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1041 new(dcpse_ptr) Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1046 template<
typename operand_type>
1048 operator()(operand_type arg) {
1049 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1052 *(dcpse_type(*)[operand_type::vtype::dims]) dcpse);
1088 template<
typename particles_type>
1090 double oversampling_factor = dcpse_oversampling_factor,
1091 support_options opt = support_options::RADIUS) {
1092 typedef Dcpse<particles_type::dims, particles_type> DCPSE_type;
1096 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1102 new(dcpse_ptr) Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1107 template<
typename operand_type>
1109 operator()(operand_type arg) {
1110 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1113 *(dcpse_type(*)[operand_type::vtype::dims]) dcpse);
1117 template<
typename particles_type>
1119 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1127 template<
unsigned int prp,
typename particles_type>
1129 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1132 dcpse_ptr[i].template DrawKernel<prp>(
particles, k);
1136 template<
typename particles_type>
1138 delete (Dcpse<particles_type::dims, particles_type> *) dcpse;
1145 template<
typename particles_type>
1147 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1149 dcpse_ptr[i].initializeUpdate(
particles);
1190 template<
typename particles_type>
1192 double oversampling_factor = dcpse_oversampling_factor,
1193 support_options opt = support_options::RADIUS) {
1194 typedef Dcpse<particles_type::dims, particles_type> DCPSE_type;
1198 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1204 new(dcpse_ptr) Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1209 template<
typename operand_type>
1211 operator()(operand_type arg) {
1212 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1215 *(dcpse_type(*)[operand_type::vtype::dims]) dcpse);
1223 template<
typename particles_type>
1225 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1227 dcpse_ptr[i].initializeUpdate(
particles);
1267 template<
typename particles_type>
1269 double oversampling_factor = dcpse_oversampling_factor,
1270 support_options opt = support_options::RADIUS) {
1271 typedef Dcpse<particles_type::dims, particles_type> DCPSE_type;
1275 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1281 new(dcpse_ptr) Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1288 template<
typename operand_type1,
typename operand_type2>
1290 operator()(operand_type1 arg, operand_type2 arg2) {
1291 typedef Dcpse<operand_type2::vtype::dims, typename operand_type2::vtype> dcpse_type;
1295 *(dcpse_type(*)[operand_type2::vtype::dims]) dcpse);
1298 template<
typename particles_type>
1300 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1308 template<
unsigned int prp,
typename particles_type>
1310 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1313 dcpse_ptr[i].template DrawKernel<prp>(
particles, i, k);
1323 template<
typename particles_type>
1325 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1327 dcpse_ptr[i].initializeUpdate(
particles);
1347 class Derivative_xy {
1364 template<
typename particles_type>
1366 double oversampling_factor = dcpse_oversampling_factor,
1367 support_options opt = support_options::RADIUS) {
1373 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1375 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1377 new(dcpse_ptr) Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1382 template<
typename particles_type>
1384 delete (Dcpse<particles_type::dims, particles_type> *) dcpse;
1387 template<
typename operand_type>
1389 operator()(operand_type arg) {
1390 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1395 template<
unsigned int prp,
typename particles_type>
1397 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1399 dcpse_ptr[0].template DrawKernel<prp>(
particles, k);
1403 template<
typename particles_type>
1405 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1415 template<
typename particles_type>
1417 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1418 dcpse_temp->initializeUpdate(
particles);
1434 class Derivative_yz {
1451 template<
typename particles_type>
1453 double oversampling_factor = dcpse_oversampling_factor,
1454 support_options opt = support_options::RADIUS) {
1460 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1462 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1464 new(dcpse_ptr) Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1469 template<
typename particles_type>
1471 delete (Dcpse<particles_type::dims, particles_type> *) dcpse;
1474 template<
typename operand_type>
1476 operator()(operand_type arg) {
1477 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1482 template<
unsigned int prp,
typename particles_type>
1484 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1486 dcpse_ptr[0].template DrawKernel<prp>(
particles, k);
1490 template<
typename particles_type>
1492 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1502 template<
typename particles_type>
1504 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1505 dcpse_temp->initializeUpdate(
particles);
1521 class Derivative_xz {
1538 template<
typename particles_type>
1540 double oversampling_factor = dcpse_oversampling_factor,
1541 support_options opt = support_options::RADIUS) {
1547 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1549 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1551 new(dcpse_ptr) Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1556 template<
typename particles_type>
1558 delete (Dcpse<particles_type::dims, particles_type> *) dcpse;
1561 template<
typename operand_type>
1563 operator()(operand_type arg) {
1564 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1569 template<
unsigned int prp,
typename particles_type>
1571 Dcpse<particles_type::dims, particles_type> *dcpse_ptr = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1573 dcpse_ptr[0].template DrawKernel<prp>(
particles, k);
1577 template<
typename particles_type>
1579 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1589 template<
typename particles_type>
1591 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1592 dcpse_temp->initializeUpdate(
particles);
1609 class Derivative_xx {
1626 template<
typename particles_type>
1628 double oversampling_factor = dcpse_oversampling_factor,
1629 support_options opt = support_options::RADIUS) {
1635 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1638 template<
typename particles_type>
1640 delete (Dcpse<particles_type::dims, particles_type> *) dcpse;
1643 template<
typename operand_type>
1645 operator()(operand_type arg) {
1646 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1651 template<
typename particles_type>
1653 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1658 template<
unsigned int prp,
typename particles_type>
1660 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1661 dcpse_temp->template DrawKernel<prp>(
particles, k);
1670 template<
typename particles_type>
1672 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1673 dcpse_temp->initializeUpdate(
particles);
1690 class Derivative_yy {
1707 template<
typename particles_type>
1709 double oversampling_factor = dcpse_oversampling_factor,
1710 support_options opt = support_options::RADIUS) {
1716 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1719 template<
typename particles_type>
1721 delete (Dcpse<particles_type::dims, particles_type> *) dcpse;
1724 template<
typename operand_type>
1726 operator()(operand_type arg) {
1727 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1732 template<
typename particles_type>
1734 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1739 template<
unsigned int prp,
typename particles_type>
1741 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1742 dcpse_temp->template DrawKernel<prp>(
particles, k);
1751 template<
typename particles_type>
1753 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1754 dcpse_temp->initializeUpdate(
particles);
1770 class Derivative_zz {
1787 template<
typename particles_type>
1789 double oversampling_factor = dcpse_oversampling_factor,
1790 support_options opt = support_options::RADIUS) {
1795 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1798 template<
typename particles_type>
1800 delete (Dcpse<particles_type::dims, particles_type> *) dcpse;
1803 template<
typename operand_type>
1805 operator()(operand_type arg) {
1806 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1811 template<
typename particles_type>
1813 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1818 template<
unsigned int prp,
typename particles_type>
1820 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1821 dcpse_temp->template DrawKernel<prp>(
particles, k);
1830 template<
typename particles_type>
1832 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1833 dcpse_temp->initializeUpdate(
particles);
1839 class Derivative_xxx {
1845 template<
typename particles_type>
1847 double oversampling_factor = dcpse_oversampling_factor,
1848 support_options opt = support_options::RADIUS) {
1854 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1857 template<
typename operand_type>
1860 operator()(operand_type arg) {
1861 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1866 template<
typename particles_type>
1868 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1873 template<
unsigned int prp,
typename particles_type>
1875 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1876 dcpse_temp->template DrawKernel<prp>(
particles, k);
1885 template<
typename particles_type>
1887 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1888 dcpse_temp->initializeUpdate(
particles);
1894 class Derivative_xxy {
1900 template<
typename particles_type>
1902 double oversampling_factor = dcpse_oversampling_factor,
1903 support_options opt = support_options::RADIUS) {
1909 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1912 template<
typename operand_type>
1915 operator()(operand_type arg) {
1916 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1921 template<
typename particles_type>
1923 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1928 template<
unsigned int prp,
typename particles_type>
1930 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1931 dcpse_temp->template DrawKernel<prp>(
particles, k);
1940 template<
typename particles_type>
1942 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1943 dcpse_temp->initializeUpdate(
particles);
1949 class Derivative_yyx {
1955 template<
typename particles_type>
1957 double oversampling_factor = dcpse_oversampling_factor,
1958 support_options opt = support_options::RADIUS) {
1964 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
1967 template<
typename operand_type>
1970 operator()(operand_type arg) {
1971 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
1976 template<
typename particles_type>
1978 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1983 template<
unsigned int prp,
typename particles_type>
1985 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1986 dcpse_temp->template DrawKernel<prp>(
particles, k);
1995 template<
typename particles_type>
1997 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
1998 dcpse_temp->initializeUpdate(
particles);
2004 class Derivative_yyy {
2010 template<
typename particles_type>
2012 double oversampling_factor = dcpse_oversampling_factor,
2013 support_options opt = support_options::RADIUS) {
2019 dcpse =
new Dcpse<particles_type::dims, particles_type>(parts, p, ord, rCut, oversampling_factor, opt);
2022 template<
typename operand_type>
2025 operator()(operand_type arg) {
2026 typedef Dcpse<operand_type::vtype::dims, typename operand_type::vtype> dcpse_type;
2031 template<
typename particles_type>
2033 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
2038 template<
unsigned int prp,
typename particles_type>
2040 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
2041 dcpse_temp->template DrawKernel<prp>(
particles, k);
2050 template<
typename particles_type>
2052 auto dcpse_temp = (Dcpse<particles_type::dims, particles_type> *) dcpse;
2053 dcpse_temp->initializeUpdate(
particles);
This class implement the point shape in an N-dimensional space.
Grid key for a distributed grid.
Unknown operation specialization.
__device__ __host__ const T & get(unsigned int i) const
Get coordinate.
static const unsigned int dims
dimensions of space
__device__ __host__ void zero()
Set to zero the point coordinate.
__device__ __host__ size_t getKey() const
Get the key.
aggregate of properties, from a list of object if create a struct that follow the OPENFPM native stru...
OutputIteratorT OffsetT ReductionOpT OuputT init
< [in] The initial value of the reduction
Implementation of 1-D std::vector like structure.