Yonderdrake

Yonderdrake adds fractional time derivatives, fading-memory operators, and nonlocal spatial operators to Firedrake UFL forms. You write an ordinary residual with a marker in it. Yonderdrake evolves the memory. Equations containing both a nonlocal time operator and a nonlocal space operator are supported as well.

F = (inner(CaputoDerivative(u, 0.6), v) + inner(u, v)) * dx
stepper = FractionalTimeStepper(F, BirkSong(48), t, dt, u)
stepper.advance()

What it supports

  • Caputo and initialized Riemann-Liouville time derivatives.

  • Full-history stepping and static memory with \(O(m)\) storage.

  • Single-exponential memory with an exact piecewise-linear update, including a labelled Caputo-Fabrizio parameterization.

  • Dirichlet spectral, zero-exterior Riesz, and periodic Fourier fractional Laplacians, each with its corresponding boundary or exterior realization.

  • Variable steps, MPI, PETSc options, and checkpoint/restart.

  • Tested composition of the spatial operators with Irksome time integrators.

Start here

Guides and examples

The guides introduce one capability at a time with runnable demos. Start from the Quickstart if you have not run anything yet. See Gallery for larger visual applications.

The time-fractional guides cover Fractional time derivatives, Time-fractional PDEs, and Caputo-Wismer imaging. Exponential memory and Caputo-Fabrizio sits with them because it uses the same time-memory workflow, although its bounded exponential kernel is not a fractional derivative. Space-fractional operators are introduced separately in Fractional space.

General workflow guidance covers Separating error sources, Solvers, field splits, and MPI, Checkpoint and restart, and Classical time stepping with Irksome. Timings, convergence studies, and method comparisons are collected in Benchmarks and comparisons.

Demo scripts

Run any of these as python demos/<path> from an active Firedrake environment.

Script

What it shows

fractional_time/caputo_relaxation.py

Birk-Song diffusive relaxation

fractional_time/caputo_full_history.py

Direct full-history relaxation

fractional_time/time_fractional_diffusion.py

Diethelm time-fractional diffusion

fractional_time/caputo_auxiliary_ode.py

Monolithic physical/memory PETSc field split

fractional_time/checkpoint_restart.py

Collective Firedrake checkpoint and restart

gallery/caputo_wismer/visual_circular_sensor_imaging.py

Exterior sensor-array imaging through a layered skull-ball

gallery/caputo_wismer/visual_brainweb_sensor_imaging.py

Vessel imaging through BrainWeb tissue, compared with a homogenised model

fractional_space/spectral_unit_square.py

Spectral power of a square eigenfunction

fractional_space/riesz_zero_exterior.py

Zero-exterior Riesz action

fractional_space/periodic_fourier.py

Periodic Fourier action on a known rectangular mode

gallery/visual_periodic_fractional_gyroid.py

Two 3D periodic fractional heat flows racing through a multiscale gyroid

fractional_space/spectral_fractional_diffusion.py

Caputo diffusion with the spectral operator

fractional_space/riesz_fractional_diffusion.py

Caputo diffusion with the Riesz operator

The numerical comparison and performance drivers are listed separately in Benchmarks and comparisons and need the visual extra to generate plots.

Mathematics and methods

This section defines every operator Yonderdrake implements, states which discretization it uses, and cites the primary source for each. It is the single place where methods are compared. API and supported scope gives signatures, and References and provenance gives the full bibliography.

Use the defaults

Yonderdrake exposes more methods than most problems need, because several exist to reproduce published results.

  • Power-law time memory: use BirkSong. Diethelm is an equally supported alternative worth trying if BirkSong needs many modes. Diethelm2022 and YuanAgrawal are literature-comparison options, not recommendations. They are substantially more sensitive to mode count, time range, and scaling, and using them well means checking their truncation and scaling errors for your problem.

  • Single-exponential memory: use ExponentialMemory directly. It has no quadrature rule or mode count to choose.

  • Time formulation: use the default eliminated Recurrence. Choose AuxiliaryODE only when PETSc needs access to the memory variables, and FullHistory when you want a direct reference without quadrature modes.

  • Spatial operators: there is no default. SpectralFractionalLaplacian, RieszFractionalLaplacian, and PeriodicFractionalLaplacian impose different exterior or periodic realizations. They are not approximations of one operator. See the comparison.

The detailed method pages repeat which category a method falls into, but this is the statement they refer back to.

Method map

Method

What it is

Use

Primary source

BirkSong

Diffusive modes, Gauss-Jacobi after a squared Cayley map

Default time memory

Birk and Song (2010)

Diethelm

Diffusive modes, Gauss-Jacobi after a Cayley map

Supported alternative

Diethelm (2008)

Diethelm2022

Truncated log-rate quadrature

Comparison only

Diethelm (2022), (2023)

YuanAgrawal

Original Gauss-Laguerre rule

Comparison only

Yuan and Agrawal (2002)

FullHistory

Variable-step L1 history integral

Reference method

Lin and Xu (2007)

Recurrence

Exact variation-of-constants mode update

static memory (default)

Yonderdrake, from the cited modes

AuxiliaryODE

Modes solved monolithically with the field

static memory (field access)

Yonderdrake, from the cited modes

SpectralFractionalLaplacian

Power of the homogeneous-Dirichlet Laplacian

Spectral realization

Bonito and Pasciak (2015)

RieszFractionalLaplacian

Whole-space integral on the zero extension

Integral realization

Acosta and Borthagaray (2017)

PeriodicFractionalLaplacian

Fourier multiplier on a uniform periodic cell

Periodic realization

Standard Fourier-series multiplier

ExponentialMemory

One-timescale exponential convolution

Direct fading-memory operator

Standard one-state realization

CaputoFabrizioOperator

Published rescaling of ExponentialMemory

Convenient interface into ExponentialMemory

Caputo and Fabrizio (2015), with the classification in Ortigueira and Machado (2018)

Indices