Overview

Architecture of the project

Muscat is a project that aims to unify speed and portability.

Speed

The project has originally been made in python and has been improved by a cpp layer to further speed up the process. Moreover, the recent usage of Kokkos aims to accelerate even more the computations on specific parts of the algorithms.

Portability

In order to allow one to use python on its full capacity based on a given machine capability, the compilation of the project needs to take into account the hardware and software constraints throughout all of the compilation process. It has thus be chosen to divide Muscat in 3 independent “modules”, each responsible of one improvement:

  • Python: all of the python source code is located under src directory and compose the core of the project.

  • Cpp: cpp interface is located under cpp_src directory and make up the libMuscatNative.so shared library. This library shall be sufficient to run any kind of algorithm as well.

  • Kokkos: the kokkos interface is built on top of the libMuscatNative.so and is located in the cpp_src as well. It speeds up certain part of the library.

Folder architecture

This is a quick overview of what are each folder for in the project. Please note that all of the folders might not be present.

  • cmake/: Contains the .cmake files used for the compilation. Those files aim to be included in CMakeListst.txt.

  • cpp_generators/: Contains python files to generate some of the cpp code base (the redundant files).

  • ParaViewPlugins/: Contains python modules to allow one to interface with Paraview.

  • src/: Contains the python modules of Muscat. Thos are the “public” endpoints of the lib.

  • cpp_src/: Contains the cpp source files of Muscat. That also includes Kokkos files.