FEniCS is a collection of software for automated solution of PDEs using FEM. FEniCS is a popular open-source (LGPLv3) computing platform for solving partial differential equations (PDEs). FEniCS enables users to quickly translate scientific models into efficient finite element code. With the high-level Python and C++ interfaces to FEniCS, it is easy to get started, but FEniCS offers also powerful capabilities for more experienced programmers. FEniCS runs on a multitude of platforms ranging from laptops to high-performance clusters.
OpenFOAM is a C++ object-oriented numerical simulation platform, which has a modular code-design suitable to be extended with new functionalities through additional libraries. OpenFOAM uses the unstructured grid formulation with a collocated cell-centred variable arrangement, which allows handling arbitrarily complex geometries and it can be applied in different fluid dynamic problems. For turbulent reacting and multi-phase flows, OpenFOAM provides a wide runtime-selectable flexibility in terms of turbulence models, e.g. RANS and LES, with several turbulence closures, and combustion models, such as tabulated chemistry with presumed PDF, ATF (TU Darmstadt in-house extension), and finite-rate chemistry.
Multi-phase problems as liquid sprays can either be treated using a fully coupled Lagrangian point-particle method or within an Eulerian framework as Volume of Fluid Method. OpenFOAM can be easily coupled with external libraries, as for example the Quadrature-based Method of Moments (QMOM) library developed at TU Darmstadt to account for the soot particle size distribution.
Alya is a high performance computational mechanics code to solve complex coupled multi-physics / multi-scale / multi-domain problems, which are mostly coming from the engineering realm. Among the different physics solved by Alya we can mention: incompressible/compressible flows, non-linear solid mechanics, chemistry, particle transport, heat transfer, turbulence modeling, electrical propagation, etc.
From scratch, Alya was specially designed for massively parallel supercomputers, and the parallelization embraces four levels of the computer hierarchy. 1) A substructuring technique with MPI as the message passing library is used for distributed memory supercomputers. 2) At the node level, both loop and task parallelisms are considered using OpenMP as an alternative to MPI. Dynamic load balance techniques have been introduced as well to better exploit computational resources at the node level. 3) At the CPU level, some kernels are also designed to enable vectorization. 4) Finally, accelerators like GPU are also exploited through OpenACC pragmas or with CUDA to further enhance the performance of the code on heterogeneous computers.
Multiphysics coupling is achieved following a multi-code strategy, relating different instances of Alya. MPI is used to communicate between the different instances, where each instance solves a particular physics. This powerful technique enables asynchronous execution of the different physics. Thanks to a careful programming strategy, coupled problems can be solved retaining the scalability properties of the individual instances.
The code is one of the two CFD codes of the Unified European Applications Benchmark Suite (UEBAS) as well as the Accelerator benchmark suite of PRACE.