Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/pybamm-team/PyBaMM/llms.txt

Use this file to discover all available pages before exploring further.

Spatial methods determine how differential operators (gradient, divergence, Laplacian) are approximated on the mesh. Each domain in the geometry can use a different spatial method.

Available Spatial Methods

ClassModuleDescriptionTypical use
FiniteVolumepybammCell-centred FVM. Conservative, handles discontinuities well.Default for all 1D battery domains
SpectralVolumepybammHigher-order spectral volume method; extends FiniteVolume.Smooth problems requiring high accuracy
ZeroDimensionalSpatialMethodpybammNo spatial discretisation — scalar equations only.0D domains (e.g. current collectors in some models)
ScikitFiniteElementpybamm2D FEM via scikit-fem.2D current-collector models

FiniteVolume

pybamm.FiniteVolume implements the standard cell-centred finite volume discretisation. It is the default method used by pybamm.Simulation.
pybamm.FiniteVolume(options=None)
options
dict | None
default:"None"
Optional configuration dict. Supported key:
  • "extrapolation": controls boundary extrapolation order. Sub-keys "order" (default "linear" for values, "quadratic" for gradients) and "use_bcs" (bool).
import pybamm

# Default options
fv = pybamm.FiniteVolume()

# Custom extrapolation
fv = pybamm.FiniteVolume(options={"extrapolation": {"order": "quadratic", "use_bcs": True}})

SpectralVolume

pybamm.SpectralVolume extends FiniteVolume with a higher-order spectral reconstruction. It is compatible only with SpectralVolume1DSubMesh.
pybamm.SpectralVolume(options=None, order=2)
options
dict | None
default:"None"
Same options as FiniteVolume.
order
int
default:"2"
Polynomial order of the spectral reconstruction within each control volume.
import pybamm

sv = pybamm.SpectralVolume(order=4)
SpectralVolume registers the Wang (2002) citation automatically on construction.

ZeroDimensionalSpatialMethod

Used for domains with no spatial variation. Applied automatically to 0D domains.
pybamm.ZeroDimensionalSpatialMethod(options=None)

ScikitFiniteElement

Provides 2D finite-element discretisation for current-collector models. Requires scikit-fem and meshio:
pip install pybamm[all]  # includes scikit-fem and meshio
pybamm.ScikitFiniteElement(options=None)

Passing Custom Spatial Methods to a Simulation

Use the spatial_methods argument of pybamm.Simulation (or pybamm.Discretisation) to override the default per-domain:
import pybamm

model = pybamm.lithium_ion.DFN()
param = pybamm.ParameterValues("Chen2020")

spatial_methods = {
    "macroscale": pybamm.FiniteVolume(),
    "negative particle": pybamm.SpectralVolume(order=3),
    "positive particle": pybamm.SpectralVolume(order=3),
    "current collector": pybamm.ZeroDimensionalSpatialMethod(),
}

sim = pybamm.Simulation(
    model,
    parameter_values=param,
    spatial_methods=spatial_methods,
)
sol = sim.solve([0, 3600])
For most simulations the default spatial methods are appropriate. Override only when you need higher spatial accuracy (e.g. SpectralVolume) or a 2D current-collector geometry.

Build docs developers (and LLMs) love