Third-order methodsΒΆ

Third-order explicit Runge-Kutta methods are given by

\[ \begin{align}\begin{aligned}& q^0 = p^n\\& q^1 = p^n + a_{1,0} f \left( q^0 \right) \Delta t\\& q^2 = p^n + a_{2,0} f \left( q^0 \right) \Delta t + a_{2,1} f \left( q^1 \right) \Delta t\\& q^3 = p^n + a_{3,0} f \left( q^0 \right) \Delta t + a_{3,1} f \left( q^2 \right) \Delta t + a_{3,2} f \left( q^3 \right) \Delta t\\& p^{n + 1} = q^3\end{aligned}\end{align} \]

The Butcher tableau is

\[\begin{split}\begin{array}{c|ccc} b_0 & a_{0,0} & a_{0,1} & a_{0,2} \\ b_1 & a_{1,0} & a_{1,1} & a_{1,2} \\ b_2 & a_{2,0} & a_{2,1} & a_{2,2} \\ \hline & a_{3,0} & a_{3,1} & a_{3,2} \\ \end{array} = \begin{array}{c|ccc} 0 & 0 & 0 & 0 \\ \alpha & \alpha & 0 & 0 \\ \beta & \frac{\beta}{\alpha} \frac{3 \alpha^2 - 3 \alpha + \beta}{3 \alpha - 2} & - \frac{\beta}{\alpha} \frac{\beta - \alpha}{3 \alpha - 2} & 0 \\ \hline & 1 - \frac{3 \alpha + 3 \beta - 2}{6 \alpha \beta} & \frac{3 \beta - 2}{6 \alpha \left( \beta - \alpha \right)} & \frac{- 3 \alpha + 2}{6 \beta \left( \beta - \alpha \right)} \\ \end{array}\end{split}\]

where the elements are constrained by two free parameters \(\left( \alpha, \beta \right)\).

The low-storage schemes can be derived in the same manner as the second-order schemes; namely by substituting \(q^0\) with the previous-step value:

\[ \begin{align}\begin{aligned}& q^0 = p^n\\& r^0 = f \left( q^0 \right)\\& q^1 = q^0 + a_{1,0} r^0 \Delta t\\& r^1 = \frac{a_{2,0} - a_{1,0}}{a_{2,1}} f \left( q^0 \right) + f \left( q^1 \right)\\& q^2 = q^1 + a_{2,1} r^1 \Delta t\\& r^2 = \frac{a_{3,1} - a_{2,1}}{a_{3,2}} \left\{ \frac{a_{3,0} - a_{2,0}}{a_{3,1} - a_{2,1}} f \left( q^0 \right) + f \left( q^1 \right) \right\} + f \left( q^2 \right),\\& q^3 = q^2 + a_{3,2} r^2 \Delta t\\& p^{n + 1} = q^3\end{aligned}\end{align} \]

To be a low-storage scheme, the coefficients need to satisfy

\[\frac{a_{2,0} - a_{1,0}}{a_{2,1}} = \frac{a_{3,0} - a_{2,0}}{a_{3,1} - a_{2,1}},\]

so that \(r^2\) can be directly computed using \(r^1\).

Assigning the Butcher tableau to this relation yields

\[6 \alpha^2 \beta - 6 \alpha \beta^2 + 3 \alpha \beta - 3 \alpha + 6 \beta^2 - 6 \beta + 2 = 0.\]
def find_constraint(a: sympy.Symbol, b: sympy.Symbol) -> sympy.Basic:
    c = 3 * a - 2
    a10 = a
    a20 = b / a * (3 * a * a - 3 * a + b) / c
    a21 = - b / a * (b - a) / c
    a30 = 1 - (3 * a + 3 * b - 2) / (6 * a * b)
    a31 = (3 * b - 2) / (6 * a * (b - a))
    a32 = - c / (6 * b * (b - a))
    eq = (a20 - a10) * (a31 - a21) - a21 * (a30 - a20)
    return sympy.simplify(eq)
../../_images/third_order_methods_constraint.jpg

The following method is popular among others (Williamson, J. Comput. Phys. (35), 1980).

\[\left( \alpha, \beta \right) = \left( \frac{1}{3}, \frac{3}{4} \right)\]
\[\begin{split}\begin{array}{c|ccc} 0 & 0 & 0 & 0 \\ \frac{1}{3} & \frac{1}{3} & 0 & 0 \\ \frac{3}{4} & \frac{-3}{16} & \frac{15}{16} & 0 \\ \hline & \frac{1}{6} & \frac{3}{10} & \frac{8}{15} \\ \end{array}\end{split}\]
\[\begin{split}\begin{array}{c|ccc} k & 0 & 1 & 2 \\ \hline \beta^k & 0 & \frac{-5}{9} & \frac{-153}{128} \\ \gamma^k & \frac{1}{3} & \frac{15}{16} & \frac{8}{15} \\ \end{array}\end{split}\]