Skip to main content
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