# Penning trap simulation ![](./images/100_particles.gif) [Repo](https://github.uio.no/FYS3150-G2-2023/Project-3) [Documentation](https://pages.github.uio.no/FYS3150-G2-2023/Project-3/) ## Requirements ### Operating systems - Linux - Has been tested on [Fedora 38](https://fedoraproject.org/) - Will most likely work on other Linux distributions - MacOS - Might work, but hasn't been tested - Windows - Will most likely not work ### Tools - Profiling - [gprof](https://ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_mono/gprof.html) - [scalasca](https://www.scalasca.org/) - [score-p](https://www.vi-hps.org/projects/score-p) ### Libraries - Python - [matplotlib](https://matplotlib.org/) - [numpy](https://numpy.org/) - C++ - [openmp](https://www.openmp.org/) - [armadillo](https://arma.sourceforge.net/) ## Compiling Compiling is as easy as running this command while being inside the src directory: ```shell make ``` ## Running programs ### C++ binaries To run **main** or **test_suite**, just run this command while being inside src: ```shell ./ ``` ### Python scripts #### Install libraries Before running the scripts, make sure that all libraries are installed. Using pip, you can install all requirements like this: ```shell pip install -r requirements.txt ``` This recursively install all the packages that are listed in **requirements.txt**. #### Running scripts For the Python scripts, run them from the src directory like this: ```shell python scripts/ ``` If you have any problems running the scripts, you might have to run this instead: ```shell python3 scripts/ ``` ## Performance This section aims to give an idea to the time it takes for the program to run so that you know a bit what to expect if you decide to run it for yourself. ### CPU The times mentioned here are times achieved on a computer with these specifications: - CPU model - Intel i7-9850H - Threads - 12 - Clock speed - 4.6GHz ### Times All times mentioned use the **evolve_RK4** method. Running a simulation with 100 particles without particle interactions over 40000 steps takes around 1.8 seconds. With particle interactions, it takes around 4.8 seconds. **potential_resonance_wide_sweep** takes around 56 seconds to complete. **potential_resonance_narrow_sweep** takes around 172 seconds to complete. **potential_resonance_narrow_sweep_interaction** takes around 936 seconds to complete. ## Credits The Doxygen theme used here is [doxygen-awesome-css](https://github.com/jothepro/doxygen-awesome-css).