Skip to content

entity-toolkit/entity

Repository files navigation

Entity a.k.a. ntt

One particle-in-cell code to rule them all. Find our detailed documentation here.

License

Dev team (alphabetical)

🍵 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}

State of things

  • Framework

    • Metrics
      • Minkowski (SR)
      • Spherical/Qspherical (SR)
      • Kerr-Schild/QKerr-Schild, zero-mass Kerr-Schild (GR)
      • virtual inheritance of metric classes
    • Output
      • Fields/currents (SR/GR)
      • Moments (SR)
      • Moments (GR)
      • Particles (SR/GR)
      • Energy distributions (SR/GR)
      • Particle tracking (SR/GR)
    • Extra physics
      • Radiation (synchrotron/IC)
      • QED
    • MPI
      • restructure meshblocks
      • rewrite fieldsolvers (addressing + ranges)
  • SR (minkowski)

    • fieldsolver (1D/2D/3D)
    • pusher (1D/2D/3D)
    • deposit (1D/2D/3D)
    • filtering (1D/2D/3D)
  • SR (spherical)

    • fieldsolver (2D)
    • pusher (2D)
    • deposit (2D)
    • filtering (2D)
  • GR (spherical)

    • fieldsolver (2D)
    • pusher (2D)
    • deposit (2D)
    • filtering (2D)

Known bugs / minor issues to fix

...

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.

Unit testing

A limited number of unit tests are now available. To compile/run them:

cmake -B build -D TESTS=ON
cd build
make -j
cd tests && ctest -j

Tests are automatically run when on pull requests to the master branch.

Third-party libraries

  1. Kokkos: for CPU/GPU portability
  2. adios2: for output
  3. fmt: for string formatting

Dependencies

While we try to keep the code as compatible as possible, there are certain stringent requirements we impose.

  1. cmake>=3.16: for configuration (verify: cmake --version);
  2. icx>=19.1 or gcc>=8.3.1 with c++17 support (verify: [icx|gcc] -std=c++17 -v; optionally nvcc compilers: nvcc --version).