Documentation |
---|
JEXPRESSO
A research software for the numerical solution of a system of arbitrary conservation laws using continuous spectral elements. DISCLAIMER: this is WIP. Its GPU expansion is also under development.
Equations:
Jexpresso uses arbitrarily high-order (3rd and above) continuous spectral elements to solve
where the vectors
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$
If you are interested in contributing, please get in touch: Simone Marras, Yassine Tissaoui I WILL POINT YOU TO THE MOST EFFICIENT, but less general BRANCH OF THE CODE!
Some notes on using JEXPRESSO
To install and run the code assume Julia 1.9.3
Setup with CPUs
>> cd $JEXPRESSO_HOME
>> julia --project=. -e "using Pkg; Pkg.instantiate(); Pkg.API.precompile()"
followed by the following:
Push problem name to ARGS You need to do this only when you run a new problem
julia> push!(empty!(ARGS), EQUATIONS::String, EQUATIONS_CASE_NAME::String);
julia> include("./src/Jexpresso.jl")
- PROBLEM_NAME is the name of your problem directory as $JEXPRESSO/problems/equations/problem_name
- PROBLEM_CASE_NAME is the name of the subdirectory containing the specific setup that you want to run:
The path would look like
$JEXPRESSO/problems/equations/PROBLEM_NAME/PROBLEM_CASE_NAME
Example 1: to solve the 2D Euler equations with buyoancy and two passive tracers defined in problems/equations/CompEuler/thetaTracers
you would do the following:
julia> push!(empty!(ARGS), "CompEuler", "thetaTracers");
julia> include("./src/Jexpresso.jl")
Example 2: to solve the 2D Euler equations leading to a density current defined in problems/equations/CompEuler/dc
you would do the following:
julia> push!(empty!(ARGS), "CompEuler", "dc");
julia> include("./src/Jexpresso.jl")
Example 3: to solve the 1D wave equation defined in problems/equations/CompEuler/wave1d
you would do the following:
julia> push!(empty!(ARGS), "CompEuler", "wave1d");
julia> include("./src/Jexpresso.jl")
For ready to run tests, there are the currently 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.
Plotting
Files can be written to VTK (recommended) or png. For the png plots, we use Makie. If you want to use a different package, modify ./src/io/plotting/jplots.jl accordinly.
For non-periodic 2D tests, the output can also be written to VTK files by setting the value "vtk" for the usier_input key :outformat