Skip to content

Commit

Permalink
Refactor and add more tests for DGSEM solver with tree mesh (#31)
Browse files Browse the repository at this point in the history
* Start

* Add shallowwater ec

* Add shallowwater source terms

* Finish
  • Loading branch information
huiyuxie authored Sep 7, 2024
1 parent 49e25fb commit 22e1ecd
Show file tree
Hide file tree
Showing 10 changed files with 1,215 additions and 231 deletions.
314 changes: 314 additions & 0 deletions test/dgsem_tree_test_suite.jl

Large diffs are not rendered by default.

40 changes: 24 additions & 16 deletions test/test_adevction_mortar.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module TestAdvectionMortar
module TestLinearAdvectionMortar # with `nonconservative_terms::False`

using Trixi, TrixiGPU
using OrdinaryDiffEq
Expand All @@ -9,7 +9,7 @@ outdir = "out"
isdir(outdir) && rm(outdir, recursive = true)

# Test precision of the semidiscretization process
@testset "Test Linear Advection Mortar" begin
@testset "Test Linear Advection" begin
@testset "Linear Advection 2D" begin
advection_velocity = (0.2, -0.7)
equations = LinearScalarAdvectionEquation2D(advection_velocity)
Expand All @@ -27,18 +27,22 @@ isdir(outdir) && rm(outdir, recursive = true)
n_cells_max = 10_000)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)

tspan = (0.0, 1.0)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get deep copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 1.0)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down Expand Up @@ -153,18 +157,22 @@ isdir(outdir) && rm(outdir, recursive = true)
n_cells_max = 10_000)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)

tspan = (0.0, 5.0)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get deep copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 5.0)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down
58 changes: 35 additions & 23 deletions test/test_advection_basic.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module TestAdvectionBasic
module TestLinearAdvectionBasic

using Trixi, TrixiGPU
using OrdinaryDiffEq
Expand All @@ -9,7 +9,7 @@ outdir = "out"
isdir(outdir) && rm(outdir, recursive = true)

# Test precision of the semidiscretization process
@testset "Test Linear Advection Basic" begin
@testset "Test Linear Advection" begin
@testset "Linear Advection 1D" begin
advection_velocity = 1.0
equations = LinearScalarAdvectionEquation1D(advection_velocity)
Expand All @@ -24,18 +24,22 @@ isdir(outdir) && rm(outdir, recursive = true)

semi = SemidiscretizationHyperbolic(mesh, equations,
initial_condition_convergence_test, solver)

tspan = (0.0, 1.0)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 1.0)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down Expand Up @@ -122,18 +126,22 @@ isdir(outdir) && rm(outdir, recursive = true)

semi = SemidiscretizationHyperbolic(mesh, equations,
initial_condition_convergence_test, solver)

tspan = (0.0, 1.0)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get deep copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 1.0)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down Expand Up @@ -243,18 +251,22 @@ isdir(outdir) && rm(outdir, recursive = true)

semi = SemidiscretizationHyperbolic(mesh, equations,
initial_condition_convergence_test, solver)

tspan = (0.0, 1.0)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 1.0)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down
58 changes: 35 additions & 23 deletions test/test_euler_ec.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module TestCompressibleEulerFluxDifferencing
module TestCompressibleEulerFluxDifferencing # with `nonconservative_terms::False`

using Trixi, TrixiGPU
using OrdinaryDiffEq
Expand All @@ -9,7 +9,7 @@ outdir = "out"
isdir(outdir) && rm(outdir, recursive = true)

# Test precision of the semidiscretization process
@testset "Test Compressible Euler Flux Differencing" begin
@testset "Test Compressible Euler" begin
@testset "Compressible Euler 1D" begin
equations = CompressibleEulerEquations1D(1.4)

Expand All @@ -25,18 +25,22 @@ isdir(outdir) && rm(outdir, recursive = true)
n_cells_max = 10_000)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)

tspan = (0.0, 0.4)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 0.4)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down Expand Up @@ -125,18 +129,22 @@ isdir(outdir) && rm(outdir, recursive = true)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
boundary_conditions = boundary_condition_periodic)

tspan = (0.0, 0.4)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 0.4)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down Expand Up @@ -247,18 +255,22 @@ isdir(outdir) && rm(outdir, recursive = true)
n_cells_max = 100_000)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)

tspan = (0.0, 0.4)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 0.4)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down
56 changes: 34 additions & 22 deletions test/test_euler_source_terms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ outdir = "out"
isdir(outdir) && rm(outdir, recursive = true)

# Test precision of the semidiscretization process
@testset "Test Compressible Euler Source Terms" begin
@testset "Test Compressible Euler" begin
@testset "Compressible Euler 1D" begin
equations = CompressibleEulerEquations1D(1.4)

Expand All @@ -25,18 +25,22 @@ isdir(outdir) && rm(outdir, recursive = true)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
source_terms = source_terms_convergence_test)

tspan = (0.0, 2.0)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get deep copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 2.0)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down Expand Up @@ -123,18 +127,22 @@ isdir(outdir) && rm(outdir, recursive = true)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
source_terms = source_terms_convergence_test)

tspan = (0.0, 2.0)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get deep copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 2.0)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down Expand Up @@ -246,18 +254,22 @@ isdir(outdir) && rm(outdir, recursive = true)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
source_terms = source_terms_convergence_test)

tspan = (0.0, 5.0)

# Get CPU data
(; mesh, equations, initial_condition, boundary_conditions, source_terms, solver, cache) = semi

# Get deep copy for GPU to avoid overwriting during tests
mesh_gpu, equations_gpu = deepcopy(mesh), deepcopy(equations)
initial_condition_gpu, boundary_conditions_gpu, source_terms_gpu = deepcopy(initial_condition),
deepcopy(boundary_conditions),
deepcopy(source_terms)
solver_gpu, cache_gpu = deepcopy(solver), deepcopy(cache)
# Get GPU data
equations_gpu = deepcopy(equations)
mesh_gpu, solver_gpu, cache_gpu = deepcopy(mesh), deepcopy(solver), deepcopy(cache)
boundary_conditions_gpu, source_terms_gpu = deepcopy(boundary_conditions),
deepcopy(source_terms)

# Set initial time
t = t_gpu = 0.0
tspan = (0.0, 5.0)

# Get initial data
ode = semidiscretize(semi, tspan)
u_ode = copy(ode.u0)
du_ode = similar(u_ode)
Expand Down
Loading

0 comments on commit 22e1ecd

Please sign in to comment.