Stuff
This commit is contained in:
parent
95432102ea
commit
5ed7cedfae
1
.gitignore
vendored
1
.gitignore
vendored
@ -47,3 +47,4 @@ src/*
|
||||
!src/*.hpp
|
||||
!src/*.py
|
||||
!src/Doxyfile
|
||||
!src/scripts
|
||||
|
||||
2
Doxyfile
2
Doxyfile
@ -2174,7 +2174,7 @@ RTF_EXTENSIONS_FILE =
|
||||
# classes and files.
|
||||
# The default value is: NO.
|
||||
|
||||
GENERATE_MAN = YES
|
||||
GENERATE_MAN = NO
|
||||
|
||||
# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
|
||||
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
|
||||
|
||||
@ -22,6 +22,11 @@
|
||||
#pragma omp declare reduction(+ : vec_3d : omp_out += omp_in) \
|
||||
initializer(omp_priv = omp_orig)
|
||||
|
||||
typedef struct simulation {
|
||||
sim_arr r_vecs;
|
||||
sim_arr v_vecs;
|
||||
} simulation_t;
|
||||
|
||||
/** @brief A class that simulates a Penning trap.
|
||||
*
|
||||
* This class simulates a Penning trap. It can take in a number of particles
|
||||
@ -188,9 +193,9 @@ public:
|
||||
* @param method The method to use when moving forward a timestep
|
||||
* @param particle_interaction Turn particle interactions on/off
|
||||
* */
|
||||
sim_arr simulate(double time, unsigned int steps,
|
||||
std::string method = "rk4",
|
||||
bool particle_interaction = true);
|
||||
simulation_t simulate(double time, unsigned int steps,
|
||||
std::string method = "rk4",
|
||||
bool particle_interaction = true);
|
||||
|
||||
/** @brief Simulate and write the displacement of all particles to files.
|
||||
*
|
||||
|
||||
BIN
latex/images/particles_left.pdf
Normal file
BIN
latex/images/particles_left.pdf
Normal file
Binary file not shown.
BIN
latex/images/single_particle.pdf
Normal file
BIN
latex/images/single_particle.pdf
Normal file
Binary file not shown.
@ -1,111 +0,0 @@
|
||||
.TH "Particle" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
Particle \- A class that holds attributes of a particle\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
.PP
|
||||
\fC#include <Particle\&.hpp>\fP
|
||||
.SS "Public Member Functions"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "\fBParticle\fP (double \fBq\fP, double \fBm\fP, \fBvec_3d\fP \fBr_vec\fP, \fBvec_3d\fP \fBv_vec\fP)"
|
||||
.br
|
||||
.RI "Initialize the particle\&. "
|
||||
.in -1c
|
||||
.SS "Private Attributes"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "double \fBq\fP"
|
||||
.br
|
||||
.RI "Charge\&. "
|
||||
.ti -1c
|
||||
.RI "double \fBm\fP"
|
||||
.br
|
||||
.RI "Mass\&. "
|
||||
.ti -1c
|
||||
.RI "\fBvec_3d\fP \fBr_vec\fP"
|
||||
.br
|
||||
.RI "position "
|
||||
.ti -1c
|
||||
.RI "\fBvec_3d\fP \fBv_vec\fP"
|
||||
.br
|
||||
.RI "velocity "
|
||||
.in -1c
|
||||
.SS "Friends"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "class \fBPenningTrap\fP"
|
||||
.br
|
||||
.RI "Make private attributes available for \fBPenningTrap\fP\&. "
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
A class that holds attributes of a particle\&.
|
||||
.PP
|
||||
Definition at line \fB21\fP of file \fBParticle\&.hpp\fP\&.
|
||||
.SH "Constructor & Destructor Documentation"
|
||||
.PP
|
||||
.SS "Particle::Particle (double q, double m, \fBvec_3d\fP r_vec, \fBvec_3d\fP v_vec)"
|
||||
|
||||
.PP
|
||||
Initialize the particle\&. Initialize the particle with a charge, mass, position and velocity\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIq\fP The charge of the particle
|
||||
.br
|
||||
\fIm\fP The mass of the particle
|
||||
.br
|
||||
\fIr_vec\fP The initial position of the particle
|
||||
.br
|
||||
\fIv_vec\fP The initial velocity of the particle
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB15\fP of file \fBParticle\&.cpp\fP\&.
|
||||
.SH "Friends And Related Function Documentation"
|
||||
.PP
|
||||
.SS "friend class \fBPenningTrap\fP\fC [friend]\fP"
|
||||
|
||||
.PP
|
||||
Make private attributes available for \fBPenningTrap\fP\&.
|
||||
.PP
|
||||
Definition at line \fB43\fP of file \fBParticle\&.hpp\fP\&.
|
||||
.SH "Member Data Documentation"
|
||||
.PP
|
||||
.SS "double Particle::m\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
Mass\&.
|
||||
.PP
|
||||
Definition at line \fB24\fP of file \fBParticle\&.hpp\fP\&.
|
||||
.SS "double Particle::q\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
Charge\&.
|
||||
.PP
|
||||
Definition at line \fB23\fP of file \fBParticle\&.hpp\fP\&.
|
||||
.SS "\fBvec_3d\fP Particle::r_vec\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
position
|
||||
.PP
|
||||
Definition at line \fB25\fP of file \fBParticle\&.hpp\fP\&.
|
||||
.SS "\fBvec_3d\fP Particle::v_vec\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
velocity
|
||||
.PP
|
||||
Definition at line \fB26\fP of file \fBParticle\&.hpp\fP\&.
|
||||
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,42 +0,0 @@
|
||||
.TH "src/Particle.cpp" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
src/Particle.cpp \- The implementation of the \fBParticle\fP class\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
\fC#include 'Particle\&.hpp'\fP
|
||||
.br
|
||||
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
The implementation of the \fBParticle\fP class\&.
|
||||
|
||||
|
||||
.PP
|
||||
\fBAuthor\fP
|
||||
.RS 4
|
||||
Cory Alexander Balaton (coryab)
|
||||
.PP
|
||||
Janita Ovidie Sandtrøen Willumsen (janitaws)
|
||||
.RE
|
||||
.PP
|
||||
\fBVersion\fP
|
||||
.RS 4
|
||||
0\&.1
|
||||
.RE
|
||||
.PP
|
||||
.PP
|
||||
\fBBug\fP
|
||||
.RS 4
|
||||
No known bugs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition in file \fBParticle\&.cpp\fP\&.
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,52 +0,0 @@
|
||||
.TH "include/Particle.hpp" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
include/Particle.hpp \- A class that holds the properties of a particle\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
\fC#include <armadillo>\fP
|
||||
.br
|
||||
\fC#include 'typedefs\&.hpp'\fP
|
||||
.br
|
||||
|
||||
.SS "Classes"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "class \fBParticle\fP"
|
||||
.br
|
||||
.RI "A class that holds attributes of a particle\&. "
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
A class that holds the properties of a particle\&.
|
||||
|
||||
|
||||
.PP
|
||||
\fBAuthor\fP
|
||||
.RS 4
|
||||
Cory Alexander Balaton (coryab)
|
||||
.PP
|
||||
Janita Ovidie Sandtrøen Willumsen (janitaws)
|
||||
.RE
|
||||
.PP
|
||||
\fBVersion\fP
|
||||
.RS 4
|
||||
0\&.1
|
||||
.RE
|
||||
.PP
|
||||
.PP
|
||||
\fBBug\fP
|
||||
.RS 4
|
||||
No known bugs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition in file \fBParticle\&.hpp\fP\&.
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,494 +0,0 @@
|
||||
.TH "PenningTrap" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
PenningTrap \- A class that simulates a Penning trap\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
.PP
|
||||
\fC#include <PenningTrap\&.hpp>\fP
|
||||
.SS "Public Member Functions"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "\fBPenningTrap\fP (double \fBB_0\fP=\fBT\fP, std::function< double(double)> \fBV_0\fP=[](double \fBt\fP) { return 25\&. *\fBV\fP/1000\&.;}, double \fBd\fP=500\&., double \fBt\fP=0\&.)"
|
||||
.br
|
||||
.RI "Constructor for the \fBPenningTrap\fP class\&. "
|
||||
.ti -1c
|
||||
.RI "\fBPenningTrap\fP (unsigned int i, double \fBB_0\fP=\fBT\fP, std::function< double(double)> \fBV_0\fP=[](double \fBt\fP) { return 25\&. *\fBV\fP/1000\&.;}, double \fBd\fP=500\&., double \fBt\fP=0\&.)"
|
||||
.br
|
||||
.RI "Constructor for the \fBPenningTrap\fP class\&. "
|
||||
.ti -1c
|
||||
.RI "\fBPenningTrap\fP (std::vector< \fBParticle\fP > \fBparticles\fP, double \fBB_0\fP=\fBT\fP, std::function< double(double)> \fBV_0\fP=[](double \fBt\fP) { return 25\&. *\fBV\fP/1000\&.;}, double \fBd\fP=500\&., double \fBt\fP=0\&.)"
|
||||
.br
|
||||
.RI "Constructor for the \fBPenningTrap\fP class\&. "
|
||||
.ti -1c
|
||||
.RI "void \fBadd_particle\fP (\fBParticle\fP particle)"
|
||||
.br
|
||||
.RI "Add a particle to the system\&. "
|
||||
.ti -1c
|
||||
.RI "\fBvec_3d\fP \fBexternal_E_field\fP (\fBvec_3d\fP r)"
|
||||
.br
|
||||
.RI "Calculate E at point r\&. "
|
||||
.ti -1c
|
||||
.RI "\fBvec_3d\fP \fBexternal_B_field\fP (\fBvec_3d\fP r)"
|
||||
.br
|
||||
.RI "Calculate B at point r\&. "
|
||||
.ti -1c
|
||||
.RI "\fBvec_3d\fP \fBforce_on_particle\fP (unsigned int i, unsigned int j)"
|
||||
.br
|
||||
.RI "Calculate the force between 2 particles\&. "
|
||||
.ti -1c
|
||||
.RI "\fBvec_3d\fP \fBtotal_force_external\fP (unsigned int i)"
|
||||
.br
|
||||
.RI "Calculate the total external force on a particle\&. "
|
||||
.ti -1c
|
||||
.RI "\fBvec_3d\fP \fBtotal_force_particles\fP (unsigned int i)"
|
||||
.br
|
||||
.RI "Calculate the total force on a particle p_i from other particles\&. "
|
||||
.ti -1c
|
||||
.RI "\fBvec_3d\fP \fBtotal_force\fP (unsigned int i)"
|
||||
.br
|
||||
.RI "calculate the total force on a particle p_i\&. "
|
||||
.ti -1c
|
||||
.RI "void \fBevolve_RK4\fP (double dt, bool particle_interaction=true)"
|
||||
.br
|
||||
.RI "Go forward one timestep using the RK4 method\&. "
|
||||
.ti -1c
|
||||
.RI "void \fBevolve_forward_euler\fP (double dt, bool particle_interaction=true)"
|
||||
.br
|
||||
.RI "Go forward one timestep using the forward Euler method\&. "
|
||||
.ti -1c
|
||||
.RI "\fBsim_arr\fP \fBsimulate\fP (double time, unsigned int steps, std::string method='rk4', bool particle_interaction=true)"
|
||||
.br
|
||||
.RI "Simulate the particle system inside the Penning trap over a certain amount of time\&. "
|
||||
.ti -1c
|
||||
.RI "void \fBwrite_simulation_to_dir\fP (std::string path, double time, unsigned int steps, std::string method='rk4', bool particle_interaction=true)"
|
||||
.br
|
||||
.RI "Simulate and write the displacement of all particles to files\&. "
|
||||
.ti -1c
|
||||
.RI "double \fBfraction_of_particles_left\fP (double time, unsigned int steps, std::string method='rk4', bool particle_interaction=true)"
|
||||
.br
|
||||
.RI "Simulate and calculate what fraction of particles are still left inside the Penning trap after the simulation\&. "
|
||||
.in -1c
|
||||
.SS "Private Member Functions"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "\fBvec_3d\fP \fBv_func\fP (unsigned int i, unsigned int j, double dt)"
|
||||
.br
|
||||
.RI "Helper for evolve_RK4 when calculating $k_{v,i,j}$ values\&. "
|
||||
.ti -1c
|
||||
.RI "\fBvec_3d\fP \fBr_func\fP (unsigned int i, unsigned int j, double dt)"
|
||||
.br
|
||||
.RI "Helper for evolve_RK4 when calculating $k_{r,i,j}$ values\&. "
|
||||
.in -1c
|
||||
.SS "Private Attributes"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "double \fBB_0\fP"
|
||||
.br
|
||||
.RI "Magnetic field strength\&. "
|
||||
.ti -1c
|
||||
.RI "std::function< double(double)> \fBV_0\fP"
|
||||
.br
|
||||
.RI "Applied potential\&. "
|
||||
.ti -1c
|
||||
.RI "double \fBd\fP"
|
||||
.br
|
||||
.RI "Characteristic dimension\&. "
|
||||
.ti -1c
|
||||
.RI "double \fBt\fP"
|
||||
.br
|
||||
.RI "Current time\&. "
|
||||
.ti -1c
|
||||
.RI "std::vector< \fBParticle\fP > \fBparticles\fP"
|
||||
.br
|
||||
.RI "The particles in the Penning trap\&. "
|
||||
.ti -1c
|
||||
.RI "\fBsim_arr\fP \fBk_v\fP"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "\fBsim_arr\fP \fBk_r\fP"
|
||||
.br
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
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\&.
|
||||
.PP
|
||||
Definition at line \fB30\fP of file \fBPenningTrap\&.hpp\fP\&.
|
||||
.SH "Constructor & Destructor Documentation"
|
||||
.PP
|
||||
.SS "PenningTrap::PenningTrap (double B_0 = \fC\fBT\fP\fP, std::function< double(double)> V_0 = \fC[](double \fBt\fP) { return 25\&. * \fBV\fP / 1000\&.; }\fP, double d = \fC500\&.\fP, double t = \fC0\&.\fP)"
|
||||
|
||||
.PP
|
||||
Constructor for the \fBPenningTrap\fP class\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIB_0\fP The magnetic field strength
|
||||
.br
|
||||
\fIV_0\fP The time dependent applied potential
|
||||
.br
|
||||
\fId\fP The characteristic dimension
|
||||
.br
|
||||
\fIt\fP The starting time
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB18\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "PenningTrap::PenningTrap (unsigned int i, double B_0 = \fC\fBT\fP\fP, std::function< double(double)> V_0 = \fC[](double \fBt\fP) { return 25\&. * \fBV\fP / 1000\&.; }\fP, double d = \fC500\&.\fP, double t = \fC0\&.\fP)"
|
||||
|
||||
.PP
|
||||
Constructor for the \fBPenningTrap\fP class\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIi\fP The number of particles to generate
|
||||
.br
|
||||
\fIB_0\fP The magnetic field strength
|
||||
.br
|
||||
\fIV_0\fP The time dependent applied potential
|
||||
.br
|
||||
\fId\fP The characteristic dimension
|
||||
.br
|
||||
\fIt\fP The starting time
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB27\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "PenningTrap::PenningTrap (std::vector< \fBParticle\fP > particles, double B_0 = \fC\fBT\fP\fP, std::function< double(double)> V_0 = \fC[](double \fBt\fP) { return 25\&. * \fBV\fP / 1000\&.; }\fP, double d = \fC500\&.\fP, double t = \fC0\&.\fP)"
|
||||
|
||||
.PP
|
||||
Constructor for the \fBPenningTrap\fP class\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIparticles\fP The starting particles
|
||||
.br
|
||||
\fIB_0\fP The magnetic field strength
|
||||
.br
|
||||
\fIV_0\fP The time dependent applied potential
|
||||
.br
|
||||
\fId\fP The characteristic dimension
|
||||
.br
|
||||
\fIt\fP The starting time
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB39\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SH "Member Function Documentation"
|
||||
.PP
|
||||
.SS "void PenningTrap::add_particle (\fBParticle\fP particle)"
|
||||
|
||||
.PP
|
||||
Add a particle to the system\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIparticle\fP The particle to add to the Penning trap
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB82\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "void PenningTrap::evolve_forward_euler (double dt, bool particle_interaction = \fCtrue\fP)"
|
||||
|
||||
.PP
|
||||
Go forward one timestep using the forward Euler method\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIdt\fP The step length
|
||||
.br
|
||||
\fIparticle_interaction\fP Turn particle interactions on/off
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB186\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "void PenningTrap::evolve_RK4 (double dt, bool particle_interaction = \fCtrue\fP)"
|
||||
|
||||
.PP
|
||||
Go forward one timestep using the RK4 method\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIdt\fP The step length
|
||||
.br
|
||||
\fIparticle_interaction\fP Turn particle interactions on/off
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB151\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "\fBvec_3d\fP PenningTrap::external_B_field (\fBvec_3d\fP r)"
|
||||
|
||||
.PP
|
||||
Calculate B at point r\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIr\fP The position where we want to calculate the B field
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
vec_3d
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB95\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "\fBvec_3d\fP PenningTrap::external_E_field (\fBvec_3d\fP r)"
|
||||
|
||||
.PP
|
||||
Calculate E at point r\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIr\fP The position where we want to calculate the E field
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
vec_3d
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB87\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "\fBvec_3d\fP PenningTrap::force_on_particle (unsigned int i, unsigned int j)"
|
||||
|
||||
.PP
|
||||
Calculate the force between 2 particles\&. Calculate the force exhibited on particle p_i from particle p_j\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIi\fP The index of particle p_i
|
||||
.br
|
||||
\fIj\fP The index of particle p_j
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
vec_3d
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB100\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "double PenningTrap::fraction_of_particles_left (double time, unsigned int steps, std::string method = \fC'rk4'\fP, bool particle_interaction = \fCtrue\fP)"
|
||||
|
||||
.PP
|
||||
Simulate and calculate what fraction of particles are still left inside the Penning trap after the simulation\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fItime\fP The time to simulate in microseconds
|
||||
.br
|
||||
\fIsteps\fP The amount of steps for the whole simulation
|
||||
.br
|
||||
\fImethod\fP The method to use when moving forward a timestep
|
||||
.br
|
||||
\fIparticle_interaction\fP Turn particle interactions on/off
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
double
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB266\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "\fBvec_3d\fP PenningTrap::r_func (unsigned int i, unsigned int j, double dt)\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
Helper for evolve_RK4 when calculating $k_{r,i,j}$ values\&. Something
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIi\fP Index i for $k_{r,i,j}$
|
||||
.br
|
||||
\fIj\fP Index j for $k_{r,i,j}$
|
||||
.br
|
||||
\fIdt\fP the step length (delta time)
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
vec_3d
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB64\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "\fBsim_arr\fP PenningTrap::simulate (double time, unsigned int steps, std::string method = \fC'rk4'\fP, bool particle_interaction = \fCtrue\fP)"
|
||||
|
||||
.PP
|
||||
Simulate the particle system inside the Penning trap over a certain amount of time\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fItime\fP The time to simulate in microseconds
|
||||
.br
|
||||
\fIsteps\fP The amount of steps for the whole simulation
|
||||
.br
|
||||
\fImethod\fP The method to use when moving forward a timestep
|
||||
.br
|
||||
\fIparticle_interaction\fP Turn particle interactions on/off
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB211\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "\fBvec_3d\fP PenningTrap::total_force (unsigned int i)"
|
||||
|
||||
.PP
|
||||
calculate the total force on a particle p_i\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIi\fP The index of particle p_i
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
vec_3d
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB146\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "\fBvec_3d\fP PenningTrap::total_force_external (unsigned int i)"
|
||||
|
||||
.PP
|
||||
Calculate the total external force on a particle\&. Calculate the total amount of force that E and B exhibits on particle p_i\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIi\fP The index of particle p_i
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
vec_3d
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB114\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "\fBvec_3d\fP PenningTrap::total_force_particles (unsigned int i)"
|
||||
|
||||
.PP
|
||||
Calculate the total force on a particle p_i from other particles\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIi\fP The index of particle p_i
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
vec_3d
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB129\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "\fBvec_3d\fP PenningTrap::v_func (unsigned int i, unsigned int j, double dt)\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
Helper for evolve_RK4 when calculating $k_{v,i,j}$ values\&. Something
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIi\fP Index i for $k_{v,i,j}$
|
||||
.br
|
||||
\fIj\fP Index j for $k_{v,i,j}$
|
||||
.br
|
||||
\fIdt\fP the step length (delta time)
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
vec_3d
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB46\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SS "void PenningTrap::write_simulation_to_dir (std::string path, double time, unsigned int steps, std::string method = \fC'rk4'\fP, bool particle_interaction = \fCtrue\fP)"
|
||||
|
||||
.PP
|
||||
Simulate and write the displacement of all particles to files\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIpath\fP The directory to save the data
|
||||
.br
|
||||
\fItime\fP The time to simulate in microseconds
|
||||
.br
|
||||
\fIsteps\fP The amount of steps for the whole simulation
|
||||
.br
|
||||
\fImethod\fP The method to use when moving forward a timestep
|
||||
.br
|
||||
\fIparticle_interaction\fP Turn particle interactions on/off
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB240\fP of file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SH "Member Data Documentation"
|
||||
.PP
|
||||
.SS "double PenningTrap::B_0\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
Magnetic field strength\&.
|
||||
.PP
|
||||
Definition at line \fB32\fP of file \fBPenningTrap\&.hpp\fP\&.
|
||||
.SS "double PenningTrap::d\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
Characteristic dimension\&.
|
||||
.PP
|
||||
Definition at line \fB34\fP of file \fBPenningTrap\&.hpp\fP\&.
|
||||
.SS "\fBsim_arr\fP PenningTrap::k_r\fC [private]\fP"
|
||||
A 2D vector containing all $k_{i,j}$ where $j$ is the index of a particle
|
||||
.PP
|
||||
Definition at line \fB39\fP of file \fBPenningTrap\&.hpp\fP\&.
|
||||
.SS "\fBsim_arr\fP PenningTrap::k_v\fC [private]\fP"
|
||||
A 2D vector containing all $k_{i,j}$ where $j$ is the index of a particle
|
||||
.PP
|
||||
Definition at line \fB37\fP of file \fBPenningTrap\&.hpp\fP\&.
|
||||
.SS "std::vector<\fBParticle\fP> PenningTrap::particles\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
The particles in the Penning trap\&.
|
||||
.PP
|
||||
Definition at line \fB36\fP of file \fBPenningTrap\&.hpp\fP\&.
|
||||
.SS "double PenningTrap::t\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
Current time\&.
|
||||
.PP
|
||||
Definition at line \fB35\fP of file \fBPenningTrap\&.hpp\fP\&.
|
||||
.SS "std::function<double(double)> PenningTrap::V_0\fC [private]\fP"
|
||||
|
||||
.PP
|
||||
Applied potential\&.
|
||||
.PP
|
||||
Definition at line \fB33\fP of file \fBPenningTrap\&.hpp\fP\&.
|
||||
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,48 +0,0 @@
|
||||
.TH "src/PenningTrap.cpp" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
src/PenningTrap.cpp \- The implementation of the \fBPenningTrap\fP class\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
\fC#include 'PenningTrap\&.hpp'\fP
|
||||
.br
|
||||
\fC#include 'constants\&.hpp'\fP
|
||||
.br
|
||||
\fC#include 'typedefs\&.hpp'\fP
|
||||
.br
|
||||
\fC#include 'utils\&.hpp'\fP
|
||||
.br
|
||||
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
The implementation of the \fBPenningTrap\fP class\&.
|
||||
|
||||
|
||||
.PP
|
||||
\fBAuthor\fP
|
||||
.RS 4
|
||||
Cory Alexander Balaton (coryab)
|
||||
.PP
|
||||
Janita Ovidie Sandtrøen Willumsen (janitaws)
|
||||
.RE
|
||||
.PP
|
||||
\fBVersion\fP
|
||||
.RS 4
|
||||
0\&.1
|
||||
.RE
|
||||
.PP
|
||||
.PP
|
||||
\fBBug\fP
|
||||
.RS 4
|
||||
No known bugs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition in file \fBPenningTrap\&.cpp\fP\&.
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,58 +0,0 @@
|
||||
.TH "include/PenningTrap.hpp" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
include/PenningTrap.hpp \- A class for simulating a Penning trap\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
\fC#include <armadillo>\fP
|
||||
.br
|
||||
\fC#include <omp\&.h>\fP
|
||||
.br
|
||||
\fC#include 'Particle\&.hpp'\fP
|
||||
.br
|
||||
\fC#include 'constants\&.hpp'\fP
|
||||
.br
|
||||
\fC#include 'typedefs\&.hpp'\fP
|
||||
.br
|
||||
|
||||
.SS "Classes"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "class \fBPenningTrap\fP"
|
||||
.br
|
||||
.RI "A class that simulates a Penning trap\&. "
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
A class for simulating a Penning trap\&.
|
||||
|
||||
|
||||
.PP
|
||||
\fBAuthor\fP
|
||||
.RS 4
|
||||
Cory Alexander Balaton (coryab)
|
||||
.PP
|
||||
Janita Ovidie Sandtrøen Willumsen (janitaws)
|
||||
.RE
|
||||
.PP
|
||||
\fBVersion\fP
|
||||
.RS 4
|
||||
0\&.1
|
||||
.RE
|
||||
.PP
|
||||
.PP
|
||||
\fBBug\fP
|
||||
.RS 4
|
||||
No known bugs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition in file \fBPenningTrap\&.hpp\fP\&.
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,56 +0,0 @@
|
||||
.TH "PenningTrapTest" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
PenningTrapTest
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
.SS "Static Public Member Functions"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "static void \fBtest_external_E_field\fP ()"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "static void \fBtest_external_B_field\fP ()"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "static void \fBtest_force_on_particle\fP ()"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "static void \fBtest_total_force_external\fP ()"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "static void \fBtest_total_force_particles\fP ()"
|
||||
.br
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
Definition at line \fB20\fP of file \fBtest_suite\&.cpp\fP\&.
|
||||
.SH "Member Function Documentation"
|
||||
.PP
|
||||
.SS "static void PenningTrapTest::test_external_B_field ()\fC [inline]\fP, \fC [static]\fP"
|
||||
|
||||
.PP
|
||||
Definition at line \fB59\fP of file \fBtest_suite\&.cpp\fP\&.
|
||||
.SS "static void PenningTrapTest::test_external_E_field ()\fC [inline]\fP, \fC [static]\fP"
|
||||
|
||||
.PP
|
||||
Definition at line \fB22\fP of file \fBtest_suite\&.cpp\fP\&.
|
||||
.SS "static void PenningTrapTest::test_force_on_particle ()\fC [inline]\fP, \fC [static]\fP"
|
||||
|
||||
.PP
|
||||
Definition at line \fB70\fP of file \fBtest_suite\&.cpp\fP\&.
|
||||
.SS "static void PenningTrapTest::test_total_force_external ()\fC [inline]\fP, \fC [static]\fP"
|
||||
|
||||
.PP
|
||||
Definition at line \fB95\fP of file \fBtest_suite\&.cpp\fP\&.
|
||||
.SS "static void PenningTrapTest::test_total_force_particles ()\fC [inline]\fP, \fC [static]\fP"
|
||||
|
||||
.PP
|
||||
Definition at line \fB108\fP of file \fBtest_suite\&.cpp\fP\&.
|
||||
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,29 +0,0 @@
|
||||
.TH "bug" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
bug \- Bug List
|
||||
.PP
|
||||
|
||||
.IP "\fBFile \fBconstants\&.hpp\fP \fP" 1c
|
||||
No known bugs
|
||||
.IP "\fBFile \fBmain\&.cpp\fP \fP" 1c
|
||||
No known bugs
|
||||
.IP "\fBFile \fBParticle\&.cpp\fP \fP" 1c
|
||||
No known bugs
|
||||
.IP "\fBFile \fBParticle\&.hpp\fP \fP" 1c
|
||||
No known bugs
|
||||
.IP "\fBFile \fBPenningTrap\&.cpp\fP \fP" 1c
|
||||
No known bugs
|
||||
.IP "\fBFile \fBPenningTrap\&.hpp\fP \fP" 1c
|
||||
No known bugs
|
||||
.IP "\fBFile \fBtest_suite\&.cpp\fP \fP" 1c
|
||||
No known bugs
|
||||
.IP "\fBFile \fBtypedefs\&.hpp\fP \fP" 1c
|
||||
No known bugs
|
||||
.IP "\fBFile \fButils\&.cpp\fP \fP" 1c
|
||||
No known bugs
|
||||
.IP "\fBFile \fButils\&.hpp\fP \fP" 1c
|
||||
No known bugs
|
||||
.PP
|
||||
|
||||
@ -1,75 +0,0 @@
|
||||
.TH "include/constants.hpp" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
include/constants.hpp \- Library of constants\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
.SS "Macros"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "#define \fBK_E\fP 138935\&.333"
|
||||
.br
|
||||
.RI "Coulomb constant\&. unit: $\frac{u(\mu m)^3}{(\mu s)^2 e^2}$\&. "
|
||||
.ti -1c
|
||||
.RI "#define \fBT\fP 96\&.4852558"
|
||||
.br
|
||||
.RI "1 Tesla\&. unit: $ \frac{u}{(\mu s) e} $ "
|
||||
.ti -1c
|
||||
.RI "#define \fBV\fP 96485255\&.8"
|
||||
.br
|
||||
.RI "1 Volt\&. unit: $ \frac{u (\mu m)^2}{(\mu s)^2 e} $ "
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
Library of constants\&.
|
||||
|
||||
|
||||
.PP
|
||||
\fBAuthor\fP
|
||||
.RS 4
|
||||
Cory Alexander Balaton (coryab)
|
||||
.PP
|
||||
Janita Ovidie Sandtrøen Willumsen (janitaws)
|
||||
.RE
|
||||
.PP
|
||||
\fBVersion\fP
|
||||
.RS 4
|
||||
0\&.1
|
||||
.RE
|
||||
.PP
|
||||
.PP
|
||||
\fBBug\fP
|
||||
.RS 4
|
||||
No known bugs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition in file \fBconstants\&.hpp\fP\&.
|
||||
.SH "Macro Definition Documentation"
|
||||
.PP
|
||||
.SS "#define K_E 138935\&.333"
|
||||
|
||||
.PP
|
||||
Coulomb constant\&. unit: $\frac{u(\mu m)^3}{(\mu s)^2 e^2}$\&.
|
||||
.PP
|
||||
Definition at line \fB15\fP of file \fBconstants\&.hpp\fP\&.
|
||||
.SS "#define T 96\&.4852558"
|
||||
|
||||
.PP
|
||||
1 Tesla\&. unit: $ \frac{u}{(\mu s) e} $
|
||||
.PP
|
||||
Definition at line \fB17\fP of file \fBconstants\&.hpp\fP\&.
|
||||
.SS "#define V 96485255\&.8"
|
||||
|
||||
.PP
|
||||
1 Volt\&. unit: $ \frac{u (\mu m)^2}{(\mu s)^2 e} $
|
||||
.PP
|
||||
Definition at line \fB19\fP of file \fBconstants\&.hpp\fP\&.
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,148 +0,0 @@
|
||||
.TH "src/main.cpp" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
src/main.cpp \- The main program for this project\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
\fC#include <cmath>\fP
|
||||
.br
|
||||
\fC#include <fstream>\fP
|
||||
.br
|
||||
\fC#include <omp\&.h>\fP
|
||||
.br
|
||||
\fC#include <string>\fP
|
||||
.br
|
||||
\fC#include <sys/stat\&.h>\fP
|
||||
.br
|
||||
\fC#include <vector>\fP
|
||||
.br
|
||||
\fC#include 'PenningTrap\&.hpp'\fP
|
||||
.br
|
||||
\fC#include 'utils\&.hpp'\fP
|
||||
.br
|
||||
|
||||
.SS "Macros"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "#define \fBPARTICLES\fP 100"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "#define \fBN\fP 10000"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "#define \fBCHARGE\fP 1\&."
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "#define \fBMASS\fP 40\&."
|
||||
.br
|
||||
.in -1c
|
||||
.SS "Functions"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "void \fBsimulate_single_particle\fP ()"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "void \fBsimulate_two_particles\fP ()"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "void \fBsimulate_single_particle_with_different_steps\fP ()"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "void \fBsimulate_100_particles\fP ()"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "void \fBsimulate_100_particles_with_time_potential\fP ()"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "int \fBmain\fP ()"
|
||||
.br
|
||||
.in -1c
|
||||
.SS "Variables"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "\fBParticle\fP \fBp1\fP (CHARGE, MASS, \fBvec_3d\fP{20\&., 0\&., 20\&.}, \fBvec_3d\fP{0\&., 25\&., 0\&.})"
|
||||
.br
|
||||
.ti -1c
|
||||
.RI "\fBParticle\fP \fBp2\fP (CHARGE, MASS, \fBvec_3d\fP{25\&., 25\&., 0\&.}, \fBvec_3d\fP{0\&., 40\&., 5\&.})"
|
||||
.br
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
The main program for this project\&.
|
||||
|
||||
|
||||
.PP
|
||||
\fBAuthor\fP
|
||||
.RS 4
|
||||
Cory Alexander Balaton (coryab)
|
||||
.PP
|
||||
Janita Ovidie Sandtrøen Willumsen (janitaws)
|
||||
.RE
|
||||
.PP
|
||||
\fBVersion\fP
|
||||
.RS 4
|
||||
0\&.1
|
||||
.RE
|
||||
.PP
|
||||
.PP
|
||||
\fBBug\fP
|
||||
.RS 4
|
||||
No known bugs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition in file \fBmain\&.cpp\fP\&.
|
||||
.SH "Macro Definition Documentation"
|
||||
.PP
|
||||
.SS "#define CHARGE 1\&."
|
||||
|
||||
.PP
|
||||
Definition at line \fB25\fP of file \fBmain\&.cpp\fP\&.
|
||||
.SS "#define MASS 40\&."
|
||||
|
||||
.PP
|
||||
Definition at line \fB26\fP of file \fBmain\&.cpp\fP\&.
|
||||
.SS "#define N 10000"
|
||||
|
||||
.PP
|
||||
Definition at line \fB24\fP of file \fBmain\&.cpp\fP\&.
|
||||
.SS "#define PARTICLES 100"
|
||||
|
||||
.PP
|
||||
Definition at line \fB23\fP of file \fBmain\&.cpp\fP\&.
|
||||
.SH "Function Documentation"
|
||||
.PP
|
||||
.SS "int main ()"
|
||||
|
||||
.PP
|
||||
Definition at line \fB124\fP of file \fBmain\&.cpp\fP\&.
|
||||
.SS "void simulate_100_particles ()"
|
||||
|
||||
.PP
|
||||
Definition at line \fB77\fP of file \fBmain\&.cpp\fP\&.
|
||||
.SS "void simulate_100_particles_with_time_potential ()"
|
||||
|
||||
.PP
|
||||
Definition at line \fB91\fP of file \fBmain\&.cpp\fP\&.
|
||||
.SS "void simulate_single_particle ()"
|
||||
|
||||
.PP
|
||||
Definition at line \fB31\fP of file \fBmain\&.cpp\fP\&.
|
||||
.SS "void simulate_single_particle_with_different_steps ()"
|
||||
|
||||
.PP
|
||||
Definition at line \fB55\fP of file \fBmain\&.cpp\fP\&.
|
||||
.SS "void simulate_two_particles ()"
|
||||
|
||||
.PP
|
||||
Definition at line \fB42\fP of file \fBmain\&.cpp\fP\&.
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,70 +0,0 @@
|
||||
.TH "src/test_suite.cpp" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
src/test_suite.cpp \- The test suite for the project\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
\fC#include 'PenningTrap\&.hpp'\fP
|
||||
.br
|
||||
\fC#include 'utils\&.hpp'\fP
|
||||
.br
|
||||
\fC#include <iomanip>\fP
|
||||
.br
|
||||
\fC#include <sstream>\fP
|
||||
.br
|
||||
\fC#include <string>\fP
|
||||
.br
|
||||
|
||||
.SS "Classes"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "class \fBPenningTrapTest\fP"
|
||||
.br
|
||||
.in -1c
|
||||
.SS "Functions"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "int \fBmain\fP ()"
|
||||
.br
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
The test suite for the project\&.
|
||||
|
||||
|
||||
.PP
|
||||
\fBAuthor\fP
|
||||
.RS 4
|
||||
Cory Alexander Balaton (coryab)
|
||||
.PP
|
||||
Janita Ovidie Sandtrøen Willumsen (janitaws)
|
||||
.RE
|
||||
.PP
|
||||
\fBVersion\fP
|
||||
.RS 4
|
||||
0\&.1
|
||||
.RE
|
||||
.PP
|
||||
.PP
|
||||
\fBBug\fP
|
||||
.RS 4
|
||||
No known bugs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition in file \fBtest_suite\&.cpp\fP\&.
|
||||
.SH "Function Documentation"
|
||||
.PP
|
||||
.SS "int main ()"
|
||||
|
||||
.PP
|
||||
Definition at line \fB135\fP of file \fBtest_suite\&.cpp\fP\&.
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,14 +0,0 @@
|
||||
.TH "todo" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
todo \- Todo List
|
||||
.PP
|
||||
|
||||
.IP "\fBFile \fBPenningTrap\&.cpp\fP \fP" 1c
|
||||
Implement evolve_RK4
|
||||
.PP
|
||||
.PP
|
||||
Implement evolve_forward_euler
|
||||
.PP
|
||||
|
||||
@ -1,92 +0,0 @@
|
||||
.TH "include/typedefs.hpp" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
include/typedefs.hpp \- Useful typedefs for cleaner code\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
\fC#include <vector>\fP
|
||||
.br
|
||||
\fC#include <armadillo>\fP
|
||||
.br
|
||||
|
||||
.SS "Typedefs"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "typedef std::vector< arma::vec::fixed< 3 > > \fBsim_cols\fP"
|
||||
.br
|
||||
.RI "Typedef for the column of the result vector from simulating particles\&. "
|
||||
.ti -1c
|
||||
.RI "typedef std::vector< arma::vec::fixed< 3 > > \fBsim_rows\fP"
|
||||
.br
|
||||
.RI "Typedef for the row of the result vector from simulating particles\&. "
|
||||
.ti -1c
|
||||
.RI "typedef std::vector< \fBsim_cols\fP > \fBsim_arr\fP"
|
||||
.br
|
||||
.RI "Typedef for the result of the simulate method\&. "
|
||||
.ti -1c
|
||||
.RI "typedef arma::vec::fixed< 3 > \fBvec_3d\fP"
|
||||
.br
|
||||
.RI "Typedef for a fixed 3d arma vector\&. "
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
Useful typedefs for cleaner code\&.
|
||||
|
||||
|
||||
.PP
|
||||
\fBAuthor\fP
|
||||
.RS 4
|
||||
Cory Alexander Balaton (coryab)
|
||||
.PP
|
||||
Janita Ovidie Sandtrøen Willumsen (janitaws)
|
||||
.RE
|
||||
.PP
|
||||
\fBVersion\fP
|
||||
.RS 4
|
||||
1\&.0
|
||||
.RE
|
||||
.PP
|
||||
.PP
|
||||
These typedefs make the code more readable and easy to follow along\&.
|
||||
.PP
|
||||
\fBBug\fP
|
||||
.RS 4
|
||||
No known bugs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition in file \fBtypedefs\&.hpp\fP\&.
|
||||
.SH "Typedef Documentation"
|
||||
.PP
|
||||
.SS "typedef std::vector<\fBsim_cols\fP> \fBsim_arr\fP"
|
||||
|
||||
.PP
|
||||
Typedef for the result of the simulate method\&.
|
||||
.PP
|
||||
Definition at line \fB32\fP of file \fBtypedefs\&.hpp\fP\&.
|
||||
.SS "typedef std::vector<arma::vec::fixed<3> > \fBsim_cols\fP"
|
||||
|
||||
.PP
|
||||
Typedef for the column of the result vector from simulating particles\&.
|
||||
.PP
|
||||
Definition at line \fB24\fP of file \fBtypedefs\&.hpp\fP\&.
|
||||
.SS "typedef std::vector<arma::vec::fixed<3> > \fBsim_rows\fP"
|
||||
|
||||
.PP
|
||||
Typedef for the row of the result vector from simulating particles\&.
|
||||
.PP
|
||||
Definition at line \fB28\fP of file \fBtypedefs\&.hpp\fP\&.
|
||||
.SS "typedef arma::vec::fixed<3> \fBvec_3d\fP"
|
||||
|
||||
.PP
|
||||
Typedef for a fixed 3d arma vector\&.
|
||||
.PP
|
||||
Definition at line \fB36\fP of file \fBtypedefs\&.hpp\fP\&.
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,179 +0,0 @@
|
||||
.TH "src/utils.cpp" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
src/utils.cpp \- Implementation of the utils\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
\fC#include <sys/stat\&.h>\fP
|
||||
.br
|
||||
\fC#include 'utils\&.hpp'\fP
|
||||
.br
|
||||
|
||||
.SS "Functions"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "std::string \fBscientific_format\fP (double d, int width, int prec)"
|
||||
.br
|
||||
.RI "Turns a double into a string written in scientific format\&. "
|
||||
.ti -1c
|
||||
.RI "std::string \fBscientific_format\fP (const std::vector< double > &v, int width, int prec)"
|
||||
.br
|
||||
.RI "Turns a vector of doubles into a string written in scientific format\&. "
|
||||
.ti -1c
|
||||
.RI "void \fBm_assert\fP (bool expr, std::string expr_str, std::string f, std::string file, int line, std::string msg)"
|
||||
.br
|
||||
.RI "Test an expression, confirm that test is ok, or abort execution\&. "
|
||||
.ti -1c
|
||||
.RI "bool \fBarma_vector_close_to\fP (arma::vec &a, arma::vec &b, double tol)"
|
||||
.br
|
||||
.RI "Test if two armadillo vectors are close to each other\&. "
|
||||
.ti -1c
|
||||
.RI "bool \fBmkpath\fP (std::string path, int mode)"
|
||||
.br
|
||||
.RI "Make path given\&. "
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
Implementation of the utils\&.
|
||||
|
||||
|
||||
.PP
|
||||
\fBAuthor\fP
|
||||
.RS 4
|
||||
Cory Alexander Balaton (coryab)
|
||||
.PP
|
||||
Janita Ovidie Sandtrøen Willumsen (janitaws)
|
||||
.RE
|
||||
.PP
|
||||
\fBVersion\fP
|
||||
.RS 4
|
||||
1\&.0
|
||||
.RE
|
||||
.PP
|
||||
.PP
|
||||
\fBBug\fP
|
||||
.RS 4
|
||||
No known bugs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition in file \fButils\&.cpp\fP\&.
|
||||
.SH "Function Documentation"
|
||||
.PP
|
||||
.SS "bool arma_vector_close_to (arma::vec & a, arma::vec & b, double tol = \fC1e\-8\fP)"
|
||||
|
||||
.PP
|
||||
Test if two armadillo vectors are close to each other\&. This function takes in 2 vectors and checks if they are approximately equal to each other given a tolerance\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIa\fP Vector a
|
||||
.br
|
||||
\fIb\fP Vector b
|
||||
.br
|
||||
\fItol\fP The tolerance
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
bool
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB62\fP of file \fButils\&.cpp\fP\&.
|
||||
.SS "void m_assert (bool expr, std::string expr_str, std::string func, std::string file, int line, std::string msg)"
|
||||
|
||||
.PP
|
||||
Test an expression, confirm that test is ok, or abort execution\&. This function takes in an expression and prints an OK message if it's true, or it prints a fail message and aborts execution if it fails\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIexpr\fP The expression to be evaluated
|
||||
.br
|
||||
\fIexpr_str\fP The stringified version of the expression
|
||||
.br
|
||||
\fIfunc\fP The function name of the caller
|
||||
.br
|
||||
\fIfile\fP The file of the caller
|
||||
.br
|
||||
\fIline\fP The line number where this function is called from
|
||||
.br
|
||||
\fImsg\fP The message to be displayed
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB43\fP of file \fButils\&.cpp\fP\&.
|
||||
.SS "bool mkpath (std::string path, int mode = \fC0777\fP)"
|
||||
|
||||
.PP
|
||||
Make path given\&. This tries to be the equivalent to 'mkdir -p' and creates a new directory whenever it needs to\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIpath\fP The path to be created
|
||||
.br
|
||||
\fImode\fP The mode/permissions for all the new directories
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
bool
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB76\fP of file \fButils\&.cpp\fP\&.
|
||||
.SS "std::string scientific_format (const std::vector< double > & v, int width = \fC20\fP, int prec = \fC10\fP)"
|
||||
|
||||
.PP
|
||||
Turns a vector of doubles into a string written in scientific format\&. The code is stolen from https://github.com/anderkve/FYS3150\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIv\fP The vector to stringify
|
||||
.br
|
||||
\fIwidth\fP The reserved width of the string
|
||||
.br
|
||||
\fIprec\fP The precision of the stringified number
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
std::string
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB24\fP of file \fButils\&.cpp\fP\&.
|
||||
.SS "std::string scientific_format (double d, int width = \fC20\fP, int prec = \fC10\fP)"
|
||||
|
||||
.PP
|
||||
Turns a double into a string written in scientific format\&. The code is stolen from https://github.com/anderkve/FYS3150\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fId\fP The number to stringify
|
||||
.br
|
||||
\fIwidth\fP The reserved width of the string
|
||||
.br
|
||||
\fIprec\fP The precision of the stringified number
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
std::string
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB17\fP of file \fButils\&.cpp\fP\&.
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -1,228 +0,0 @@
|
||||
.TH "include/utils.hpp" 3 "Sat Oct 14 2023" "Penning Trap Simulation" \" -*- nroff -*-
|
||||
.ad l
|
||||
.nh
|
||||
.SH NAME
|
||||
include/utils.hpp \- Function prototypes and macros that are useful\&.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.PP
|
||||
\fC#include <armadillo>\fP
|
||||
.br
|
||||
\fC#include <iomanip>\fP
|
||||
.br
|
||||
\fC#include <sstream>\fP
|
||||
.br
|
||||
\fC#include <string>\fP
|
||||
.br
|
||||
\fC#include <vector>\fP
|
||||
.br
|
||||
|
||||
.SS "Macros"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "#define \fBDEBUG\fP(msg)"
|
||||
.br
|
||||
.RI "Writes a debug message\&. "
|
||||
.ti -1c
|
||||
.RI "#define \fBASSERT\fP(expr, msg)"
|
||||
.br
|
||||
.RI "A prettier assertion function\&. "
|
||||
.ti -1c
|
||||
.RI "#define \fB__METHOD_NAME__\fP methodName(__PRETTY_FUNCTION__)"
|
||||
.br
|
||||
.RI "Get the name of the current method/function\&. "
|
||||
.in -1c
|
||||
.SS "Functions"
|
||||
|
||||
.in +1c
|
||||
.ti -1c
|
||||
.RI "std::string \fBscientific_format\fP (double d, int width=20, int prec=10)"
|
||||
.br
|
||||
.RI "Turns a double into a string written in scientific format\&. "
|
||||
.ti -1c
|
||||
.RI "std::string \fBscientific_format\fP (const std::vector< double > &v, int width=20, int prec=10)"
|
||||
.br
|
||||
.RI "Turns a vector of doubles into a string written in scientific format\&. "
|
||||
.ti -1c
|
||||
.RI "void \fBm_assert\fP (bool expr, std::string expr_str, std::string func, std::string file, int line, std::string msg)"
|
||||
.br
|
||||
.RI "Test an expression, confirm that test is ok, or abort execution\&. "
|
||||
.ti -1c
|
||||
.RI "bool \fBarma_vector_close_to\fP (arma::vec &a, arma::vec &b, double tol=1e\-8)"
|
||||
.br
|
||||
.RI "Test if two armadillo vectors are close to each other\&. "
|
||||
.ti -1c
|
||||
.RI "bool \fBmkpath\fP (std::string path, int mode=0777)"
|
||||
.br
|
||||
.RI "Make path given\&. "
|
||||
.in -1c
|
||||
.SH "Detailed Description"
|
||||
.PP
|
||||
Function prototypes and macros that are useful\&.
|
||||
|
||||
|
||||
.PP
|
||||
\fBAuthor\fP
|
||||
.RS 4
|
||||
Cory Alexander Balaton (coryab)
|
||||
.PP
|
||||
Janita Ovidie Sandtrøen Willumsen (janitaws)
|
||||
.RE
|
||||
.PP
|
||||
\fBVersion\fP
|
||||
.RS 4
|
||||
1\&.0
|
||||
.RE
|
||||
.PP
|
||||
.PP
|
||||
These utility function are mainly for convenience and aren't directly related to the project\&.
|
||||
.PP
|
||||
\fBBug\fP
|
||||
.RS 4
|
||||
No known bugs
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition in file \fButils\&.hpp\fP\&.
|
||||
.SH "Macro Definition Documentation"
|
||||
.PP
|
||||
.SS "#define __METHOD_NAME__ methodName(__PRETTY_FUNCTION__)"
|
||||
|
||||
.PP
|
||||
Get the name of the current method/function\&.
|
||||
.PP
|
||||
Definition at line \fB51\fP of file \fButils\&.hpp\fP\&.
|
||||
.SS "#define ASSERT(expr, msg)"
|
||||
\fBValue:\fP.PP
|
||||
.nf
|
||||
m_assert(expr, #expr, __METHOD_NAME__, __FILE__, \\
|
||||
__LINE__, msg)
|
||||
.fi
|
||||
|
||||
.PP
|
||||
A prettier assertion function\&. This macro calls the m_assert function which is a more informative assertion function than the regular assert function from cassert\&.
|
||||
.PP
|
||||
Definition at line \fB45\fP of file \fButils\&.hpp\fP\&.
|
||||
.SS "#define DEBUG(msg)"
|
||||
|
||||
.PP
|
||||
Writes a debug message\&. This macro writes a debug message that includes the filename, line number, and a custom message\&. The function is wrapped in an ifdef that checks if DBG is defined, so one can choose to display the debug messages by adding the -DDBG flag when compiling\&.
|
||||
.PP
|
||||
Definition at line \fB36\fP of file \fButils\&.hpp\fP\&.
|
||||
.SH "Function Documentation"
|
||||
.PP
|
||||
.SS "bool arma_vector_close_to (arma::vec & a, arma::vec & b, double tol = \fC1e\-8\fP)"
|
||||
|
||||
.PP
|
||||
Test if two armadillo vectors are close to each other\&. This function takes in 2 vectors and checks if they are approximately equal to each other given a tolerance\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIa\fP Vector a
|
||||
.br
|
||||
\fIb\fP Vector b
|
||||
.br
|
||||
\fItol\fP The tolerance
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
bool
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB62\fP of file \fButils\&.cpp\fP\&.
|
||||
.SS "void m_assert (bool expr, std::string expr_str, std::string func, std::string file, int line, std::string msg)"
|
||||
|
||||
.PP
|
||||
Test an expression, confirm that test is ok, or abort execution\&. This function takes in an expression and prints an OK message if it's true, or it prints a fail message and aborts execution if it fails\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIexpr\fP The expression to be evaluated
|
||||
.br
|
||||
\fIexpr_str\fP The stringified version of the expression
|
||||
.br
|
||||
\fIfunc\fP The function name of the caller
|
||||
.br
|
||||
\fIfile\fP The file of the caller
|
||||
.br
|
||||
\fIline\fP The line number where this function is called from
|
||||
.br
|
||||
\fImsg\fP The message to be displayed
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB43\fP of file \fButils\&.cpp\fP\&.
|
||||
.SS "bool mkpath (std::string path, int mode = \fC0777\fP)"
|
||||
|
||||
.PP
|
||||
Make path given\&. This tries to be the equivalent to 'mkdir -p' and creates a new directory whenever it needs to\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIpath\fP The path to be created
|
||||
.br
|
||||
\fImode\fP The mode/permissions for all the new directories
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
bool
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB76\fP of file \fButils\&.cpp\fP\&.
|
||||
.SS "std::string scientific_format (const std::vector< double > & v, int width = \fC20\fP, int prec = \fC10\fP)"
|
||||
|
||||
.PP
|
||||
Turns a vector of doubles into a string written in scientific format\&. The code is stolen from https://github.com/anderkve/FYS3150\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fIv\fP The vector to stringify
|
||||
.br
|
||||
\fIwidth\fP The reserved width of the string
|
||||
.br
|
||||
\fIprec\fP The precision of the stringified number
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
std::string
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB24\fP of file \fButils\&.cpp\fP\&.
|
||||
.SS "std::string scientific_format (double d, int width = \fC20\fP, int prec = \fC10\fP)"
|
||||
|
||||
.PP
|
||||
Turns a double into a string written in scientific format\&. The code is stolen from https://github.com/anderkve/FYS3150\&.
|
||||
.PP
|
||||
\fBParameters\fP
|
||||
.RS 4
|
||||
\fId\fP The number to stringify
|
||||
.br
|
||||
\fIwidth\fP The reserved width of the string
|
||||
.br
|
||||
\fIprec\fP The precision of the stringified number
|
||||
.RE
|
||||
.PP
|
||||
\fBReturns\fP
|
||||
.RS 4
|
||||
std::string
|
||||
.RE
|
||||
.PP
|
||||
|
||||
.PP
|
||||
Definition at line \fB17\fP of file \fButils\&.cpp\fP\&.
|
||||
.SH "Author"
|
||||
.PP
|
||||
Generated automatically by Doxygen for Penning Trap Simulation from the source code\&.
|
||||
@ -53,8 +53,8 @@ vec_3d PenningTrap::v_func(unsigned int i, unsigned int j, double dt)
|
||||
case 2:
|
||||
return dt * this->k_v[2][j];
|
||||
case 3:
|
||||
return (dt / 6.) * (this->k_v[0][j].eval() + this->k_v[1][j].eval() +
|
||||
this->k_v[2][j].eval() + this->k_v[3][j].eval());
|
||||
return (dt / 6.) * (this->k_v[0][j] + this->k_v[1][j] +
|
||||
this->k_v[2][j] + this->k_v[3][j]);
|
||||
default:
|
||||
std::cout << "Not valid!" << std::endl;
|
||||
abort();
|
||||
@ -71,8 +71,8 @@ vec_3d PenningTrap::r_func(unsigned int i, unsigned int j, double dt)
|
||||
case 2:
|
||||
return dt * this->k_r[2][j];
|
||||
case 3:
|
||||
return (dt / 6.) * (this->k_r[0][j].eval() + this->k_r[1][j].eval() +
|
||||
this->k_r[2][j].eval() + this->k_r[3][j].eval());
|
||||
return (dt / 6.) * (this->k_r[0][j] + this->k_r[1][j] +
|
||||
this->k_r[2][j] + this->k_r[3][j]);
|
||||
default:
|
||||
std::cout << "Not valid!" << std::endl;
|
||||
abort();
|
||||
@ -212,12 +212,16 @@ void PenningTrap::evolve_forward_euler(double dt, bool particle_interaction)
|
||||
this->t += dt;
|
||||
}
|
||||
|
||||
sim_arr PenningTrap::simulate(double time, unsigned int steps,
|
||||
std::string method, bool particle_interaction)
|
||||
simulation_t PenningTrap::simulate(double time, unsigned int steps,
|
||||
std::string method,
|
||||
bool particle_interaction)
|
||||
{
|
||||
double dt = time / (double)steps;
|
||||
|
||||
sim_arr res(this->particles.size(), sim_cols(steps));
|
||||
unsigned int size = this->particles.size();
|
||||
// sim_arr res(this->particles.size(), sim_cols(steps));
|
||||
simulation_t res{sim_arr(size, sim_cols(steps)),
|
||||
sim_arr(size, sim_cols(steps))};
|
||||
|
||||
void (PenningTrap::*func)(double, bool);
|
||||
if (method == "rk4") {
|
||||
@ -232,8 +236,9 @@ sim_arr PenningTrap::simulate(double time, unsigned int steps,
|
||||
}
|
||||
|
||||
for (size_t j = 0; j < steps; j++) {
|
||||
for (size_t i = 0; i < this->particles.size(); i++) {
|
||||
res[i][j] = this->particles[i].r_vec;
|
||||
for (size_t i = 0; i < size; i++) {
|
||||
res.r_vecs[i][j] = this->particles[i].r_vec;
|
||||
res.v_vecs[i][j] = this->particles[i].v_vec;
|
||||
}
|
||||
(this->*func)(dt, particle_interaction);
|
||||
}
|
||||
@ -242,7 +247,8 @@ sim_arr PenningTrap::simulate(double time, unsigned int steps,
|
||||
}
|
||||
|
||||
void PenningTrap::write_simulation_to_dir(std::string path, double time,
|
||||
unsigned int steps, std::string method,
|
||||
unsigned int steps,
|
||||
std::string method,
|
||||
bool particle_interaction)
|
||||
{
|
||||
if (path.back() != '/') {
|
||||
@ -253,23 +259,34 @@ void PenningTrap::write_simulation_to_dir(std::string path, double time,
|
||||
return;
|
||||
}
|
||||
|
||||
sim_arr res = this->simulate(time, steps, method, particle_interaction);
|
||||
simulation_t res =
|
||||
this->simulate(time, steps, method, particle_interaction);
|
||||
|
||||
std::ofstream ofile;
|
||||
|
||||
#pragma omp parallel for private(ofile)
|
||||
for (size_t i = 0; i < this->particles.size(); i++) {
|
||||
ofile.open(path + "particle_" + std::to_string(i) + ".txt");
|
||||
for (vec_3d &vec : res[i]) {
|
||||
ofile.open(path + "particle_" + std::to_string(i) + "_r.txt");
|
||||
for (vec_3d &vec : res.r_vecs[i]) {
|
||||
ofile << vec(0) << "," << vec(1) << "," << vec(2) << "\n";
|
||||
}
|
||||
ofile.close();
|
||||
ofile.open(path + "particle_" + std::to_string(i) + "_v.txt");
|
||||
for (vec_3d &vec : res.v_vecs[i]) {
|
||||
ofile << scientific_format(vec(0), 10, 8) << ","
|
||||
<< scientific_format(vec(1), 8, 10) << ","
|
||||
<< scientific_format(vec(2), 8, 10) << "\n";
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
}
|
||||
|
||||
double PenningTrap::fraction_of_particles_left(double time, unsigned int steps, std::string method, bool particle_interaction)
|
||||
double PenningTrap::fraction_of_particles_left(double time, unsigned int steps,
|
||||
std::string method,
|
||||
bool particle_interaction)
|
||||
{
|
||||
sim_arr res = this->simulate(time, steps, method, particle_interaction);
|
||||
simulation_t res =
|
||||
this->simulate(time, steps, method, particle_interaction);
|
||||
|
||||
int particles_left = 0;
|
||||
|
||||
@ -279,6 +296,5 @@ double PenningTrap::fraction_of_particles_left(double time, unsigned int steps,
|
||||
}
|
||||
}
|
||||
|
||||
return (double) particles_left / (double) this->particles.size();
|
||||
return (double)particles_left / (double)this->particles.size();
|
||||
}
|
||||
|
||||
|
||||
69
src/main.cpp
69
src/main.cpp
@ -12,6 +12,7 @@
|
||||
|
||||
#include <cmath>
|
||||
#include <fstream>
|
||||
#include <functional>
|
||||
#include <omp.h>
|
||||
#include <string>
|
||||
#include <sys/stat.h>
|
||||
@ -21,7 +22,7 @@
|
||||
#include "utils.hpp"
|
||||
|
||||
#define PARTICLES 100
|
||||
#define N 10000
|
||||
#define N 40000
|
||||
#define CHARGE 1.
|
||||
#define MASS 40. // unit: amu
|
||||
|
||||
@ -36,7 +37,7 @@ void simulate_single_particle()
|
||||
double time = 50.; // microseconds
|
||||
|
||||
DEBUG("Write to dir");
|
||||
trap.write_simulation_to_dir("output/simulate_single_particle", time, N);
|
||||
trap.write_simulation_to_dir("output/simulate_single_particle", time, N, "rk4", false);
|
||||
}
|
||||
|
||||
void simulate_two_particles()
|
||||
@ -78,14 +79,13 @@ void simulate_100_particles()
|
||||
{
|
||||
PenningTrap trap((unsigned)100, T,
|
||||
[](double t) {
|
||||
return 25. * V / 1000. *
|
||||
(1. + .4 * std::cos(1.5 * t));
|
||||
return 25. * V / 1000. * (1. + .4 * std::cos(1.5 * t));
|
||||
},
|
||||
500., 0);
|
||||
|
||||
double time = 500.; // microseconds
|
||||
|
||||
trap.write_simulation_to_dir("output/simulate_100_particles", time, N*4);
|
||||
trap.write_simulation_to_dir("output/simulate_100_particles", time, N * 4);
|
||||
}
|
||||
|
||||
void simulate_100_particles_with_time_potential()
|
||||
@ -95,52 +95,63 @@ void simulate_100_particles_with_time_potential()
|
||||
double freq_start = .2;
|
||||
double freq_end = 2.5;
|
||||
double freq_increment = .02;
|
||||
size_t freq_iterations = (size_t) ((freq_end - freq_start) / freq_increment);
|
||||
size_t freq_iterations = (size_t)((freq_end - freq_start) / freq_increment);
|
||||
|
||||
double res[4][freq_iterations];
|
||||
|
||||
std::string path = "output/time_dependent_potential/";
|
||||
mkpath(path);
|
||||
|
||||
std::ofstream ofile;
|
||||
|
||||
for (double f : amplitudes) {
|
||||
ofile.open(path + "f_" + std::to_string(f) + ".txt");
|
||||
#pragma omp parallel for ordered schedule(static, 1)
|
||||
for (size_t i=0; i < freq_iterations; i++) {
|
||||
double freq = freq_start + i*freq_increment;
|
||||
PenningTrap trap((unsigned)100, T,
|
||||
[f, freq](double t) {
|
||||
return (25. * V / 1000.) *
|
||||
(1. + f * std::cos(freq * t));
|
||||
},
|
||||
500., 0.);
|
||||
double res = trap.fraction_of_particles_left(500., 40000, "rk4", true);
|
||||
#pragma omp ordered
|
||||
ofile << freq << "," << res << "\n";
|
||||
}
|
||||
ofile.close();
|
||||
double freq = freq_start;
|
||||
for (size_t i=0; i<freq_iterations; i++) {
|
||||
res[0][i] = freq;
|
||||
freq += freq_increment;
|
||||
}
|
||||
|
||||
#pragma omp parallel for collapse(2) num_threads(4)
|
||||
for (size_t i = 0; i < 3; i++) {
|
||||
for (size_t j = 0; j < freq_iterations; j++) {
|
||||
PenningTrap trap((unsigned)100, T,
|
||||
std::bind([](double f, double r, double t) {
|
||||
return (25. * V / 1000.) *
|
||||
(1. +
|
||||
f * std::cos(r * t));
|
||||
}, amplitudes[i], res[0][j], std::placeholders::_1),
|
||||
500., 0.);
|
||||
res[i + 1][j] =
|
||||
trap.fraction_of_particles_left(500., 40000, "rk4", false);
|
||||
}
|
||||
}
|
||||
|
||||
ofile.open(path + "res.txt");
|
||||
for (size_t i=0; i<freq_iterations; i++) {
|
||||
ofile << res[0][i] << ","
|
||||
<< res[1][i] << ","
|
||||
<< res[2][i] << ","
|
||||
<< res[3][i] << "\n";
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
double start = omp_get_wtime();
|
||||
|
||||
simulate_single_particle();
|
||||
|
||||
simulate_two_particles();
|
||||
|
||||
simulate_single_particle_with_different_steps();
|
||||
//simulate_single_particle_with_different_steps();
|
||||
|
||||
double start = omp_get_wtime();
|
||||
|
||||
for (int i=0; i<5; i++) {
|
||||
simulate_100_particles();
|
||||
}
|
||||
//simulate_100_particles();
|
||||
|
||||
//simulate_100_particles_with_time_potential();
|
||||
|
||||
double end = omp_get_wtime();
|
||||
|
||||
std::cout << "Average time: " << (end - start) / 5. << " seconds" << std::endl;
|
||||
std::cout << "Time: " << (end - start) << " seconds" << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1,33 +0,0 @@
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def main():
|
||||
files = [
|
||||
"output/time_dependent_potential/f_0.100000.txt",
|
||||
"output/time_dependent_potential/f_0.400000.txt",
|
||||
"output/time_dependent_potential/f_0.700000.txt",
|
||||
]
|
||||
vals = [
|
||||
.1,
|
||||
.4,
|
||||
.7
|
||||
]
|
||||
for i in range(3):
|
||||
with open(files[i]) as f:
|
||||
lines = f.readlines()
|
||||
x = []
|
||||
y = []
|
||||
for line in lines:
|
||||
a,b = line.strip().split(",")
|
||||
x.append(float(a))
|
||||
y.append(float(b))
|
||||
plt.plot(x,y,label=f"amplitude: {vals[i]}")
|
||||
|
||||
plt.xlabel(r"$\omega_V$")
|
||||
plt.ylabel(r"Fraction of particles left")
|
||||
plt.title(r"The fraction of particles left in the Penning trap "
|
||||
"after 500 microseconds for different amplitudes and frequencies")
|
||||
plt.legend()
|
||||
plt.show()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
30
src/scripts/plot_particles_left.py
Normal file
30
src/scripts/plot_particles_left.py
Normal file
@ -0,0 +1,30 @@
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def main():
|
||||
with open("output/time_dependent_potential/res.txt") as f:
|
||||
lines = f.readlines()
|
||||
x = []
|
||||
y1 = []
|
||||
y2 = []
|
||||
y3 = []
|
||||
for line in lines:
|
||||
l = line.strip().split(",")
|
||||
x.append(float(l[0]))
|
||||
y1.append(float(l[1]))
|
||||
y2.append(float(l[2]))
|
||||
y3.append(float(l[3]))
|
||||
|
||||
plt.plot(x,y1,label=f"amplitude: 0.1")
|
||||
plt.plot(x,y2,label=f"amplitude: 0.4")
|
||||
plt.plot(x,y3,label=f"amplitude: 0.7")
|
||||
|
||||
plt.xlabel(r"$\omega_V$ (MHz)")
|
||||
plt.ylabel(r"Fraction of particles left")
|
||||
plt.title(r"The fraction of particles left in the Penning trap "
|
||||
"after 500 microseconds for different amplitudes and frequencies")
|
||||
plt.legend()
|
||||
# plt.show()
|
||||
plt.savefig("../latex/images/particles_left.pdf")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
29
src/scripts/plot_single_particle.py
Normal file
29
src/scripts/plot_single_particle.py
Normal file
@ -0,0 +1,29 @@
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
def z(t):
|
||||
V_0 = 25.*9.64852558 * 10**4
|
||||
m = 40.
|
||||
d = 500.
|
||||
w_z = np.sqrt((2.*V_0)/(m*d*d))
|
||||
return 20.*np.cos(w_z*t)
|
||||
|
||||
def main():
|
||||
filename = "output/simulate_single_particle/particle_0_r.txt"
|
||||
r = t = []
|
||||
with open(filename) as f:
|
||||
lines = f.readlines()
|
||||
t = np.linspace(0, 50, len(lines))
|
||||
r = np.array([list(map(float, line.strip().split(","))) for line in lines])
|
||||
|
||||
plt.plot(t, r[:, 2], label="approximation")
|
||||
plt.plot(t, z(t), label="analytical")
|
||||
plt.xlabel(r"time $(\mu s)$")
|
||||
plt.ylabel(r"z $(\mu m)$")
|
||||
plt.title(r"Movement of a single particle in the x direction")
|
||||
plt.legend()
|
||||
plt.savefig("../latex/images/single_particle.pdf")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue
Block a user