# The Adams integrator `Multistep()`, the default integrator, reuses recent nonlinear source evaluations to advance the field. Away from startup and rejected trials, it usually needs one new source evaluation per accepted step. This can save time when a response is expensive, while requiring more state history in memory. The default exponential formulation integrates an interpolating source polynomial against the represented linear flow. The alternative interaction formulation transports samples into a moving phase frame before interpolation. Both still require error control and convergence checks; a cheaper source or a memory limit can favour Runge–Kutta. [Choosing a stepper](choosing-a-stepper.md) gives the comparison, and [accuracy](accuracy.md) explains what to refine. This chapter gives configuration, equations, interpolation and restart behaviour, and limitations. Its design record is [SEP 16](../../dev/seps/archive/sep-0016-unified-multistep.md). ## Using it Every run steps with `Multistep()` unless told otherwise: ```{code-block} python from solprop.driver import prop_capillary from solprop.gasflow import steady_fill from solprop.stepper import Multistep, RungeKutta fill = steady_fill("He", [0.0, 2.1, 4.2], [0.0, 0.2, 0.0], radius=256e-6) run = prop_capillary( 256e-6, 4.2, "He", fill, lambda0=800e-9, fwhm=6e-15, energy=1e-3, trange=60e-15, wavelength_limits=(90e-9, 1.6e-6), rtol=1e-3, n_save=50, absorber_scheme="split_step", ) ``` `integrator=Multistep(order=3)` caps the order, `integrator=Multistep(formulation="interaction")` takes the interaction picture and `integrator=RungeKutta()` the Runge–Kutta march, on every entry point and on `SimulationSettings`. Both formulations run on `numpy_ref`, `numba_cpu` and `native`, CPU and device, on the GNLSE, fibre and capillary mode sets, the general modal route and the radial, Cartesian, line and planar free-space routes, with constant and varying operators and every noise model the route admits. Beside a coupled flow (a coherent capillary wall, a split block, a moving guide) only the exponential formulation runs, on its constant-Schur and frozen-residual sections; the interaction formulation and CF4 sections are refused by name. Another backend refuses `Multistep()` by name and runs `RungeKutta()`. `Multistep()` is SEP 13's selected method, in SEP 16's exponential formulation: - one source call per step; - an Adams–Bashforth predictor with an Adams–Moulton corrector one order higher; - the order chosen between one and five as the run goes; - no cap at the operator table's interval edges. The per-step collar in the example suits this capillary, whose pulse never reaches the collar; keep the default in-stage collar otherwise (below). The sections below explain each choice ([ADR-037](../../dev/decisions.md)). ## The method The recurrence is set out first in the interaction picture, where SEP 13 developed it; [the exponential formulation](#the-exponential-formulation) keeps it and changes only what the polynomial interpolates. ### Transported derivatives Write the propagation equation as $a' = L(z)a + N(a, z)$, with the exact linear flow $U(z_2, z_1) = e^{\Phi(z_2) - \Phi(z_1)}$ of the cumulative operator $\Phi$. Anchored at the start of a step, $z_n$, the interaction variable $v(z) = U(z_n, z)\,a(z)$ obeys $$v' = g(z) = U(z_n, z)\,N\bigl(U(z, z_n)\,v, z\bigr).$$ An Adams method integrates a polynomial through earlier values of $g$. The method stores each source evaluation with its position, carried into the current anchor's frame. Accepting a step re-anchors every stored derivative by that step's own propagator, so each keeps the density, field and response it was evaluated with. No operator table is queried backwards. ### Variable-step weights With the history positions normalised by the step, $\theta_j = (z_j - z_n)/h$, the increment is $h\sum_j w_j g_j$, where $w_j$ integrates the $j$-th Lagrange basis polynomial on the **actual** nodes over $[0, 1]$: {py:func}`solprop.stepper.multistep.integrated_weights`. On equal steps these are the classical Adams–Bashforth and Adams–Moulton coefficients; after a step-size change they are recomputed, never reused. ### Predict, evaluate, correct 1. **Predict.** An Adams–Bashforth formula of order $q$ extrapolates the stored derivatives over the step: $v_P = a_n + h\sum_{j