Available Models
PDEForge ships 41 models under one API. Every one of them is called the same
way, and each has its own page under Models covering the
equation, the operator task, the parameters and their ranges, a runnable
snippet, and a figure.
from pdeforge import generate_dataset
dataset = generate_dataset(
model="burgers_1d",
n_samples=1000,
resolution={"x": 256},
params={"viscosity": 0.01, "time_horizon": 1.0},
seed=42,
)
This page is the catalogue. Start from the Models index
if you would rather browse by physics with the figures alongside.
What you need installed
| Group |
Count |
Requirement |
| Spectral |
30 |
base installation |
| Finite-difference elliptic |
2 |
base installation |
| Finite volume |
1 |
base installation (pure NumPy) |
| Finite element |
8 |
FEniCSx setup or the Docker image |
Two of the spectral models, ns_vorticity_2d
and kolmogorov_flow_2d, run considerably
faster with backend="jax", and gray_scott_2d
benefits at long horizons.
The catalogue
Diffusion and transport
| Model |
Operator task |
heat_1d |
\(u(x,0) \mapsto u(x,T)\) |
heat_2d |
\(u(x,y,0) \mapsto u(x,y,T)\) |
heat_3d |
the same on the periodic cube |
advection_1d |
exact translation; the sanity anchor |
darcy_2d |
\(\kappa(x,y) \mapsto u(x,y)\), periodic |
Waves and dispersion
| Model |
Operator task |
wave_1d |
\(u(x,0) \mapsto u(x,T)\), energy conserved |
wave_2d |
the same on the square |
heterogeneous_wave_2d |
\(c(x,y) \mapsto\) wavefield; the medium is the input |
helmholtz_2d |
\(f \mapsto \operatorname{Re} u\), frequency domain |
kdv_1d |
solitons, undular bores, benchmark regimes |
schrodinger_1d |
complex field as two real channels |
Nonlinear advection and turbulence
| Model |
Operator task |
Needs |
darcy_fno_2d |
\(a \mapsto u\); bit-exact against the published data |
base |
darcy_fno_3d |
the same measure on the cube |
base |
elasticity_2d |
\(E \mapsto (u, v, \sigma_{vM})\) |
FEniCSx |
porous_darcy_fem |
\(k \mapsto (p, u_x, u_y)\) through a grown microstructure |
FEniCSx |
Viscous and compressible flow
| Model |
Operator task |
Needs |
stokes_2d |
\((f_x, f_y) \mapsto (u, v, p)\), creeping flow |
base |
cylinder_flow_2d |
inlet scale \(\mapsto (u, v, p)\) |
FEniCSx |
cylinder_flow_2d_unsteady |
the vortex street, as a trajectory |
FEniCSx |
cylinder_flow_2d_parameterized |
cylinder position as input |
FEniCSx |
cylinder_flow_2d_turbulent |
Re 2000, Smagorinsky LES |
FEniCSx |
naca_flow_2d |
airfoil geometry \(\mapsto\) flow, with \(C_l\) and \(C_d\) |
FEniCSx |
rayleigh_benard_2d |
convection in a cavity, Nusselt-validated |
FEniCSx |
airfoil_euler_2d |
transonic Euler with a shock, on a C-grid |
base |
Stochastic PDEs
Each sample carries several realisations of the same solve, so outputs have an
extra realisation axis and the target is a distribution. See the
calibration protocol and the
stochastic systems guide.
Presets
Published benchmark setups ship as presets rather than as separate models,
because they differ from the base model only in coefficients, domain and input
measure. A preset pins all three together, so the measure travels with the
physics.
dataset = generate_dataset(preset="fno_darcy_2d", n_samples=1000, seed=0)
| Preset |
Model |
What it pins |
fno_darcy_2d |
darcy_fno_2d |
Canonical Darcy421, log-normal; bit-exact against the distributed data |
fno_darcy_clean_2d |
darcy_fno_2d |
The Darcy421 measure on the node grid, with no resampling |
fno_darcy_piececonst_2d |
darcy_fno_2d |
The two-phase pushforward, \(\{12, 3\}\) |
fno_burgers_1d |
burgers_1d |
Sine prior at \(\nu = 0.01/\pi\) |
fno_burgers_grf_1d |
burgers_1d |
The official GRF measure \(N(0, 625(-\Delta + 25)^{-2})\) |
fno_ns_vorticity_2d |
ns_vorticity_2d |
Forced NS, \(\nu = 10^{-3}\), \(T = 50\) |
burgers_smooth_1d |
burgers_1d |
Regularity ladder, smooth end |
burgers_canonical_1d |
burgers_1d |
Regularity ladder, paper-baseline fronts |
burgers_rough_1d |
burgers_1d |
Regularity ladder, front-dominated |
pdebench_burgers_1d |
burgers_1d |
PDEBench-style low viscosity, shock-rich |
kdv_dsw_1d |
kdv_1d |
Undular bore, vigorous and un-resolvable at \(n_x = 512\) |
kdv_dsw_epistemic_1d |
kdv_1d |
Undular bore, near-resolvable |
mp_pde_kdv_1d |
kdv_1d |
The Brandstetter et al. MP-PDE regime |
mp_pde_kdv_easy_1d |
kdv_1d |
The same at \(T = 50\) |
from pdeforge import list_presets
from pdeforge.presets import get_preset
list_presets()
get_preset("kdv_dsw_1d") # the full pinned configuration
describe_model reports what a model accepts without you reading its source:
from pdeforge import describe_model
print(describe_model("burgers_1d"))
It shows the physical parameters you can modify, their defaults and valid
ranges, the input and output field names, and the backend.