Particle database class for two dimensions. More...
#include <particledatabase.hpp>
Public Member Functions | |
ParticleDataBase2D () | |
Constructor. | |
ParticleDataBase2D (const ParticleDataBase2D &pdb) | |
Copy constructor. | |
ParticleDataBase2D (std::istream &s) | |
Constructor for loading particle statistics from a file. | |
~ParticleDataBase2D () | |
Destructor. | |
const ParticleDataBase2D & | operator= (const ParticleDataBase2D &pdb) |
Assignment. | |
virtual Particle2D & | particle (uint32_t i) |
Returns a reference to particle i. | |
virtual const Particle2D & | particle (uint32_t i) const |
Returns a const reference to particle i. | |
virtual const ParticleP2D & | trajectory_point (uint32_t i, uint32_t j) const |
Gets the particle i trajectory point j as particle point. | |
void | add_particle (double IQ, double q, double m, const ParticleP2D &x) |
Add one particle. | |
void | add_particle (const Particle2D &p) |
Add one particle. | |
void | add_2d_beam_with_energy (uint32_t N, double J, double q, double m, double E, double Tp, double Tt, double x1, double y1, double x2, double y2) |
Add a 2d beam with energies. | |
void | add_2d_beam_with_velocity (uint32_t N, double J, double q, double m, double v, double dvp, double dvt, double x1, double y1, double x2, double y2) |
Add a 2d beam with velocities. | |
void | add_2d_KV_beam_with_emittance (uint32_t N, double I, double q, double m, double a, double b, double e, double Ex, double x0, double y0) |
Add a 2d beam with defined KV emittance. | |
void | add_2d_gaussian_beam_with_emittance (uint32_t N, double I, double q, double m, double a, double b, double e, double Ex, double x0, double y0) |
Add a 2d beam with defined gaussian emittance. | |
virtual void | save (const std::string &filename) const |
Saves data to a new file filename. | |
virtual void | save (std::ostream &s) const |
Saves data to stream. | |
virtual void | debug_print (std::ostream &os) const |
Print debugging information to os. |
Particle database class for two dimensions.
Particle database holds the definitions of particles and possibly the trajectories of particles it the particle iterator has saved them. ParticleDataBase2D provides a variety of convenience functions for defining particle beams.
Particles are always stored in the database in the order they are defined. When reading back the simulation results, the order can be used to identify the particles.
Constructor.
ParticleDataBase2D::ParticleDataBase2D | ( | const ParticleDataBase2D & | pdb | ) |
Copy constructor.
ParticleDataBase2D::ParticleDataBase2D | ( | std::istream & | s | ) |
Constructor for loading particle statistics from a file.
Destructor.
void ParticleDataBase2D::add_2d_beam_with_energy | ( | uint32_t | N, |
double | J, | ||
double | q, | ||
double | m, | ||
double | E, | ||
double | Tp, | ||
double | Tt, | ||
double | x1, | ||
double | y1, | ||
double | x2, | ||
double | y2 | ||
) |
Add a 2d beam with energies.
Adds a beam consisting of N particles. The beam current density is J (A/m^2), charge of beam particle is q (in multiples of e), mass is m (u). The beam is defined on a line from (x1, y1) to (x2, y2). The beam propagates into a direction 90 degrees clockwise from the direction of vector pointing from (x1, y1) to (x2, y2) with a mean energy E (eV). The beam has parallel temperature Tp (eV) and transverse temperature Tt (eV).
The particle speeds of the beam in direction i are sampled from a gaussian distribution with standard deviation dv_i = sqrt(T_i*e/m), where T_i is the beam temperature in direction (eV), e is electron charge (C) and m is the mass of the ion (kg).
Space charge J/v is added to the rhosum variable.
void ParticleDataBase2D::add_2d_beam_with_velocity | ( | uint32_t | N, |
double | J, | ||
double | q, | ||
double | m, | ||
double | v, | ||
double | dvp, | ||
double | dvt, | ||
double | x1, | ||
double | y1, | ||
double | x2, | ||
double | y2 | ||
) |
Add a 2d beam with velocities.
Adds a beam consisting of N particles. The beam current density is J (A/m^2), charge of beam particle is q (in multiples of e), mass is m (u). The beam is defined on a line from (x1, y1) to (x2, y2). The beam propagates into a direction 90 degrees clockwise from the direction of vector pointing from (x1, y1) to (x2, y2) with a mean velocity v (m/s). The beam has parallel gaussian velocity distribution with standard deviation dvp (m/s) and transverse gaussian velocity distribution with standard deviation dvt (m/s).
Space charge J/v is added to the rhosum variable.
void ParticleDataBase2D::add_2d_gaussian_beam_with_emittance | ( | uint32_t | N, |
double | I, | ||
double | q, | ||
double | m, | ||
double | a, | ||
double | b, | ||
double | e, | ||
double | Ex, | ||
double | x0, | ||
double | y0 | ||
) |
Add a 2d beam with defined gaussian emittance.
Adds a beam consisting of N particles and a total current of I (A). The particles are defined to have equal currents, charge q (in multiples of e) and mass m (u). The starting energy of the beam is Ex (eV) and the starting location (x0,y0) (center point). The beam propagates to positive x-direction. The beam is made to match Twiss parameters (a) and
(b) in projectional direction (y,y'). The rms-emittance of the beam is made to match
(e).
The beam spread in the projectional space is made according to Gaussian distribution.
void ParticleDataBase2D::add_2d_KV_beam_with_emittance | ( | uint32_t | N, |
double | I, | ||
double | q, | ||
double | m, | ||
double | a, | ||
double | b, | ||
double | e, | ||
double | Ex, | ||
double | x0, | ||
double | y0 | ||
) |
Add a 2d beam with defined KV emittance.
Adds a beam consisting of N particles and a total current of I (A). The particles are defined to have equal currents, charge q (in multiples of e) and mass m (u). The starting energy of the beam is Ex (eV) and the starting location (x0,y0) (center point). The beam propagates to positive x-direction. The beam is made to match Twiss parameters (a) and
(b) in projectional direction (y,y'). The rms-emittance of the beam is made to match
(e).
The beam spread in the projectional space is made according to KV/hard-edged (Kapchinsky-Vladimirsky) distribution.
void ParticleDataBase2D::add_particle | ( | double | IQ, |
double | q, | ||
double | m, | ||
const ParticleP2D & | x | ||
) |
Add one particle.
Adds one particle to particle database. Particle properties are: IQ is the current (A) in time-independent or charge (C) in time-dependent simulations carried by the particle cloud that the simulated particle represents, q is the charge state of the microscopic particle (in multiples of e), m is the mass of the microscopic particle (u) and x contains the time, position (m) and velocity (m/s) of the particle.
void ParticleDataBase2D::add_particle | ( | const Particle2D & | p | ) |
Add one particle.
Adds one particle to database.
virtual void ParticleDataBase2D::debug_print | ( | std::ostream & | os | ) | const [virtual] |
Print debugging information to os.
Implements ParticleDataBase.
const ParticleDataBase2D& ParticleDataBase2D::operator= | ( | const ParticleDataBase2D & | pdb | ) |
Assignment.
virtual Particle2D& ParticleDataBase2D::particle | ( | uint32_t | i | ) | [virtual] |
Returns a reference to particle i.
Implements ParticleDataBase.
virtual const Particle2D& ParticleDataBase2D::particle | ( | uint32_t | i | ) | const [virtual] |
Returns a const reference to particle i.
Implements ParticleDataBase.
virtual void ParticleDataBase2D::save | ( | const std::string & | filename | ) | const [virtual] |
Saves data to a new file filename.
Implements ParticleDataBase.
virtual void ParticleDataBase2D::save | ( | std::ostream & | s | ) | const [virtual] |
Saves data to stream.
Implements ParticleDataBase.
virtual const ParticleP2D& ParticleDataBase2D::trajectory_point | ( | uint32_t | i, |
uint32_t | j | ||
) | const [virtual] |
Gets the particle i trajectory point j as particle point.
Implements ParticleDataBase.