_images/header.png

Runko — modern toolbox for plasma simulations

Runko is a modern numerical toolkit for simulating astrophysical plasmas. It is written in C++17/Python3 and is designed to be highly modular. The name originates from the Finnish word runko meaning literally “a frame”.

To get started, follow these manual pages in order. This will get you up-to-date in the prerequisites, installation, and understanding the various algorithms. Notes and tips that focus on code development are listed at the end of the manual.

Physical modules

The framework consists of various physics modules that can be run independently or combined together to create multi-physics simulations. Different modules include:

  • Finite difference time domain electromagnetic module

  • Particle-in-cell (PIC) module

  • Force-free magnetohydrodynamics module

  • Relativistic Vlasov module

  • Non-linear Monte Carlo Radiation module

Technical goodies

  • Uses modern C++14/17 incl. std::vector, auto keyword, etc.

  • Low-level objects are binded to native Python3 objects via PyBind11 providing seamless operability.

  • Physics modules are based on polymorphic classes; child classes derive their functionality from the base class, occasionally overwriting the original functionality – no more rewriting your algorithms!

  • Same algorithm is specialized to a spesific space dimension during compile time with template metaprogramming.

  • Algorithms are designed to have abstract interface classes; this makes adding new implementations a breeze - just add a new file!

About

This project was originally developed by Joonas Nättilä while in Nordic Institute for Theoretical Physics (NORDITA). Key contributors that provided additional features and/or improvements include

  • Fredrik Robertsen (CSC)

  • John Hope (Univ. Bath)

  • Kristoffer Smedt (Univ. Leeds)

  • Camilia Demidem (Nordita)

  • Maarja Bussov (Univ. Helsinki)

  • Alexandra Veledina (Univ. Turku)

Recent changes

  • 21/05/2021 Added a PIC algorithm section

  • 20/05/2021 Added a theory section for Vlasov-Maxwell systems and FDTD method

  • 19/05/2021 Added a unit conversion tool

  • 15/05/2021 Launched the improved web manual