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

cover

Code contributors (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: PIC}

Development status

Active to-do

  • change metrics/aux foldername
  • add time as a global parameter
  • use kokkos methods for vis/nttiny.cpp
  • add disabled indicator for options in report.cmake

Short term things to do/fix

  • 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

Intermediate term things to do/fix

  • test curvilinear particle pusher
  • particle motion near the axes
  • test curvilinear current deposit
  • deposition near the axes
  • filtering near the axes

State of things

  • 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)

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

[under construction]

Logging

[under construction]

Third-party libraries

All the third-party libraries are added as git submodules. If the code is cloned recursively, the submodules are automatically included, otherwise they are downloaded during the first configuration.

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

All the third-party libraries reside in the extern directory.

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. icc>=19.1 or gcc>=8.3.1 with c++17 support (verify: [icc|gcc] -std=c++17 -v; optionally nvcc compilers: nvcc --version).

For apple users: the default clang 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 as brew to install the gnu compilers. clang also does not natively support OpenMP, while gcc compilers have no problem with that.