One particle-in-cell code to rule them all. Find our detailed documentation here.
🍵 Benjamin Crinquand {@bcrinquand: GRPIC, cubed-sphere}
🧋 Alisa Galishnikova {@alisagk: GRPIC}
☕ Hayk Hakobyan {@haykh: framework, PIC, GRPIC, cubed-sphere}
🥔 Jens Mahlmann {@jmahlmann: framework, MPI, cubed-sphere}
🐬 Sasha Philippov {@sashaph: all-around}
🤷 Arno Vanthieghem {@vanthieg: PIC}
- change metrics/aux foldername
- add time as a global parameter
- use
kokkos
methods forvis/nttiny.cpp
- add disabled indicator for options in
report.cmake
- routine for easy side/corner range selection
- aliases for fields/particles/currents
- check allocation of proper fields
- add a simple current filtering
- field mirrors
- unit tests + implement with github actions
- test curvilinear particle pusher
- particle motion near the axes
- test curvilinear current deposit
- deposition near the axes
- filtering near the axes
- PIC
- spherical/qspherical metrics (2D)
- minkowski field solver (1D/2D/3D)
- curvilinear field solver (2D)
- minkowski particle pusher (Boris; 1D/2D/3D)
- curvilinear particle pusher (Boris; 2D)
- minkowski current deposition (1D/2D/3D)
- curvilinear current deposition (2D)
- cubed sphere metric (3D)
- GRPIC
- spherical/qspherical Kerr-Schild metrics (2D)
- field solver (2D)
- particle pusher (1D/2D/3D)
- current deposition (2D)
- cartesian Kerr-Schild metrics (1D/2D/3D)
...
To keep the code clean, readable and easy to debug we employ some of the
c++
best practices described in details in the following online manual. Basically, if there is any ambiguity on how to implement something, it's a good start to first look if there is any "best practice" solution offered in that manual.
[under construction]
[under construction]
All the third-party libraries are added as git submodules. If the code is cloned recursively, the submodules are automatically included updated.
Kokkos
: for CPU/GPU portability;plog
: for runtime logging;doctest
: for unit testing (header-only);toml11
: fortoml
file parsing (header-only);
All the third-party libraries reside in the
extern
directory.
While we try to keep the code as compatible as possible, there are certain stringent requirements we impose.
cmake>=3.16
: for configuration (verify:cmake --version
);icc>=19.1
orgcc>=8.3.1
withc++17
support (verify:[icc|gcc] -std=c++17 -v
; optionallynvcc
compilers:nvcc --version
).
For
apple
users: the defaultclang
compilers that ship now with macOS systems have trouble with some of the default math libraries, atomic operations etc. For that reason we highly encourage to use macOS package manager such asbrew
to install thegnu
compilers.clang
also does not natively supportOpenMP
, whilegcc
compilers have no problem with that.