Particle database class for cylindrical systems. More...
#include <particledatabase.hpp>
Public Member Functions | |
ParticleDataBaseCyl () | |
Constructor. | |
ParticleDataBaseCyl (const ParticleDataBaseCyl &pdb) | |
Copy constructor. | |
ParticleDataBaseCyl (std::istream &s) | |
Constructor for loading particle statistics from a file. | |
~ParticleDataBaseCyl () | |
Destructor. | |
const ParticleDataBaseCyl & | operator= (const ParticleDataBaseCyl &pdb) |
Assignment. | |
virtual ParticleCyl & | particle (uint32_t i) |
Returns a reference to particle i. | |
virtual const ParticleCyl & | particle (uint32_t i) const |
Returns a const reference to particle i. | |
virtual const ParticlePCyl & | 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 ParticlePCyl &x) |
Add one particle. | |
void | add_particle (const ParticleCyl &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_full_gaussian_beam (uint32_t N, double I, double q, double m, double Ex, double Tp, double Tt, double x0, double dr) |
Add a 2d beam with gaussian profile and velocity distribution. | |
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) |
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. | |
![]() | |
virtual | ~ParticleDataBase () |
Virtual destructor. | |
void | set_thread_count (uint32_t threadcount) |
Set the number of threads used for calculation. | |
void | set_accuracy (double epsabs, double epsrel) |
Set the accuracy requirement for calculation. | |
void | set_bfield_suppression (const CallbackFunctorD_V *functor) |
Set magnetic field suppression location depedent callback functor. | |
void | set_trajectory_handler_callback (const TrajectoryHandlerCallback *thand_cb) |
Set trajectory handler callback. | |
void | set_trajectory_end_callback (const TrajectoryEndCallback *tend_cb) |
Set trajectory end callback. | |
void | set_polyint (bool polyint) |
Set the interpolation type to polynomial(true) or linear(false). | |
bool | get_polyint (void) const |
Get current interpolation type. | |
void | set_max_steps (uint32_t maxsteps) |
Set maximum number of steps to iterate. | |
void | set_max_time (double maxt) |
Set maximum lifetime of particle in simulation. | |
void | set_save_trajectories (uint32_t div) |
Set trajectory saving. | |
uint32_t | get_save_trajectories (void) const |
Get trajectory saving. | |
void | set_mirror (const bool mirror[6]) |
Set particle mirroring on boundaries. | |
void | get_mirror (bool mirror[6]) const |
Get particle mirroring on boundaries. | |
int | get_iteration_number (void) const |
Get the number of iteration rounds done. | |
double | get_rhosum (void) const |
Return sum of defined beam space charge density. | |
void | set_rhosum (double rhosum) |
Set sum of defined beam space charge density. | |
const ParticleStatistics & | get_statistics (void) const |
Get particle iterator statistics. | |
geom_mode_e | geom_mode () const |
Return geometry mode. | |
size_t | size (void) const |
Returns particle count. | |
double | traj_length (uint32_t i) const |
Returns the length of trajectory i. | |
size_t | traj_size (uint32_t i) const |
Returns number of trajectory points for particle i. | |
void | trajectory_point (double &t, Vec3D &loc, Vec3D &vel, uint32_t i, uint32_t j) const |
Gets the particle i trajectory point j into vel, loc and t. | |
void | trajectories_at_plane (TrajectoryDiagnosticData &tdata, coordinate_axis_e axis, double val, const std::vector< trajectory_diagnostic_e > &diagnostics) const |
Gets trajectory diagnostic diagnostics at plane axis = val in trajectory diagnostic data object tdata. | |
void | build_trajectory_density_field (ScalarField &tdens) const |
Build trajectory density field. | |
void | clear (void) |
Clears the particle database of all particles. | |
void | clear_trajectories (void) |
Clears the particle trajectory database. | |
void | clear_trajectory (size_t a) |
Clears particle a in the particle trajectory database. | |
void | reserve (size_t size) |
Reserve memory for size particles. | |
void | iterate_trajectories (ScalarField &scharge, const VectorField &efield, const VectorField &bfield, const Geometry &g) |
Iterate particles through the geometry. | |
void | step_particles (ScalarField &scharge, const VectorField &efield, const VectorField &bfield, const Geometry &g, double dt) |
Step particles forward by time step dt. | |
Additional Inherited Members | |
![]() | |
ParticleDataBase () | |
Constructor. | |
ParticleDataBase (const ParticleDataBase &pdb) | |
Copy constructor. | |
const ParticleDataBase & | operator= (const ParticleDataBase &pdb) |
Assignment. | |
void | set_implementation_pointer (class ParticleDataBaseImp *imp) |
Set particle database implementation pointer. | |
Particle database class for cylindrical systems.
Particle database holds the definitions of particles and possibly the trajectories of particles it the particle iterator has saved them. ParticleDataBaseCyl 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.
ParticleDataBaseCyl::ParticleDataBaseCyl | ( | ) |
Constructor.
ParticleDataBaseCyl::ParticleDataBaseCyl | ( | const ParticleDataBaseCyl & | pdb | ) |
Copy constructor.
ParticleDataBaseCyl::ParticleDataBaseCyl | ( | std::istream & | s | ) |
Constructor for loading particle statistics from a file.
ParticleDataBaseCyl::~ParticleDataBaseCyl | ( | ) |
Destructor.
void ParticleDataBaseCyl::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 ParticleDataBaseCyl::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 ParticleDataBaseCyl::add_2d_full_gaussian_beam | ( | uint32_t | N, |
double | I, | ||
double | q, | ||
double | m, | ||
double | Ex, | ||
double | Tp, | ||
double | Tt, | ||
double | x0, | ||
double | dr | ||
) |
Add a 2d beam with gaussian profile and velocity distribution.
void ParticleDataBaseCyl::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 | ||
) |
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 (center point). The beam propagates to positive x-direction. The beam is made to match Twiss parameters (a),
(b),
(e) in projectional directions (y,y') and (z,z').
The even beam current distribution is different from other beam definitions for cylindrical coordinates. This might change soon.
void ParticleDataBaseCyl::add_particle | ( | double | IQ, |
double | q, | ||
double | m, | ||
const ParticlePCyl & | 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 ParticleDataBaseCyl::add_particle | ( | const ParticleCyl & | p | ) |
Add one particle.
Adds one particle to database.
|
virtual |
Print debugging information to os.
Implements ParticleDataBase.
const ParticleDataBaseCyl& ParticleDataBaseCyl::operator= | ( | const ParticleDataBaseCyl & | pdb | ) |
Assignment.
|
virtual |
Returns a reference to particle i.
Implements ParticleDataBase.
|
virtual |
Returns a const reference to particle i.
Implements ParticleDataBase.
|
virtual |
Saves data to a new file filename.
Implements ParticleDataBase.
|
virtual |
Saves data to stream.
Implements ParticleDataBase.
|
virtual |
Gets the particle i trajectory point j as particle point.
Implements ParticleDataBase.