How the memory is advanced

The representation chooses the memory modes. The formulation chooses how they are advanced alongside the physical solve. FullHistory is an alternative to both: it keeps the history itself.

Full history, eliminated recurrence, and auxiliary ODE memory formulations

The same fractional derivative can store its full past, eliminate a fixed set of memory modes outside the field solve, or expose those modes in one mixed system.

Eliminated recurrence (default)

Recurrence(interpolant="linear") advances each mode outside the Firedrake solve. For a step of length \(h\), the exact variation-of-constants update under a piecewise-linear solution assumption is

\[ \phi_j^{n+1} =e^{-\lambda_jh}\phi_j^n +\frac{1-e^{-\lambda_jh}}{\lambda_jh} (u^{n+1}-u^n). \]

Mode state is committed only after a successful physical solve, so a failed step leaves the memory untouched. This path supports variable steps, several markers in one residual, scalar fields, and fixed-size vector fields. Updates use PETSc vectors directly.

Auxiliary ODE

AuxiliaryODE puts every mode into one mixed problem on \(V^{m+1}\),

\[ \dot\phi_j+\lambda_j\phi_j=\dot u,\qquad D^\alpha_Cu\approx\sum_jw_j\phi_j , \]

discretized with backward Euler or trapezoidal stepping. This makes the memory variables visible to PETSc. Field-split metadata is exposed through stepper.appctx["yonderdrake"]. See Solvers, field splits, and MPI. This formulation enlarges every solve. The eliminated recurrence is usually cheaper. Both cost \(O(m)\) storage rather than storing every step.

Full history

FullHistory(interpolant="linear") integrates the piecewise-linear solution history against the Caputo kernel directly. This is the variable-step L1 method:

\[ D_C^\alpha u(t_n)\approx \frac1{\Gamma(2-\alpha)} \sum_{k=0}^{n-1} \frac{u_{k+1}-u_k}{t_{k+1}-t_k} \left[ (t_n-t_k)^{1-\alpha}-(t_n-t_{k+1})^{1-\alpha} \right]. \]

There is no quadrature spectrum to tune, which makes it the natural reference when you want a single error source. The cost is that work and storage grow with the number of accepted steps: one stored increment per step. See Lin and Xu (2007) for the classical L1 construction. Yonderdrake evaluates the same history integral on variable steps.

Riemann-Liouville markers add their exact initial-trace term to whichever of these paths is in use.