We are pleased to announce the release of v0.4 of Trixi.jl, our Julia package providing adaptive high-order numerical simulations of hyperbolic PDEs. Compared to the initial release of v0.3, we have introduced a ton of new features. In particular, we added new mesh types enabling simulations on unstructured, curvilinear, non-conforming and adaptive meshes in multiple space dimensions. These new mesh types support all of our solver features, including shock capturing techniques for high-order methods. Additionally, we have introduced new physical models including multicomponent compressible Euler and magnetohydrodynamics equations. Moreover, Trixi.jl composes well with forward mode automatic differentiation and similar approaches. We presented most of these features already in our presentation of Trixi.jl at JuliaCon. Furthermore, we have some interactive visualizations with Makie.jl - kudos to @sdanisch, @jules, and all other developers of Makie!
As a teaser, here is the simulation of the shallow water equations with a bottom topography on a circular domain with slip-wall boundaries using a discontinuous Galerkin method on a high-order curved unstructured quadrilateral mesh.
The next video shows an MHD rotor, a rapidly spinning dense cylinder embedded in a magnetized, homogeneous medium at rest. This simulation uses a discontinuous Galerkin method on a high-order, curvilinear mesh with adaptive refinement and shock capturing.
Many of these new features come with additional contributions to the Julia ecosystem. For example, we created P4est.jl as thin wrapper around the C library p4est
for adaptive meshes and HOHQMesh.jl as Julia wrapper of a high-order mesh generation library. You can find more information about these and further activities related to Trixi.jl on our summary website.
On top of these new features, we worked on the internals of Trixi.jl. In particular, we improved the performance quite a bit and were able to beat another open source code implementing the same numerical algorithms in Fortran by up to 2x. The details are available in our preprint.
Since this is a breaking release, some user-facing changes are of course necessary. However, they should not affect most codes and are summarized in our NEWS.md.
Kudos to all contributors for exciting developments - and thanks to all users encouraging us!
Here is our current list of main features (changes vs. v0.3.0 highlighted):
- 1D, 2D, and 3D simulations on line/quad/hex/simplex meshes
- High-order accuracy in space in time
- Discontinuous Galerkin methods
- Kinetic energy-preserving and entropy-stable methods based on flux differencing
- Entropy-stable shock capturing
- Positivity-preserving limiting
- Compatible with the SciML ecosystem for ordinary differential equations
- Explicit low-storage Runge-Kutta time integration
- Strong stability preserving methods
- CFL-based and error-based time step control
- Native support for differentiable programming
- Forward mode automatic differentiation via ForwardDiff.jl
- Periodic and weakly-enforced boundary conditions
- Multiple governing equations:
- Compressible Euler equations
- Magnetohydrodynamics (MHD) equations
- Multi-component compressible Euler and MHD equations
- Acoustic perturbation equations
- Hyperbolic diffusion equations for elliptic problems
- Lattice-Boltzmann equations (D2Q9 and D3Q27 schemes)
- Shallow water equations
- Several scalar conservation laws (e.g., linear advection, Burgers’ equation)
- Multi-physics simulations
- Shared-memory parallelization via multithreading
- Visualization and postprocessing of the results