Additive (IMEX) methods (IMEX) — 7 schemes
An additive split separates a part that can be evaluated explicitly from a stiff part that needs an implicit solve. The explicit part still restricts the step. A split is useful only when it reflects the actual equations and makes the solve cheaper.
For the split right-hand side : the smooth
(non-stiff) part explicit, the stiff part implicit. The split is read by
capability through rhs.resolve (see the numerical record): an IMEXRHS (or a
structured RHS providing explicit/implicit) activates the split; an
ordinary RHS callable degenerates to the pure-implicit limit of the
scheme, so the standard integrator call convention stays valid.
IMEX Euler (IMEXEuler)
One step: explicit Euler on at the start point, one JFNK solve for the implicit endpoint:
Order 1; L-stable on the implicit half; the pure-implicit limit is backward Euler. One evaluation + one solve per step.
ARK3(2)4L[2]SA (ARK324L2SA)
Kennedy-Carpenter's additive RK pair: 4 stages, implicit half order 3,
explicit half order 2, L[2]-stable. The implicit half () is identical in to the registered
ESDIRK3(2)4L[2]SA; the explicit half is the matching
(full matrices in ark.getARKTableau), and both halves share
the single embedded vector. Stiffly accurate on the implicit side only —
the explicit half is not stiffly accurate, so priorStep is refused
(reuse would corrupt the explicit branch). Cost: one JFNK solve + explicit
evaluations per step.
ARK4(3)6L[2]SA (ARK436L2SA)
Kennedy-Carpenter's 6-stage pair: implicit half order 4, explicit half order
3, L[2]-stable, carried in schemes.coefficients.additive in exact rational form
(). Note the implicit half is a
different 6-stage ESDIRK design from the standalone ESDIRK4(3)6L[2]SA
(different nodes: vs. ), so
its coefficients are carried in full rather than by reference.
Stability slices. The additive pair's stability is two-parameter
(implicit eigenvalue scale × explicit eigenvalue scale); the slices are
measured in tests/test_ark.py (see the numerical record): the L[2] implicit half damps
its own stiff modes to while the explicit half must stay inside
its own region — the practical CFL is set by the smooth part, which is the
point of the split.
IMEX linear multistep — SBDF2, SBDF3, CNAB2
The multistep additive family (drivers.history.imex, the numerical record): a BDF or
trapezoidal implicit backbone for the stiff part plus explicit endpoint
extrapolation for the smooth part.
SBDF (): the BDF backbone with the BDF derivative weight scaling the whole endpoint derivative —
where is the -point Lagrange polynomial through the known states, extrapolated to :
Combined order ; order defects (SBDF2), (SBDF3), verified
by Taylor expansion in tests/test_imexmultistep.py. Dropping on the
explicit part amplifies it by and collapses the defect to —
measured, and pinned as a regression guard. Pure-implicit limit: BDF (SBDF2
A- and L-stable, SBDF3 A() 86.03°); pure-explicit limit: the matching
zero-stable explicit -step method.
CNAB2 (order 2): trapezoidal on the implicit part + AB2 increment on the explicit part:
Pure-implicit limit: the trapezoidal rule (A-stable, not L); pure-explicit limit: AB2.
History and cold start follow the BDF family exactly (state-snapshot
StepHistory, DP5 cold start, priorStep refused). Diagnostics: the step's
one solve plus the non-solve evaluations (the explicit-part evaluations, the
CNAB2 implicit start-point evaluation, the endpoint history evaluation) are
counted into rhs_evaluations, so the work-unit invariant covers the full
step cost. Per-step TVD: measured to CFL 1.5 with the rest of the multistep
family (see the numerical record).
Crank–Nicolson–Leapfrog (cnlf2)
One implicit solve per step closes
y[n+1] = y[n-1] + h*(I[n-1] + I[n+1]) + 2*h*E[n].
Thread result.history through history= or use the ordinary solve runner.
The first step is IMEX Euler; a finite startup defect preserves second-order
global convergence. Repeated cold calls remain first order. Changed step size,
time discontinuity, layout or particle IDs reset history before consumption;
use restart_history=True after changing RHS parameters.
The pure implicit two-step limit is A-stable, with a parasitic mode and no stiff damping. At hλ=−100, y0=1, y2=−99/101. The explicit leapfrog part supports oscillatory spectra within its CFL interval and is unstable for negative-real decay. Neither A-stability nor the historical cold-start TVD classifier implies monotonicity of the warm split. This is a fixed-step method without an estimator. Input/history ownership, failed-solve rollback, parameter gradients and portable tensor restart are covered by the backend record.
When to use
- IMEX Euler: the cheapest split; order 1 is often enough when the stiff part is a linear damping term.
- ARK3/4: the workhorse splits — L[2] damping of the stiff part at order 3/4 with no cost on the smooth part.
- SBDF2/3, CNAB2: multistep splits when per-step cost must stay near one solve; SBDF2 is the A/L-stable one.
References
- Ascher, Ruuth, Rapada, Implicit-explicit Runge-Kutta methods for ordinary differential equations, Proc. R. Soc. Lond. A 459 (2003) 427-443 — the ARK construction.
- Kennedy & Carpenter (2001/2002) — the L[2]SA designs (as shipped in SUNDIALS ARKODE v7.9.0).
- Hairer & Wanner, Solving ODEs II (1996) — IMEX and BDF theory.
Tests: tests/test_imex.py (IMEX Euler), tests/test_ark.py (ARK order,
stability slices, the pure-implicit limit), tests/test_imexmultistep.py
(SBDF/CNAB orders, defects, the regression guard), tests/test_rhs.py
(the capability-based split resolution).
The numerical record retains derivations, source pins and measured property gates.