From 4e5a225e34cea14e7d2d4cb28ee7f5cabbb85983 Mon Sep 17 00:00:00 2001 From: Navid Constantinou Date: Sat, 19 Sep 2020 16:12:35 +1000 Subject: [PATCH 1/6] generalizes test_sqg_noforcing() for GPU --- test/test_surfaceqg.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_surfaceqg.jl b/test/test_surfaceqg.jl index 54ae154f..4ee776be 100644 --- a/test/test_surfaceqg.jl +++ b/test/test_surfaceqg.jl @@ -113,9 +113,9 @@ 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 @@ -123,7 +123,7 @@ function test_sqg_noforcing(dev::Device=CPU()) 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) From 51450bbe3f5735eba6b9ab3fb82cc7ff4d469846 Mon Sep 17 00:00:00 2001 From: Navid Constantinou Date: Sat, 19 Sep 2020 18:30:42 +1000 Subject: [PATCH 2/6] bring SQG test before MQG --- test/runtests.jl | 29 ++++++++++++++--------------- test/test_multilayerqg.jl | 20 ++++++++++++-------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index 27fb6eee..90b8cd07 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -99,6 +99,20 @@ for dev in devices @test BarotropicQGQL.nothingfunction() == nothing end + @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) + @test test_sqg_stochasticforcing_buoyancy_variance_budget(dev) + @test test_sqg_stochasticforcedproblemconstructor(dev) + @test test_sqg_problemtype(dev, Float32) + @test test_sqg_paramsconstructor(dev) + @test test_sqg_noforcing(dev) + @test SurfaceQG.nothingfunction() == nothing + end + @testset "MultilayerQG" begin include("test_multilayerqg.jl") @@ -117,21 +131,6 @@ for dev in devices @test test_mqg_problemtype(dev, Float32) @test MultilayerQG.nothingfunction() == nothing end - - @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) - @test test_sqg_stochasticforcing_buoyancy_variance_budget(dev) - @test test_sqg_stochasticforcedproblemconstructor(dev) - @test test_sqg_problemtype(dev, Float32) - @test test_sqg_paramsconstructor(dev) - @test test_sqg_noforcing(dev) - @test SurfaceQG.nothingfunction() == nothing - end - end end # time diff --git a/test/test_multilayerqg.jl b/test/test_multilayerqg.jl index a351315c..2347f7c2 100644 --- a/test/test_multilayerqg.jl +++ b/test/test_multilayerqg.jl @@ -175,7 +175,7 @@ function test_mqg_nonlinearadvection(dt, stepper, dev::Device=CPU(); n=128, L=2 β = 0.35 - U1, U2 = 0.1, 0.05 + U1, U2 = 0, 0 u1 = @. 0.5sech(gr.y/(Ly/15))^2; u1 = A(reshape(u1, (1, gr.ny))) u2 = @. 0.02cos(3l₀*gr.y); u2 = A(reshape(u2, (1, gr.ny))) uyy1 = real.(ifft( -gr.l.^2 .* fft(u1) )) @@ -211,8 +211,10 @@ function test_mqg_nonlinearadvection(dt, stepper, dev::Device=CPU(); n=128, L=2 nothing end - prob = MultilayerQG.Problem(nlayers, dev; nx=nx, ny=ny, Lx=Lx, Ly=Ly, - f₀=f₀, g=g, H=H, ρ=ρ, U=U, eta=η, β=β, μ=μ, ν=ν, nν=nν, calcFq=calcFq!, stepper=stepper, dt=dt) + # prob = MultilayerQG.Problem(nlayers, dev; nx=nx, ny=ny, Lx=Lx, Ly=Ly, + # f₀=f₀, g=g, H=H, ρ=ρ, U=U, eta=η, β=β, μ=μ, ν=ν, nν=nν, calcFq=calcFq!, stepper=stepper, dt=dt) + prob = MultilayerQG.Problem(nlayers, dev; nx=nx, ny=ny, Lx=Lx, Ly=Ly, + f₀=f₀, g=g, H=H, ρ=ρ, U=U, β=0, μ=0, ν=0, nν=nν, stepper=stepper, dt=dt) sol, cl, pr, vs, gr = prob.sol, prob.clock, prob.params, prob.vars, prob.grid qf = zeros(dev, T, (gr.nx, gr.ny, nlayers)) @@ -224,11 +226,13 @@ 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) + stepforward!(prob, 1) + return prob.sol + + # stepforward!(prob, nt) + # MultilayerQG.updatevars!(prob) + # + # return isapprox(vs.q, qf, rtol=rtol_multilayerqg) && isapprox(vs.ψ, ψf, rtol=rtol_multilayerqg) end """ From 2462943669afaccf5e94eab4f8e741b86bc4d3e8 Mon Sep 17 00:00:00 2001 From: Navid Constantinou Date: Sat, 19 Sep 2020 18:32:44 +1000 Subject: [PATCH 3/6] remove experimental edits --- test/test_multilayerqg.jl | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/test/test_multilayerqg.jl b/test/test_multilayerqg.jl index 2347f7c2..d14b0543 100644 --- a/test/test_multilayerqg.jl +++ b/test/test_multilayerqg.jl @@ -211,10 +211,8 @@ function test_mqg_nonlinearadvection(dt, stepper, dev::Device=CPU(); n=128, L=2 nothing end - # prob = MultilayerQG.Problem(nlayers, dev; nx=nx, ny=ny, Lx=Lx, Ly=Ly, - # f₀=f₀, g=g, H=H, ρ=ρ, U=U, eta=η, β=β, μ=μ, ν=ν, nν=nν, calcFq=calcFq!, stepper=stepper, dt=dt) - prob = MultilayerQG.Problem(nlayers, dev; nx=nx, ny=ny, Lx=Lx, Ly=Ly, - f₀=f₀, g=g, H=H, ρ=ρ, U=U, β=0, μ=0, ν=0, nν=nν, stepper=stepper, dt=dt) + prob = MultilayerQG.Problem(nlayers, dev; nx=nx, ny=ny, Lx=Lx, Ly=Ly, + f₀=f₀, g=g, H=H, ρ=ρ, U=U, eta=η, β=β, μ=μ, ν=ν, nν=nν, calcFq=calcFq!, stepper=stepper, dt=dt) sol, cl, pr, vs, gr = prob.sol, prob.clock, prob.params, prob.vars, prob.grid qf = zeros(dev, T, (gr.nx, gr.ny, nlayers)) @@ -226,13 +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, 1) - return prob.sol - # stepforward!(prob, nt) - # MultilayerQG.updatevars!(prob) - # - # return isapprox(vs.q, qf, rtol=rtol_multilayerqg) && isapprox(vs.ψ, ψf, rtol=rtol_multilayerqg) + stepforward!(prob, nt) + MultilayerQG.updatevars!(prob) + + return isapprox(vs.q, qf, rtol=rtol_multilayerqg) && isapprox(vs.ψ, ψf, rtol=rtol_multilayerqg) end """ From e7277c760b726cbe14da4d02bc2ce053f13d59d3 Mon Sep 17 00:00:00 2001 From: Navid Constantinou Date: Sat, 19 Sep 2020 18:35:31 +1000 Subject: [PATCH 4/6] remove experimental edits --- test/test_multilayerqg.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_multilayerqg.jl b/test/test_multilayerqg.jl index d14b0543..9125778a 100644 --- a/test/test_multilayerqg.jl +++ b/test/test_multilayerqg.jl @@ -175,7 +175,7 @@ function test_mqg_nonlinearadvection(dt, stepper, dev::Device=CPU(); n=128, L=2 β = 0.35 - U1, U2 = 0, 0 + U1, U2 = 0.1, 0.05 u1 = @. 0.5sech(gr.y/(Ly/15))^2; u1 = A(reshape(u1, (1, gr.ny))) u2 = @. 0.02cos(3l₀*gr.y); u2 = A(reshape(u2, (1, gr.ny))) uyy1 = real.(ifft( -gr.l.^2 .* fft(u1) )) @@ -228,7 +228,7 @@ function test_mqg_nonlinearadvection(dt, stepper, dev::Device=CPU(); n=128, L=2 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 """ From f59ecd075c71c519881fb4cf75feaa130d176867 Mon Sep 17 00:00:00 2001 From: Navid Constantinou Date: Sat, 19 Sep 2020 19:29:09 +1000 Subject: [PATCH 5/6] remove spaces --- test/runtests.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index 90b8cd07..7bba35d7 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -112,7 +112,7 @@ for dev in devices @test test_sqg_noforcing(dev) @test SurfaceQG.nothingfunction() == nothing end - + @testset "MultilayerQG" begin include("test_multilayerqg.jl") From d59ea5de4aaad2659cc64a63e50ab05b76815ebd Mon Sep 17 00:00:00 2001 From: Navid Constantinou Date: Sun, 20 Sep 2020 07:06:30 +1000 Subject: [PATCH 6/6] only run MQG tests on CPU --- test/runtests.jl | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index 7bba35d7..e52be7ae 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -113,23 +113,25 @@ for dev in devices @test SurfaceQG.nothingfunction() == nothing end - @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 + 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