Path: blob/main/test/test_tree_1d_eulermulti.jl
2055 views
module TestExamples1DEulerMulti12using Test3using Trixi45include("test_trixi.jl")67EXAMPLES_DIR = joinpath(examples_dir(), "tree_1d_dgsem")89@testset "Compressible Euler Multicomponent" begin10@trixi_testset "Testing entropy2cons and cons2entropy" begin11using ForwardDiff12using Trixi: Trixi, CompressibleEulerMulticomponentEquations1D, cons2entropy,13entropy2cons, SVector14gammas = (1.3272378792562836, 1.5269959187969864, 1.8362285750521512,151.0409061360276926, 1.4652015053812224, 1.3626493264184423)16gas_constants = (1.817636851910076, 6.760820475922636, 5.588953939749113,176.31574782981543, 3.362932038038397, 3.212779569399733)18equations = CompressibleEulerMulticomponentEquations1D(gammas = SVector{length(gammas)}(gammas...),19gas_constants = SVector{length(gas_constants)}(gas_constants...))20u = [-1.4632513788889214, 0.9908786980927811, 0.2909066990257628,210.6256623915420473, 0.4905882754313441, 0.14481800501749112,221.0333532872771651, 0.6805599818745411]23w = cons2entropy(u, equations)24# test that the entropy variables match the gradients of the total entropy25@test w ≈ ForwardDiff.gradient(u -> Trixi.total_entropy(u, equations), u)26# test that `entropy2cons` is the inverse of `cons2entropy`27@test entropy2cons(w, equations) ≈ u28end2930@trixi_testset "elixir_eulermulti_ec.jl" begin31@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_eulermulti_ec.jl"),32l2=[0.15330089521538684, 0.4417674632047301,330.016888510510282385, 0.03377702102056477,340.06755404204112954],35linf=[0.29130548795961864, 0.8847009003152357,360.034686525099975274, 0.06937305019995055,370.1387461003999011])38# Ensure that we do not have excessive memory allocations39# (e.g., from type instabilities)40let41t = sol.t[end]42u_ode = sol.u[end]43du_ode = similar(u_ode)44@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 100045end46end4748@trixi_testset "elixir_eulermulti_es.jl" begin49@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_eulermulti_es.jl"),50l2=[510.1522380497572071,520.43830846465313206,530.03907262116499431,540.0781452423299886255],56linf=[570.24939193075537294,580.7139395740052739,590.06324208768391237,600.1264841753678247561])62# Ensure that we do not have excessive memory allocations63# (e.g., from type instabilities)64let65t = sol.t[end]66u_ode = sol.u[end]67du_ode = similar(u_ode)68@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 100069end70end7172@trixi_testset "elixir_eulermulti_convergence_ec.jl" begin73@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_eulermulti_convergence_ec.jl"),74l2=[758.575236038539227e-5,760.00016387804318585358,771.9412699303977585e-5,783.882539860795517e-579],80linf=[810.00030593277277124464,820.0006244803933350696,837.253121435135679e-5,840.0001450624287027135885])86# Ensure that we do not have excessive memory allocations87# (e.g., from type instabilities)88let89t = sol.t[end]90u_ode = sol.u[end]91du_ode = similar(u_ode)92@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 100093end94end9596@trixi_testset "elixir_eulermulti_convergence_es.jl" begin97@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_eulermulti_convergence_es.jl"),98l2=[1.8983933794407234e-5, 6.207744299844731e-5,991.5466205761868047e-6, 3.0932411523736094e-6,1006.186482304747219e-6, 1.2372964609494437e-5],101linf=[0.00012014372605895218, 0.0003313207215800418,1026.50836791016296e-6, 1.301673582032592e-5,1032.603347164065184e-5, 5.206694328130368e-5])104# Ensure that we do not have excessive memory allocations105# (e.g., from type instabilities)106let107t = sol.t[end]108u_ode = sol.u[end]109du_ode = similar(u_ode)110@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000111end112end113114@trixi_testset "elixir_eulermulti_convergence_es.jl with flux_chandrashekar" begin115@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_eulermulti_convergence_es.jl"),116l2=[1.888450477353845e-5, 5.4910600482795386e-5,1179.426737161533622e-7, 1.8853474323067245e-6,1183.770694864613449e-6, 7.541389729226898e-6],119linf=[0.00011622351152063004, 0.0003079221967086099,1203.2177423254231563e-6, 6.435484650846313e-6,1211.2870969301692625e-5, 2.574193860338525e-5],122volume_flux=flux_chandrashekar)123# Ensure that we do not have excessive memory allocations124# (e.g., from type instabilities)125let126t = sol.t[end]127u_ode = sol.u[end]128du_ode = similar(u_ode)129@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000130end131end132133@trixi_testset "elixir_eulermulti_two_interacting_blast_waves.jl" begin134@test_trixi_include(joinpath(EXAMPLES_DIR,135"elixir_eulermulti_two_interacting_blast_waves.jl"),136l2=[1.288867611915533, 82.71335258388848, 0.00350680272313187,1370.013698784353152794,1380.019179518517518084],139linf=[29.6413044707026, 1322.5844802186496, 0.09191919374782143,1400.31092970966717925,1410.4417989757182038],142tspan=(0.0, 0.0001))143# Ensure that we do not have excessive memory allocations144# (e.g., from type instabilities)145let146t = sol.t[end]147u_ode = sol.u[end]148du_ode = similar(u_ode)149@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000150end151end152end153154end # module155156157