Gyrokinetic engine documentation
Main page

Project description

The gyrokinetic engine is a platform for testing new features more easily than on a full gyrokinetic code. It is intended to be modular and portable (as much as performance allows it to be). For instance, one can design and optimize algorithms trying to take advantage of particle sorting, or investigate the precision and performance of different field representations. Several parallelization paradigms (full MPI, hybrid MPI+OpenMP, or MPI+OpenACC) have been implemented.

The main structure (field-aligned filter, parallelization scheme, ...) is the same as the ORB5 code.

This project is developed within the PASC (Platform for Advanced Scientific Computing) project.

Getting started

How to compile the code

TO BE WRITTEN

How to execute the code

TO BE WRITTEN

Coding philosophy

Here is a list describing some golden rules of gyrokinetic engine development:

  • Modular modules: Developers should try to keep the modules as independent as possible of other modules to ensure good portability and easy future development. It means that modules should have the least USE statements possible. Instead, the idea is to call an init routine to initialize private copies of necessary data. It is however accepted to have some PUBLIC things as we don't want to bother with accessors for every variable. But the more PRIVATE variables the better.
  • Vectorizable loops: For performance purpose, vectorizable loops should be vectorized by the compiler as often as possible. See page Loops vectorization to get hints on how to help the compiler doing it.