Butcher Tableaus
Every tableau is an IMEXButcherTableau{T} holding an explicit part $(\tilde A, \tilde b, \tilde c)$ = (a_t, b_t, c_t) and an implicit part $(A, b, c)$ = (a, b, c). The constructor checks that all components have consistent sizes, that a_t is strictly lower triangular, and that a is lower triangular. Stage times are taken from c_t.
RKButcherTableau(a, b, c) wraps a classical explicit tableau into this form with a = 0, b = 0.
Available tableaus
| Constructor | Stages | Explicit part SSP | Notes |
|---|---|---|---|
RK1_Euler_Tableau(T) | 1 | yes | Forward Euler, order 1 |
RK2_SSP_Tableau(T) | 2 | yes | Heun / SSP-RK2, order 2 |
RK2_Ralston_Tableau(T) | 2 | no | Order 2, minimal truncation error |
RK3_SSP_Tableau(T) | 3 | yes | Shu–Osher SSP-RK3, order 3 |
RK4_Classical_Tableau(T) | 4 | no | Classical RK4, order 4 |
IMEX_Euler_Tableau(T) | 2 | yes | Forward/backward Euler, order 1 |
IMEX_ARS222_Tableau(T[, γ]) | 2 | no | Ascher–Ruuth–Spiteri (2,2,2) |
IMEX_ARS233_Tableau(T[, γ]) | 3 | no | Ascher–Ruuth–Spiteri (2,3,3) |
IMEX_SSP2332_Tableau(T) | 3 | yes | Pareschi–Russo SSP2(3,3,2), L-stable implicit part |
IMEX_PRSSP3_Tableau(T) | 3 | yes | Pareschi–Russo type, SSP-RK3 explicit part |
Choosing a tableau with MOOD
The stepper checks MOOD admissibility after every stage and treats each stage as a forward-Euler substep. For SSP tableaus this is backed by theory: every stage is a convex combination of Euler steps, so admissible substeps give an admissible step (under the scheme's own CFL condition). For the non-SSP tableaus (Ralston, RK4, the ARS pairs) the stepper still runs, and the per-stage checks still catch oscillations in practice, but there is no such guarantee.
Recommended choices:
- Explicit, with discontinuities:
RK3_SSP_Tableau(orRK2_SSP_Tableaufor second-order spatial schemes). - Explicit, smooth problems, convergence studies at order 4+:
RK4_Classical_Tableau, typically without MOOD. - Stiff relaxation sources:
IMEX_SSP2332_TableauorIMEX_PRSSP3_Tableau.
Defining your own
# Explicit
bt = RKButcherTableau(A::Matrix{T}, b::Vector{T}, c::Vector{T})
# IMEX
bt = IMEXButcherTableau(a, a_t, c, c_t, b, b_t)Only diagonally implicit tableaus are supported: the stepper solves one local implicit relation per stage via implicit_solve.
Reference
HyperCloudCore.IMEXButcherTableau — Type
IMEXButcherTableau{T}
IMEXButcherTableau(a, a_t, c, c_t, b, b_t)The single tableau type used by GeneralRKTimeStepper. An explicit Runge-Kutta scheme is the special case a == 0, b == 0 (see RKButcherTableau).
Fields
a,c,b: implicit weights (lower triangular), nodes and final weights.a_t,c_t,b_t: explicit weights (strictly lower triangular), nodes and final weights.
MOOD note
The time stepper applies MOOD per stage, treating every stage as a forward-Euler substep. That is rigorous for SSP tableaus (every stage is a convex combination of Euler steps): RK1_Euler, RK2_SSP, RK3_SSP, IMEX_PRSSP3, IMEX_SSP2332. The non-SSP tableaus (RK2_Ralston, RK4_Classical, IMEX_ARS222, IMEX_ARS233) still run, but the per-stage DMP has no theoretical backing there.
HyperCloudCore.IMEX_ARS222_Tableau — Method
Ascher-Ruuth-Spiteri ARS(2,2,2): 2 stages, 2nd order (not SSP).
HyperCloudCore.IMEX_ARS233_Tableau — Method
Ascher-Ruuth-Spiteri ARS(2,3,3): 3 stages, 3rd order (not SSP).
HyperCloudCore.IMEX_Euler_Tableau — Method
1st-order IMEX Euler (forward/backward).
HyperCloudCore.IMEX_PRSSP3_Tableau — Method
Pareschi-Russo SSP3(3,3,3): 3rd-order, SSP explicit part.
HyperCloudCore.IMEX_SSP2332_Tableau — Method
SSP2(3,3,2): 2nd-order, SSP explicit part, L-stable implicit part.
HyperCloudCore.RK1_Euler_Tableau — Method
Forward Euler (SSP).
HyperCloudCore.RK2_Ralston_Tableau — Method
2-stage, 2nd-order Ralston (not SSP).
HyperCloudCore.RK2_SSP_Tableau — Method
2-stage, 2nd-order SSP (Heun). Preferred over Ralston when MOOD is active.
HyperCloudCore.RK3_SSP_Tableau — Method
3-stage, 3rd-order SSP (Shu-Osher).
HyperCloudCore.RK4_Classical_Tableau — Method
Classical RK4 (not SSP).
HyperCloudCore.RKButcherTableau — Method
RKButcherTableau(a, b, c) -> IMEXButcherTableauWraps an explicit tableau (a, b, c) into an IMEXButcherTableau with a zero implicit part.
HyperCloudCore.num_stages — Method
num_stages(bt::IMEXButcherTableau) -> IntNumber of stages s of the tableau.
HyperCloudCore.static_tableau — Method
static_tableau(bt::IMEXButcherTableau, ::Val{S}) -> IMEXButcherTableaubt with SMatrix / SVector components, S = num_stages(bt): a bits object with a concrete type that kernel bodies can take as an argument. GeneralRKTimeStepper stores its tableau in this form.