43 #ifndef PARTICLEDATABASE_HPP
44 #define PARTICLEDATABASE_HPP 1
104 : _phi(phi), _epot(epot) {}
113 if( _epot( x ) > _phi )
139 : _phi(phi), _epot(epot) {}
148 if( _epot( x ) < _phi )
169 class ParticleDataBaseImp *_imp;
340 size_t size(
void )
const;
372 const std::vector<trajectory_diagnostic_e> &diagnostics )
const;
442 virtual void save(
const std::string &filename )
const = 0;
446 virtual void save( std::ostream &s )
const = 0;
450 virtual void debug_print( std::ostream &os )
const = 0;
467 class ParticleDataBase2DImp *_imp;
560 double E,
double Tp,
double Tt,
561 double x1,
double y1,
double x2,
double y2 );
579 double v,
double dvp,
double dvt,
580 double x1,
double y1,
double x2,
double y2 );
599 double a,
double b,
double e,
600 double Ex,
double x0,
double y0 );
619 double a,
double b,
double e,
620 double Ex,
double x0,
double y0 );
628 virtual void save(
const std::string &filename )
const;
632 virtual void save( std::ostream &s )
const;
636 virtual void debug_print( std::ostream &os )
const;
655 class ParticleDataBaseCylImp *_imp;
748 double E,
double Tp,
double Tt,
749 double x1,
double y1,
double x2,
double y2 );
767 double v,
double dvp,
double dvt,
768 double x1,
double y1,
double x2,
double y2 );
773 double Ex,
double Tp,
double Tt,
774 double x0,
double dr );
795 double a,
double b,
double e,
796 double Ex,
double x0 );
804 virtual void save(
const std::string &filename )
const;
808 virtual void save( std::ostream &s )
const;
812 virtual void debug_print( std::ostream &os )
const;
830 class ParticleDataBase3DImp *_imp;
927 double E,
double Tp,
double Tt,
Vec3D c,
953 double v,
double dvp,
double dvt,
Vec3D c,
965 double E,
double Tp,
double Tt,
Vec3D c,
966 Vec3D dir1,
Vec3D dir2,
double size1,
double size2 );
977 double v,
double dvp,
double dvt,
Vec3D c,
978 Vec3D dir1,
Vec3D dir2,
double size1,
double size2 );
999 double ay,
double by,
double ey,
1000 double az,
double bz,
double ez,
1001 double Ex,
double x0,
double y0,
double z0 );
1023 double a1,
double b1,
double e1,
1024 double a2,
double b2,
double e2,
1052 const std::vector<trajectory_diagnostic_e> &diagnostics )
const;
1077 double ref_E,
double ref_q,
double ref_m,
1086 virtual void save(
const std::string &filename )
const;
1090 virtual void save( std::ostream &s )
const;
1094 virtual void debug_print( std::ostream &os )
const;
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 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.
virtual void save(const std::string &filename) const =0
Saves data to a new file filename.
void build_trajectory_density_field(ScalarField &tdens) const
Build trajectory density field.
Particle point class for cylindrical coordinates.
Definition: particles.hpp:267
virtual void operator()(ParticleBase *particle, class ParticleDataBase *pdb) const =0
Operator called when particle calculation ends.
void get_mirror(bool mirror[6]) const
Get particle mirroring on boundaries.
virtual ~ParticleDataBase()
Virtual destructor.
~NPlasmaBfieldSuppression()
Destructor.
Definition: particledatabase.hpp:143
virtual void debug_print(std::ostream &os) const =0
Print debugging information to os.
Abstract base class for vector field.
Definition: vectorfield.hpp:53
virtual Particle2D & particle(uint32_t i)
Returns a reference to particle i.
geom_mode_e geom_mode() const
Return geometry mode.
void step_particles(ScalarField &scharge, const VectorField &efield, const VectorField &bfield, const Geometry &g, double dt)
Step particles forward by time step dt.
void set_thread_count(uint32_t threadcount)
Set the number of threads used for calculation.
Definition: particledatabase.hpp:214
void add_particle(double IQ, double q, double m, const ParticlePCyl &x)
Add one particle.
void export_path_manager_data(std::string filename, double ref_E, double ref_q, double ref_m, const Vec3D &c, const Vec3D &o, const Vec3D &p) const
Export particle data as Path Manager data.
Magnetic field plasma suppression for negative ion extraction.
Definition: particledatabase.hpp:129
PPlasmaBfieldSuppression(const ScalarField &epot, double phi)
Constructor setting electric potential field and potential limit.
Definition: particledatabase.hpp:103
Particle point class for 3D.
Definition: particles.hpp:447
virtual const ParticlePBase & trajectory_point(uint32_t i, uint32_t j) const =0
Gets the particle i trajectory point j as particle point.
virtual void operator()(ParticleBase *particle, ParticlePBase *xcur, ParticlePBase *xend) const =0
const ParticleDataBase & operator=(const ParticleDataBase &pdb)
Assignment.
Particle and particle point objects
virtual void debug_print(std::ostream &os) const
Print debugging information to os.
void add_particle(double IQ, double q, double m, const ParticleP3D &x)
Add one particle.
void trajectories_at_free_plane(TrajectoryDiagnosticData &tdata, const Vec3D &c, const Vec3D &o, const Vec3D &p, const std::vector< trajectory_diagnostic_e > &diagnostics) const
Get trajectory diagnostic on a plane.
Particle point base class
Definition: particles.hpp:88
geom_mode_e
Geometry mode enum.
Definition: types.hpp:59
void set_max_steps(uint32_t maxsteps)
Set maximum number of steps to iterate.
ParticleDataBase2D()
Constructor.
Trajectory end callback.
Definition: particledatabase.hpp:71
double get_rhosum(void) const
Return sum of defined beam space charge density.
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.
~ParticleDataBase3D()
Destructor.
virtual void debug_print(std::ostream &os) const
Print debugging information to os.
virtual const ParticleP2D & trajectory_point(uint32_t i, uint32_t j) const
Gets the particle i trajectory point j as particle point.
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_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 ParticleCyl & particle(uint32_t i)
Returns a reference to particle i.
Particle database class for three dimensions.
Definition: particledatabase.hpp:828
void clear_trajectory(size_t a)
Clears particle a in the particle trajectory database.
Particle base class
Definition: particles.hpp:637
void add_3d_KV_beam_with_emittance(uint32_t N, double I, double q, double m, double ay, double by, double ey, double az, double bz, double ez, double Ex, double x0, double y0, double z0)
Add a 3d beam with defined KV emittance.
const ParticleDataBase2D & operator=(const ParticleDataBase2D &pdb)
Assignment.
virtual const ParticlePCyl & trajectory_point(uint32_t i, uint32_t j) const
Gets the particle i trajectory point j as particle point.
Trajectory handler callback.
Definition: particledatabase.hpp:57
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.
virtual void save(const std::string &filename) const
Saves data to a new file filename.
Geometry defining class.
Definition: geometry.hpp:131
virtual Particle3D & particle(uint32_t i)
Returns a reference to particle i.
double traj_length(uint32_t i) const
Returns the length of trajectory i.
void set_rhosum(double rhosum)
Set sum of defined beam space charge density.
void iterate_trajectories(ScalarField &scharge, const VectorField &efield, const VectorField &bfield, const Geometry &g)
Iterate particles through the geometry.
const ParticleStatistics & get_statistics(void) const
Get particle iterator statistics.
Magnetic field plasma suppression for positive ion extraction.
Definition: particledatabase.hpp:94
virtual void save(const std::string &filename) const
Saves data to a new file filename.
Definition: callback.hpp:61
void reserve(size_t size)
Reserve memory for size particles.
Class for trajectory diagnostic data.
Definition: trajectorydiagnostics.hpp:126
void set_polyint(bool polyint)
Set the interpolation type to polynomial(true) or linear(false).
void add_3d_gaussian_beam_with_emittance(uint32_t N, double I, double q, double m, double E0, double a1, double b1, double e1, double a2, double b2, double e2, Vec3D c, Vec3D dir1, Vec3D dir2)
Add a 3d beam with defined gaussian emittance.
void set_implementation_pointer(class ParticleDataBaseImp *imp)
Set particle database implementation pointer.
void add_rectangular_beam_with_velocity(uint32_t N, double J, double q, double m, double v, double dvp, double dvt, Vec3D c, Vec3D dir1, Vec3D dir2, double size1, double size2)
Add a rectangular beam with velocities.
virtual ~TrajectoryEndCallback()
Virtual destructor.
Definition: particledatabase.hpp:76
Particle class in some geometry.
Definition: particles.hpp:724
void add_cylindrical_beam_with_energy(uint32_t N, double J, double q, double m, double E, double Tp, double Tt, Vec3D c, Vec3D dir1, Vec3D dir2, double r)
Add a cylindrical beam with energies.
NPlasmaBfieldSuppression(const ScalarField &epot, double phi)
Constructor setting electric potential field and potential limit.
Definition: particledatabase.hpp:138
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.
void add_cylindrical_beam_with_velocity(uint32_t N, double J, double q, double m, double v, double dvp, double dvt, Vec3D c, Vec3D dir1, Vec3D dir2, double r)
Add a cylindrical beam with velocities.
int get_iteration_number(void) const
Get the number of iteration rounds done.
size_t size(void) const
Returns particle count.
Particle iteration statistics.
Definition: particlestatistics.hpp:57
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.
Particle point class for 2D.
Definition: particles.hpp:99
void clear_trajectories(void)
Clears the particle trajectory database.
virtual const ParticleP3D & trajectory_point(uint32_t i, uint32_t j) const
Gets the particle i trajectory point j as particle point.
virtual double operator()(const Vec3D &x) const
Suppression function.
Definition: particledatabase.hpp:112
const ParticleDataBaseCyl & operator=(const ParticleDataBaseCyl &pdb)
Assignment.
virtual ~TrajectoryHandlerCallback()
Virtual destructor.
Definition: particledatabase.hpp:62
void set_accuracy(double epsabs, double epsrel)
Set the accuracy requirement for calculation.
void set_max_time(double maxt)
Set maximum lifetime of particle in simulation.
coordinate_axis_e
Coordinate axis identifier.
Definition: types.hpp:139
uint32_t get_save_trajectories(void) const
Get trajectory saving.
void clear(void)
Clears the particle database of all particles.
Particle database class for cylindrical systems.
Definition: particledatabase.hpp:653
virtual double operator()(const Vec3D &x) const
Suppression function.
Definition: particledatabase.hpp:147
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.
virtual ParticleBase & particle(uint32_t i)=0
Returns a reference to particle i.
void set_bfield_suppression(const CallbackFunctorD_V *functor)
Set magnetic field suppression location depedent callback functor.
virtual void debug_print(std::ostream &os) const
Print debugging information to os.
~ParticleDataBase2D()
Destructor.
virtual void save(const std::string &filename) const
Saves data to a new file filename.
ParticleDataBaseCyl()
Constructor.
void add_rectangular_beam_with_energy(uint32_t N, double J, double q, double m, double E, double Tp, double Tt, Vec3D c, Vec3D dir1, Vec3D dir2, double size1, double size2)
Add a rectangular beam with energies.
Three dimensional vector.
Definition: vec3d.hpp:58
~ParticleDataBaseCyl()
Destructor.
~PPlasmaBfieldSuppression()
Destructor.
Definition: particledatabase.hpp:108
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 set_save_trajectories(uint32_t div)
Set trajectory saving.
void set_mirror(const bool mirror[6])
Set particle mirroring on boundaries.
bool get_polyint(void) const
Get current interpolation type.
const ParticleDataBase3D & operator=(const ParticleDataBase3D &pdb)
Assignment.
Particle database class for two dimensions.
Definition: particledatabase.hpp:465
size_t traj_size(uint32_t i) const
Returns number of trajectory points for particle i.
ParticleDataBase3D()
Constructor.
Scalar field class.
Definition: scalarfield.hpp:70
Particle database base class.
Definition: particledatabase.hpp:167
void add_particle(double IQ, double q, double m, const ParticleP2D &x)
Add one particle.
ParticleDataBase()
Constructor.