Experimental convergence order of MPRK schemes
In this tutorial, we check that all implemented MPRK schemes can achieve their expected order of convergence. We also address the issue that some methods suffer from order reduction when the solution gets too close to zero.
Conservative production-destruction systems
First, we consider conservative production-destruction systems (PDS). To investigate the convergence order, we define the non-autonomous test problem
\[\begin{aligned} u_1' &= \cos(\pi t)^2 u_2 - \sin(2\pi t)^2 u_1, & u_1(0)&=0.9, \\ u_2' & = \sin(2\pi t)^2 u_1 - \cos(\pi t)^2 u_2, & u_2(0)&=0.1, \end{aligned}\]
for $0≤ t≤ 1$. The PDS is conservative since the sum of the right-hand side terms equals zero. An implementation of this problem is given next.
using PositiveIntegrators# define problemP(u, p, t) = [0.0 cos.(π * t) .^ 2 * u[2]; sin.(2 * π * t) .^ 2 * u[1] 0.0]prob = ConservativePDSProblem(P, [0.9; 0.1], (0.0, 1.0))To use analyticless_test_convergence from DiffEqDevTools.jl, we need to pick a solver to compute the reference solution and specify tolerances. Since the problem is not stiff, we use the high-order explicit solver Vern9() from OrdinaryDiffEqVerner.jl.
using OrdinaryDiffEqVernerusing DiffEqDevTools: analyticless_test_convergence# solver and tolerances to compute reference solutiontest_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14)To keep the code short, we also define an auxiliary function that outputs a convergence table, which lists the errors obtained with the respective time step size $Δ t$ as well as the estimated order of convergence in parentheses.
using Printf: @sprintfusing PrettyTables: pretty_table# auxiliary functionfunction convergence_table(dts, prob, algs, labels, test_setup) # compute errors and estimated convergence orders err_eoc = [] for i in eachindex(algs) sim = analyticless_test_convergence(dts, prob, algs[i], test_setup) err = sim.errors[:l∞] eoc = [NaN; -log2.(err[2:end] ./ err[1:(end - 1)])] push!(err_eoc, tuple.(err, eoc)) end # gather data for table data = hcat(dts, reduce(hcat,err_eoc)) # print table formatter = (v, i, j) -> (j>1) ? (@sprintf "%5.2e (%4.2f) " v[1] v[2]) : (@sprintf "%5.2e " v) pretty_table(data; formatters = [formatter], column_labels = ["Δt"; labels])endSecond-order and third-order MPRK schemes
First, we test several second-order and third-order MPRK schemes.
# choose step sizesdts = 0.5 .^ (5:10)# select 2nd order schemesalgs2a = [MPRK22(0.5); MPRK22(2.0 / 3.0); MPRK22(1.0)]labels2a = ["MPRK22(0.5)"; "MPRK22(2.0/3.0)"; "MPRK22(1.0)"]algs2b = [SSPMPRK22(0.5, 1.0); MPDeC(2)]labels2b = ["SSPMPRK22(0.5, 1.0)"; "MPDeC(2)"]# select 3rd order schemesalgs3a = [MPRK43I(1.0, 0.5); MPRK43I(0.5, 0.75)]labels3a = ["MPRK43I(1.0,0.5)"; "MPRK43I(0.5, 0.75)"]algs3b = [MPRK43II(0.5); MPRK43II(2.0 / 3.0)]labels3b = [ "MPRK43II(0.5)"; "MPRK43II(2.0/3.0)"]algs3c = [SSPMPRK43(); MPDeC(3)]labels3c = ["SSPMPRK43()"; "MPDeC(3)"]convergence_table(dts, prob, algs2a, labels2a, test_setup)convergence_table(dts, prob, algs2b, labels2b, test_setup)convergence_table(dts, prob, algs3a, labels3a, test_setup)convergence_table(dts, prob, algs3b, labels3b, test_setup)convergence_table(dts, prob, algs3c, labels3c, test_setup)┌───────────┬──────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPRK22(0.5) │ MPRK22(2.0/3.0) │ MPRK22(1.0) │
├───────────┼──────────────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 3.97e-04 ( NaN) │ 2.93e-04 ( NaN) │ 6.01e-04 ( NaN) │
│ 1.56e-02 │ 1.01e-04 (1.98) │ 7.69e-05 (1.93) │ 1.54e-04 (1.97) │
│ 7.81e-03 │ 2.55e-05 (1.98) │ 1.97e-05 (1.96) │ 3.90e-05 (1.98) │
│ 3.91e-03 │ 6.41e-06 (1.99) │ 5.00e-06 (1.98) │ 9.82e-06 (1.99) │
│ 1.95e-03 │ 1.61e-06 (2.00) │ 1.26e-06 (1.99) │ 2.46e-06 (1.99) │
│ 9.77e-04 │ 4.02e-07 (2.00) │ 3.16e-07 (2.00) │ 6.17e-07 (2.00) │
└───────────┴──────────────────┴──────────────────┴──────────────────┘
┌───────────┬─────────────────────┬──────────────────┐
│ Δt │ SSPMPRK22(0.5, 1.0) │ MPDeC(2) │
├───────────┼─────────────────────┼──────────────────┤
│ 3.12e-02 │ 5.88e-04 ( NaN) │ 4.57e-04 ( NaN) │
│ 1.56e-02 │ 1.45e-04 (2.02) │ 1.15e-04 (1.99) │
│ 7.81e-03 │ 3.60e-05 (2.01) │ 2.88e-05 (1.99) │
│ 3.91e-03 │ 8.96e-06 (2.01) │ 7.22e-06 (2.00) │
│ 1.95e-03 │ 2.24e-06 (2.00) │ 1.81e-06 (2.00) │
│ 9.77e-04 │ 5.58e-07 (2.00) │ 4.52e-07 (2.00) │
└───────────┴─────────────────────┴──────────────────┘
┌───────────┬──────────────────┬────────────────────┐
│ Δt │ MPRK43I(1.0,0.5) │ MPRK43I(0.5, 0.75) │
├───────────┼──────────────────┼────────────────────┤
│ 3.12e-02 │ 1.46e-05 ( NaN) │ 1.97e-05 ( NaN) │
│ 1.56e-02 │ 1.98e-06 (2.88) │ 2.56e-06 (2.94) │
│ 7.81e-03 │ 2.57e-07 (2.95) │ 3.26e-07 (2.97) │
│ 3.91e-03 │ 3.27e-08 (2.97) │ 4.12e-08 (2.98) │
│ 1.95e-03 │ 4.13e-09 (2.99) │ 5.18e-09 (2.99) │
│ 9.77e-04 │ 5.18e-10 (2.99) │ 6.49e-10 (3.00) │
└───────────┴──────────────────┴────────────────────┘
┌───────────┬──────────────────┬───────────────────┐
│ Δt │ MPRK43II(0.5) │ MPRK43II(2.0/3.0) │
├───────────┼──────────────────┼───────────────────┤
│ 3.12e-02 │ 1.13e-05 ( NaN) │ 1.14e-05 ( NaN) │
│ 1.56e-02 │ 1.42e-06 (2.99) │ 1.43e-06 (2.99) │
│ 7.81e-03 │ 1.79e-07 (2.99) │ 1.80e-07 (2.99) │
│ 3.91e-03 │ 2.24e-08 (3.00) │ 2.26e-08 (3.00) │
│ 1.95e-03 │ 2.81e-09 (3.00) │ 2.83e-09 (3.00) │
│ 9.77e-04 │ 3.51e-10 (3.00) │ 3.54e-10 (3.00) │
└───────────┴──────────────────┴───────────────────┘
┌───────────┬──────────────────┬──────────────────┐
│ Δt │ SSPMPRK43() │ MPDeC(3) │
├───────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 2.54e-05 ( NaN) │ 1.87e-06 ( NaN) │
│ 1.56e-02 │ 3.60e-06 (2.82) │ 2.69e-07 (2.80) │
│ 7.81e-03 │ 4.79e-07 (2.91) │ 3.60e-08 (2.90) │
│ 3.91e-03 │ 6.18e-08 (2.95) │ 4.65e-09 (2.95) │
│ 1.95e-03 │ 7.85e-09 (2.98) │ 5.92e-10 (2.98) │
│ 9.77e-04 │ 9.89e-10 (2.99) │ 7.46e-11 (2.99) │
└───────────┴──────────────────┴──────────────────┘The tables show that all schemes converge as expected.
Higher-order MPRK schemes
To actually see the order of higher-order methods we need to use more accurate floating-point numbers. Here, we use DoubleFloats.
using DoubleFloats# define problem using Double64P(u, p, t) = [0 cospi(t)^2 * u[2]; sinpi(2 * t)^2 * u[1] 0]u0 = [Double64(9) / 10; Double64(1) / 10]tspan = (Double64(0), Double64(1))prob_d64 = ConservativePDSProblem(P, u0, tspan)# choose step sizesdts_d64 = Double64(1/2) .^ (5:9)# select higher-order schemesalgs4a = [MPDeC(4); MPDeC(5); MPDeC(6)]labels4a = ["MPDeC(4)"; "MPDeC(5)"; "MPDeC(6)"]algs4b = [MPDeC(7); MPDeC(8)]labels4b = ["MPDeC(7)"; "MPDeC(8)"]algs4c = [MPDeC(9); MPDeC(10)]labels4c = ["MPDeC(9)"; "MPDeC(10)"]# solver and tolerances to compute reference solutiontest_setup_d64 = Dict(:alg => Vern9(), :reltol => 1e-30, :abstol => 1e-30)# compute errors and experimental order of convergenceconvergence_table(dts_d64, prob_d64, algs4a, labels4a, test_setup_d64)convergence_table(dts_d64, prob_d64, algs4b, labels4b, test_setup_d64)convergence_table(dts_d64, prob_d64, algs4c, labels4c, test_setup_d64)┌───────────┬──────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(4) │ MPDeC(5) │ MPDeC(6) │
├───────────┼──────────────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 4.19e-07 ( NaN) │ 1.52e-09 ( NaN) │ 1.71e-10 ( NaN) │
│ 1.56e-02 │ 2.62e-08 (4.00) │ 5.98e-11 (4.67) │ 2.70e-12 (5.99) │
│ 7.81e-03 │ 1.64e-09 (4.00) │ 2.09e-12 (4.84) │ 4.20e-14 (6.01) │
│ 3.91e-03 │ 1.02e-10 (4.00) │ 6.88e-14 (4.92) │ 6.56e-16 (6.00) │
│ 1.95e-03 │ 6.40e-12 (4.00) │ 2.21e-15 (4.96) │ 1.03e-17 (6.00) │
└───────────┴──────────────────┴──────────────────┴──────────────────┘
┌───────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(7) │ MPDeC(8) │
├───────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 1.60e-12 ( NaN) │ 5.20e-14 ( NaN) │
│ 1.56e-02 │ 1.72e-14 (6.53) │ 2.07e-16 (7.97) │
│ 7.81e-03 │ 1.57e-16 (6.78) │ 9.49e-19 (7.77) │
│ 3.91e-03 │ 1.33e-18 (6.89) │ 4.20e-21 (7.82) │
│ 1.95e-03 │ 1.08e-20 (6.95) │ 1.74e-23 (7.91) │
└───────────┴──────────────────┴──────────────────┘
┌───────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(9) │ MPDeC(10) │
├───────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 1.95e-15 ( NaN) │ 4.13e-17 ( NaN) │
│ 1.56e-02 │ 5.80e-18 (8.39) │ 7.71e-20 (9.07) │
│ 7.81e-03 │ 1.38e-20 (8.71) │ 9.97e-23 (9.59) │
│ 3.91e-03 │ 2.98e-23 (8.86) │ 1.11e-25 (9.80) │
│ 1.95e-03 │ 6.11e-26 (8.93) │ 1.17e-28 (9.90) │
└───────────┴──────────────────┴──────────────────┘Again, all schemes show the expected converge order.
Non-conservative PDS
Next, we consider the non-autonomous but also non-conservative test problem
\[\begin{aligned} u_1' &= \cos(\pi t)^2 u_2 - \sin(2\pi t)^2 u_1 - \cos(2\pi t)^2 u_1, & u_1(0)&=0.9,\\ u_2' & = \sin(2\pi t)^2 u_1 - \cos(\pi t)^2 u_2 - \sin(\pi t)^2 u_2, & u_2(0)&=0.1, \end{aligned}\]
for $0≤ t≤ 1$. Since the sum of the right-hand side terms does not vanish, the PDS is indeed non-conservative. Hence, we need to use PDSProblem for its implementation.
# PDSP(u, p, t) = [0.0 cospi(t)^2 * u[2]; sinpi(2 * t)^2 * u[1] 0.0]D(u, p, t) = [cospi(2 * t)^2 * u[1]; sinpi(t)^2 * u[2]]prob = PDSProblem(P, D, [0.9; 0.1], (0.0, 1.0))The following tables demonstrate that the chosen MPRK schemes converge as expected also for this non-conservative PDS.
Second-order and third-order MPRK schemes
convergence_table(dts, prob, algs2a, labels2a, test_setup)convergence_table(dts, prob, algs2b, labels2b, test_setup)convergence_table(dts, prob, algs3a, labels3a, test_setup)convergence_table(dts, prob, algs3b, labels3b, test_setup)convergence_table(dts, prob, algs3c, labels3c, test_setup)┌───────────┬──────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPRK22(0.5) │ MPRK22(2.0/3.0) │ MPRK22(1.0) │
├───────────┼──────────────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 2.92e-04 ( NaN) │ 1.79e-04 ( NaN) │ 5.56e-04 ( NaN) │
│ 1.56e-02 │ 7.51e-05 (1.96) │ 4.75e-05 (1.92) │ 1.42e-04 (1.97) │
│ 7.81e-03 │ 1.89e-05 (1.99) │ 1.24e-05 (1.94) │ 3.59e-05 (1.98) │
│ 3.91e-03 │ 4.76e-06 (1.99) │ 3.15e-06 (1.97) │ 9.02e-06 (1.99) │
│ 1.95e-03 │ 1.19e-06 (2.00) │ 7.97e-07 (1.99) │ 2.26e-06 (2.00) │
│ 9.77e-04 │ 2.99e-07 (2.00) │ 2.00e-07 (1.99) │ 5.66e-07 (2.00) │
└───────────┴──────────────────┴──────────────────┴──────────────────┘
┌───────────┬─────────────────────┬──────────────────┐
│ Δt │ SSPMPRK22(0.5, 1.0) │ MPDeC(2) │
├───────────┼─────────────────────┼──────────────────┤
│ 3.12e-02 │ 4.94e-04 ( NaN) │ 4.62e-04 ( NaN) │
│ 1.56e-02 │ 1.24e-04 (1.99) │ 1.17e-04 (1.98) │
│ 7.81e-03 │ 3.12e-05 (2.00) │ 2.94e-05 (1.99) │
│ 3.91e-03 │ 7.79e-06 (2.00) │ 7.38e-06 (2.00) │
│ 1.95e-03 │ 1.95e-06 (2.00) │ 1.85e-06 (2.00) │
│ 9.77e-04 │ 4.87e-07 (2.00) │ 4.63e-07 (2.00) │
└───────────┴─────────────────────┴──────────────────┘
┌───────────┬──────────────────┬────────────────────┐
│ Δt │ MPRK43I(1.0,0.5) │ MPRK43I(0.5, 0.75) │
├───────────┼──────────────────┼────────────────────┤
│ 3.12e-02 │ 1.29e-05 ( NaN) │ 1.12e-05 ( NaN) │
│ 1.56e-02 │ 1.73e-06 (2.90) │ 1.46e-06 (2.95) │
│ 7.81e-03 │ 2.24e-07 (2.95) │ 1.86e-07 (2.97) │
│ 3.91e-03 │ 2.86e-08 (2.97) │ 2.34e-08 (2.99) │
│ 1.95e-03 │ 3.61e-09 (2.99) │ 2.95e-09 (2.99) │
│ 9.77e-04 │ 4.53e-10 (2.99) │ 3.69e-10 (3.00) │
└───────────┴──────────────────┴────────────────────┘
┌───────────┬──────────────────┬───────────────────┐
│ Δt │ MPRK43II(0.5) │ MPRK43II(2.0/3.0) │
├───────────┼──────────────────┼───────────────────┤
│ 3.12e-02 │ 1.06e-05 ( NaN) │ 1.08e-05 ( NaN) │
│ 1.56e-02 │ 1.40e-06 (2.93) │ 1.34e-06 (3.01) │
│ 7.81e-03 │ 1.79e-07 (2.96) │ 1.72e-07 (2.96) │
│ 3.91e-03 │ 2.27e-08 (2.98) │ 2.18e-08 (2.98) │
│ 1.95e-03 │ 2.85e-09 (2.99) │ 2.74e-09 (2.99) │
│ 9.77e-04 │ 3.58e-10 (3.00) │ 3.43e-10 (3.00) │
└───────────┴──────────────────┴───────────────────┘
┌───────────┬──────────────────┬──────────────────┐
│ Δt │ SSPMPRK43() │ MPDeC(3) │
├───────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 2.32e-05 ( NaN) │ 3.36e-06 ( NaN) │
│ 1.56e-02 │ 3.06e-06 (2.93) │ 4.48e-07 (2.90) │
│ 7.81e-03 │ 3.91e-07 (2.97) │ 5.80e-08 (2.95) │
│ 3.91e-03 │ 4.95e-08 (2.98) │ 7.38e-09 (2.97) │
│ 1.95e-03 │ 6.22e-09 (2.99) │ 9.31e-10 (2.99) │
│ 9.77e-04 │ 7.80e-10 (3.00) │ 1.17e-10 (2.99) │
└───────────┴──────────────────┴──────────────────┘Higher-order MPRK schemes
# problem implementation using DoubleFloatsP(u, p, t) = [0 cospi(t)^2 * u[2]; sinpi(2 * t)^2 * u[1] 0]D(u, p, t) = [cospi(2 * t)^2 * u[1]; sinpi(t)^2 * u[2]]prob_d64 = PDSProblem(P, D, [Double64(9)/10; Double64(1)/10], (Double64(0), Double64(1)))convergence_table(dts_d64, prob_d64, algs4a, labels4a, test_setup_d64)convergence_table(dts_d64, prob_d64, algs4b, labels4b, test_setup_d64)convergence_table(dts_d64, prob_d64, algs4c, labels4c, test_setup_d64)┌───────────┬──────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(4) │ MPDeC(5) │ MPDeC(6) │
├───────────┼──────────────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 2.97e-07 ( NaN) │ 3.40e-09 ( NaN) │ 1.49e-10 ( NaN) │
│ 1.56e-02 │ 1.86e-08 (4.00) │ 1.28e-10 (4.73) │ 2.82e-12 (5.73) │
│ 7.81e-03 │ 1.16e-09 (4.00) │ 4.40e-12 (4.86) │ 4.87e-14 (5.85) │
│ 3.91e-03 │ 7.29e-11 (4.00) │ 1.44e-13 (4.93) │ 8.02e-16 (5.92) │
│ 1.95e-03 │ 4.56e-12 (4.00) │ 4.62e-15 (4.96) │ 1.29e-17 (5.96) │
└───────────┴──────────────────┴──────────────────┴──────────────────┘
┌───────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(7) │ MPDeC(8) │
├───────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 4.79e-12 ( NaN) │ 1.72e-13 ( NaN) │
│ 1.56e-02 │ 4.92e-14 (6.60) │ 9.37e-16 (7.52) │
│ 7.81e-03 │ 4.42e-16 (6.80) │ 4.33e-18 (7.76) │
│ 3.91e-03 │ 3.71e-18 (6.90) │ 1.84e-20 (7.88) │
│ 1.95e-03 │ 3.00e-20 (6.95) │ 7.50e-23 (7.94) │
└───────────┴──────────────────┴──────────────────┘
┌───────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(9) │ MPDeC(10) │
├───────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 7.72e-15 ( NaN) │ 3.04e-16 ( NaN) │
│ 1.56e-02 │ 2.16e-17 (8.48) │ 4.44e-19 (9.42) │
│ 7.81e-03 │ 5.05e-20 (8.74) │ 5.32e-22 (9.71) │
│ 3.91e-03 │ 1.08e-22 (8.87) │ 5.76e-25 (9.85) │
│ 1.95e-03 │ 2.21e-25 (8.93) │ 5.92e-28 (9.92) │
└───────────┴──────────────────┴──────────────────┘Order reduction
It was shown in Torlo, Öffner, Ranocha: Issues with positivity-preserving Patankar-type schemes with positivity-preserving Patankar-type schemes that some MPRK methods suffer from order reduction if the solution of the PDS is too close to zero. We demonstrate this by solving a problem where one component of the initial condition is equal to zero.
The problem is
\[\begin{aligned} u_1' &= -u_1, & u_1(0)&=1, \\ u_2' & = u_1, & u_2(0)&=0, \end{aligned}\]
for $0≤ t≤ 1$ and can be implemented as follows.
# PDSP(u, p, t) = [0 0; u[1] 0]prob = ConservativePDSProblem(P, [1.0; 0.0], (0.0, 1.0))Next, we generate the corresponding convergence tables as in the sections above.
test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14)dts = 0.5 .^ (6:12)convergence_table(dts, prob, algs2a, labels2a, test_setup)convergence_table(dts, prob, algs2b, labels2b, test_setup)convergence_table(dts, prob, algs3a, labels3a, test_setup)convergence_table(dts, prob, algs3b, labels3b, test_setup)convergence_table(dts, prob, algs3c, labels3c, test_setup)convergence_table(dts, prob, algs4a, labels4a, test_setup)convergence_table(dts, prob, algs4b, labels4b, test_setup)convergence_table(dts, prob, algs4c, labels4c, test_setup)┌───────────┬──────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPRK22(0.5) │ MPRK22(2.0/3.0) │ MPRK22(1.0) │
├───────────┼──────────────────┼──────────────────┼──────────────────┤
│ 1.56e-02 │ 1.48e-05 ( NaN) │ 1.48e-05 ( NaN) │ 1.48e-05 ( NaN) │
│ 7.81e-03 │ 3.72e-06 (1.99) │ 3.72e-06 (1.99) │ 3.72e-06 (1.99) │
│ 3.91e-03 │ 9.33e-07 (2.00) │ 9.33e-07 (2.00) │ 9.33e-07 (2.00) │
│ 1.95e-03 │ 2.34e-07 (2.00) │ 2.34e-07 (2.00) │ 2.34e-07 (2.00) │
│ 9.77e-04 │ 5.84e-08 (2.00) │ 5.84e-08 (2.00) │ 5.84e-08 (2.00) │
│ 4.88e-04 │ 1.46e-08 (2.00) │ 1.46e-08 (2.00) │ 1.46e-08 (2.00) │
│ 2.44e-04 │ 3.65e-09 (2.00) │ 3.65e-09 (2.00) │ 3.65e-09 (2.00) │
└───────────┴──────────────────┴──────────────────┴──────────────────┘
┌───────────┬─────────────────────┬──────────────────┐
│ Δt │ SSPMPRK22(0.5, 1.0) │ MPDeC(2) │
├───────────┼─────────────────────┼──────────────────┤
│ 1.56e-02 │ 7.14e-06 ( NaN) │ 1.48e-05 ( NaN) │
│ 7.81e-03 │ 1.83e-06 (1.97) │ 3.72e-06 (1.99) │
│ 3.91e-03 │ 4.62e-07 (1.98) │ 9.33e-07 (2.00) │
│ 1.95e-03 │ 1.16e-07 (1.99) │ 2.34e-07 (2.00) │
│ 9.77e-04 │ 2.92e-08 (2.00) │ 5.84e-08 (2.00) │
│ 4.88e-04 │ 7.30e-09 (2.00) │ 1.46e-08 (2.00) │
│ 2.44e-04 │ 1.83e-09 (2.00) │ 3.65e-09 (2.00) │
└───────────┴─────────────────────┴──────────────────┘
┌───────────┬──────────────────┬────────────────────┐
│ Δt │ MPRK43I(1.0,0.5) │ MPRK43I(0.5, 0.75) │
├───────────┼──────────────────┼────────────────────┤
│ 1.56e-02 │ 2.85e-07 ( NaN) │ 1.43e-07 ( NaN) │
│ 7.81e-03 │ 3.61e-08 (2.98) │ 1.81e-08 (2.98) │
│ 3.91e-03 │ 4.54e-09 (2.99) │ 2.27e-09 (2.99) │
│ 1.95e-03 │ 5.69e-10 (3.00) │ 2.85e-10 (3.00) │
│ 9.77e-04 │ 7.13e-11 (3.00) │ 3.57e-11 (3.00) │
│ 4.88e-04 │ 8.96e-12 (2.99) │ 4.51e-12 (2.99) │
│ 2.44e-04 │ 1.15e-12 (2.96) │ 6.15e-13 (2.87) │
└───────────┴──────────────────┴────────────────────┘
┌───────────┬──────────────────┬───────────────────┐
│ Δt │ MPRK43II(0.5) │ MPRK43II(2.0/3.0) │
├───────────┼──────────────────┼───────────────────┤
│ 1.56e-02 │ 1.71e-07 ( NaN) │ 1.72e-07 ( NaN) │
│ 7.81e-03 │ 2.17e-08 (2.98) │ 2.17e-08 (2.98) │
│ 3.91e-03 │ 2.72e-09 (2.99) │ 2.73e-09 (2.99) │
│ 1.95e-03 │ 3.42e-10 (3.00) │ 3.42e-10 (3.00) │
│ 9.77e-04 │ 4.28e-11 (3.00) │ 4.28e-11 (3.00) │
│ 4.88e-04 │ 5.39e-12 (2.99) │ 5.39e-12 (2.99) │
│ 2.44e-04 │ 7.31e-13 (2.88) │ 7.31e-13 (2.88) │
└───────────┴──────────────────┴───────────────────┘
┌───────────┬──────────────────┬──────────────────┐
│ Δt │ SSPMPRK43() │ MPDeC(3) │
├───────────┼──────────────────┼──────────────────┤
│ 1.56e-02 │ 2.86e-06 ( NaN) │ 8.08e-05 ( NaN) │
│ 7.81e-03 │ 3.60e-07 (2.99) │ 2.03e-05 (1.99) │
│ 3.91e-03 │ 4.52e-08 (2.99) │ 5.08e-06 (2.00) │
│ 1.95e-03 │ 5.67e-09 (3.00) │ 1.27e-06 (2.00) │
│ 9.77e-04 │ 7.09e-10 (3.00) │ 3.18e-07 (2.00) │
│ 4.88e-04 │ 8.88e-11 (3.00) │ 7.95e-08 (2.00) │
│ 2.44e-04 │ 1.13e-11 (2.98) │ 1.99e-08 (2.00) │
└───────────┴──────────────────┴──────────────────┘
┌───────────┬──────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(4) │ MPDeC(5) │ MPDeC(6) │
├───────────┼──────────────────┼──────────────────┼──────────────────┤
│ 1.56e-02 │ 8.09e-05 ( NaN) │ 1.01e-04 ( NaN) │ 1.01e-04 ( NaN) │
│ 7.81e-03 │ 2.03e-05 (2.00) │ 2.54e-05 (2.00) │ 2.54e-05 (2.00) │
│ 3.91e-03 │ 5.08e-06 (2.00) │ 6.35e-06 (2.00) │ 6.35e-06 (2.00) │
│ 1.95e-03 │ 1.27e-06 (2.00) │ 1.59e-06 (2.00) │ 1.59e-06 (2.00) │
│ 9.77e-04 │ 3.18e-07 (2.00) │ 3.97e-07 (2.00) │ 3.97e-07 (2.00) │
│ 4.88e-04 │ 7.95e-08 (2.00) │ 9.93e-08 (2.00) │ 9.93e-08 (2.00) │
│ 2.44e-04 │ 1.99e-08 (2.00) │ 2.48e-08 (2.00) │ 2.48e-08 (2.00) │
└───────────┴──────────────────┴──────────────────┴──────────────────┘
┌───────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(7) │ MPDeC(8) │
├───────────┼──────────────────┼──────────────────┤
│ 1.56e-02 │ 1.09e-04 ( NaN) │ 1.09e-04 ( NaN) │
│ 7.81e-03 │ 2.74e-05 (2.00) │ 2.74e-05 (2.00) │
│ 3.91e-03 │ 6.86e-06 (2.00) │ 6.86e-06 (2.00) │
│ 1.95e-03 │ 1.72e-06 (2.00) │ 1.72e-06 (2.00) │
│ 9.77e-04 │ 4.29e-07 (2.00) │ 4.29e-07 (2.00) │
│ 4.88e-04 │ 1.07e-07 (2.00) │ 1.07e-07 (2.00) │
│ 2.44e-04 │ 2.68e-08 (2.00) │ 2.68e-08 (2.00) │
└───────────┴──────────────────┴──────────────────┘
┌───────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(9) │ MPDeC(10) │
├───────────┼──────────────────┼──────────────────┤
│ 1.56e-02 │ 1.13e-04 ( NaN) │ 1.13e-04 ( NaN) │
│ 7.81e-03 │ 2.84e-05 (2.00) │ 2.84e-05 (2.00) │
│ 3.91e-03 │ 7.11e-06 (2.00) │ 7.11e-06 (2.00) │
│ 1.95e-03 │ 1.78e-06 (2.00) │ 1.78e-06 (2.00) │
│ 9.77e-04 │ 4.45e-07 (2.00) │ 4.45e-07 (2.00) │
│ 4.88e-04 │ 1.11e-07 (2.00) │ 1.11e-07 (2.00) │
│ 2.44e-04 │ 2.78e-08 (2.00) │ 2.78e-08 (2.00) │
└───────────┴──────────────────┴──────────────────┘We find that all methods apart from MPDeC($K$) methods with $K ≥ 3$ converge as expected. The MPDeC($K$) methods with $K ≥ 3$ suffer from order reduction and show convergence order 2 instead of $K$.