Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generalizes SQG test to run on GPU #119

Merged
merged 7 commits into from
Nov 5, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ for dev in devices

@testset "SurfaceQG" begin
include("test_surfaceqg.jl")

@test test_sqg_kineticenergy_buoyancyvariance(dev)
@test test_sqg_advection(0.0005, "ForwardEuler", dev)
@test test_sqg_deterministicforcing_buoyancy_variance_budget(dev)
Expand All @@ -113,6 +113,26 @@ for dev in devices
@test SurfaceQG.nothingfunction() == nothing
end

if dev == CPU()
@testset "MultilayerQG" begin
include("test_multilayerqg.jl")

@test test_pvtofromstreamfunction_2layer(dev)
@test test_pvtofromstreamfunction_3layer(dev)
@test test_mqg_rossbywave("RK4", 1e-2, 20, dev)
@test test_mqg_nonlinearadvection(0.005, "ForwardEuler", dev)
@test test_mqg_linearadvection(0.005, "ForwardEuler", dev)
@test test_mqg_energies(dev)
@test test_mqg_energysinglelayer(dev)
@test test_mqg_fluxes(dev)
@test test_mqg_fluxessinglelayer(dev)
@test test_mqg_setqsetψ(dev)
@test test_mqg_paramsconstructor(dev)
@test test_mqg_stochasticforcedproblemconstructor(dev)
@test test_mqg_problemtype(dev, Float32)
@test MultilayerQG.nothingfunction() == nothing
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can also mark these with @test_skip but this is fine too.

end
end
end

dev = CPU()
Expand Down
6 changes: 3 additions & 3 deletions test/test_multilayerqg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -224,11 +224,11 @@ function test_mqg_nonlinearadvection(dt, stepper, dev::Device=CPU(); n=128, L=2
@views ψf[:, :, 2] = ψ2

MultilayerQG.set_q!(prob, qf)

stepforward!(prob, nt)
MultilayerQG.updatevars!(prob)

return isapprox(vs.q, qf, rtol=rtol_multilayerqg) && isapprox(vs.ψ, ψf, rtol=rtol_multilayerqg)
return isapprox(vs.q, qf, rtol=rtol_multilayerqg) && isapprox(vs.ψ, ψf, rtol=rtol_multilayerqg)
end

"""
Expand Down
6 changes: 3 additions & 3 deletions test/test_surfaceqg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -113,17 +113,17 @@ function test_sqg_noforcing(dev::Device=CPU())
prob_unforced = SurfaceQG.Problem(dev; nx=n, Lx=L, stepper="ForwardEuler")

SurfaceQG.addforcing!(prob_unforced.timestepper.N, prob_unforced.sol, prob_unforced.clock.t, prob_unforced.clock, prob_unforced.vars, prob_unforced.params, prob_unforced.grid)

function calcF!(Fh, sol, t, clock, vars, params, grid)
Fh .= 2*ones(size(sol))
Fh .= 2 * ArrayType(dev)(ones(size(sol)))
return nothing
end

prob_forced = SurfaceQG.Problem(dev; nx=n, Lx=L, stepper="ForwardEuler", calcF=calcF!)

SurfaceQG.addforcing!(prob_forced.timestepper.N, prob_forced.sol, prob_forced.clock.t, prob_forced.clock, prob_forced.vars, prob_forced.params, prob_forced.grid)

return prob_unforced.timestepper.N == Complex.(zeros(size(prob_unforced.sol))) && prob_forced.timestepper.N == Complex.(2*ones(size(prob_unforced.sol)))
return prob_unforced.timestepper.N == Complex.(ArrayType(dev)(zeros(size(prob_unforced.sol)))) && prob_forced.timestepper.N == Complex.(2*ArrayType(dev)(ones(size(prob_unforced.sol))))
end

function test_sqg_deterministicforcing_buoyancy_variance_budget(dev::Device=CPU(); n=256, dt=0.01, L=2π, ν=1e-7, nν=2, tf=10.0)
Expand Down