7 #ifndef _EXAMPLES__BORIS__BINDINGS__WRAPPER_INTERFACE_HPP_
8 #define _EXAMPLES__BORIS__BINDINGS__WRAPPER_INTERFACE_HPP_
17 #include "../particle_cloud.hpp"
19 #define UNUSED(expr) (void)(expr)
47 virtual size_t pack_positions(
const particle_cloud_type& particles, scalar* packed) = 0;
48 virtual size_t pack_velocities(
const particle_cloud_type& particles, scalar* packed) = 0;
49 virtual size_t pack_charges(
const particle_cloud_type& particles, scalar* packed) = 0;
50 virtual size_t pack_masses(
const particle_cloud_type& particles, scalar* packed) = 0;
51 virtual size_t pack_all(
const particle_cloud_type& particles,
52 scalar* packed_positions, scalar* packed_velocities,
53 scalar* packed_charges, scalar* packed_masses) = 0;
59 external_e_field_evaluate(
const particle_cloud_type& particles,
const time
t) = 0;
62 e_field_evaluate(
const particle_cloud_type& particles,
const time
t) = 0;
65 b_field_evaluate(
const particle_cloud_type& particles,
const time
t) = 0;
68 force_evaluate(
const particle_cloud_type& particles,
const time
t) = 0;
73 virtual scalar energy(
const particle_cloud_type& particles,
const time
t) = 0;
75 virtual scalar omega_b()
const = 0;
76 virtual scalar omega_e()
const = 0;
77 virtual scalar epsilon()
const = 0;
79 virtual void log(el::base::type::ostream_t& os)
const = 0;
83 template<
typename scalar,
typename time>
90 template<
typename scalar,
typename time,
typename ArgT>
97 template<
typename scalar,
typename time,
typename ArgT,
typename... ArgsT>
101 setup(wrapper, args...);
108 #endif // _EXAMPLES__BORIS__BINDINGS__WRAPPER_INTERFACE_HPP_
void setup(shared_ptr< WrapperInterface< scalar, time >> wrapper, ArgT arg, ArgsT...args)
vector< precision > ParticleCloudComponent
void get_b_field_vector(const SimplePhysicsSolverConfig *config, double *b_field_vector)
vector< precision > ParticleComponent
virtual ~WrapperInterface()
shared_ptr< ParticleCloud< scalar > > particle_cloud_type