entity-toolkit / entity

New generation astrophysical plasma simulation code with CPU/GPU portability
https://entity-toolkit.github.io/wiki/
Other
30 stars 3 forks source link
astrophysics gpu kokkos particle-in-cell plasma pppl princeton simulation

Entity

tl;dr: One particle-in-cell code to rule them all.

Entity is an open-source coordinate-agnostic particle-in-cell (PIC) code written in C++17 specifically targeted to study plasma physics in relativistic astrophysical systems. The main algorithms of the code are written in covariant form, allowing to easily implement arbitrary grid geometries. The code is highly modular, and is written in the architecture-agnostic way using the Kokkos performance portability library, allowing the code to efficiently use device parallelization on CPU and GPU architectures of different types. The multi-node parallelization is implemented using the MPI library, and the data output is done via the ADIOS2 library which supports multiple output formats, including HDF5 and BP5.

Entity is part of the Entity toolkit framework, which also includes a Python library for fast and efficient data analysis and visualization of the simulation data: nt2py.

Our detailed documentation includes everything you need to know to get started with using and/or contributing to the Entity toolkit. If you find bugs or issues, please feel free to add a GitHub issue or submit a pull request. Users with significant contributions to the code will be added to the list of developers, and assigned an emoji of their choice (important).

License

Core developers (alphabetical)

👀 Yangyang Cai {@StaticObserver: GRPIC}

💁‍♂️ Alexander Chernoglazov {@SChernoglazov: PIC}

🍵 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: framework, PIC}

😺 Muni Zhou {@munizhou: PIC}

Branch policy

Master branch contains the latest stable version of the code which has already been released. Development on the core is done on branches starting with dev/, while fixing bugs is done in branches that start with bug/. User-specific modifications (i.e., new problem generators plus perhaps minor corrections in the core) are done on branches starting with pgen/. Before merging to the master branch, all the branches must first be merged to the latest release-candidate branch, which ends with rc, via a pull request. After which, when all the release goals are met, the rc branch is merged to the master and released as a new stable version. Stale branches will be archived with a tag starting with archive/ (can still be accessed via the "Tags" tab) and removed.