PFASST++
wrapper_simple_physics_solver.hpp
Go to the documentation of this file.
1 
4 #ifndef _EXAMPLES__BORIS__BINDINGS__WRAPPER_SIMPLE_PHYSICS_SOLVER_HPP_
5 #define _EXAMPLES__BORIS__BINDINGS__WRAPPER_SIMPLE_PHYSICS_SOLVER_HPP_
6 
7 #include <cstdlib>
8 #include <memory>
9 #include <utility>
10 using namespace std;
11 
12 #include "../particle_cloud.hpp"
13 #include "wrapper_interface.hpp"
14 
16 namespace solver = simple_physics_solver;
17 
18 
19 namespace pfasst
20 {
21  namespace examples
22  {
23  namespace boris
24  {
25  namespace bindings
26  {
30  template<
31  typename scalar,
32  typename time
33  >
35  : public WrapperInterface<scalar, time>
36  {
37  private:
38  shared_ptr<solver::SimplePhysicsSolverConfig> config;
39 
40  public:
41  typedef shared_ptr<ParticleCloud<scalar>> particle_cloud_type;
42 
43  protected:
44  virtual size_t vector_to_array(const vector<scalar>& vec, scalar* arr);
45  virtual size_t vector2d_to_array(const vector<scalar>& vec, scalar* arr);
46 
47  virtual size_t pack_positions(const particle_cloud_type& particles, scalar* packed) override;
48 
49  virtual size_t pack_velocities(const particle_cloud_type& particles, scalar* packed) override;
50 
51  virtual size_t pack_charges(const particle_cloud_type& particles, scalar* packed) override;
52 
53  virtual size_t pack_masses(const particle_cloud_type& particles, scalar* packed) override;
54 
55  virtual size_t pack_all(const particle_cloud_type& particles,
56  scalar* packed_positions, scalar* packed_velocities,
57  scalar* packed_charges, scalar* packed_masses) override;
58 
59  virtual vector<scalar> unpack_1d(const scalar* packed, const size_t num_particles);
60  virtual ParticleCloudComponent<scalar> unpack_2d(const scalar* packed,
61  const size_t num_particles);
62 
63  public:
65  virtual ~WrapperSimplePhysicsSolver();
66 
67  virtual ParticleCloudComponent<scalar> external_e_field_evaluate(const particle_cloud_type& particles, const time t) override;
68  virtual ParticleCloudComponent<scalar> e_field_evaluate(const particle_cloud_type& particles, const time t) override;
69  virtual ParticleCloudComponent<scalar> b_field_evaluate(const particle_cloud_type& particles, const time t) override;
70  virtual ParticleCloudComponent<scalar> force_evaluate(const particle_cloud_type& particles, const time t) override;
71  virtual scalar energy(const particle_cloud_type& particles, const time t) override;
72 
74  virtual ParticleCloudComponent<scalar> b_field_vecs(const particle_cloud_type& particles, const time t) override;
75 
76  virtual void set_config(shared_ptr<solver::SimplePhysicsSolverConfig> config);
77  virtual scalar omega_b() const;
78  virtual scalar omega_e() const;
79  virtual scalar epsilon() const;
80 
81  virtual void log(el::base::type::ostream_t& os) const;
82  };
83 
84 
86  template<typename scalar, typename time>
87  void setup(shared_ptr<WrapperSimplePhysicsSolver<scalar, time>> wrapper);
88 
90  template<typename scalar, typename time, typename ArgT>
91  void setup(shared_ptr<WrapperSimplePhysicsSolver<scalar, time>> wrapper, ArgT arg);
92 
94  template<typename scalar, typename time, typename ArgT, typename... ArgsT>
95  void setup(shared_ptr<WrapperSimplePhysicsSolver<scalar, time>> wrapper, ArgT arg, ArgsT... args);
96  } // ::pfasst::examples::boris::bindings
97  } // ::pfasst::examples::boris
98  } // ::pfasst::examples
99 } // ::pfasst
100 
102 
103 #endif // _EXAMPLES__BORIS__BINDINGS__WRAPPER_SIMPLE_PHYSICS_SOLVER_HPP_
STL namespace.
vector< precision > ParticleCloudComponent
void get_b_field_vector(const SimplePhysicsSolverConfig *config, double *b_field_vector)
vector< precision > ParticleComponent
Definition: particle.hpp:27
tuple t
Definition: plot.py:12
void setup(shared_ptr< WrapperSimplePhysicsSolver< scalar, time >> wrapper, ArgT arg, ArgsT...args)