From 5ed7cedfae89549a0064bbbe94a58bc57abc7cf8 Mon Sep 17 00:00:00 2001 From: Cory Date: Tue, 17 Oct 2023 17:01:50 +0200 Subject: [PATCH] Stuff --- .gitignore | 1 + Doxyfile | 2 +- include/PenningTrap.hpp | 11 +- latex/images/particles_left.pdf | Bin 0 -> 17840 bytes latex/images/single_particle.pdf | Bin 0 -> 21430 bytes man_pages/man3/Particle.3 | 111 ----- man_pages/man3/Particle.cpp.3 | 42 -- man_pages/man3/Particle.hpp.3 | 52 --- man_pages/man3/PenningTrap.3 | 494 --------------------- man_pages/man3/PenningTrap.cpp.3 | 48 -- man_pages/man3/PenningTrap.hpp.3 | 58 --- man_pages/man3/PenningTrapTest.3 | 56 --- man_pages/man3/bug.3 | 29 -- man_pages/man3/constants.hpp.3 | 75 ---- man_pages/man3/main.cpp.3 | 148 ------ man_pages/man3/test_suite.cpp.3 | 70 --- man_pages/man3/todo.3 | 14 - man_pages/man3/typedefs.hpp.3 | 92 ---- man_pages/man3/utils.cpp.3 | 179 -------- man_pages/man3/utils.hpp.3 | 228 ---------- src/PenningTrap.cpp | 50 ++- src/main.cpp | 69 +-- src/plot_particles_left.py | 33 -- src/{ => scripts}/animate_100_particles.py | 0 src/scripts/plot_particles_left.py | 30 ++ src/scripts/plot_single_particle.py | 29 ++ 26 files changed, 142 insertions(+), 1779 deletions(-) create mode 100644 latex/images/particles_left.pdf create mode 100644 latex/images/single_particle.pdf delete mode 100644 man_pages/man3/Particle.3 delete mode 100644 man_pages/man3/Particle.cpp.3 delete mode 100644 man_pages/man3/Particle.hpp.3 delete mode 100644 man_pages/man3/PenningTrap.3 delete mode 100644 man_pages/man3/PenningTrap.cpp.3 delete mode 100644 man_pages/man3/PenningTrap.hpp.3 delete mode 100644 man_pages/man3/PenningTrapTest.3 delete mode 100644 man_pages/man3/bug.3 delete mode 100644 man_pages/man3/constants.hpp.3 delete mode 100644 man_pages/man3/main.cpp.3 delete mode 100644 man_pages/man3/test_suite.cpp.3 delete mode 100644 man_pages/man3/todo.3 delete mode 100644 man_pages/man3/typedefs.hpp.3 delete mode 100644 man_pages/man3/utils.cpp.3 delete mode 100644 man_pages/man3/utils.hpp.3 delete mode 100644 src/plot_particles_left.py rename src/{ => scripts}/animate_100_particles.py (100%) create mode 100644 src/scripts/plot_particles_left.py create mode 100644 src/scripts/plot_single_particle.py diff --git a/.gitignore b/.gitignore index 5f54c8c..17c5519 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,4 @@ src/* !src/*.hpp !src/*.py !src/Doxyfile +!src/scripts diff --git a/Doxyfile b/Doxyfile index eeba27f..7b951c6 100644 --- a/Doxyfile +++ b/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 diff --git a/include/PenningTrap.hpp b/include/PenningTrap.hpp index f6cf2c0..eaf89be 100644 --- a/include/PenningTrap.hpp +++ b/include/PenningTrap.hpp @@ -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. * diff --git a/latex/images/particles_left.pdf b/latex/images/particles_left.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cc065d4f18be027a57d2c9af0c0fe5c6bb82ee40 GIT binary patch literal 17840 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\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\&. diff --git a/man_pages/man3/Particle.cpp.3 b/man_pages/man3/Particle.cpp.3 deleted file mode 100644 index 904c7a4..0000000 --- a/man_pages/man3/Particle.cpp.3 +++ /dev/null @@ -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\&. diff --git a/man_pages/man3/Particle.hpp.3 b/man_pages/man3/Particle.hpp.3 deleted file mode 100644 index 2033d14..0000000 --- a/man_pages/man3/Particle.hpp.3 +++ /dev/null @@ -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 \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\&. diff --git a/man_pages/man3/PenningTrap.3 b/man_pages/man3/PenningTrap.3 deleted file mode 100644 index 51cca93..0000000 --- a/man_pages/man3/PenningTrap.3 +++ /dev/null @@ -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 \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 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\&. diff --git a/man_pages/man3/PenningTrap.cpp.3 b/man_pages/man3/PenningTrap.cpp.3 deleted file mode 100644 index d080d97..0000000 --- a/man_pages/man3/PenningTrap.cpp.3 +++ /dev/null @@ -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\&. diff --git a/man_pages/man3/PenningTrap.hpp.3 b/man_pages/man3/PenningTrap.hpp.3 deleted file mode 100644 index 15d155f..0000000 --- a/man_pages/man3/PenningTrap.hpp.3 +++ /dev/null @@ -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 \fP -.br -\fC#include \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\&. diff --git a/man_pages/man3/PenningTrapTest.3 b/man_pages/man3/PenningTrapTest.3 deleted file mode 100644 index 3bbe27c..0000000 --- a/man_pages/man3/PenningTrapTest.3 +++ /dev/null @@ -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\&. diff --git a/man_pages/man3/bug.3 b/man_pages/man3/bug.3 deleted file mode 100644 index d21bde1..0000000 --- a/man_pages/man3/bug.3 +++ /dev/null @@ -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 - diff --git a/man_pages/man3/constants.hpp.3 b/man_pages/man3/constants.hpp.3 deleted file mode 100644 index b1d978f..0000000 --- a/man_pages/man3/constants.hpp.3 +++ /dev/null @@ -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\&. diff --git a/man_pages/man3/main.cpp.3 b/man_pages/man3/main.cpp.3 deleted file mode 100644 index 23983a7..0000000 --- a/man_pages/man3/main.cpp.3 +++ /dev/null @@ -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 \fP -.br -\fC#include \fP -.br -\fC#include \fP -.br -\fC#include \fP -.br -\fC#include \fP -.br -\fC#include \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\&. diff --git a/man_pages/man3/test_suite.cpp.3 b/man_pages/man3/test_suite.cpp.3 deleted file mode 100644 index c185469..0000000 --- a/man_pages/man3/test_suite.cpp.3 +++ /dev/null @@ -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 \fP -.br -\fC#include \fP -.br -\fC#include \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\&. diff --git a/man_pages/man3/todo.3 b/man_pages/man3/todo.3 deleted file mode 100644 index ef888e2..0000000 --- a/man_pages/man3/todo.3 +++ /dev/null @@ -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 - diff --git a/man_pages/man3/typedefs.hpp.3 b/man_pages/man3/typedefs.hpp.3 deleted file mode 100644 index 1933ad3..0000000 --- a/man_pages/man3/typedefs.hpp.3 +++ /dev/null @@ -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 \fP -.br -\fC#include \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 > \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 > \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\&. diff --git a/man_pages/man3/utils.cpp.3 b/man_pages/man3/utils.cpp.3 deleted file mode 100644 index 335b5f5..0000000 --- a/man_pages/man3/utils.cpp.3 +++ /dev/null @@ -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 \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\&. diff --git a/man_pages/man3/utils.hpp.3 b/man_pages/man3/utils.hpp.3 deleted file mode 100644 index 3f934d0..0000000 --- a/man_pages/man3/utils.hpp.3 +++ /dev/null @@ -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 \fP -.br -\fC#include \fP -.br -\fC#include \fP -.br -\fC#include \fP -.br -\fC#include \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\&. diff --git a/src/PenningTrap.cpp b/src/PenningTrap.cpp index 49f6d94..ae8903b 100644 --- a/src/PenningTrap.cpp +++ b/src/PenningTrap.cpp @@ -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(); } - diff --git a/src/main.cpp b/src/main.cpp index 96465cc..75a842d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -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