From 76614265cc499f3a3e966a7e1bb2dfc690415cb3 Mon Sep 17 00:00:00 2001 From: Hendrik Ranocha Date: Fri, 13 Mar 2020 09:53:15 +0300 Subject: [PATCH] test for quartic nonconvex periodic semidiscretisation --- .../quartic_nonconvex_test.jl | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 test/conservation_laws/quartic_nonconvex_test.jl diff --git a/test/conservation_laws/quartic_nonconvex_test.jl b/test/conservation_laws/quartic_nonconvex_test.jl new file mode 100644 index 00000000..e6c5ba6a --- /dev/null +++ b/test/conservation_laws/quartic_nonconvex_test.jl @@ -0,0 +1,35 @@ +using Test, SummationByPartsOperators +using OrdinaryDiffEq, DiffEqCallbacks + +for T in (Float32, Float64), split_form in (Val{true}(), Val{false}()) + xmin = T(-1) + xmax = T(1) + N = 2^6 + u0func = sinpi + tspan = (zero(T), one(T)) + + # Fourier + let D = fourier_derivative_operator(xmin, xmax, N) + Di = dissipation_operator(TadmorWaagan2012Standard(), D) + semidisc = CubicPeriodicSemidiscretisation(D, Di, split_form) + ode = semidiscretise(u0func, semidisc, tspan) + du = similar(ode.u0) + semidisc(du, ode.u0, nothing, first(tspan)) + + saving = SavingCallback(semidisc, saveat=range(tspan..., length=10)) + sol = solve(ode, SSPRK104(), dt=1/5N, save_everystep=false, callback=saving) + end + + # Periodic FD + for acc_order in 2:2:8 + D = periodic_derivative_operator(1, acc_order, xmin, xmax, N) + Di = dissipation_operator(D) + semidisc = CubicPeriodicSemidiscretisation(D, Di, split_form) + ode = semidiscretise(u0func, semidisc, tspan) + du = similar(ode.u0) + semidisc(du, ode.u0, nothing, first(tspan)) + + saving = SavingCallback(semidisc, saveat=range(tspan..., length=10)) + sol = solve(ode, SSPRK104(), dt=1/5N, save_everystep=false, callback=saving) + end +end