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.
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
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}\),
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:
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.