PyBaMM 24.9 has now been released! This release continues the previous release schedule conforming to three releases a year and marks the second release of 2024. We would like to thank all the contributors who made this release possible.
The full list of changes can be found in the CHANGELOG file, but here we provide a deeper overview of the main features of this release.
Implemented by Marc Berliner (Ionworks)
The IDAKLUSolver
is now significantly faster thanks to changes in its time-stepping behavior. solve
now returns the solution results at time points determined by its adaptive time-stepping algorithm. As a low-memory option, the adaptive time results can be disabled by specifying a t_interp
argument or an experiment period
. Additionally, the t_eval
argument has been updated to explicitly stop the integration due to discontinuities in the input function, such as with a drive cycle. For example, the fastest way to use the new IDAKLUSolver
is:
solver = pybamm.IDAKLUSolver()
model = pybamm.lithium_ion.DFN()
sim = pybamm.Simulation(model, solver=solver)
t_eval = [0, 3600]
sol = sim.solve(t_eval)
This will return the solution at the time steps taken by the solver.
Alternatively, to save specific points in time with the new t_interp
argument, use:
solver = pybamm.IDAKLUSolver()
model = pybamm.lithium_ion.DFN()
sim = pybamm.Simulation(model, solver=solver)
t_eval = [0, 3600]
t_interp = np.linspace(0, 3600, 100)
sol = sim.solve(t_eval, t_interp=t_interp)
This will return the solution at the times specified in t_interp
.
Implemented by Mehrdad Babazadeh (WMG, University of Warwick)
A diffusion component can now be included in the Thevenin equivalent circuit model, based on the work of Fan et al (2022). The model can be called using
pybamm.equivalent_circuit.Thevenin(options={"diffusion element": "true"})
Note than an additional parameter, the "Diffusion time constant [s]"
, must be provided for the model to run. A full example is available at examples/scripts/run_ecmd.py.
Implemented by Valentin Sulzer (Ionworks)
A new lumped thermal model has been included to account for different core and surface temperatures, based on the work of Lin et al (2014). The new model option "surface temperature"
can be set to either "ambient"
or "lumped"
. e.g.
pybamm.lithium_ion.SPMe(
{"thermal": "lumped", "surface temperature": "ambient"},
name="ambient surface temperature",
)
pybamm.lithium_ion.SPMe(
{"thermal": "lumped", "surface temperature": "lumped"},
name="lumped surface temperature",
)
Additional parameters "Casing heat capacity [J.K-1]"
and "Environment thermal resistance [K.W-1]"
are needed for the model to run. For a full example please see examples/scripts/compare_surface_temperature.py.