5 #ifndef _EXAMPLES__BORIS__PARTICLE_CLOUD_HPP_
6 #define _EXAMPLES__BORIS__PARTICLE_CLOUD_HPP_
30 template<
typename precision>
37 template<
typename precision>
54 vector<MPI_Request> recv_request;
56 vector<MPI_Request> send_request;
67 const precision default_charge = precision(1.0),
68 const precision default_mass = precision(1.0));
71 virtual void zero()
override;
74 inline size_t size()
const;
75 inline size_t dim()
const;
80 vector<precision>& charges();
81 const vector<precision>& charges()
const;
82 vector<precision>& masses();
83 const vector<precision>& masses()
const;
87 shared_ptr<Particle<precision>> operator[](
const size_t index)
const;
89 shared_ptr<Particle<precision>> at(
const size_t index)
const;
93 vector<shared_ptr<Particle<precision>>> particles()
const;
98 virtual precision
norm0()
const;
103 virtual void recv(
ICommunicator* comm,
int tag,
bool blocking)
override;
104 virtual void send(
ICommunicator* comm,
int tag,
bool blocking)
override;
109 virtual void log(el::base::type::ostream_t& os)
const;
116 template<
typename precision>
122 template<
typename precision>
129 template<
typename precision>
135 template<
typename precision>
143 template<
typename precision>
148 template<
typename precision>
155 template<
typename precision>
166 ParticleCloudFactory(
const size_t num_particles,
const size_t dim,
const precision default_charge,
167 const precision default_mass);
168 inline size_t num_particles()
const;
169 inline size_t dim()
const;
170 virtual shared_ptr<encap::Encapsulation<precision>> create(
const encap::EncapType);
180 #endif // _EXAMPLES__BORIS__PARTICLE_CLOUD_HPP_
MAKE_LOGGABLE(shared_ptr< ParticleCloud< precision >>, sp_cloud, os)
static void zero(vector< precision > &data)
vector< precision > _charges
static vector< precision > distance_to_reference(const shared_ptr< ParticleCloud< precision >> &cloud, const shared_ptr< Particle< precision >> &reference)
static precision distance(const shared_ptr< Particle< precision >> &first, const shared_ptr< Particle< precision >> &second)
vector< precision > ParticleCloudComponent
vector< precision > ParticleComponent
Abstract interface of factory for creating Encapsulation objects.
ParticleCloudComponent< precision > _velocities
vector< precision > _masses
Data/solution encapsulation.
precision _default_charge
ParticleCloudComponent< precision > _positions
Abstract interface for communicators.
static precision norm0(const vector< precision > &data)
precision _default_charge