WaterLily.jl v1.0 is out!
WaterLily is a simple and fast fluid simulator written in pure Julia. It solves the unsteady incompressible 2D or 3D Navier-Stokes equations on a Cartesian grid. The pressure Poisson equation is solved with a geometric multigrid method. Solid boundaries are modelled using the Boundary Data Immersion Method.
v1.0 has ported the solver from a serial CPU execution to a backend-agnostic execution including multi-threaded CPU and GPU from different vendors (NVIDIA and AMD tested so far) thanks to KernelAbstractions.jl. Compared to the previous serial version, we have benchmarked up to x182 speed-up on a GPU.
The most impressive fact is that the solver source code remains only around 800 LOC! We implement the
@loop macro, which wraps
@kernel from KernelAbstraction.jl and produces a kernel for an expression such as
@loop <expr> over <I in R>, where
I is a
R is a
CartesianIndices range. And just by changing the array type of our
Simulation struct from
ROCArray, we can run in CPU, NVIDIA GPUs, or AMD GPUs, respectively.
Feel free to ping @weymouth or myself for more info