Skip to content

Commit

Permalink
Merge pull request #119 from FourierFlows/fixsqg
Browse files Browse the repository at this point in the history
Generalizes SQG test to run on GPU
  • Loading branch information
navidcy committed Nov 5, 2020
2 parents 71f6148 + 19ad60e commit 9608837
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 7 deletions.
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
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

0 comments on commit 9608837

Please sign in to comment.