SSPRK(5,4) — Spiteri & Ruuth (2002), SIAM J. Numer. Anal. 40(2), 469-491, Shu-Osher form. Coefficients independently cross-checked against NodePy (ketch/nodepy, runge_kutta_method.py, RK['SSP54']/'SSPRK54', fetched 2026-07-08): converting this routine's Shu-Osher coefficients to Butcher (A, b) form reproduces every one of NodePy's 30-digit A/b entries to 8-12 significant digits, consistent with NodePy's own documented note that its table is a higher-precision (30-digit) re-solve of the same Ruuth-Spiteri method whose originally published coefficients (as coded below, ~15 digits) are only accurate to about 10 digits. Five stages, order 4, SSP coefficient c ~= 1.508. Register use: s1 = u0 (stages 2-4), s2 = u2 then the final stage's partial sum, s3 = u3; the final stage's L(u3) piece is accumulated into s2 before stage 4 overwrites resid (avoids a fourth scratch array). HISTORY: before 2026-07 this routine carried an unpublished 3rd-order tableau (initial-commit transcription defect; see the 2026-07-07 retrospective). The observed-order tripwire test guards against any regression.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in), | pointer | :: | u(:) | ||
| real(kind=wp), | intent(in), | pointer | :: | resid(:) | ||
| real(kind=wp), | intent(in), | pointer | :: | s1(:) | ||
| real(kind=wp), | intent(in), | pointer | :: | s2(:) | ||
| real(kind=wp), | intent(in), | pointer | :: | s3(:) | ||
| real(kind=wp), | intent(in) | :: | dt | |||
| procedure(rhs_fn) | :: | rhs | ||||
| class(*), | intent(inout), | target | :: | ctx |