module TestExamplesT8codeMesh2D
using Test
using Trixi
include("test_trixi.jl")
EXAMPLES_DIR = joinpath(examples_dir(), "t8code_2d_dgsem")
outdir = "out"
isdir(outdir) && rm(outdir, recursive = true)
mkdir(outdir)
@testset "T8codeMesh2D" begin
@trixi_testset "test load mesh from path" begin
using Trixi: T8codeMesh
mktempdir() do path
@test_throws "Unknown file extension: .unknown_ext" begin
mesh = T8codeMesh(touch(joinpath(path, "dummy.unknown_ext")), 2)
end
end
end
@trixi_testset "test check_for_negative_volumes" begin
@test begin
using Trixi: Trixi, T8codeMesh
mesh_file = Trixi.download("https://gist.githubusercontent.com/jmark/bfe0d45f8e369298d6cc637733819013/raw/cecf86edecc736e8b3e06e354c494b2052d41f7a/rectangle_with_negative_volumes.msh",
joinpath(EXAMPLES_DIR,
"rectangle_with_negative_volumes.msh"))
mesh = T8codeMesh(mesh_file, 2)
true
end
end
@trixi_testset "test t8code mesh from p4est connectivity" begin
@test begin
using Trixi: Trixi, T8codeMesh
conn = Trixi.P4est.LibP4est.p4est_connectivity_new_brick(2, 3, 1, 1)
mesh = T8codeMesh(conn)
Trixi.p4est_connectivity_destroy(conn)
all(size(mesh.tree_node_coordinates) .== (2, 2, 2, 6))
end
end
@trixi_testset "test t8code mesh from ABAQUS HOHQMesh file" begin
@test begin
using Trixi: Trixi, T8codeMesh
file_path = Trixi.download("https://gist.githubusercontent.com/jmark/9e0da4306e266617eeb19bc56b0e7feb/raw/e6856e1deb648a807f6bb6d6dcacff9e55d94e2a/round_2d_tank.inp",
joinpath(EXAMPLES_DIR, "round_2d_tank.inp"))
mesh = T8codeMesh(file_path, 2)
all(size(mesh.tree_node_coordinates) .== (2, 4, 4, 340))
end
end
@trixi_testset "elixir_advection_basic.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_basic.jl"),
l2=[8.311947673061856e-6],
linf=[6.627000273229378e-5])
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)) < 1000
end
end
@trixi_testset "elixir_advection_nonconforming_flag.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR,
"elixir_advection_nonconforming_flag.jl"),
l2=[3.198940059144588e-5],
linf=[0.00030636069494005547])
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)) < 1000
end
end
@trixi_testset "elixir_advection_unstructured_flag.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_unstructured_flag.jl"),
l2=[0.0005379687442422346],
linf=[0.007438525029884735])
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)) < 1000
end
end
@trixi_testset "elixir_advection_amr_unstructured_flag.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR,
"elixir_advection_amr_unstructured_flag.jl"),
l2=[0.002019623611753929],
linf=[0.03542375961299987])
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)) < 1000
end
end
@trixi_testset "elixir_advection_amr_solution_independent.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR,
"elixir_advection_amr_solution_independent.jl"),
l2=[4.949660644033807e-5],
linf=[0.0004867846262313763])
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)) < 1000
end
end
@trixi_testset "elixir_advection_restart.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_restart.jl"),
l2=[4.507575525876275e-6],
linf=[6.21489667023134e-5])
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)) < 1000
end
end
@trixi_testset "elixir_advection_restart_amr.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_restart_amr.jl"),
l2=[2.869137983727866e-6],
linf=[3.8353423270964804e-5])
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)) < 1000
end
end
@trixi_testset "elixir_euler_source_terms_nonconforming_unstructured_flag.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR,
"elixir_euler_source_terms_nonconforming_unstructured_flag.jl"),
l2=[
0.0034516244508588046,
0.0023420334036925493,
0.0024261923964557187,
0.004731710454271893
],
linf=[
0.04155789011775046,
0.024772109862748914,
0.03759938693042297,
0.08039824959535657
])
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)) < 1000
end
end
@trixi_testset "elixir_euler_free_stream.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_free_stream.jl"),
l2=[
2.063350241405049e-15,
1.8571016296925367e-14,
3.1769447886391905e-14,
1.4104095258528071e-14
],
linf=[1.9539925233402755e-14, 2e-12, 4.8e-12, 4e-12],
atol=2.0e-12,)
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)) < 1000
end
end
@trixi_testset "elixir_euler_shockcapturing_ec.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_shockcapturing_ec.jl"),
l2=[
9.53984675e-02,
1.05633455e-01,
1.05636158e-01,
3.50747237e-01
],
linf=[
2.94357464e-01,
4.07893014e-01,
3.97334516e-01,
1.08142520e+00
],
tspan=(0.0, 1.0))
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)) < 1000
end
end
@trixi_testset "elixir_euler_sedov.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_sedov.jl"),
l2=[
3.76149952e-01,
2.46970327e-01,
2.46970327e-01,
1.28889042e+00
],
linf=[
1.22139001e+00,
1.17742626e+00,
1.17742626e+00,
6.20638482e+00
],
tspan=(0.0, 0.3))
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)) < 1000
end
end
@trixi_testset "elixir_mhd_alfven_wave.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_mhd_alfven_wave.jl"),
l2=[1.0513414461545583e-5, 1.0517900957166411e-6,
1.0517900957304043e-6, 1.511816606372376e-6,
1.0443997728645063e-6, 7.879639064990798e-7,
7.879639065049896e-7, 1.0628631669056271e-6,
4.3382328912336153e-7],
linf=[4.255466285174592e-5, 1.0029706745823264e-5,
1.0029706747467781e-5, 1.2122265939010224e-5,
5.4791097160444835e-6, 5.18922042269665e-6,
5.189220422141538e-6, 9.552667261422676e-6,
1.4237578427628152e-6])
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)) < 1000
end
end
@trixi_testset "elixir_mhd_rotor.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_mhd_rotor.jl"),
l2=[0.4419337424073218, 0.8804938551016932, 0.8258185723720365,
0.0,
0.961220188718187, 0.10397273631386837, 0.15408979488125943,
0.0,
2.66769410449947e-5],
linf=[10.053140536236942, 18.17070117006211, 9.549208389448738,
0.0,
19.676151923191583, 1.3896544044814965, 1.8153256887969416,
0.0,
0.0022030404596184786],
tspan=(0.0, 0.02))
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)) < 1000
end
end
@trixi_testset "elixir_euler_weak_blast_wave_amr.jl" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_weak_blast_wave_amr.jl"),
l2=[
0.10823279736983638,
0.1158152939803735,
0.11633970342992006,
0.751152651902375
],
linf=[
0.5581611332828653,
0.8354026029724041,
0.834485181423738,
3.923553028014343
],
tspan=(0.0, 0.1),)
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)) < 1000
end
state_integrals = Trixi.integrate(sol.u[2], semi)
initial_state_integrals = analysis_callback.affect!.initial_state_integrals
@test isapprox(state_integrals[1], initial_state_integrals[1], atol = 1e-13)
@test isapprox(state_integrals[2], initial_state_integrals[2], atol = 1e-13)
@test isapprox(state_integrals[3], initial_state_integrals[3], atol = 1e-13)
@test isapprox(state_integrals[4], initial_state_integrals[4], atol = 1e-13)
end
end
@test_nowarn rm(outdir, recursive = true)
end