Path: blob/main/test/test_paper_self_gravitating_gas_dynamics.jl
2055 views
module TestPaperSelfgravitatingGasDynamics12using Test3using Trixi45include("test_trixi.jl")67# Start with a clean environment: remove Trixi.jl output directory if it exists8outdir = "out"9isdir(outdir) && rm(outdir, recursive = true)1011EXAMPLES_DIR = joinpath(examples_dir(), "paper_self_gravitating_gas_dynamics")1213# Numerical examples from the Euler-gravity paper14@testset "paper_self_gravitating_gas_dynamics" begin15#! format: noindent1617@trixi_testset "elixir_euler_convergence.jl" begin18@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_convergence.jl"),19l2=[200.0001740977055972079,210.0003369355182519592,220.0003369355182518708,230.000609917122033498924],25linf=[260.001079347149189669,270.0018836938381321389,280.001883693838132583,290.00397157537671821730])31# Ensure that we do not have excessive memory allocations32# (e.g., from type instabilities)33let34t = sol.t[end]35u_ode = sol.u[end]36du_ode = similar(u_ode)37@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 100038end39end4041@trixi_testset "elixir_euler_convergence.jl with polydeg=4" begin42@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_convergence.jl"),43l2=[441.7187201161597772e-5,452.678065111772951e-5,462.678065111783027e-5,474.952504160091526e-548],49linf=[500.0001501749544159381,510.00016549482504535362,520.00016549482504601976,530.000437296029143219354],55polydeg=4)56# Ensure that we do not have excessive memory allocations57# (e.g., from type instabilities)58let59t = sol.t[end]60u_ode = sol.u[end]61du_ode = similar(u_ode)62@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 100063end64end6566@trixi_testset "elixir_hypdiff_convergence.jl" begin67@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_hypdiff_convergence.jl"),68l2=[690.003154024896093942,700.012394432074951856,710.0218597382379472572],73linf=[740.01731850928579215,750.07843510773347553,760.1124230017634920177])78# Ensure that we do not have excessive memory allocations79# (e.g., from type instabilities)80let81t = sol.t[end]82u_ode = sol.u[end]83du_ode = similar(u_ode)84@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 100085end86end8788@trixi_testset "elixir_hypdiff_convergence.jl with polydeg=4" begin89@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_hypdiff_convergence.jl"),90l2=[910.0002511283012128458,920.0008808243846610255,930.001631334322856700594],95linf=[960.0017290715087938668,970.003129184465704738,980.0100072884931670199],100polydeg=4)101# Ensure that we do not have excessive memory allocations102# (e.g., from type instabilities)103let104t = sol.t[end]105u_ode = sol.u[end]106du_ode = similar(u_ode)107@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000108end109end110111@trixi_testset "elixir_eulergravity_convergence.jl" begin112@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_eulergravity_convergence.jl"),113l2=[1140.00024871265138964204,1150.0003370077102132591,1160.0003370077102131964,1170.0007231525513793697118],119linf=[1200.0015813032944647087,1210.0020494288423820173,1220.0020494288423824614,1230.004793821195083758124],125tspan=(0.0, 0.1))126# Ensure that we do not have excessive memory allocations127# (e.g., from type instabilities)128let129t = sol.t[end]130u_ode = sol.u[end]131du_ode = similar(u_ode)132@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000133end134end135136@trixi_testset "elixir_eulergravity_convergence.jl with polydeg=4" begin137@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_eulergravity_convergence.jl"),138l2=[1391.9537712148648045e-5,1402.7564396197947587e-5,1412.7564396197967635e-5,1425.688838772067586e-5143],144linf=[1450.00012335710672761735,1460.00020086268350816283,1470.00020086268350727465,1480.0004962155455632278149],150tspan=(0.0, 0.1), polydeg=4)151# Ensure that we do not have excessive memory allocations152# (e.g., from type instabilities)153let154t = sol.t[end]155u_ode = sol.u[end]156du_ode = similar(u_ode)157@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000158end159end160161@trixi_testset "elixir_eulergravity_convergence.jl with 1st order RK3S*" begin162@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_eulergravity_convergence.jl"),163l2=[1640.00024871265138959434,1650.000337007710281087,1660.0003370077102811394,1670.0007231525515231289168],169linf=[1700.0015813032941613958,1710.002049428843978518,1720.0020494288439798503,1730.004793821198143977174],175tspan=(0.0, 0.1),176timestep_gravity=Trixi.timestep_gravity_erk51_3Sstar!)177# Ensure that we do not have excessive memory allocations178# (e.g., from type instabilities)179let180t = sol.t[end]181u_ode = sol.u[end]182du_ode = similar(u_ode)183@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000184end185end186187@trixi_testset "elixir_eulergravity_convergence.jl with 3rd order RK3S*" begin188@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_eulergravity_convergence.jl"),189l2=[1900.0002487126513894034,1910.00033700771023049785,1920.00033700771023048245,1930.0007231525514158737194],195linf=[1960.0015813032943847727,1970.002049428842844314,1980.0020494288428452023,1990.004793821195971937200],201tspan=(0.0, 0.1),202timestep_gravity=Trixi.timestep_gravity_erk53_3Sstar!)203# Ensure that we do not have excessive memory allocations204# (e.g., from type instabilities)205let206t = sol.t[end]207u_ode = sol.u[end]208du_ode = similar(u_ode)209@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000210end211end212213@trixi_testset "elixir_eulergravity_jeans_instability.jl" begin214@test_trixi_include(joinpath(EXAMPLES_DIR,215"elixir_eulergravity_jeans_instability.jl"),216l2=[21710733.28239179182,21813356.0533511341,2191.6722844879795038e-6,22026833.19833691448221],222linf=[22315193.794080890715,22418880.45819785685,2256.809726988008751e-6,22637971.74113135785227],228tspan=(0.0, 0.1),229atol=4.0e-6)230# Ensure that we do not have excessive memory allocations231# (e.g., from type instabilities)232let233t = sol.t[end]234u_ode = sol.u[end]235du_ode = similar(u_ode)236@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000237end238end239240@trixi_testset "elixir_eulergravity_jeans_instability.jl with RK3S*" begin241@test_trixi_include(joinpath(EXAMPLES_DIR,242"elixir_eulergravity_jeans_instability.jl"),243l2=[24410734.653995035567,24513357.709699808021,2461.911011743371934e-6,24726836.62734552835248],249linf=[25015195.73481107317,25118882.799120551972,2527.867948710816926e-6,25337976.592992473394254],255tspan=(0.0, 0.1),256atol=4.0e-6, # the background field is reatively large, so this corresponds to our usual atol257parameters=ParametersEulerGravity(background_density = 1.5e7,258gravitational_constant = 6.674e-8,259cfl = 2.4,260resid_tol = 1.0e-4,261n_iterations_max = 1000,262timestep_gravity = timestep_gravity_erk52_3Sstar!))263# Ensure that we do not have excessive memory allocations264# (e.g., from type instabilities)265let266t = sol.t[end]267u_ode = sol.u[end]268du_ode = similar(u_ode)269@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000270end271end272273@trixi_testset "Printing" begin274@test_trixi_include(joinpath(EXAMPLES_DIR,275"elixir_eulergravity_jeans_instability.jl"),276tspan=(0.0, 1.0e-5),277parameters=ParametersEulerGravity(background_density = 1.5e7,278gravitational_constant = 6.674e-8,279cfl = 2.4,280resid_tol = 1.0e-4,281n_iterations_max = 1000,282timestep_gravity = timestep_gravity_erk52_3Sstar!))283284show(stdout, parameters)285show(stdout, semi)286show(stdout, semi_euler.boundary_conditions)287show(stdout, TrivialCallback())288show(stdout, equations_euler)289# Ensure that we do not have excessive memory allocations290# (e.g., from type instabilities)291let292t = sol.t[end]293u_ode = sol.u[end]294du_ode = similar(u_ode)295@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000296end297end298299@trixi_testset "elixir_eulergravity_sedov_blast_wave.jl" begin300@test_trixi_include(joinpath(EXAMPLES_DIR,301"elixir_eulergravity_sedov_blast_wave.jl"),302l2=[3030.046315994852653024,3040.0650818006233669,3050.06508180062336677,3060.4896707211656037307],308linf=[3092.3874843337593776,3104.07876384374792,3114.07876384374792,31216.23914384809855313],314tspan=(0.0, 0.05),)315# Ensure that we do not have excessive memory allocations316# (e.g., from type instabilities)317let318t = sol.t[end]319u_ode = sol.u[end]320du_ode = similar(u_ode)321@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000322end323end324325@trixi_testset "elixir_eulergravity_sedov_blast_wave.jl with ref-level=8 and no AMR" begin326@test_trixi_include(joinpath(EXAMPLES_DIR,327"elixir_eulergravity_sedov_blast_wave.jl"),328l2=[3290.00289222135995042,3300.013724813590853825,3310.013724813590853832,3320.05822904710548214333],334linf=[3350.26361780693997594,3361.3908873830688688,3371.3908873830688688,3384.066701303607613339],340tspan=(0.0, 0.005), initial_refinement_level=8,341amr_callback=TrivialCallback())342# Ensure that we do not have excessive memory allocations343# (e.g., from type instabilities)344let345t = sol.t[end]346u_ode = sol.u[end]347du_ode = similar(u_ode)348@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000349end350end351end352353# Clean up afterwards: delete Trixi.jl output directory354@test_nowarn rm(outdir, recursive = true)355356end #module357358359