|
Penning Trap Simulation
Simulate particle behavior inside a Penning Trap
|
A class that simulates a Penning trap. More...
#include <PenningTrap.hpp>
Public Member Functions | |
| PenningTrap (double B_0=T, std::function< double(double)> V_0=[](double t) { return 25. *V/1000.;}, double d=500., double t=0.) | |
| Constructor for the PenningTrap class. | |
| PenningTrap (unsigned int i, double B_0=T, std::function< double(double)> V_0=[](double t) { return 25. *V/1000.;}, double d=500., double t=0.) | |
| Constructor for the PenningTrap class. | |
| PenningTrap (std::vector< Particle > particles, double B_0=T, std::function< double(double)> V_0=[](double t) { return 25. *V/1000.;}, double d=500., double t=0.) | |
| Constructor for the PenningTrap class. | |
| void | add_particle (Particle particle) |
| Add a particle to the system. | |
| vec_3d | external_E_field (vec_3d r) |
| Calculate E at point r. | |
| vec_3d | external_B_field (vec_3d r) |
| Calculate B at point r. | |
| vec_3d | force_on_particle (unsigned int i, unsigned int j) |
| Calculate the force between 2 particles. | |
| vec_3d | total_force_external (unsigned int i) |
| Calculate the total external force on a particle. | |
| vec_3d | total_force_particles (unsigned int i) |
| Calculate the total force on a particle p_i from other particles. | |
| vec_3d | total_force (unsigned int i) |
| calculate the total force on a particle p_i. | |
| void | evolve_RK4 (double dt, bool particle_interaction=true) |
| Go forward one timestep using the RK4 method. | |
| void | evolve_forward_euler (double dt, bool particle_interaction=true) |
| Go forward one timestep using the forward Euler method. | |
| simulation_t | simulate (double time, unsigned int steps, std::string method="rk4", bool particle_interaction=true) |
| Simulate the particle system inside the Penning trap over a certain amount of time. | |
| void | write_simulation_to_dir (std::string path, double time, unsigned int steps, std::string method="rk4", bool particle_interaction=true) |
| Simulate and write the displacement of all particles to files. | |
| double | fraction_of_particles_left (double time, unsigned int steps, std::string method="rk4", bool particle_interaction=true) |
| Simulate and calculate what fraction of particles are still left inside the Penning trap after the simulation. | |
| vec_3d | get_r (int i) |
| double | get_t () |
Private Member Functions | |
| vec_3d | v_func (unsigned int i, unsigned int j, double dt) |
| Helper for evolve_RK4 when calculating \(k_{v,i,j}\) values. | |
| vec_3d | r_func (unsigned int i, unsigned int j, double dt) |
| Helper for evolve_RK4 when calculating \(k_{r,i,j}\) values. | |
Private Attributes | |
| double | B_0 |
| Magnetic field strength. | |
| std::function< double(double)> | V_0 |
| Applied potential. | |
| double | d |
| Characteristic dimension. | |
| double | t |
| Current time. | |
| std::vector< Particle > | particles |
| The particles in the Penning trap. | |
| sim_arr | k_v |
| sim_arr | k_r |
A class that simulates a Penning trap.
This class simulates a Penning trap. It can take in a number of particles and simulate how they would behave inside a Penning trap.
Definition at line 31 of file PenningTrap.hpp.
| PenningTrap::PenningTrap | ( | double | B_0 = T, |
| std::function< double(double)> | V_0 = [](double t) { return 25. * V / 1000.; }, |
||
| double | d = 500., |
||
| double | t = 0. |
||
| ) |
Constructor for the PenningTrap class.
| B_0 | The magnetic field strength |
| V_0 | The time dependent applied potential |
| d | The characteristic dimension |
| t | The starting time |
Definition at line 15 of file PenningTrap.cpp.
| PenningTrap::PenningTrap | ( | unsigned int | i, |
| double | B_0 = T, |
||
| std::function< double(double)> | V_0 = [](double t) { return 25. * V / 1000.; }, |
||
| double | d = 500., |
||
| double | t = 0. |
||
| ) |
Constructor for the PenningTrap class.
| i | The number of particles to generate |
| B_0 | The magnetic field strength |
| V_0 | The time dependent applied potential |
| d | The characteristic dimension |
| t | The starting time |
Definition at line 24 of file PenningTrap.cpp.
| PenningTrap::PenningTrap | ( | std::vector< Particle > | particles, |
| double | B_0 = T, |
||
| std::function< double(double)> | V_0 = [](double t) { return 25. * V / 1000.; }, |
||
| double | d = 500., |
||
| double | t = 0. |
||
| ) |
Constructor for the PenningTrap class.
| particles | The starting particles |
| B_0 | The magnetic field strength |
| V_0 | The time dependent applied potential |
| d | The characteristic dimension |
| t | The starting time |
Definition at line 36 of file PenningTrap.cpp.
| void PenningTrap::add_particle | ( | Particle | particle | ) |
Add a particle to the system.
| particle | The particle to add to the Penning trap |
Definition at line 79 of file PenningTrap.cpp.
| void PenningTrap::evolve_forward_euler | ( | double | dt, |
| bool | particle_interaction = true |
||
| ) |
Go forward one timestep using the forward Euler method.
| dt | The step length |
| particle_interaction | Turn particle interactions on/off |
Definition at line 183 of file PenningTrap.cpp.
| void PenningTrap::evolve_RK4 | ( | double | dt, |
| bool | particle_interaction = true |
||
| ) |
Go forward one timestep using the RK4 method.
| dt | The step length |
| particle_interaction | Turn particle interactions on/off |
Definition at line 148 of file PenningTrap.cpp.
Calculate B at point r.
| r | The position where we want to calculate the B field |
Definition at line 92 of file PenningTrap.cpp.
Calculate E at point r.
| r | The position where we want to calculate the E field |
Definition at line 84 of file PenningTrap.cpp.
| vec_3d PenningTrap::force_on_particle | ( | unsigned int | i, |
| unsigned int | j | ||
| ) |
Calculate the force between 2 particles.
Calculate the force exhibited on particle p_i from particle p_j.
| i | The index of particle p_i |
| j | The index of particle p_j |
Definition at line 97 of file PenningTrap.cpp.
| double PenningTrap::fraction_of_particles_left | ( | double | time, |
| unsigned int | steps, | ||
| std::string | method = "rk4", |
||
| bool | particle_interaction = true |
||
| ) |
Simulate and calculate what fraction of particles are still left inside the Penning trap after the simulation.
| time | The time to simulate in microseconds |
| steps | The amount of steps for the whole simulation |
| method | The method to use when moving forward a timestep |
| particle_interaction | Turn particle interactions on/off |
Definition at line 281 of file PenningTrap.cpp.
| vec_3d PenningTrap::get_r | ( | int | i | ) |
Definition at line 299 of file PenningTrap.cpp.
| double PenningTrap::get_t | ( | ) |
Definition at line 304 of file PenningTrap.cpp.
|
private |
Helper for evolve_RK4 when calculating \(k_{r,i,j}\) values.
Something
| i | Index i for \(k_{r,i,j}\) |
| j | Index j for \(k_{r,i,j}\) |
| dt | The step length (delta time) |
Definition at line 61 of file PenningTrap.cpp.
| simulation_t PenningTrap::simulate | ( | double | time, |
| unsigned int | steps, | ||
| std::string | method = "rk4", |
||
| bool | particle_interaction = true |
||
| ) |
Simulate the particle system inside the Penning trap over a certain amount of time.
| time | The time to simulate in microseconds |
| steps | The amount of steps for the whole simulation |
| method | The method to use when moving forward a timestep |
| particle_interaction | Turn particle interactions on/off |
Definition at line 212 of file PenningTrap.cpp.
| vec_3d PenningTrap::total_force | ( | unsigned int | i | ) |
calculate the total force on a particle p_i.
| i | The index of particle p_i |
Definition at line 140 of file PenningTrap.cpp.
| vec_3d PenningTrap::total_force_external | ( | unsigned int | i | ) |
Calculate the total external force on a particle.
Calculate the total amount of force that E and B exhibits on particle p_i.
| i | The index of particle p_i |
Definition at line 108 of file PenningTrap.cpp.
| vec_3d PenningTrap::total_force_particles | ( | unsigned int | i | ) |
Calculate the total force on a particle p_i from other particles.
| i | The index of particle p_i |
Definition at line 123 of file PenningTrap.cpp.
|
private |
Helper for evolve_RK4 when calculating \(k_{v,i,j}\) values.
Something
| i | Index i for \(k_{v,i,j}\) |
| j | Index j for \(k_{v,i,j}\) |
| dt | the step length (delta time) |
Definition at line 43 of file PenningTrap.cpp.
| void PenningTrap::write_simulation_to_dir | ( | std::string | path, |
| double | time, | ||
| unsigned int | steps, | ||
| std::string | method = "rk4", |
||
| bool | particle_interaction = true |
||
| ) |
Simulate and write the displacement of all particles to files.
| path | The directory to save the data |
| time | The time to simulate in microseconds |
| steps | The amount of steps for the whole simulation |
| method | The method to use when moving forward a timestep |
| particle_interaction | Turn particle interactions on/off |
Definition at line 246 of file PenningTrap.cpp.
|
private |
Magnetic field strength.
Definition at line 33 of file PenningTrap.hpp.
|
private |
Characteristic dimension.
Definition at line 35 of file PenningTrap.hpp.
|
private |
A 2D vector containing all \(k_{i,j}\) where \(j\) is the index of a particle
Definition at line 40 of file PenningTrap.hpp.
|
private |
A 2D vector containing all \(k_{i,j}\) where \(j\) is the index of a particle
Definition at line 38 of file PenningTrap.hpp.
|
private |
The particles in the Penning trap.
Definition at line 37 of file PenningTrap.hpp.
|
private |
Current time.
Definition at line 36 of file PenningTrap.hpp.
|
private |
Applied potential.
Definition at line 34 of file PenningTrap.hpp.