From 7e8406edd55a6057e60ad8c486da651488535e0f Mon Sep 17 00:00:00 2001 From: huiyuxie Date: Thu, 5 Dec 2024 22:35:45 -1000 Subject: [PATCH] Complete 2D --- test/tree_dgsem_2d/euler_source_terms.jl | 178 ++++++++---------- .../euler_source_terms_nonperiodic.jl | 178 ++++++++---------- test/tree_dgsem_2d/eulermulti_ec.jl | 178 ++++++++---------- test/tree_dgsem_2d/eulermulti_es.jl | 178 ++++++++---------- test/tree_dgsem_2d/hypdiff_nonperiodic.jl | 178 ++++++++---------- test/tree_dgsem_2d/mhd_shock.jl | 178 ++++++++---------- test/tree_dgsem_2d/shallowwater_ec.jl | 178 ++++++++---------- .../shallowwater_source_terms.jl | 178 ++++++++---------- .../shawllowwater_source_terms_nonperiodic.jl | 178 ++++++++---------- 9 files changed, 684 insertions(+), 918 deletions(-) diff --git a/test/tree_dgsem_2d/euler_source_terms.jl b/test/tree_dgsem_2d/euler_source_terms.jl index 13868816..c7ed8f17 100644 --- a/test/tree_dgsem_2d/euler_source_terms.jl +++ b/test/tree_dgsem_2d/euler_source_terms.jl @@ -1,5 +1,8 @@ module TestEulerSourceTerms2D +using Trixi, TrixiCUDA +using Test + include("../test_macros.jl") @testset "Euler Source Terms 2D" begin @@ -43,108 +46,79 @@ include("../test_macros.jl") u_gpu = copy(ode_gpu.u0) du_gpu = similar(u_gpu) - @testset "Components Initialization" begin - @test_approx (u_gpu, u) - # du is initlaizaed as undefined, cannot test now - end - - @testset "Semidiscretization Process" begin - @testset "Copy to GPU" begin - du_gpu, u_gpu = TrixiCUDA.copy_to_gpu!(du, u) - Trixi.reset_du!(du, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Volume Integral" begin - TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu.volume_integral, solver_gpu, - cache_gpu) - Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), - equations, solver.volume_integral, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Prolong Interfaces" begin - TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) - end - - @testset "Interface Flux" begin - TrixiCUDA.cuda_interface_flux!(mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Boundaries" begin - TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, - equations_gpu, cache_gpu) - Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) - end - - @testset "Boundary Flux" begin - TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, - solver.surface_integral, solver) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Mortars" begin - TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, - TrixiCUDA.check_cache_mortars(cache_gpu), - solver_gpu, cache_gpu) - Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, - solver.surface_integral, solver) - @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) - @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) - end - - @testset "Mortar Flux" begin - TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.mortar, solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Surface Integral" begin - TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, - solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Jacobian" begin - TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.apply_jacobian!(du, mesh, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Sources" begin - TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, - equations_gpu, cache_gpu) - Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Copy to CPU" begin - du_cpu, u_cpu = TrixiCUDA.copy_to_cpu!(du_gpu, u_gpu) - @test_approx (du_cpu, du) - end - end + # Tests for components initialization + @test_approx (u_gpu, u) + # du is initlaizaed as undefined, cannot test now + + # Tests for semidiscretization process + TrixiCUDA.reset_du!(du_gpu) + Trixi.reset_du!(du, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu.volume_integral, solver_gpu, + cache_gpu) + Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), + equations, solver.volume_integral, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) + + TrixiCUDA.cuda_interface_flux!(mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, + equations_gpu, cache_gpu) + Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) + + TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, + solver.surface_integral, solver) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, + TrixiCUDA.check_cache_mortars(cache_gpu), + solver_gpu, cache_gpu) + Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, + solver.surface_integral, solver) + @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) + @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) + + TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.mortar, solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, + solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.apply_jacobian!(du, mesh, equations, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, + equations_gpu, cache_gpu) + Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) + @test_approx (du_gpu, du) end end # module diff --git a/test/tree_dgsem_2d/euler_source_terms_nonperiodic.jl b/test/tree_dgsem_2d/euler_source_terms_nonperiodic.jl index d19ce5c1..e8ed4619 100644 --- a/test/tree_dgsem_2d/euler_source_terms_nonperiodic.jl +++ b/test/tree_dgsem_2d/euler_source_terms_nonperiodic.jl @@ -1,5 +1,8 @@ module TestEulerSourceTermsNonperiodic2D +using Trixi, TrixiCUDA +using Test + include("../test_macros.jl") @testset "Euler Source Terms Nonperiodic 2D" begin @@ -53,108 +56,79 @@ include("../test_macros.jl") u_gpu = copy(ode_gpu.u0) du_gpu = similar(u_gpu) - @testset "Components Initialization" begin - @test_approx (u_gpu, u) - # du is initlaizaed as undefined, cannot test now - end - - @testset "Semidiscretization Process" begin - @testset "Copy to GPU" begin - du_gpu, u_gpu = TrixiCUDA.copy_to_gpu!(du, u) - Trixi.reset_du!(du, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Volume Integral" begin - TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu.volume_integral, solver_gpu, - cache_gpu) - Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), - equations, solver.volume_integral, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Prolong Interfaces" begin - TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) - end - - @testset "Interface Flux" begin - TrixiCUDA.cuda_interface_flux!(mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Boundaries" begin - TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, - equations_gpu, cache_gpu) - Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) - end - - @testset "Boundary Flux" begin - TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, - solver.surface_integral, solver) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Mortars" begin - TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, - TrixiCUDA.check_cache_mortars(cache_gpu), - solver_gpu, cache_gpu) - Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, - solver.surface_integral, solver) - @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) - @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) - end - - @testset "Mortar Flux" begin - TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.mortar, solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Surface Integral" begin - TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, - solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Jacobian" begin - TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.apply_jacobian!(du, mesh, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Sources" begin - TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, - equations_gpu, cache_gpu) - Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Copy to CPU" begin - du_cpu, u_cpu = TrixiCUDA.copy_to_cpu!(du_gpu, u_gpu) - @test_approx (du_cpu, du) - end - end + # Tests for components initialization + @test_approx (u_gpu, u) + # du is initlaizaed as undefined, cannot test now + + # Tests for semidiscretization process + TrixiCUDA.reset_du!(du_gpu) + Trixi.reset_du!(du, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu.volume_integral, solver_gpu, + cache_gpu) + Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), + equations, solver.volume_integral, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) + + TrixiCUDA.cuda_interface_flux!(mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, + equations_gpu, cache_gpu) + Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) + + TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, + solver.surface_integral, solver) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, + TrixiCUDA.check_cache_mortars(cache_gpu), + solver_gpu, cache_gpu) + Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, + solver.surface_integral, solver) + @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) + @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) + + TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.mortar, solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, + solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.apply_jacobian!(du, mesh, equations, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, + equations_gpu, cache_gpu) + Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) + @test_approx (du_gpu, du) end end # module diff --git a/test/tree_dgsem_2d/eulermulti_ec.jl b/test/tree_dgsem_2d/eulermulti_ec.jl index 5a88e1be..2f1ba070 100644 --- a/test/tree_dgsem_2d/eulermulti_ec.jl +++ b/test/tree_dgsem_2d/eulermulti_ec.jl @@ -1,5 +1,8 @@ module TestEulerMultiEC2D +using Trixi, TrixiCUDA +using Test + include("../test_macros.jl") @testset "Euler Multi EC 2D" begin @@ -45,108 +48,79 @@ include("../test_macros.jl") u_gpu = copy(ode_gpu.u0) du_gpu = similar(u_gpu) - @testset "Components Initialization" begin - @test_approx (u_gpu, u) - # du is initlaizaed as undefined, cannot test now - end - - @testset "Semidiscretization Process" begin - @testset "Copy to GPU" begin - du_gpu, u_gpu = TrixiCUDA.copy_to_gpu!(du, u) - Trixi.reset_du!(du, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Volume Integral" begin - TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu.volume_integral, solver_gpu, - cache_gpu) - Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), - equations, solver.volume_integral, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Prolong Interfaces" begin - TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) - end - - @testset "Interface Flux" begin - TrixiCUDA.cuda_interface_flux!(mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Boundaries" begin - TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, - equations_gpu, cache_gpu) - Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) - end - - @testset "Boundary Flux" begin - TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, - solver.surface_integral, solver) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Mortars" begin - TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, - TrixiCUDA.check_cache_mortars(cache_gpu), - solver_gpu, cache_gpu) - Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, - solver.surface_integral, solver) - @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) - @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) - end - - @testset "Mortar Flux" begin - TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.mortar, solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Surface Integral" begin - TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, - solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Jacobian" begin - TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.apply_jacobian!(du, mesh, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Sources" begin - TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, - equations_gpu, cache_gpu) - Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Copy to CPU" begin - du_cpu, u_cpu = TrixiCUDA.copy_to_cpu!(du_gpu, u_gpu) - @test_approx (du_cpu, du) - end - end + # Tests for components initialization + @test_approx (u_gpu, u) + # du is initlaizaed as undefined, cannot test now + + # Tests for semidiscretization process + TrixiCUDA.reset_du!(du_gpu) + Trixi.reset_du!(du, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu.volume_integral, solver_gpu, + cache_gpu) + Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), + equations, solver.volume_integral, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) + + TrixiCUDA.cuda_interface_flux!(mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, + equations_gpu, cache_gpu) + Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) + + TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, + solver.surface_integral, solver) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, + TrixiCUDA.check_cache_mortars(cache_gpu), + solver_gpu, cache_gpu) + Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, + solver.surface_integral, solver) + @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) + @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) + + TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.mortar, solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, + solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.apply_jacobian!(du, mesh, equations, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, + equations_gpu, cache_gpu) + Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) + @test_approx (du_gpu, du) end end # module diff --git a/test/tree_dgsem_2d/eulermulti_es.jl b/test/tree_dgsem_2d/eulermulti_es.jl index 26378e3f..87c3de01 100644 --- a/test/tree_dgsem_2d/eulermulti_es.jl +++ b/test/tree_dgsem_2d/eulermulti_es.jl @@ -1,5 +1,8 @@ module TestEulerMultiES2D +using Trixi, TrixiCUDA +using Test + include("../test_macros.jl") @testset "Euler Multi ES 2D" begin @@ -50,108 +53,79 @@ include("../test_macros.jl") u_gpu = copy(ode_gpu.u0) du_gpu = similar(u_gpu) - @testset "Components Initialization" begin - @test_approx (u_gpu, u) - # du is initlaizaed as undefined, cannot test now - end - - @testset "Semidiscretization Process" begin - @testset "Copy to GPU" begin - du_gpu, u_gpu = TrixiCUDA.copy_to_gpu!(du, u) - Trixi.reset_du!(du, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Volume Integral" begin - TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu.volume_integral, solver_gpu, - cache_gpu) - Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), - equations, solver.volume_integral, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Prolong Interfaces" begin - TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) - end - - @testset "Interface Flux" begin - TrixiCUDA.cuda_interface_flux!(mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Boundaries" begin - TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, - equations_gpu, cache_gpu) - Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) - end - - @testset "Boundary Flux" begin - TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, - solver.surface_integral, solver) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Mortars" begin - TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, - TrixiCUDA.check_cache_mortars(cache_gpu), - solver_gpu, cache_gpu) - Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, - solver.surface_integral, solver) - @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) - @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) - end - - @testset "Mortar Flux" begin - TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.mortar, solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Surface Integral" begin - TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, - solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Jacobian" begin - TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.apply_jacobian!(du, mesh, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Sources" begin - TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, - equations_gpu, cache_gpu) - Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Copy to CPU" begin - du_cpu, u_cpu = TrixiCUDA.copy_to_cpu!(du_gpu, u_gpu) - @test_approx (du_cpu, du) - end - end + # Tests for components initialization + @test_approx (u_gpu, u) + # du is initlaizaed as undefined, cannot test now + + # Tests for semidiscretization process + TrixiCUDA.reset_du!(du_gpu) + Trixi.reset_du!(du, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu.volume_integral, solver_gpu, + cache_gpu) + Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), + equations, solver.volume_integral, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) + + TrixiCUDA.cuda_interface_flux!(mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, + equations_gpu, cache_gpu) + Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) + + TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, + solver.surface_integral, solver) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, + TrixiCUDA.check_cache_mortars(cache_gpu), + solver_gpu, cache_gpu) + Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, + solver.surface_integral, solver) + @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) + @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) + + TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.mortar, solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, + solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.apply_jacobian!(du, mesh, equations, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, + equations_gpu, cache_gpu) + Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) + @test_approx (du_gpu, du) end end # module diff --git a/test/tree_dgsem_2d/hypdiff_nonperiodic.jl b/test/tree_dgsem_2d/hypdiff_nonperiodic.jl index 5e450da2..6377deb7 100644 --- a/test/tree_dgsem_2d/hypdiff_nonperiodic.jl +++ b/test/tree_dgsem_2d/hypdiff_nonperiodic.jl @@ -1,5 +1,8 @@ module TestHypdiffNonperiodic2D +using Trixi, TrixiCUDA +using Test + include("../test_macros.jl") @testset "Hypdiff Nonperiodic 2D" begin @@ -52,108 +55,79 @@ include("../test_macros.jl") u_gpu = copy(ode_gpu.u0) du_gpu = similar(u_gpu) - @testset "Components Initialization" begin - @test_approx (u_gpu, u) - # du is initlaizaed as undefined, cannot test now - end - - @testset "Semidiscretization Process" begin - @testset "Copy to GPU" begin - du_gpu, u_gpu = TrixiCUDA.copy_to_gpu!(du, u) - Trixi.reset_du!(du, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Volume Integral" begin - TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu.volume_integral, solver_gpu, - cache_gpu) - Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), - equations, solver.volume_integral, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Prolong Interfaces" begin - TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) - end - - @testset "Interface Flux" begin - TrixiCUDA.cuda_interface_flux!(mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Boundaries" begin - TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, - equations_gpu, cache_gpu) - Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) - end - - @testset "Boundary Flux" begin - TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, - solver.surface_integral, solver) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Mortars" begin - TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, - TrixiCUDA.check_cache_mortars(cache_gpu), - solver_gpu, cache_gpu) - Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, - solver.surface_integral, solver) - @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) - @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) - end - - @testset "Mortar Flux" begin - TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.mortar, solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Surface Integral" begin - TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, - solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Jacobian" begin - TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.apply_jacobian!(du, mesh, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Sources" begin - TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, - equations_gpu, cache_gpu) - Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Copy to CPU" begin - du_cpu, u_cpu = TrixiCUDA.copy_to_cpu!(du_gpu, u_gpu) - @test_approx (du_cpu, du) - end - end + # Tests for components initialization + @test_approx (u_gpu, u) + # du is initlaizaed as undefined, cannot test now + + # Tests for semidiscretization process + TrixiCUDA.reset_du!(du_gpu) + Trixi.reset_du!(du, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu.volume_integral, solver_gpu, + cache_gpu) + Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), + equations, solver.volume_integral, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) + + TrixiCUDA.cuda_interface_flux!(mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, + equations_gpu, cache_gpu) + Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) + + TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, + solver.surface_integral, solver) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, + TrixiCUDA.check_cache_mortars(cache_gpu), + solver_gpu, cache_gpu) + Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, + solver.surface_integral, solver) + @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) + @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) + + TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.mortar, solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, + solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.apply_jacobian!(du, mesh, equations, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, + equations_gpu, cache_gpu) + Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) + @test_approx (du_gpu, du) end end # module diff --git a/test/tree_dgsem_2d/mhd_shock.jl b/test/tree_dgsem_2d/mhd_shock.jl index d90f1cb2..daf4261a 100644 --- a/test/tree_dgsem_2d/mhd_shock.jl +++ b/test/tree_dgsem_2d/mhd_shock.jl @@ -1,5 +1,8 @@ module TestMHDShock2D +using Trixi, TrixiCUDA +using Test + include("../test_macros.jl") @testset "MHD Shock 2D" begin @@ -56,108 +59,79 @@ include("../test_macros.jl") u_gpu = copy(ode_gpu.u0) du_gpu = similar(u_gpu) - @testset "Components Initialization" begin - @test_approx (u_gpu, u) - # du is initlaizaed as undefined, cannot test now - end - - @testset "Semidiscretization Process" begin - @testset "Copy to GPU" begin - du_gpu, u_gpu = TrixiCUDA.copy_to_gpu!(du, u) - Trixi.reset_du!(du, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Volume Integral" begin - TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu.volume_integral, solver_gpu, - cache_gpu) - Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), - equations, solver.volume_integral, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Prolong Interfaces" begin - TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) - end - - @testset "Interface Flux" begin - TrixiCUDA.cuda_interface_flux!(mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Boundaries" begin - TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, - equations_gpu, cache_gpu) - Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) - end - - @testset "Boundary Flux" begin - TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, - solver.surface_integral, solver) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Mortars" begin - TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, - TrixiCUDA.check_cache_mortars(cache_gpu), - solver_gpu, cache_gpu) - Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, - solver.surface_integral, solver) - @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) - @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) - end - - @testset "Mortar Flux" begin - TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.mortar, solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Surface Integral" begin - TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, - solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Jacobian" begin - TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.apply_jacobian!(du, mesh, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Sources" begin - TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, - equations_gpu, cache_gpu) - Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Copy to CPU" begin - du_cpu, u_cpu = TrixiCUDA.copy_to_cpu!(du_gpu, u_gpu) - @test_approx (du_cpu, du) - end - end + # Tests for components initialization + @test_approx (u_gpu, u) + # du is initlaizaed as undefined, cannot test now + + # Tests for semidiscretization process + TrixiCUDA.reset_du!(du_gpu) + Trixi.reset_du!(du, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu.volume_integral, solver_gpu, + cache_gpu) + Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), + equations, solver.volume_integral, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) + + TrixiCUDA.cuda_interface_flux!(mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, + equations_gpu, cache_gpu) + Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) + + TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, + solver.surface_integral, solver) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, + TrixiCUDA.check_cache_mortars(cache_gpu), + solver_gpu, cache_gpu) + Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, + solver.surface_integral, solver) + @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) + @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) + + TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.mortar, solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, + solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.apply_jacobian!(du, mesh, equations, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, + equations_gpu, cache_gpu) + Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) + @test_approx (du_gpu, du) end end # module diff --git a/test/tree_dgsem_2d/shallowwater_ec.jl b/test/tree_dgsem_2d/shallowwater_ec.jl index a402f3de..f6ff841a 100644 --- a/test/tree_dgsem_2d/shallowwater_ec.jl +++ b/test/tree_dgsem_2d/shallowwater_ec.jl @@ -1,5 +1,8 @@ module TestShallowWaterEC2D +using Trixi, TrixiCUDA +using Test + include("../test_macros.jl") @testset "Shallow Water EC 2D" begin @@ -45,108 +48,79 @@ include("../test_macros.jl") u_gpu = copy(ode_gpu.u0) du_gpu = similar(u_gpu) - @testset "Components Initialization" begin - @test_approx (u_gpu, u) - # du is initlaizaed as undefined, cannot test now - end - - @testset "Semidiscretization Process" begin - @testset "Copy to GPU" begin - du_gpu, u_gpu = TrixiCUDA.copy_to_gpu!(du, u) - Trixi.reset_du!(du, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Volume Integral" begin - TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu.volume_integral, solver_gpu, - cache_gpu) - Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), - equations, solver.volume_integral, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Prolong Interfaces" begin - TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) - end - - @testset "Interface Flux" begin - TrixiCUDA.cuda_interface_flux!(mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Boundaries" begin - TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, - equations_gpu, cache_gpu) - Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) - end - - @testset "Boundary Flux" begin - TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, - solver.surface_integral, solver) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Mortars" begin - TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, - TrixiCUDA.check_cache_mortars(cache_gpu), - solver_gpu, cache_gpu) - Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, - solver.surface_integral, solver) - @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) - @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) - end - - @testset "Mortar Flux" begin - TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.mortar, solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Surface Integral" begin - TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, - solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Jacobian" begin - TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.apply_jacobian!(du, mesh, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Sources" begin - TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, - equations_gpu, cache_gpu) - Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Copy to CPU" begin - du_cpu, u_cpu = TrixiCUDA.copy_to_cpu!(du_gpu, u_gpu) - @test_approx (du_cpu, du) - end - end + # Tests for components initialization + @test_approx (u_gpu, u) + # du is initlaizaed as undefined, cannot test now + + # Tests for semidiscretization process + TrixiCUDA.reset_du!(du_gpu) + Trixi.reset_du!(du, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu.volume_integral, solver_gpu, + cache_gpu) + Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), + equations, solver.volume_integral, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) + + TrixiCUDA.cuda_interface_flux!(mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, + equations_gpu, cache_gpu) + Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) + + TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, + solver.surface_integral, solver) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, + TrixiCUDA.check_cache_mortars(cache_gpu), + solver_gpu, cache_gpu) + Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, + solver.surface_integral, solver) + @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) + @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) + + TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.mortar, solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, + solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.apply_jacobian!(du, mesh, equations, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, + equations_gpu, cache_gpu) + Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) + @test_approx (du_gpu, du) end end # module diff --git a/test/tree_dgsem_2d/shallowwater_source_terms.jl b/test/tree_dgsem_2d/shallowwater_source_terms.jl index 7d8a59b1..e05a74f7 100644 --- a/test/tree_dgsem_2d/shallowwater_source_terms.jl +++ b/test/tree_dgsem_2d/shallowwater_source_terms.jl @@ -1,5 +1,8 @@ module TestShallowWaterSourceTerms2D +using Trixi, TrixiCUDA +using Test + include("../test_macros.jl") @testset "Shallow Water Source Terms 2D" begin @@ -48,108 +51,79 @@ include("../test_macros.jl") u_gpu = copy(ode_gpu.u0) du_gpu = similar(u_gpu) - @testset "Components Initialization" begin - @test_approx (u_gpu, u) - # du is initlaizaed as undefined, cannot test now - end - - @testset "Semidiscretization Process" begin - @testset "Copy to GPU" begin - du_gpu, u_gpu = TrixiCUDA.copy_to_gpu!(du, u) - Trixi.reset_du!(du, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Volume Integral" begin - TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu.volume_integral, solver_gpu, - cache_gpu) - Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), - equations, solver.volume_integral, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Prolong Interfaces" begin - TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) - end - - @testset "Interface Flux" begin - TrixiCUDA.cuda_interface_flux!(mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Boundaries" begin - TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, - equations_gpu, cache_gpu) - Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) - end - - @testset "Boundary Flux" begin - TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, - solver.surface_integral, solver) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Mortars" begin - TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, - TrixiCUDA.check_cache_mortars(cache_gpu), - solver_gpu, cache_gpu) - Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, - solver.surface_integral, solver) - @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) - @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) - end - - @testset "Mortar Flux" begin - TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.mortar, solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Surface Integral" begin - TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, - solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Jacobian" begin - TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.apply_jacobian!(du, mesh, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Sources" begin - TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, - equations_gpu, cache_gpu) - Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Copy to CPU" begin - du_cpu, u_cpu = TrixiCUDA.copy_to_cpu!(du_gpu, u_gpu) - @test_approx (du_cpu, du) - end - end + # Tests for components initialization + @test_approx (u_gpu, u) + # du is initlaizaed as undefined, cannot test now + + # Tests for semidiscretization process + TrixiCUDA.reset_du!(du_gpu) + Trixi.reset_du!(du, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu.volume_integral, solver_gpu, + cache_gpu) + Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), + equations, solver.volume_integral, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) + + TrixiCUDA.cuda_interface_flux!(mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, + equations_gpu, cache_gpu) + Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) + + TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, + solver.surface_integral, solver) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, + TrixiCUDA.check_cache_mortars(cache_gpu), + solver_gpu, cache_gpu) + Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, + solver.surface_integral, solver) + @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) + @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) + + TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.mortar, solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, + solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.apply_jacobian!(du, mesh, equations, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, + equations_gpu, cache_gpu) + Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) + @test_approx (du_gpu, du) end end # module diff --git a/test/tree_dgsem_2d/shawllowwater_source_terms_nonperiodic.jl b/test/tree_dgsem_2d/shawllowwater_source_terms_nonperiodic.jl index 3fbff249..e8e42f03 100644 --- a/test/tree_dgsem_2d/shawllowwater_source_terms_nonperiodic.jl +++ b/test/tree_dgsem_2d/shawllowwater_source_terms_nonperiodic.jl @@ -1,5 +1,8 @@ module TestShallowWaterSourceTermsNonperiodic2D +using Trixi, TrixiCUDA +using Test + include("../test_macros.jl") @testset "Shallow Water Source Terms Nonperiodic 2D" begin @@ -52,108 +55,79 @@ include("../test_macros.jl") u_gpu = copy(ode_gpu.u0) du_gpu = similar(u_gpu) - @testset "Components Initialization" begin - @test_approx (u_gpu, u) - # du is initlaizaed as undefined, cannot test now - end - - @testset "Semidiscretization Process" begin - @testset "Copy to GPU" begin - du_gpu, u_gpu = TrixiCUDA.copy_to_gpu!(du, u) - Trixi.reset_du!(du, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Volume Integral" begin - TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu.volume_integral, solver_gpu, - cache_gpu) - Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), - equations, solver.volume_integral, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Prolong Interfaces" begin - TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) - end - - @testset "Interface Flux" begin - TrixiCUDA.cuda_interface_flux!(mesh_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Boundaries" begin - TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, - equations_gpu, cache_gpu) - Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) - @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) - end - - @testset "Boundary Flux" begin - TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, - solver.surface_integral, solver) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Prolong Mortars" begin - TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, - TrixiCUDA.check_cache_mortars(cache_gpu), - solver_gpu, cache_gpu) - Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, - solver.surface_integral, solver) - @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) - @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) - end - - @testset "Mortar Flux" begin - TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), - Trixi.have_nonconservative_terms(equations_gpu), - equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, - Trixi.have_nonconservative_terms(equations), equations, - solver.mortar, solver.surface_integral, solver, cache) - @test_approx (cache_gpu.elements.surface_flux_values, - cache.elements.surface_flux_values) - end - - @testset "Surface Integral" begin - TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) - Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, - solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Jacobian" begin - TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) - Trixi.apply_jacobian!(du, mesh, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Apply Sources" begin - TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, - equations_gpu, cache_gpu) - Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) - @test_approx (du_gpu, du) - end - - @testset "Copy to CPU" begin - du_cpu, u_cpu = TrixiCUDA.copy_to_cpu!(du_gpu, u_gpu) - @test_approx (du_cpu, du) - end - end + # Tests for components initialization + @test_approx (u_gpu, u) + # du is initlaizaed as undefined, cannot test now + + # Tests for semidiscretization process + TrixiCUDA.reset_du!(du_gpu) + Trixi.reset_du!(du, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_volume_integral!(du_gpu, u_gpu, mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu.volume_integral, solver_gpu, + cache_gpu) + Trixi.calc_volume_integral!(du, u, mesh, Trixi.have_nonconservative_terms(equations), + equations, solver.volume_integral, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_prolong2interfaces!(u_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.prolong2interfaces!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.interfaces.u, cache.interfaces.u) + + TrixiCUDA.cuda_interface_flux!(mesh_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_interface_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2boundaries!(u_gpu, mesh_gpu, boundary_conditions_gpu, + equations_gpu, cache_gpu) + Trixi.prolong2boundaries!(cache, u, mesh, equations, solver.surface_integral, solver) + @test_approx (cache_gpu.boundaries.u, cache.boundaries.u) + + TrixiCUDA.cuda_boundary_flux!(t_gpu, mesh_gpu, boundary_conditions_gpu, + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_boundary_flux!(cache, t, boundary_conditions, mesh, equations, + solver.surface_integral, solver) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_prolong2mortars!(u_gpu, mesh_gpu, + TrixiCUDA.check_cache_mortars(cache_gpu), + solver_gpu, cache_gpu) + Trixi.prolong2mortars!(cache, u, mesh, equations, solver.mortar, + solver.surface_integral, solver) + @test_approx (cache_gpu.mortars.u_upper, cache.mortars.u_upper) + @test_approx (cache_gpu.mortars.u_lower, cache.mortars.u_lower) + + TrixiCUDA.cuda_mortar_flux!(mesh_gpu, TrixiCUDA.check_cache_mortars(cache_gpu), + Trixi.have_nonconservative_terms(equations_gpu), + equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_mortar_flux!(cache.elements.surface_flux_values, mesh, + Trixi.have_nonconservative_terms(equations), equations, + solver.mortar, solver.surface_integral, solver, cache) + @test_approx (cache_gpu.elements.surface_flux_values, + cache.elements.surface_flux_values) + + TrixiCUDA.cuda_surface_integral!(du_gpu, mesh_gpu, equations_gpu, solver_gpu, cache_gpu) + Trixi.calc_surface_integral!(du, u, mesh, equations, solver.surface_integral, + solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_jacobian!(du_gpu, mesh_gpu, equations_gpu, cache_gpu) + Trixi.apply_jacobian!(du, mesh, equations, solver, cache) + @test_approx (du_gpu, du) + + TrixiCUDA.cuda_sources!(du_gpu, u_gpu, t_gpu, source_terms_gpu, + equations_gpu, cache_gpu) + Trixi.calc_sources!(du, u, t, source_terms, equations, solver, cache) + @test_approx (du_gpu, du) end end # module