| Documentation |
|---|
| Build Status |
| Contacts |
| Citation |
A CPU and GPU research software for the numerical solution of a system of arbitrary conservation laws using continuous spectral elements and finite differences in 1D, 2D, 3D. DISCLAIMER: this will always be WIP! Contact us to join the team of developers!
Suggested Julia version: 1.11.2 or higher.
Follow the instructins in INSTALL.md
Run into trouble? Check the FAQ.md for common installation and run errors.
If you use Jexpresso please drop us a line to let us know. We'd like to add a link to your paper or work on this page.
Please cite Jexpresso using:
@article{tissaoui2024,
author = {Y. Tissaoui and J. F. Kelly and S. Marras}
title = {Efficient Spectral Element Method for the Euler Equations on Unbounded Domains},
volume ={487},
pages={129080},
year = {2024},
journal = {App. Math. Comput.},
}
@inproceedings{marrasJexpresso,
author = {S. Marras and Y. Tissaoui and H. Wang and S. Stechmann}
title = {Jexpresso V0.1.0: a Julia-language, user-friendly, multi-physics parallel solver for the solution of conservation laws on CPUs and GPUs},
booktitle = {Proceedings of the 36th Parallel CFD international conference 2025},
year = {2025},
address = {Merida, Yucatan, Mexico},
month = {November},
organization = {UNAM},
}
Jexpresso uses arbitrarily high-order (3rd and above) continuous spectral elements to solve
where
The Julia package DifferentialEquations.jl is used for time discretization and stepping.
In order, we provide tests and results for the following equations:
- 1D wave equation:
2: 1D shallow water:
where
- 2D Helmholtz:
for a constant value of
- 2D scalar advection-diffusion:
- 2D Euler equations of compressible flows with gravity and N passive chemicals
$c_i, \forall i=1,...,N$
- 3D Euler equations of compressible flows with gravity
If you are interested in contributing, please get in touch: Simone Marras, Yassine Tissaoui, Hang Wang
Example of coarse simulation of the turbulent atmospheric boundary layer. Domain size: 10240m X 10240m X 3000m using 64x64x24 spectral elements of order 4.
Surface and SGS: Monin-Obukhov Similarity Theory model with Richardson-corrected Smagorinsky.

Example of shallow cumuli simulations (right) for the type of Barbados clouds shown on the left: (picture taken from P. Blossey webpage from U. Washington)
Below are just a few pre-packaged examples available in Jexpresso. To add your own new problem, see ADD_A_NEW_TEST.md.
DynSGS by Marras et al. 2015 and later.
using Jexpresso
Jexpresso.run_case("CompEuler", "sod1d")using Jexpresso
Jexpresso.run_case("CompEuler", "case1")Example 2: to solve the 2D Euler equations with buoyancy and two passive tracers defined in problems/equations/CompEuler/thetaTracers you would do the following:
using Jexpresso
Jexpresso.run_case("CompEuler", "thetaTracers")Example 3: to solve the 3D Euler equations with buoyancy defined in problems/equations/CompEuler/3d you would do the following:
using Jexpresso
Jexpresso.run_case("CompEuler", "3d")For ready to run tests, there are the available equations names:
- CompEuler (option with total energy and theta formulation)
The code is designed to create any system of conservsation laws. See CompEuler/case1 to see an example of each file. Details will be given in the documentation (still WIP). Write us if you need help.
More are already implemented but currently only in individual branches. They will be added to master after proper testing.
This section contains instructions to run all of the test cases presented in
@article{tissaoui2024,
author = {Y. Tissaoui and J. F. Kelly and S. Marras}
title = {Efficient Spectral Element Method for the Euler Equations on Unbounded Domains},
volume ={487},
pages={129080},
year = {2024},
journal = {App. Math. Comput.},
}
Test 1: 1D wave equation with Laguerre semi-infinite element absorbing layers
The problem is defined in problems/CompEuler/wave1d_lag and by default output will be written to output/CompEuler/wave1d_lag. To solve this problem run the following commands from the Julia command line:
using Jexpresso
Jexpresso.run_case("CompEuler", "wave1d_lag")Test 2: 1D wave train for linearized shallow water equations
The problem is defined in problems/equations/AdvDiff/Wave_Train and by default output will be written to output/AdvDiff/Wave_Train. To solve this problem run the following commands from the Julia command line:
using Jexpresso
Jexpresso.run_case("AdvDiff", "Wave_Train")Test 3: 2D advection-diffusion equation
The problem is defined in problems/equations/AdvDiff/2D_laguerre and by default output will be written to output/AdvDiff/2D_laguerre. To solve this problem run the following commands from the Julia command line:
using Jexpresso
Jexpresso.run_case("AdvDiff", "2D_laguerre")Test 4: 2D Helmholtz equation
The problem is defined in problems/equations/Helmholtz/case1_laguerre and by default output will be written to output/Helmholtz/case1_laguerre. To solve this problem run the following commands from the Julia command line:
using Jexpresso
Jexpresso.run_case("Helmholtz", "case1_laguerre")Test 5: Rising thermal bubble with semi-infinite Laguerre elements for outflows
The problem is defined in problems/equations/CompEuler/theta_laguerre and by default output will be written to output/CompEuler/theta_laguerre. To solve this problem run the following commands from the Julia command line:
using Jexpresso
Jexpresso.run_case("CompEuler", "theta_laguerre")Test 6a: Hydrostatic linear mountain waves with semi-infinite Laguerre elements for outflows
The problem is defined in problems/equations/CompEuler/HSmount_Lag and by default output will be written to output/CompEuler/HSmount_Lag. To solve this problem run the following commands from the Julia command line:
using Jexpresso
Jexpresso.run_case("CompEuler", "HSmount_Lag")Test 6b: Non-hydrostatic mountain waves: comparison against WRF
Test 7: Shallow cumuli simulation with BOMEX conditions:
using Jexpresso
Jexpresso.run_case("CompEuler", "3d_bomex")












