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 problem
P(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 OrdinaryDiffEqVerner
using DiffEqDevTools: analyticless_test_convergence
# solver and tolerances to compute reference solution
test_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: @sprintf
using PrettyTables: pretty_table
# auxiliary function
function 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, header = ["Δt"; labels])
end
Second-order and third-order MPRK schemes
First, we test several second-order and third-order MPRK schemes.
# choose step sizes
dts = 0.5 .^ (5:10)
# select 2nd order schemes
algs2 = [MPRK22(0.5); MPRK22(2.0 / 3.0); MPRK22(1.0); SSPMPRK22(0.5, 1.0); MPDeC(2)]
labels2 = ["MPRK22(0.5)"; "MPRK22(2.0/3.0)"; "MPRK22(1.0)"; "SSPMPRK22(0.5, 1.0)"; "MPDeC(2)"]
# select 3rd order schemes
algs3 = [MPRK43I(1.0, 0.5); MPRK43I(0.5, 0.75); MPRK43II(0.5); MPRK43II(2.0 / 3.0);
SSPMPRK43(); MPDeC(3)]
labels3 = ["MPRK43I(1.0,0.5)"; "MPRK43I(0.5, 0.75)"; "MPRK43II(0.5)"; "MPRK43II(2.0/3.0)";
"SSPMPRK43()"; "MPDeC(3)"]
convergence_table(dts, prob, algs2, labels2, test_setup)
convergence_table(dts, prob, algs3, labels3, test_setup)
┌───────────┬──────────────────┬──────────────────┬──────────────────┬─────────────────────┬──────────────────┐
│ Δt │ MPRK22(0.5) │ MPRK22(2.0/3.0) │ MPRK22(1.0) │ SSPMPRK22(0.5, 1.0) │ MPDeC(2) │
├───────────┼──────────────────┼──────────────────┼──────────────────┼─────────────────────┼──────────────────┤
│ 3.12e-02 │ 3.97e-04 ( NaN) │ 2.93e-04 ( NaN) │ 6.01e-04 ( NaN) │ 5.88e-04 ( NaN) │ 4.57e-04 ( NaN) │
│ 1.56e-02 │ 1.01e-04 (1.98) │ 7.69e-05 (1.93) │ 1.54e-04 (1.97) │ 1.45e-04 (2.02) │ 1.15e-04 (1.99) │
│ 7.81e-03 │ 2.55e-05 (1.98) │ 1.97e-05 (1.96) │ 3.90e-05 (1.98) │ 3.60e-05 (2.01) │ 2.88e-05 (1.99) │
│ 3.91e-03 │ 6.41e-06 (1.99) │ 5.00e-06 (1.98) │ 9.82e-06 (1.99) │ 8.96e-06 (2.01) │ 7.22e-06 (2.00) │
│ 1.95e-03 │ 1.61e-06 (2.00) │ 1.26e-06 (1.99) │ 2.46e-06 (1.99) │ 2.24e-06 (2.00) │ 1.81e-06 (2.00) │
│ 9.77e-04 │ 4.02e-07 (2.00) │ 3.16e-07 (2.00) │ 6.17e-07 (2.00) │ 5.58e-07 (2.00) │ 4.52e-07 (2.00) │
└───────────┴──────────────────┴──────────────────┴──────────────────┴─────────────────────┴──────────────────┘
┌───────────┬──────────────────┬────────────────────┬──────────────────┬───────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPRK43I(1.0,0.5) │ MPRK43I(0.5, 0.75) │ MPRK43II(0.5) │ MPRK43II(2.0/3.0) │ SSPMPRK43() │ MPDeC(3) │
├───────────┼──────────────────┼────────────────────┼──────────────────┼───────────────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 1.46e-05 ( NaN) │ 1.97e-05 ( NaN) │ 1.13e-05 ( NaN) │ 1.14e-05 ( NaN) │ 2.54e-05 ( NaN) │ 1.87e-06 ( NaN) │
│ 1.56e-02 │ 1.98e-06 (2.88) │ 2.56e-06 (2.94) │ 1.42e-06 (2.99) │ 1.43e-06 (2.99) │ 3.60e-06 (2.82) │ 2.69e-07 (2.80) │
│ 7.81e-03 │ 2.57e-07 (2.95) │ 3.26e-07 (2.97) │ 1.79e-07 (2.99) │ 1.80e-07 (2.99) │ 4.79e-07 (2.91) │ 3.60e-08 (2.90) │
│ 3.91e-03 │ 3.27e-08 (2.97) │ 4.12e-08 (2.98) │ 2.24e-08 (3.00) │ 2.26e-08 (3.00) │ 6.18e-08 (2.95) │ 4.65e-09 (2.95) │
│ 1.95e-03 │ 4.13e-09 (2.99) │ 5.18e-09 (2.99) │ 2.81e-09 (3.00) │ 2.83e-09 (3.00) │ 7.85e-09 (2.98) │ 5.92e-10 (2.98) │
│ 9.77e-04 │ 5.18e-10 (2.99) │ 6.49e-10 (3.00) │ 3.51e-10 (3.00) │ 3.54e-10 (3.00) │ 9.89e-10 (2.99) │ 7.46e-11 (2.99) │
└───────────┴──────────────────┴────────────────────┴──────────────────┴───────────────────┴──────────────────┴──────────────────┘
The table shows 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 Double64
P(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 sizes
dts_d64 = Double64(1/2) .^ (5:9)
# select higher-order schemes
algs4 = [MPDeC(4); MPDeC(5); MPDeC(6); MPDeC(7); MPDeC(8); MPDeC(9); MPDeC(10)]
labels4 = ["MPDeC(4)"; "MPDeC(5)"; "MPDeC(6)"; "MPDeC(7)"; "MPDeC(8)"; "MPDeC(9)"; "MPDeC(10)"]
# solver and tolerances to compute reference solution
test_setup_d64 = Dict(:alg => Vern9(), :reltol => 1e-30, :abstol => 1e-30)
# compute errors and experimental order of convergence
convergence_table(dts_d64, prob_d64, algs4, labels4, test_setup_d64)
┌───────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(4) │ MPDeC(5) │ MPDeC(6) │ MPDeC(7) │ MPDeC(8) │ MPDeC(9) │ MPDeC(10) │
├───────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 4.19e-07 ( NaN) │ 1.52e-09 ( NaN) │ 1.71e-10 ( NaN) │ 1.60e-12 ( NaN) │ 5.20e-14 ( NaN) │ 1.95e-15 ( NaN) │ 4.13e-17 ( NaN) │
│ 1.56e-02 │ 2.62e-08 (4.00) │ 5.98e-11 (4.67) │ 2.70e-12 (5.99) │ 1.72e-14 (6.53) │ 2.07e-16 (7.97) │ 5.80e-18 (8.39) │ 7.71e-20 (9.07) │
│ 7.81e-03 │ 1.64e-09 (4.00) │ 2.09e-12 (4.84) │ 4.20e-14 (6.01) │ 1.57e-16 (6.78) │ 9.49e-19 (7.77) │ 1.38e-20 (8.71) │ 9.97e-23 (9.59) │
│ 3.91e-03 │ 1.02e-10 (4.00) │ 6.88e-14 (4.92) │ 6.56e-16 (6.00) │ 1.33e-18 (6.89) │ 4.20e-21 (7.82) │ 2.98e-23 (8.86) │ 1.11e-25 (9.80) │
│ 1.95e-03 │ 6.40e-12 (4.00) │ 2.21e-15 (4.96) │ 1.03e-17 (6.00) │ 1.08e-20 (6.95) │ 1.74e-23 (7.91) │ 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.
# PDS
P(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, algs2, labels2, test_setup)
convergence_table(dts, prob, algs3, labels3, test_setup)
┌───────────┬──────────────────┬──────────────────┬──────────────────┬─────────────────────┬──────────────────┐
│ Δt │ MPRK22(0.5) │ MPRK22(2.0/3.0) │ MPRK22(1.0) │ SSPMPRK22(0.5, 1.0) │ MPDeC(2) │
├───────────┼──────────────────┼──────────────────┼──────────────────┼─────────────────────┼──────────────────┤
│ 3.12e-02 │ 2.92e-04 ( NaN) │ 1.79e-04 ( NaN) │ 5.56e-04 ( NaN) │ 4.94e-04 ( NaN) │ 4.62e-04 ( NaN) │
│ 1.56e-02 │ 7.51e-05 (1.96) │ 4.75e-05 (1.92) │ 1.42e-04 (1.97) │ 1.24e-04 (1.99) │ 1.17e-04 (1.98) │
│ 7.81e-03 │ 1.89e-05 (1.99) │ 1.24e-05 (1.94) │ 3.59e-05 (1.98) │ 3.12e-05 (2.00) │ 2.94e-05 (1.99) │
│ 3.91e-03 │ 4.76e-06 (1.99) │ 3.15e-06 (1.97) │ 9.02e-06 (1.99) │ 7.79e-06 (2.00) │ 7.38e-06 (2.00) │
│ 1.95e-03 │ 1.19e-06 (2.00) │ 7.97e-07 (1.99) │ 2.26e-06 (2.00) │ 1.95e-06 (2.00) │ 1.85e-06 (2.00) │
│ 9.77e-04 │ 2.99e-07 (2.00) │ 2.00e-07 (1.99) │ 5.66e-07 (2.00) │ 4.87e-07 (2.00) │ 4.63e-07 (2.00) │
└───────────┴──────────────────┴──────────────────┴──────────────────┴─────────────────────┴──────────────────┘
┌───────────┬──────────────────┬────────────────────┬──────────────────┬───────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPRK43I(1.0,0.5) │ MPRK43I(0.5, 0.75) │ MPRK43II(0.5) │ MPRK43II(2.0/3.0) │ SSPMPRK43() │ MPDeC(3) │
├───────────┼──────────────────┼────────────────────┼──────────────────┼───────────────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 1.29e-05 ( NaN) │ 1.12e-05 ( NaN) │ 1.06e-05 ( NaN) │ 1.08e-05 ( NaN) │ 2.32e-05 ( NaN) │ 3.36e-06 ( NaN) │
│ 1.56e-02 │ 1.73e-06 (2.90) │ 1.46e-06 (2.95) │ 1.40e-06 (2.93) │ 1.34e-06 (3.01) │ 3.06e-06 (2.93) │ 4.48e-07 (2.90) │
│ 7.81e-03 │ 2.24e-07 (2.95) │ 1.86e-07 (2.97) │ 1.79e-07 (2.96) │ 1.72e-07 (2.96) │ 3.91e-07 (2.97) │ 5.80e-08 (2.95) │
│ 3.91e-03 │ 2.86e-08 (2.97) │ 2.34e-08 (2.99) │ 2.27e-08 (2.98) │ 2.18e-08 (2.98) │ 4.95e-08 (2.98) │ 7.38e-09 (2.97) │
│ 1.95e-03 │ 3.61e-09 (2.99) │ 2.95e-09 (2.99) │ 2.85e-09 (2.99) │ 2.74e-09 (2.99) │ 6.22e-09 (2.99) │ 9.31e-10 (2.99) │
│ 9.77e-04 │ 4.54e-10 (2.99) │ 3.69e-10 (3.00) │ 3.58e-10 (3.00) │ 3.43e-10 (3.00) │ 7.80e-10 (3.00) │ 1.17e-10 (2.99) │
└───────────┴──────────────────┴────────────────────┴──────────────────┴───────────────────┴──────────────────┴──────────────────┘
Higher-order MPRK schemes
# problem implementation using DoubleFloats
P(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, algs4, labels4, test_setup_d64)
┌───────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(4) │ MPDeC(5) │ MPDeC(6) │ MPDeC(7) │ MPDeC(8) │ MPDeC(9) │ MPDeC(10) │
├───────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┤
│ 3.12e-02 │ 2.97e-07 ( NaN) │ 3.40e-09 ( NaN) │ 1.49e-10 ( NaN) │ 4.79e-12 ( NaN) │ 1.72e-13 ( NaN) │ 7.72e-15 ( NaN) │ 3.04e-16 ( NaN) │
│ 1.56e-02 │ 1.86e-08 (4.00) │ 1.28e-10 (4.73) │ 2.82e-12 (5.73) │ 4.92e-14 (6.60) │ 9.37e-16 (7.52) │ 2.16e-17 (8.48) │ 4.44e-19 (9.42) │
│ 7.81e-03 │ 1.16e-09 (4.00) │ 4.40e-12 (4.86) │ 4.87e-14 (5.85) │ 4.42e-16 (6.80) │ 4.33e-18 (7.76) │ 5.05e-20 (8.74) │ 5.32e-22 (9.71) │
│ 3.91e-03 │ 7.29e-11 (4.00) │ 1.44e-13 (4.93) │ 8.02e-16 (5.92) │ 3.71e-18 (6.90) │ 1.84e-20 (7.88) │ 1.08e-22 (8.87) │ 5.76e-25 (9.85) │
│ 1.95e-03 │ 4.56e-12 (4.00) │ 4.62e-15 (4.96) │ 1.29e-17 (5.96) │ 3.00e-20 (6.95) │ 7.50e-23 (7.94) │ 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.
# PDS
P(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, algs2, labels2, test_setup)
convergence_table(dts, prob, algs3, labels3, test_setup)
convergence_table(dts, prob, algs4, labels4, test_setup)
┌───────────┬──────────────────┬──────────────────┬──────────────────┬─────────────────────┬──────────────────┐
│ Δt │ MPRK22(0.5) │ MPRK22(2.0/3.0) │ MPRK22(1.0) │ SSPMPRK22(0.5, 1.0) │ MPDeC(2) │
├───────────┼──────────────────┼──────────────────┼──────────────────┼─────────────────────┼──────────────────┤
│ 1.56e-02 │ 1.48e-05 ( NaN) │ 1.48e-05 ( NaN) │ 1.48e-05 ( NaN) │ 7.14e-06 ( NaN) │ 1.48e-05 ( NaN) │
│ 7.81e-03 │ 3.72e-06 (1.99) │ 3.72e-06 (1.99) │ 3.72e-06 (1.99) │ 1.83e-06 (1.97) │ 3.72e-06 (1.99) │
│ 3.91e-03 │ 9.33e-07 (2.00) │ 9.33e-07 (2.00) │ 9.33e-07 (2.00) │ 4.62e-07 (1.98) │ 9.33e-07 (2.00) │
│ 1.95e-03 │ 2.34e-07 (2.00) │ 2.34e-07 (2.00) │ 2.34e-07 (2.00) │ 1.16e-07 (1.99) │ 2.34e-07 (2.00) │
│ 9.77e-04 │ 5.84e-08 (2.00) │ 5.84e-08 (2.00) │ 5.84e-08 (2.00) │ 2.92e-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) │ 7.30e-09 (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) │ 1.83e-09 (2.00) │ 3.65e-09 (2.00) │
└───────────┴──────────────────┴──────────────────┴──────────────────┴─────────────────────┴──────────────────┘
┌───────────┬──────────────────┬────────────────────┬──────────────────┬───────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPRK43I(1.0,0.5) │ MPRK43I(0.5, 0.75) │ MPRK43II(0.5) │ MPRK43II(2.0/3.0) │ SSPMPRK43() │ MPDeC(3) │
├───────────┼──────────────────┼────────────────────┼──────────────────┼───────────────────┼──────────────────┼──────────────────┤
│ 1.56e-02 │ 2.85e-07 ( NaN) │ 1.43e-07 ( NaN) │ 1.71e-07 ( NaN) │ 1.72e-07 ( NaN) │ 2.86e-06 ( NaN) │ 8.08e-05 ( NaN) │
│ 7.81e-03 │ 3.61e-08 (2.98) │ 1.81e-08 (2.98) │ 2.17e-08 (2.98) │ 2.17e-08 (2.98) │ 3.60e-07 (2.99) │ 2.03e-05 (1.99) │
│ 3.91e-03 │ 4.54e-09 (2.99) │ 2.27e-09 (2.99) │ 2.72e-09 (2.99) │ 2.73e-09 (2.99) │ 4.52e-08 (2.99) │ 5.08e-06 (2.00) │
│ 1.95e-03 │ 5.69e-10 (3.00) │ 2.85e-10 (3.00) │ 3.42e-10 (3.00) │ 3.42e-10 (3.00) │ 5.67e-09 (3.00) │ 1.27e-06 (2.00) │
│ 9.77e-04 │ 7.13e-11 (3.00) │ 3.57e-11 (3.00) │ 4.28e-11 (3.00) │ 4.28e-11 (3.00) │ 7.09e-10 (3.00) │ 3.18e-07 (2.00) │
│ 4.88e-04 │ 8.96e-12 (2.99) │ 4.50e-12 (2.99) │ 5.38e-12 (2.99) │ 5.38e-12 (2.99) │ 8.88e-11 (3.00) │ 7.95e-08 (2.00) │
│ 2.44e-04 │ 1.15e-12 (2.96) │ 6.18e-13 (2.87) │ 7.35e-13 (2.87) │ 7.35e-13 (2.87) │ 1.13e-11 (2.98) │ 1.99e-08 (2.00) │
└───────────┴──────────────────┴────────────────────┴──────────────────┴───────────────────┴──────────────────┴──────────────────┘
┌───────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┐
│ Δt │ MPDeC(4) │ MPDeC(5) │ MPDeC(6) │ MPDeC(7) │ MPDeC(8) │ MPDeC(9) │ MPDeC(10) │
├───────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┼──────────────────┤
│ 1.56e-02 │ 8.09e-05 ( NaN) │ 1.01e-04 ( NaN) │ 1.01e-04 ( NaN) │ 1.09e-04 ( NaN) │ 1.09e-04 ( NaN) │ 1.13e-04 ( NaN) │ 1.13e-04 ( NaN) │
│ 7.81e-03 │ 2.03e-05 (2.00) │ 2.54e-05 (2.00) │ 2.54e-05 (2.00) │ 2.74e-05 (2.00) │ 2.74e-05 (2.00) │ 2.84e-05 (2.00) │ 2.84e-05 (2.00) │
│ 3.91e-03 │ 5.08e-06 (2.00) │ 6.35e-06 (2.00) │ 6.35e-06 (2.00) │ 6.86e-06 (2.00) │ 6.86e-06 (2.00) │ 7.11e-06 (2.00) │ 7.11e-06 (2.00) │
│ 1.95e-03 │ 1.27e-06 (2.00) │ 1.59e-06 (2.00) │ 1.59e-06 (2.00) │ 1.72e-06 (2.00) │ 1.72e-06 (2.00) │ 1.78e-06 (2.00) │ 1.78e-06 (2.00) │
│ 9.77e-04 │ 3.18e-07 (2.00) │ 3.97e-07 (2.00) │ 3.97e-07 (2.00) │ 4.29e-07 (2.00) │ 4.29e-07 (2.00) │ 4.45e-07 (2.00) │ 4.45e-07 (2.00) │
│ 4.88e-04 │ 7.95e-08 (2.00) │ 9.93e-08 (2.00) │ 9.93e-08 (2.00) │ 1.07e-07 (2.00) │ 1.07e-07 (2.00) │ 1.11e-07 (2.00) │ 1.11e-07 (2.00) │
│ 2.44e-04 │ 1.99e-08 (2.00) │ 2.48e-08 (2.00) │ 2.48e-08 (2.00) │ 2.68e-08 (2.00) │ 2.68e-08 (2.00) │ 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$.