Armon.jl is an experimental 2D CFD solver for compressible non-viscous fluids, using a finite volume method.
It was developed to explore Julia's capabilities in HPC and for performance portability: it should perform very well on any CPU (tested on Nvidia Grace CPU, AMD Milan 7763, Intel Skylake Xeon Platinum 8168...) and GPU (tested on Nvidia A100, AMD MI250, Intel Max 1100...) without any additional configuration. Domain decomposition is done using MPI, and cache-blocking is performed in a single process for higher performance on CPU.
The twin project Armon-Kokkos is a mirror of the core of this solver (with much less options, without MPI or cache-blocking) written in C++ using the Kokkos library. It is possible to reuse kernels from that solver in this one, using the Kokkos.jl package.
Armon.jl was created in order to create a portable CFD benchmark.
The benchmark
branch is the state of the
repository for which most of the results for an upcoming paper were obtained.
Armon.jl is an unregistered Julia package: to install it, clone this repository
(using Pkg; Pkg.develop(url="https://github.com/Keluaa/Armon.jl")
).
Parameters are detailed in the help of ArmonParameters
.
julia> using Armon
julia> params = ArmonParameters(use_MPI=false, options...);
julia> armon(params); # Run the solver