module TestCUDA
using Test
using Trixi
include("test_trixi.jl")
outdir = "out"
isdir(outdir) && rm(outdir, recursive = true)
EXAMPLES_DIR = joinpath(examples_dir(), "p4est_2d_dgsem")
@trixi_testset "elixir_advection_basic_gpu.jl native" begin
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_basic_gpu.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
@test real(ode.p.solver) == Float64
@test real(ode.p.solver.basis) == Float64
@test real(ode.p.solver.mortar) == Float64
@test real(ode.p.mesh) == Float64
@test ode.u0 isa Array
@test ode.p.solver.basis.derivative_matrix isa Array
@test Trixi.storage_type(ode.p.cache.elements) === Array
@test Trixi.storage_type(ode.p.cache.interfaces) === Array
@test Trixi.storage_type(ode.p.cache.boundaries) === Array
@test Trixi.storage_type(ode.p.cache.mortars) === Array
end
@trixi_testset "elixir_advection_basic_gpu.jl Float32 / CUDA" begin
using CUDA
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_basic_gpu.jl"),
l2=nothing,
linf=nothing,
RealT=Float32,
real_type=Float32,
storage_type=CuArray,
sol=nothing,)
@test real(ode.p.solver) == Float32
@test real(ode.p.solver.basis) == Float32
@test real(ode.p.solver.mortar) == Float32
@test real(ode.p.mesh) == Float64
@test ode.u0 isa CuArray
@test ode.p.solver.basis.derivative_matrix isa CuArray
@test Trixi.storage_type(ode.p.cache.elements) === CuArray
@test Trixi.storage_type(ode.p.cache.interfaces) === CuArray
@test Trixi.storage_type(ode.p.cache.boundaries) === CuArray
@test Trixi.storage_type(ode.p.cache.mortars) === CuArray
end
@test_nowarn isdir(outdir) && rm(outdir, recursive = true)
end