Skip to content

Releases: pybamm-team/PyBaMM

v25.12.2

22 Jan 14:14

Choose a tag to compare

What's Changed

  • Adds experimental CompositeSolver that retries solvers until one succeeds and updated the ESOH solvers to use a composite algebraic solver by @MarcBerliner in (#5357)

v25.12.1

21 Jan 10:15

Choose a tag to compare

What's Changed

Full Changelog: v25.12.0...v25.12.1

v25.12.0

21 Jan 09:45
7fdfc55

Choose a tag to compare

What's Changed

Full Changelog: https://github.com/pybamm-team/PyBaMM/blob/main/CHANGELOG.md#v25120---2026-01-15

Breaking changes

  • Deprecates check_already_exists argument for ParameterValues.update(). This removes the secondary checking for explicit keys in the ParameterValues object. If a key is not found, it will be added. Note, this includes typos in parameter names. This changes update to have update-insert functionality whereas previously it required the check_already_exists flag to be False. This also allows for direct dictionary update-insert through parameter_values["key"] = "value". (#5339)
  • Removes default constants added to ParameterValues on construction. Only breaking if you rely on this functionality in custom models, parameters, etc. (#5336)

v25.10.2

27 Nov 16:52
313dd7f

Choose a tag to compare

What's Changed

Bugfix serialising InputParameter's. (#5289)
Bugfix BaseModels's initial_conditions_from scale evaluation (#5285)
Bugfix with bulk ocp lithiation (#5280)

Full Changelog: v25.10.1...v25.10.2

v25.10.1

14 Nov 15:28
fd26b09

Choose a tag to compare

What's Changed

Full Changelog: https://github.com/pybamm-team/PyBaMM/blob/develop/CHANGELOG.md#v25100---2025-10-29

v25.10.0

29 Oct 18:57
afbb567

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v25.8.0...v25.10.0

v25.8.0

04 Aug 18:56
1b00b5a

Choose a tag to compare

Features

  • Added plot_3d_cross_section & plot_3d_heatmap functions to support plotting for 3D thermal simulations. (#5130)
  • Added a Basic3DThermalSPM with two way coupling. (#5112)
  • Enables the passing of inputs throughout set_initial_soc. (#5122)
  • Adds on_failure option to BaseSolver with options for "warn", "ignore", and "raise" to change behaviour on solver failure. Defaults to "raise" to retain historic functionality. (#5105)
  • Creates a boundary mesh size object that returns the distance from the center of the leftmost/rightmost control volume to the boundary of the domain (#5108)
  • Introduced entry points for models, similar to parameter sets, and moved entry point handling to pybamm.dispatch.entry_points. There is now experimental support for loading third-party models outside of the PyBaMM framework via pybamm.Model("model_name"). This API is currently unstable until further notice and may be subject to change without warning. (#4490)
  • Allow for overriding the spatial method's extrapolation and for using constant extrapolation of boundary values (#5107)
  • Creates BaseProcessedVariable to enable object combination when adding solutions together (#5076)
  • Added a Constant symbol for named constants. This is a subclass of Scalar and is used to represent named constants such as the gas constant. This avoids constants being simplified out when constructing expressions. (#5070)
  • Generalise pybamm.DiscreteTimeSum to allow it to be embedded in other expressions (#5044)
  • Adds all key-value pair to output_variables sensitivity dictionaries, accessible through solution[var].sensitivities['all']. Aligns shape with conventional solution sensitivities object. (#5067)
  • Added a new BaseHysteresisOpenCircuitPotential class that sets variables for the lithiation and delithiation OCP and the hysteresis voltage (H = U_lith - U_delith). Allow the initial hysteresis state to be a function of position through the electrode. Allow the hysteresis decay rates of the Axen and Wycisk models to be a function of stoichiometry and temperature. Added a heat source term in each active material phase Q_hys = i_vol * (U - U_eq) where i_vol is the volumetric interfacial current density, U is the OCP (i.e. includes hysteresis), and U_eq is the "equilibrium OCP". Renamed the open-circuit potential models to be more descriptive. The options "Axen" and "Wycisk" are now "one-state hysteresis" and "one-state differential capacity hysteresis". The old option names still work but will raise a warning. (#4893)
  • Add support for output_variables to pybamm.DiscreteTimeSum and pybamm.ExplicitTimeIntegral expressions. (#5071)
  • Added 3D FEM and meshes supporting rectangular and cylindrical geometries (#5009)

Bug fixes

  • Fix non-deterministic ShapeError in 3D FEM gradient method (#5143)
  • Fixes negative electrode boundary values for half-cell voltage contributions. (#5139)
  • Makes A_cc L_z * L_y * number of layers (#5138)
  • Fixes TimeIntegral expression node summation when dependent on an input parameter. (#5119)
  • Fixed a bug that ignored the default duration of drive cycles for CRate steps and a bug that overwrote custom period arguments for drive cycles. (#5090)
  • Converts sensitivities to numpy objects, fixing bug in DiscreteTimeSum sensitivity calculation (#5037)
  • Raises error if pybamm.Interpolant given 1D x values that are not strictly increasing (#5061)
  • Fixes inconsistency of the returned shape of a pybamm.DiscreteTimeSum variable depending on output_variables being set or not. (#5098)
  • Fixed a bug where simplifications cause heavisides to evaluate as booleans (#4893)
  • Fixed a bug in the WyciskOpenCircuitPotential model where the differential capacity was not being evaluated correctly. (#4893)

Breaking changes

  • Changed behavior of drive cycle steps in pybamm.Experiments to treat each time point as a discontinuity, consistent with how input interpolants work. This ensures more accurate simulation of drive cycles with rapid changes. (#5141)
  • Removed the IREE code from the IDAKLU solver (#5080)
  • Removed support for Python 3.9 (#5052)
  • In OCP hysteresis models, users need to explicitly give the equilibrium, delithiation, and lithiation OCPs when using a hysteresis model. E.g., you must provide all three of "Negative electrode OCP [V]", "Negative electrode delithiation OCP [V]", and "Negative electrode lithiation OCP [V]". (#4893)

v25.6.0

27 May 17:35
6bb07fc

Choose a tag to compare

Features

  • Renamed MSMR parameters from symbols to written out names with units as a non-breaking change with a deprecation warning. (#5027)

Optimizations

  • Update docs, examples and tests to use IDAKLUSolver. (#4996)
  • Add a solver option to change on_extrapolation behavior to "error", "warn", or "ignore" on extrapolation events. (#4993)
  • Improve reliability of CasadiAlgebraicSolver and added an option for the step_tol of the Newton iteration. (#4985)
  • Speed up calculation of variable sensitivities in ProcessedVariable (#5000)

Bug fixes

  • Fixed a bug in the QuickPlot which would return empty values for 1D variables at the beginning and end of a timespan. (#4991)
  • Fixed a bug in the Exponential1DSubMesh where the mesh was not being created correctly for non-zero minimum values. (#4989)
  • Fixed sensitivity calculation for pybamm.DiscreteTimeSum. (#5007)

Breaking changes

  • Remove sensitivity functionality for Casadi and Scipy solvers, only pybamm.IDAKLU solver can calculate sensitivities. (#4975)

v25.4.2

17 Apr 21:08
6c615f7

Choose a tag to compare

Bug fixes

  • Improve reliability of AlgebraicSolver and change ElectrodeSOHHalfCell solver to a Trust-Region method. (#4982)

v25.4.1

16 Apr 21:03
abdef68

Choose a tag to compare

Bug fixes

  • Remove a regularization term in the harmonic mean. (#4977)

Breaking changes

  • Changed default solver to pybamm.IDAKLUSolver. (#4915)