diff --git a/examples/tree_1d_dgsem/elixir_advection_uncertainty.jl b/examples/tree_1d_dgsem/elixir_advection_uncertainty.jl new file mode 100644 index 00000000000..8796d03b094 --- /dev/null +++ b/examples/tree_1d_dgsem/elixir_advection_uncertainty.jl @@ -0,0 +1,31 @@ +using Trixi +using OrdinaryDiffEqLowStorageRK +using Measurements # For propagating uncertainty/measurement errors in parameters + +# Note the `±` operator for defining uncertain parameters +equations = LinearScalarAdvectionEquation1D(1.0 ± 0.1) + +x_min = (-1.0,) +x_max = (1.0,) +mesh = TreeMesh(x_min, x_max, + n_cells_max = 10^5, initial_refinement_level = 5) + +solver = DGSEM(polydeg = 3, surface_flux = flux_lax_friedrichs) + +RealT = Measurement{Float64} # Measurement datatype +semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test, + solver, uEltype = RealT) + +tspan = (0.0, 1.5) +ode = semidiscretize(semi, tspan) + +summary_callback = SummaryCallback() +analysis_callback = AnalysisCallback(semi, interval = 50) + +callbacks = CallbackSet(summary_callback, analysis_callback) + +############################################################################### +# run the simulation + +sol = solve(ode, RDPK3SpFSAL49(); + ode_default_options()..., callback = callbacks); diff --git a/test/Project.toml b/test/Project.toml index c996ec756a5..6111a9c6e61 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -12,6 +12,7 @@ ECOS = "e2685f51-7e38-5353-a97d-a921fd2c8199" ExplicitImports = "7d51a73a-1435-4ff3-83d9-f097790105c7" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" NLsolve = "2774e3e8-f4cf-5e23-947b-6d7e65073b56" OrdinaryDiffEqFeagin = "101fe9f7-ebb6-4678-b671-3a81e7194747" @@ -43,6 +44,7 @@ ECOS = "1.1.2" ExplicitImports = "1.0.1" ForwardDiff = "0.10.36, 1" LinearAlgebra = "1" +Measurements = "2.14.0" MPI = "0.20.6" NLsolve = "4.5.1" OrdinaryDiffEqFeagin = "1" diff --git a/test/test_tree_1d_advection.jl b/test/test_tree_1d_advection.jl index ebc78c063e8..b1644b9d0b4 100644 --- a/test/test_tree_1d_advection.jl +++ b/test/test_tree_1d_advection.jl @@ -169,6 +169,23 @@ end @test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000 end end + +@trixi_testset "elixir_advection_uncertainty.jl" begin + # Run this first to collect LoopVectorization warnings before error-check run + @test_nowarn_mod trixi_include(joinpath(examples_dir(), "tree_1d_dgsem", + "elixir_advection_uncertainty.jl")) + + @test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_uncertainty.jl"), + l2=[0.0012576893000440965 ± 0.017581020765034417], + linf=[0.004425204509676317 ± 0.0633672486044246]) + # Using Measurements.jl actually allocates quite significantly + let + t = sol.t[end] + u_ode = sol.u[end] + du_ode = similar(u_ode) + @test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 100_000 + end +end end end # module diff --git a/test/test_trixi.jl b/test/test_trixi.jl index 00baf2162d0..d20a325cb8c 100644 --- a/test/test_trixi.jl +++ b/test/test_trixi.jl @@ -120,7 +120,7 @@ macro test_nowarn_mod(expr, additional_ignore_content = []) # Warnings from third party packages r"┌ Warning: Problem status ALMOST_INFEASIBLE; solution may be inaccurate.\n└ @ Convex ~/.julia/packages/Convex/.*\n", r"┌ Warning: Problem status ALMOST_OPTIMAL; solution may be inaccurate.\n└ @ Convex ~/.julia/packages/Convex/.*\n", - # Warnings for higher-precision floating data types + # Warnings for higher-precision floating data types or Measurements.jl r"┌ Warning: #= /home/runner/work/Trixi.jl/Trixi.jl/src/solvers/dgsem/interpolation.jl:118 =#:\n│ `LoopVectorization.check_args` on your inputs failed; running fallback `@inbounds @fastmath` loop instead.\n│ Use `warn_check_args=false`, e.g. `@turbo warn_check_args=false ...`, to disable this warning.\n└ @ Trixi ~/.julia/packages/LoopVectorization/.*\n", r"┌ Warning: #= /home/runner/work/Trixi.jl/Trixi.jl/src/solvers/dgsem/interpolation.jl:136 =#:\n│ `LoopVectorization.check_args` on your inputs failed; running fallback `@inbounds @fastmath` loop instead.\n│ Use `warn_check_args=false`, e.g. `@turbo warn_check_args=false ...`, to disable this warning.\n└ @ Trixi ~/.julia/packages/LoopVectorization/.*\n" ]