.. _fordevs: ======== 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. .. TODO decide if we uncomment or remove the next line .. This folder shall be sufficient to run any kind of algorithm. One should however note that the process may be slow without any kind of acceleration process. .. note:: This folder also include ``pyx`` and ``pxd`` files. They are cython interfaces to cpp. This allows python user to benefit of the cpp library acceleration, see below. - ``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 :ref:`kokkos` files.