OpenFPM  5.2.0
Project that contain the implementation of distributed structures
DCPSE_surface_op.hpp
1 //
2 // Created by Abhinav Singh on 15.11.21.
3 //
4 
5 #ifndef OPENFPM_PDATA_DCPSE_SURFACE_OP_HPP
6 #define OPENFPM_PDATA_DCPSE_SURFACE_OP_HPP
7 #ifdef HAVE_EIGEN
8 
9 #include "DCPSE/DCPSE_op/DCPSE_op.hpp"
10 
11 template<unsigned int NORMAL_ID, typename VerletList_type>
12 class SurfaceDerivative_x {
13 
14  void *dcpse;
15 
16 public:
17 
32  template<typename particles_type>
33  SurfaceDerivative_x(
34  particles_type &parts,
35  VerletList_type& verletList,
36  unsigned int ord,
37  typename particles_type::stype rCut,
38  typename particles_type::stype nSpacing,
39  unsigned int nCount,
40  support_options opt = support_options::RADIUS
41  ) {
43  p.zero();
44  p.get(0) = 1;
45 
46  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
47  }
48 
49  template<typename particles_type>
50  void deallocate(particles_type &parts) {
51  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
52  }
53 
54  template<typename operand_type>
56  operator()(operand_type arg) {
57  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
58 
59  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
60  }
61 
62  template<typename particles_type>
63  void checkMomenta(particles_type &particles) {
64  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
65  dcpse_temp->checkMomenta(particles);
66 
67  }
68 
69  template<unsigned int prp, typename particles_type>
70  void DrawKernel(particles_type &particles, int k) {
71  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
72  dcpse_temp->template DrawKernel<prp>(particles, k);
73 
74  }
75 
81  template<typename particles_type>
82  void save(particles_type &particles, const std::string &file) {
83  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
84  dcpse_temp->save(file);
85  }
91  template<typename particles_type>
92  void load(particles_type &particles, const std::string &file) {
93  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
94  dcpse_temp->load(file);
95  }
96 
102  template<typename particles_type>
103  void update(particles_type &particles) {
104  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
105  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
106  dcpse_temp->initializeUpdate(particles);
107  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
108  }
109 };
110 
125 template<unsigned int NORMAL_ID, typename VerletList_type>
126 class SurfaceDerivative_y {
127 
128  void *dcpse;
129 
130 public:
131  template<typename particles_type>
132  SurfaceDerivative_y(
133  particles_type &parts,
134  VerletList_type& verletList,
135  unsigned int ord,
136  typename particles_type::stype rCut,
137  typename particles_type::stype nSpacing,
138  unsigned int nCount,
139  support_options opt = support_options::RADIUS
140  ) {
142  p.zero();
143  p.get(1) = 1;
144 
145  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
146  }
147 
148  template<typename particles_type>
149  void deallocate(particles_type &parts) {
150  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
151  }
152 
153  template<typename operand_type>
155  operator()(operand_type arg) {
156  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
157 
158  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
159  }
160 
161  template<typename particles_type>
162  void checkMomenta(particles_type &particles) {
163  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
164  dcpse_temp->checkMomenta(particles);
165 
166  }
167 
168  template<unsigned int prp, typename particles_type>
169  void DrawKernel(particles_type &particles, int k) {
170  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
171  dcpse_temp->template DrawKernel<prp>(particles, k);
172 
173  }
174 
175 
181  template<typename particles_type>
182  void save(particles_type &particles, const std::string &file) {
183  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
184  dcpse_temp->save(file);
185  }
191  template<typename particles_type>
192  void load(particles_type &particles, const std::string &file) {
193  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
194  dcpse_temp->load(file);
195  }
201  template<typename particles_type>
202  void update(particles_type &particles) {
203  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
204  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
205  dcpse_temp->initializeUpdate(particles);
206  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
207 
208  }
209 };
210 
225 template<unsigned int NORMAL_ID, typename VerletList_type>
226 class SurfaceDerivative_z {
227 
228  void *dcpse;
229 
230 public:
231  template<typename particles_type>
232  SurfaceDerivative_z(
233  particles_type &parts,
234  VerletList_type& verletList,
235  unsigned int ord,
236  typename particles_type::stype rCut,
237  typename particles_type::stype nSpacing,
238  unsigned int nCount,
239  support_options opt = support_options::RADIUS
240  ) {
242  p.zero();
243  p.get(2) = 1;
244 
245  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
246  }
247 
248  template<typename particles_type>
249  void deallocate(particles_type &parts) {
250  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
251  }
252 
253  template<typename operand_type>
255  operator()(operand_type arg) {
256  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
257 
258  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
259  }
260 
261  template<typename particles_type>
262  void checkMomenta(particles_type &particles) {
263  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
264  dcpse_temp->checkMomenta(particles);
265 
266  }
267 
268  template<unsigned int prp, typename particles_type>
269  void DrawKernel(particles_type &particles, int k) {
270  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
271  dcpse_temp->template DrawKernel<prp>(particles, k);
272 
273  }
274 
280  template<typename particles_type>
281  void save(particles_type &particles, const std::string &file) {
282  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
283  dcpse_temp->save(file);
284  }
290  template<typename particles_type>
291  void load(particles_type &particles, const std::string &file) {
292  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
293  dcpse_temp->load(file);
294  }
300  template<typename particles_type>
301  void update(particles_type &particles) {
302  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
303  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
304  dcpse_temp->initializeUpdate(particles);
305  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
306 
307  }
308 };
309 
310 
325 template<unsigned int NORMAL_ID, typename VerletList_type>
326 class Laplace_Beltrami {
327 
328  void *dcpse;
329 
330 public:
331  template<typename particles_type>
332  Laplace_Beltrami(
333  particles_type &parts,
334  VerletList_type& verletList,
335  unsigned int ord,
336  typename particles_type::stype rCut,
337  typename particles_type::stype nSpacing,
338  unsigned int nCount,
339  support_options opt = support_options::RADIUS
340  ) {
342  p.zero();
343  p.get(0) = 2;
344  p.get(1) = 2;
345  p.get(2) = 2;
346 
347  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
348  }
349 
350  template<typename particles_type>
351  void deallocate(particles_type &parts) {
352  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
353  }
354 
355  template<typename operand_type>
357  operator()(operand_type arg) {
358  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
359 
360  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
361  }
362 
363  template<typename particles_type>
364  void checkMomenta(particles_type &particles) {
365  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
366  dcpse_temp->checkMomenta(particles);
367 
368  }
369 
370  template<unsigned int prp, typename particles_type>
371  void DrawKernel(particles_type &particles, int k) {
372  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
373  dcpse_temp->template DrawKernel<prp>(particles, k);
374 
375  }
376 
382  template<typename particles_type>
383  void save(particles_type &particles, const std::string &file) {
384  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
385  dcpse_temp->save(file);
386  }
392  template<typename particles_type>
393  void load(particles_type &particles, const std::string &file) {
394  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
395  dcpse_temp->load(file);
396  }
402  template<typename particles_type>
403  void update(particles_type &particles) {
404  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
405  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
406  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
407  dcpse_temp->initializeUpdate(particles);
408  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
409  }
410 };
411 
426 template<unsigned int NORMAL_ID, typename VerletList_type>
427 class SurfaceDerivative_xx {
428 
429  void *dcpse;
430 
431 public:
432  template<typename particles_type>
433  SurfaceDerivative_xx(
434  particles_type &parts,
435  VerletList_type& verletList,
436  unsigned int ord,
437  typename particles_type::stype rCut,
438  typename particles_type::stype nSpacing,
439  unsigned int nCount,
440  support_options opt = support_options::RADIUS
441  ) {
443  p.zero();
444  p.get(0) = 2;
445 
446  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
447  }
448 
449  template<typename particles_type>
450  void deallocate(particles_type &parts) {
451  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
452  }
453 
454  template<typename operand_type>
456  operator()(operand_type arg) {
457  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
458 
459  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
460  }
461 
462  template<typename particles_type>
463  void checkMomenta(particles_type &particles) {
464  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
465  dcpse_temp->checkMomenta(particles);
466 
467  }
468 
469  template<unsigned int prp, typename particles_type>
470  void DrawKernel(particles_type &particles, int k) {
471  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
472  dcpse_temp->template DrawKernel<prp>(particles, k);
473 
474  }
475 
481  template<typename particles_type>
482  void save(particles_type &particles, const std::string &file) {
483  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
484  dcpse_temp->save(file);
485  }
491  template<typename particles_type>
492  void load(particles_type &particles, const std::string &file) {
493  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
494  dcpse_temp->load(file);
495  }
501  template<typename particles_type>
502  void update(particles_type &particles) {
503  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
504  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
505  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
506  dcpse_temp->initializeUpdate(particles);
507  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
508  }
509 };
510 
525 template<unsigned int NORMAL_ID, typename VerletList_type>
526 class SurfaceDerivative_yy {
527 
528  void *dcpse;
529 
530 public:
531  template<typename particles_type>
532  SurfaceDerivative_yy(
533  particles_type &parts,
534  VerletList_type& verletList,
535  unsigned int ord,
536  typename particles_type::stype rCut,
537  typename particles_type::stype nSpacing,
538  unsigned int nCount,
539  support_options opt = support_options::RADIUS
540  ) {
542  p.zero();
543  p.get(1) = 2;
544  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
545  }
546 
547  template<typename particles_type>
548  void deallocate(particles_type &parts) {
549  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
550  }
551 
552  template<typename operand_type>
554  operator()(operand_type arg) {
555  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
556 
557  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
558  }
559 
560  template<typename particles_type>
561  void checkMomenta(particles_type &particles) {
562  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
563  dcpse_temp->checkMomenta(particles);
564 
565  }
566 
567  template<unsigned int prp, typename particles_type>
568  void DrawKernel(particles_type &particles, int k) {
569  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
570  dcpse_temp->template DrawKernel<prp>(particles, k);
571 
572  }
573 
579  template<typename particles_type>
580  void save(particles_type &particles, const std::string &file) {
581  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
582  dcpse_temp->save(file);
583  }
589  template<typename particles_type>
590  void load(particles_type &particles, const std::string &file) {
591  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
592  dcpse_temp->load(file);
593  }
599  template<typename particles_type>
600  void update(particles_type &particles) {
601  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
602  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
603  dcpse_temp->initializeUpdate(particles);
604  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
605 
606  }
607 };
608 
623 template<unsigned int NORMAL_ID, typename VerletList_type>
624 class SurfaceDerivative_zz {
625 
626  void *dcpse;
627 
628 public:
629  template<typename particles_type>
630  SurfaceDerivative_zz(
631  particles_type &parts,
632  VerletList_type& verletList,
633  unsigned int ord,
634  typename particles_type::stype rCut,
635  typename particles_type::stype nSpacing,
636  unsigned int nCount,
637  support_options opt = support_options::RADIUS
638  ) {
640  p.zero();
641  p.get(2) = 2;
642 
643  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
644  }
645 
646  template<typename particles_type>
647  void deallocate(particles_type &parts) {
648  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
649  }
650 
651  template<typename operand_type>
653  operator()(operand_type arg) {
654  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
655 
656  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
657  }
658 
659  template<typename particles_type>
660  void checkMomenta(particles_type &particles) {
661  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
662  dcpse_temp->checkMomenta(particles);
663 
664  }
665 
666  template<unsigned int prp, typename particles_type>
667  void DrawKernel(particles_type &particles, int k) {
668  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
669  dcpse_temp->template DrawKernel<prp>(particles, k);
670 
671  }
672 
678  template<typename particles_type>
679  void save(particles_type &particles, const std::string &file) {
680  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
681  dcpse_temp->save(file);
682  }
688  template<typename particles_type>
689  void load(particles_type &particles, const std::string &file) {
690  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
691  dcpse_temp->load(file);
692  }
698  template<typename particles_type>
699  void update(particles_type &particles) {
700  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
701  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
702  particles.write("With Normal");
703  dcpse_temp->initializeUpdate(particles);
704  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
705 
706  }
707 };
708 
709 template<unsigned int NORMAL_ID, typename VerletList_type>
710 class SurfaceDerivative_xy {
711 
712  void *dcpse;
713 
714 public:
727  template<typename particles_type>
728  SurfaceDerivative_xy(
729  particles_type &parts,
730  VerletList_type& verletList,
731  unsigned int ord,
732  typename particles_type::stype rCut,
733  typename particles_type::stype nSpacing,
734  unsigned int nCount,
735  support_options opt = support_options::RADIUS
736  ) {
738  p.zero();
739  p.get(0) = 1;
740  p.get(1) = 1;
741 
742  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
743  }
744 
745  template<typename particles_type>
746  void deallocate(particles_type &parts) {
747  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
748  }
749 
750  template<typename operand_type>
752  operator()(operand_type arg) {
753  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
754 
755  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
756  }
757 
758  template<typename particles_type>
759  void checkMomenta(particles_type &particles) {
760  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
761  dcpse_temp->checkMomenta(particles);
762 
763  }
764 
765  template<unsigned int prp, typename particles_type>
766  void DrawKernel(particles_type &particles, int k) {
767  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
768  dcpse_temp->template DrawKernel<prp>(particles, k);
769 
770  }
771 
777  template<typename particles_type>
778  void save(particles_type &particles, const std::string &file) {
779  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
780  dcpse_temp->save(file);
781  }
787  template<typename particles_type>
788  void load(particles_type &particles, const std::string &file) {
789  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
790  dcpse_temp->load(file);
791  }
797  template<typename particles_type>
798  void update(particles_type &particles) {
799  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
800  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
801  dcpse_temp->initializeUpdate(particles);
802  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
803 
804  }
805 };
806 
821 template<unsigned int NORMAL_ID, typename VerletList_type>
822 class SurfaceDerivative_yz {
823 
824  void *dcpse;
825 
826 public:
827  template<typename particles_type>
828  SurfaceDerivative_yz(
829  particles_type &parts,
830  VerletList_type& verletList,
831  unsigned int ord,
832  typename particles_type::stype rCut,
833  typename particles_type::stype nSpacing,
834  unsigned int nCount,
835  support_options opt = support_options::RADIUS
836  ) {
838  p.zero();
839  p.get(1) = 1;
840  p.get(2) = 1;
841 
842  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
843  }
844 
845  template<typename particles_type>
846  void deallocate(particles_type &parts) {
847  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
848  }
849 
850  template<typename operand_type>
852  operator()(operand_type arg) {
853  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
854 
855  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
856  }
857 
858  template<typename particles_type>
859  void checkMomenta(particles_type &particles) {
860  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
861  dcpse_temp->checkMomenta(particles);
862 
863  }
864 
865  template<unsigned int prp, typename particles_type>
866  void DrawKernel(particles_type &particles, int k) {
867  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
868  dcpse_temp->template DrawKernel<prp>(particles, k);
869 
870  }
871 
877  template<typename particles_type>
878  void save(particles_type &particles, const std::string &file) {
879  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
880  dcpse_temp->save(file);
881  }
887  template<typename particles_type>
888  void load(particles_type &particles, const std::string &file) {
889  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
890  dcpse_temp->load(file);
891  }
897  template<typename particles_type>
898  void update(particles_type &particles) {
899  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
900  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
901  dcpse_temp->initializeUpdate(particles);
902  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
903 
904  }
905 };
906 
921 template<unsigned int NORMAL_ID, typename VerletList_type>
922 class SurfaceDerivative_xz {
923 
924  void *dcpse;
925 
926 public:
927  template<typename particles_type>
928  SurfaceDerivative_xz(
929  particles_type &parts,
930  VerletList_type& verletList,
931  unsigned int ord,
932  typename particles_type::stype rCut,
933  typename particles_type::stype nSpacing,
934  unsigned int nCount,
935  support_options opt = support_options::RADIUS
936  ) {
938  p.zero();
939  p.get(0) = 1;
940  p.get(2) = 1;
941 
942  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
943  }
944 
945  template<typename particles_type>
946  void deallocate(particles_type &parts) {
947  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
948  }
949 
950  template<typename operand_type>
952  operator()(operand_type arg) {
953  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
954 
955  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
956  }
957 
958  template<typename particles_type>
959  void checkMomenta(particles_type &particles) {
960  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
961  dcpse_temp->checkMomenta(particles);
962 
963  }
964 
965  template<unsigned int prp, typename particles_type>
966  void DrawKernel(particles_type &particles, int k) {
967  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
968  dcpse_temp->template DrawKernel<prp>(particles, k);
969 
970  }
971 
977  template<typename particles_type>
978  void save(particles_type &particles, const std::string &file) {
979  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
980  dcpse_temp->save(file);
981  }
987  template<typename particles_type>
988  void load(particles_type &particles, const std::string &file) {
989  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
990  dcpse_temp->load(file);
991  }
997  template<typename particles_type>
998  void update(particles_type &particles) {
999  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
1000  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
1001  dcpse_temp->initializeUpdate(particles);
1002  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
1003 
1004  }
1005 };
1006 
1022 template<unsigned int NORMAL_ID, typename VerletList_type>
1023 class SurfaceDerivative_G {
1024 
1025  void *dcpse;
1026 
1027 public:
1028  template<typename particles_type>
1029  SurfaceDerivative_G(
1030  particles_type &parts,
1031  VerletList_type& verletList,
1032  unsigned int ord,
1033  typename particles_type::stype rCut,
1034  typename particles_type::stype nSpacing,
1035  unsigned int nCount,
1037  support_options opt = support_options::RADIUS
1038  ) {
1039  dcpse = new SurfaceDcpse<particles_type::dims, VerletList_type, particles_type>(parts, parts, verletList, p, ord, rCut,nSpacing, nCount, value_t<NORMAL_ID>(), opt);
1040  }
1041 
1042  template<typename particles_type>
1043  void deallocate(particles_type &parts) {
1044  delete (SurfaceDcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
1045  }
1046 
1047  template<typename operand_type>
1049  operator()(operand_type arg) {
1050  typedef Dcpse<operand_type::vtype::dims, VerletList_type, typename operand_type::vtype> dcpse_type;
1051 
1052  return vector_dist_expression_op<operand_type, dcpse_type, VECT_DCPSE>(arg, *(dcpse_type *) dcpse);
1053  }
1054 
1055  template<typename particles_type>
1056  void checkMomenta(particles_type &particles) {
1057  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
1058  dcpse_temp->checkMomenta(particles);
1059 
1060  }
1061 
1062  template<unsigned int prp, typename particles_type>
1063  void DrawKernel(particles_type &particles, int k) {
1064  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
1065  dcpse_temp->template DrawKernel<prp>(particles, k);
1066 
1067  }
1068 
1074  template<typename particles_type>
1075  void save(particles_type &particles, const std::string &file) {
1076  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
1077  dcpse_temp->save(file);
1078  }
1084  template<typename particles_type>
1085  void load(particles_type &particles, const std::string &file) {
1086  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
1087  dcpse_temp->load(file);
1088  }
1094  template<typename particles_type>
1095  void update(particles_type &particles) {
1096  auto dcpse_temp = (Dcpse<particles_type::dims, VerletList_type, particles_type> *) dcpse;
1097  dcpse_temp->template createNormalParticles<NORMAL_ID>(particles);
1098  dcpse_temp->initializeUpdate(particles);
1099  dcpse_temp->accumulateAndDeleteNormalParticles(particles,particles);
1100 
1101  }
1102 };
1103 #endif //Eigen
1104 #endif //OPENFPM_PDATA_DCPSE_SURFACE_OP_HPP
This class implement the point shape in an N-dimensional space.
Definition: Point.hpp:28
Unknown operation specialization.
Distributed vector.
bool write(std::string out, int opt=VTK_WRITER)
Output particle position and properties.