Recent Releases of PyBaMM
PyBaMM - v25.10.1
What's Changed
- Sync develop with main by @BradyPlanden in https://github.com/pybamm-team/PyBaMM/pull/5252
- fix wsl links by @valentinsulzer in https://github.com/pybamm-team/PyBaMM/pull/5251
- chore: modernise uv usage in CI + fix cache by @Saransh-cpp in https://github.com/pybamm-team/PyBaMM/pull/5249
- Add docstrings to FuzzyDict methods by @swastim01 in https://github.com/pybamm-team/PyBaMM/pull/5242
- fix: Fixing non-deterministic CI issues by @Rishab87 in https://github.com/pybamm-team/PyBaMM/pull/5255
- Build(deps): bump the actions group with 2 updates by @dependabot[bot] in https://github.com/pybamm-team/PyBaMM/pull/5259
- Fix bug with initial conditions that violate events by @MarcBerliner in https://github.com/pybamm-team/PyBaMM/pull/5260
- Fix/discussion autoresponder 5186 by @swastim01 in https://github.com/pybamm-team/PyBaMM/pull/5261
- update to pytest 9.0, remove pytest-subtests by @valentinsulzer in https://github.com/pybamm-team/PyBaMM/pull/5271
- Set initial conditions from y slice by @rtimms in https://github.com/pybamm-team/PyBaMM/pull/5257
- Plot voltage components bugfix by @Daniel-Nicolae23 in https://github.com/pybamm-team/PyBaMM/pull/5270
- Composite electrode bug-fix for swelling submodel by @BradyPlanden in https://github.com/pybamm-team/PyBaMM/pull/5272
Full Changelog: https://github.com/pybamm-team/PyBaMM/blob/develop/CHANGELOG.md#v25100---2025-10-29
Energy Storage - Battery
- Python
Published by BradyPlanden about 2 months ago
PyBaMM - v25.10.0
What's Changed
- Build(deps): bump the actions group with 2 updates by @dependabot[bot] in https://github.com/pybamm-team/PyBaMM/pull/5148
- Sync v25.8.0 with develop by @brosaplanella in https://github.com/pybamm-team/PyBaMM/pull/5149
- Fixed non-deterministic plotting CI issues by @Rishab87 in https://github.com/pybamm-team/PyBaMM/pull/5150
- 2D by @aabills in https://github.com/pybamm-team/PyBaMM/pull/5106
- Generalise initial state setting by @NicolaCourtier in https://github.com/pybamm-team/PyBaMM/pull/5129
- Attempt to Patch few non-deterministic CI issues. by @Rishab87 in https://github.com/pybamm-team/PyBaMM/pull/5156
- chore: update pre-commit hooks by @pre-commit-ci[bot] in https://github.com/pybamm-team/PyBaMM/pull/5147
- Build(deps): bump the actions group with 6 updates by @dependabot[bot] in https://github.com/pybamm-team/PyBaMM/pull/5157
- composite esoh by @aabills in https://github.com/pybamm-team/PyBaMM/pull/5160
- Total surface area to volume by @rtimms in https://github.com/pybamm-team/PyBaMM/pull/5165
- chore: update pre-commit hooks by @pre-commit-ci[bot] in https://github.com/pybamm-team/PyBaMM/pull/5166
- Build(deps): bump github/codeql-action from 3.29.8 to 3.29.10 in the actions group by @dependabot[bot] in https://github.com/pybamm-team/PyBaMM/pull/5167
- Added
load_mesh_from_filefunction to support external 3D meshes. by @Rishab87 in https://github.com/pybamm-team/PyBaMM/pull/5162 - [GSoC 2025] Saving and Loading Custom Models by @medha-14 in https://github.com/pybamm-team/PyBaMM/pull/5056
- Fix drive cycle duration bug by @MarcBerliner in https://github.com/pybamm-team/PyBaMM/pull/5153
- chore: update pre-commit hooks by @pre-commit-ci[bot] in https://github.com/pybamm-team/PyBaMM/pull/5172
- Build(deps): bump the actions group with 3 updates by @dependabot[bot] in https://github.com/pybamm-team/PyBaMM/pull/5173
- fix 2d inner product by @aabills in https://github.com/pybamm-team/PyBaMM/pull/5175
- constant extrapolation in 2d by @aabills in https://github.com/pybamm-team/PyBaMM/pull/5178
- fix calculation of bulk ocp in hysteresis models by @rtimms in https://github.com/pybamm-team/PyBaMM/pull/5169
- Composite esoh half cell by @aabills in https://github.com/pybamm-team/PyBaMM/pull/5179
- chore: update pre-commit hooks by @pre-commit-ci[bot] in https://github.com/pybamm-team/PyBaMM/pull/5182
- Added an option for multiple initial conditions in IDAKLU solver by @Rishab87 in https://github.com/pybamm-team/PyBaMM/pull/4981
- chore: update pre-commit hooks by @pre-commit-ci[bot] in https://github.com/pybamm-team/PyBaMM/pull/5187
- Use T_init in initial_state by @rtimms in https://github.com/pybamm-team/PyBaMM/pull/5189
- Hysteresis ESOH by @aabills in https://github.com/pybamm-team/PyBaMM/pull/5163
- Build(deps): bump the actions group across 1 directory with 5 updates by @dependabot[bot] in https://github.com/pybamm-team/PyBaMM/pull/5188
- Update
pybammsolverstov0.2.0by @MarcBerliner in https://github.com/pybamm-team/PyBaMM/pull/5199 - 1D+ sensitivities error with IDAKLU output_variables by @pipliggins in https://github.com/pybamm-team/PyBaMM/pull/5118
- Make time-based heaviside and modulo inputs explicit
t_evalpoints withIDAKLUSolverby @MarcBerliner in https://github.com/pybamm-team/PyBaMM/pull/4994 - Add options to terminate
IDAKLUSolverearly when there's little progress by @MarcBerliner in https://github.com/pybamm-team/PyBaMM/pull/5201 - Computing Bruggeman coefficient from BPX porosity instead of hardcoding by @r0hansaxena in https://github.com/pybamm-team/PyBaMM/pull/5196
- Unpin
numpy, bumppybammsolversby @MarcBerliner in https://github.com/pybamm-team/PyBaMM/pull/5204 - Fix bug with out-of-bounds discontinuities in time by @MarcBerliner in https://github.com/pybamm-team/PyBaMM/pull/5205
- Fix doc links (make lychee happy) by @DavidMStraub in https://github.com/pybamm-team/PyBaMM/pull/5208
- Removes the default solver change warning by @BradyPlanden in https://github.com/pybamm-team/PyBaMM/pull/5209
- Added warning about installation through conda to docs and suggested installation via pip by @r0hansaxena in https://github.com/pybamm-team/PyBaMM/pull/5206
- [CI] Change MacOS runner from macos-13 to macos-15-intel by @DavidMStraub in https://github.com/pybamm-team/PyBaMM/pull/5213
- Remove deprecated JAX funtions by @DavidMStraub in https://github.com/pybamm-team/PyBaMM/pull/5203
- Build(deps): bump the actions group across 1 directory with 3 updates by @dependabot[bot] in https://github.com/pybamm-team/PyBaMM/pull/5216
- feat(EvaluateAt): add support for children evaluated at edges by @martinjrobins in https://github.com/pybamm-team/PyBaMM/pull/5190
- Build(deps): bump the actions group with 3 updates by @dependabot[bot] in https://github.com/pybamm-team/PyBaMM/pull/5220
- Allow sim to be pickled with output variables by @pipliggins in https://github.com/pybamm-team/PyBaMM/pull/5225
- Plot voltage components for composite electrodes by @Daniel-Nicolae23 in https://github.com/pybamm-team/PyBaMM/pull/5229
- Change fundamental SEI variable from thickness to concentration: attempt 2 by @DrSOKane in https://github.com/pybamm-team/PyBaMM/pull/4869
- #5198 update definition of hysteresis decay rate by @rtimms in https://github.com/pybamm-team/PyBaMM/pull/5217
- Serialise refactor by @aabills in https://github.com/pybamm-team/PyBaMM/pull/5235
- IDAKLU options property, fixes pickling issue with getstate by @BradyPlanden in https://github.com/pybamm-team/PyBaMM/pull/5234
- Serialise geometry varpts etc by @aabills in https://github.com/pybamm-team/PyBaMM/pull/5236
- [GSoC 2025] Serialising Parameter Sets by @medha-14 in https://github.com/pybamm-team/PyBaMM/pull/5177
- Update broken link by @valentinsulzer in https://github.com/pybamm-team/PyBaMM/pull/5246
- Build(deps): bump the actions group across 1 directory with 4 updates by @dependabot[bot] in https://github.com/pybamm-team/PyBaMM/pull/5243
- Set zip(..., strict=True) in key solver/expression tree files for len… by @swastim01 in https://github.com/pybamm-team/PyBaMM/pull/5241
- Fix: correct temperature initialisation in lumped and x_full thermal … by @swastim01 in https://github.com/pybamm-team/PyBaMM/pull/5248
- Enable contact overpotential display by @Jhah2025 in https://github.com/pybamm-team/PyBaMM/pull/5247
- Serialization refactor by @aabills in https://github.com/pybamm-team/PyBaMM/pull/5244
- Release v25.10.0 by @BradyPlanden in https://github.com/pybamm-team/PyBaMM/pull/5250
New Contributors
- @r0hansaxena made their first contribution in https://github.com/pybamm-team/PyBaMM/pull/5196
- @Daniel-Nicolae23 made their first contribution in https://github.com/pybamm-team/PyBaMM/pull/5229
- @swastim01 made their first contribution in https://github.com/pybamm-team/PyBaMM/pull/5241
- @Jhah2025 made their first contribution in https://github.com/pybamm-team/PyBaMM/pull/5247
Full Changelog: https://github.com/pybamm-team/PyBaMM/compare/v25.8.0...v25.10.0
Energy Storage - Battery
- Python
Published by BradyPlanden 2 months ago
PyBaMM - v25.8.0
Features
- Added
plot_3d_cross_section&plot_3d_heatmapfunctions to support plotting for 3D thermal simulations. (#5130) - Added a
Basic3DThermalSPMwith two way coupling. (#5112) - Enables the passing of
inputsthroughoutset_initial_soc. (#5122) - Adds
on_failureoption toBaseSolverwith 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 viapybamm.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
BaseProcessedVariableto enable object combination when adding solutions together (#5076) - Added a
Constantsymbol for named constants. This is a subclass ofScalarand is used to represent named constants such as the gas constant. This avoids constants being simplified out when constructing expressions. (#5070) - Generalise
pybamm.DiscreteTimeSumto allow it to be embedded in other expressions (#5044) - Adds
allkey-value pair tooutput_variablessensitivity dictionaries, accessible throughsolution[var].sensitivities['all']. Aligns shape with conventional solution sensitivities object. (#5067) - Added a new
BaseHysteresisOpenCircuitPotentialclass 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 phaseQ_hys = i_vol * (U - U_eq)wherei_volis the volumetric interfacial current density,Uis the OCP (i.e. includes hysteresis), andU_eqis 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_variablestopybamm.DiscreteTimeSumandpybamm.ExplicitTimeIntegralexpressions. (#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_ccL_z * L_y * number of layers (#5138) - Fixes
TimeIntegralexpression node summation when dependent on an input parameter. (#5119) - Fixed a bug that ignored the default duration of drive cycles for
CRatesteps and a bug that overwrote customperiodarguments for drive cycles. (#5090) - Converts sensitivities to numpy objects, fixing bug in
DiscreteTimeSumsensitivity calculation (#5037) - Raises error if
pybamm.Interpolantgiven 1D x values that are not strictly increasing (#5061) - Fixes inconsistency of the returned shape of a
pybamm.DiscreteTimeSumvariable depending onoutput_variablesbeing set or not. (#5098) - Fixed a bug where simplifications cause heavisides to evaluate as booleans (#4893)
- Fixed a bug in the
WyciskOpenCircuitPotentialmodel 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)
Energy Storage - Battery
- Python
Published by kratman 5 months ago
PyBaMM - v25.6.0
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_extrapolationbehavior to"error","warn", or"ignore"on extrapolation events. (#4993) - Improve reliability of
CasadiAlgebraicSolverand added an option for thestep_tolof the Newton iteration. (#4985) - Speed up calculation of variable sensitivities in
ProcessedVariable(#5000)
Bug fixes
- Fixed a bug in the
QuickPlotwhich would return empty values for 1D variables at the beginning and end of a timespan. (#4991) - Fixed a bug in the
Exponential1DSubMeshwhere 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.IDAKLUsolver can calculate sensitivities. (#4975)
Energy Storage - Battery
- Python
Published by kratman 7 months ago
PyBaMM - v25.4.0
Features
- Revision of the hysteresis notebook to include the method implemented in the module
axen_ocp. (#4880) - Added
axen_ocpmodule within submodelinterface.open_circuit_potentialto handle an OCP with hysteresis. (#4816) - Creates a 'calc_esoh' property in battery models (#4825)
- Added 'get_summary_variables' to return dictionary of computed summary variables (#4824)
- Added support for particle size distributions combined with particle mechanics. (#4807)
- Added InputParameter support in PyBamm experiments (#4826)
- Added support for the
"pchip"interpolator using the CasADI backend. (#4871)
Breaking changes
- Added
skip_okoption tostepto allow for steps to be skipped if they are infeasible at initial conditions. (#4839) - Deprecated
CrateTerminationand renamed it toCRateTermination. (#4834)
Bug fixes
- Fixed a bug with observing the outputs of 2D FEM simulations. (#4912)
- Fixed a bug in simulating FEM models with the
IDAKLUSolver. (#4879) - Moved concentration inside x-averaged when calculating LLI due to LAM variables (#4858)
- Fixed a bug that caused the variable
"Loss of lithium due to {domain} lithium plating"to have the domain"current collector"(should not have any domain at all) if the"x-average side reactions"option was set to"true". (#4844) - Fixed interpolation bug in
pybamm.QuickPlotwith spatial variables. (#4841)
Optimizations
- Performance improvements to
IDAKLUSolverinitialization and processed variables. (#4878) - Improved search to handle cases with shorter input strings and provide more relevant results. (#4735)
Energy Storage - Battery
- Python
Published by kratman 9 months ago
PyBaMM - v25.1.0
Features
- Added a
dt_minoption to the (IDAKLUSolver). (#4736) - Automatically add state variables of the model to the output variables if they are not already present (#4700)
- Enabled using SEI models with particle size distributions. (#4693)
- Added symbolic mesh which allows for using InputParameters for geometric parameters (#4665)
- Enhanced the
searchmethod to accept multiple search terms in the form of a string or a list. (#4650) - Made composite electrode model compatible with particle size distribution (#4687)
- Added
Symbol.post_order()method to return an iterable that steps through the tree in post-order fashion. (#4684) - Porosity change now works for composite electrode (#4417)
- Added two more submodels (options) for the SEI: Lars von Kolzenberg (2020) model and Tunneling Limit model (#4394)
Breaking changes
- Updated BPX to v0.5.0 and made changes for the switch to Pydantic V2 (#4701)
- Summary variables now calculated only when called, accessed via a class in the same manner as other variables rather than a dictionary. (#4621)
- The conda distribution (
pybamm) now installs all optional dependencies available on conda-forge. Use the newpybamm-baseconda
package to install PyBaMM with only the required dependencies. (conda-forge/pybamm-feedstock#70) - Separated extrapolation options for
pybamm.BoundaryValueandpybamm.BoundaryGradient, and updated the default to be "linear" for the value and "quadratic" for the gradient. (#4614) - Double-layer SEI models have been removed (with the corresponding parameters). All models assume now a single SEI layer. (#4470)
- Moved the IDAKLU solver to a standalone
pybammsolverspackage. This will
make PyBaMM a pure Python package and make installing and using the solver
easier. (#4487) - Wycisk OCP model now requires an parameter to set the initial condition. (#4374)
Bug fixes
- Fixed bug when using stoichiometry-dependent diffusivity with the DFN model with a particle size distribution. (#4726)
- Remove internal use of deprecated
set_parametersfunction in theSimulationclass which caused warnings. (#4638) - Provide default value for
Symbol.meshattribute to avoid errors when adding variables after discretisation. (#4644)
Energy Storage - Battery
- Python
Published by kratman 12 months ago
PyBaMM - v24.11.1
Features
- Modified
quick_plot.plotto accept a list of times and generate superimposed graphs for specified time points. (#4529)
Bug Fixes
- Added some dependencies which were left out of the
pyproject.tomlfile (#4602)
Energy Storage - Battery
- Python
Published by kratman about 1 year ago
PyBaMM - v24.11.0
Features
- Added
CoupledVariablewhich provides a placeholder variable whose equation can be elsewhere in the model. (#4556) - Adds support to
pybamm.Experimentfor theoutput_variablesoption in theIDAKLUSolver. (#4534) - Adds an option "voltage as a state" that can be "false" (default) or "true". If "true" adds an explicit algebraic equation for the voltage. (#4507)
- Improved
QuickPlotaccuracy for simulations with Hermite interpolation. (#4483) - Added Hermite interpolation to the (
IDAKLUSolver) that improves the accuracy and performance of post-processing variables. (#4464) - Added basic telemetry to record which functions are being run. See Telemetry section in the User Guide for more information. (#4441)
- Added
BasicDFNmodel for sodium-ion batteries (#4451) - Added sensitivity calculation support for
pybamm.Simulationandpybamm.Experiment(#4415) - Added OpenMP parallelization to IDAKLU solver for lists of input parameters (#4449)
- Added phase-dependent particle options to LAM (#4369)
- Added a lithium ion equivalent circuit model with split open circuit voltages for each electrode (
SplitOCVR). (#4330) - Added the
pybamm.DiscreteTimeSumexpression node to sum an expression over a sequence of data times, and accompanyingpybamm.DiscreteTimeDataclass to store the data times and values (#4501)
Optimizations
- Performance refactor of JAX BDF Solver with default Jax method set to
"BDF". (#4456) - Improved performance of initialization and reinitialization of ODEs in the (
IDAKLUSolver). (#4453) - Removed the
start_step_offsetsetting and disabled minimumdtwarnings for drive cycles with the (IDAKLUSolver). (#4416)
Bug Fixes
- Added error for binary operators on two concatenations with different numbers of children. Previously, the extra children were dropped. Also fixed bug where Q_rxn was dropped from the total heating term in half-cell models. (#4562)
- Fixed bug where Q_rxn was set to 0 for the negative electrode in half-cell models. (#4557)
- Fixed bug in post-processing solutions with infeasible experiments using the (
IDAKLUSolver). (#4541) - Disabled IREE on MacOS due to compatibility issues and added the CasADI
path to the environment to resolve issues on MacOS and Linux. Windows
users may still experience issues with interpolation. (#4528) - Added
_from_json()functionality toSignwhich was erroneously omitted previously. (#4517) - Fixed bug where IDAKLU solver failed when
output variableswere specified and an extrapolation event is present. (#4440)
Breaking changes
- Deprecated
pybamm.Simulation.set_parametersandpybamm.Simulation.set_up_and_parameterise_experimentfunctions inpybamm/simulation.py. (#3752) - Removed all instances of
param = self.paramand now directly accessself.paramacross the codebase. This change simplifies parameter references and enhances readability. (#4484) - Removed the deprecation warning for the chemistry argument in
pybamm.ParameterValues(#4466) - The parameters "... electrode OCP entropic change [V.K-1]" and "... electrode volume change" are now expected to be functions of stoichiometry only instead of functions of both stoichiometry and maximum concentration (#4427)
- Renamed
set_eventsfunction toadd_events_fromto better reflect its purpose. (#4421)
Energy Storage - Battery
- Python
Published by kratman about 1 year ago
PyBaMM - v24.9.0
Features
- Added additional user-configurable options to the (
IDAKLUSolver) and adjusted the default values to improve performance. (#4282) - Added the diffusion element to be used in the Thevenin model. (#4254)
Optimizations
- Update
IDAKLUtests and benchmarks to use adaptive time stepping. (#4390) - Improved adaptive time-stepping performance of the (
IDAKLUSolver). (#4351) - Improved performance and reliability of DAE consistent initialization. (#4301)
- Replaced rounded Faraday constant with its exact value in
bpx.pyfor better comparison between different tools. (#4290)
Bug Fixes
- Fixed memory issue that caused failure when
output variableswere specified with (IDAKLUSolver). (#4379) - Fixed bug where IDAKLU solver failed when
output variableswere specified and an event triggered. (#4300)
Breaking changes
- Replaced
have_jaxwithhas_jax,have_idakluwithhas_idaklu, and
have_ireewithhas_iree(#4398) - Remove deprecated function
pybamm_install_jax(#4362) - Removed legacy python-IDAKLU solver. (#4326)
Energy Storage - Battery
- Python
Published by kratman over 1 year ago
PyBaMM - v24.5
Features
- Added new parameters
"f{pref]Initial inner SEI on cracks thickness [m]"and"f{pref]Initial outer SEI on cracks thickness [m]", instead of hardcoding these toL_inner_0 / 10000andL_outer_0 / 10000. (#4168) - Added
pybamm.DataLoaderclass to fetch data files from pybamm-data and store it under local cache. (#4098) - Added
timeas an option forExperiment.termination. Now allows solving up to a user-specified time while also allowing different cycles and steps in an experiment to be handled normally. (#4073) - Added
plot_thermal_componentsto plot the contributions to the total heat generation in a battery (#4021) - Added functions for normal probability density function (
pybamm.normal_pdf) and cumulative distribution function (pybamm.normal_cdf) (#3999) - "Basic" models are now compatible with experiments (#3995)
- Updates multiprocess
PoolinBaseSolver.solve()to be constructed with contextfork. Adds small example for multiprocess inputs. (#3974) - Lithium plating now works on composite electrodes (#3919)
- Added lithium plating parameters to
Ecker2015andEcker2015_graphite_halfcellparameter sets (#3919) - Added custom experiment steps (#3835)
- MSMR open-circuit voltage model now depends on the temperature (#3832)
- Added support for macOS arm64 (M-series) platforms. (#3789)
- Added the ability to specify a custom solver tolerance in
get_initial_stoichiometriesand related functions (#3714) - Modified
stepfunction to take an array of timet_evalas an argument and deprecated use ofnpts. (#3627) - Renamed "electrode diffusivity" to "particle diffusivity" as a non-breaking change with a deprecation warning (#3624)
- Add support for BPX version 0.4.0 which allows for blended electrodes and user-defined parameters in BPX(#3414)
- Added
by_submodelfeature inprint_parameter_infomethod to allow users to print parameters and types of submodels in a tabular and readable format (#3628) - Added
WyciskOpenCircuitPotentialfor differential capacity hysteresis state open-circuit potential submodel (#3593) - Transport efficiency submodel has new options from the literature relating to different tortuosity factor models and also a new option called "tortuosity factor" for specifying the value or function directly as parameters (#3437)
- Heat of mixing source term can now be included into thermal models (#2837)
- Added a JAX interface to the IDAKLU solver (#3658)
Bug Fixes
- Fixed bug where passing deprecated
electrode diffusivityparameter resulted in a breaking change and/or the corresponding diffusivity parameter not updating. Improved the deprecated translation around BPX. (#4176) - Fixed a bug where a factor of electrode surface area to volume ratio is missing in the rhs of the LeadingOrderDifferential conductivity model (#4139)
- Fixes the breaking changes caused by #3624, specifically enables the deprecated parameter
electrode diffusivityto be used byParameterValues.update({name:value})andSolver.solve(inputs={name:value}). Fixes parameter translation from old name to new name, with corrected tests. (#4072 - Set the
remove_independent_variables_from_rhstoFalseby default, and moved the option fromDiscretisation.process_modeltoDiscretisation.__init__. This fixes a bug related to the discharge capacity, but may make the simulation slower in some cases. To set the option toTrue, useSimulation(..., discretisation_kwargs={"remove_independent_variables_from_rhs": True}). (#4020) - Fixed a bug where independent variables were removed from models even if they appeared in events (#4019)
- Fix bug with upwind and downwind schemes producing the wrong discretised system (#3979)
- Allow evaluation of an
Interpolantobject with a number (#3932) - Added scale to dead lithium variable (#3919)
plot_voltage_componentsnow works even if the time does not start at 0 (#3915)- Fixed bug where separator porosity was used in calculation instead of transport efficiency (#3905)
- Initial voltage can now match upper or lower cut-offs exactly (#3842)
- Fixed a bug where 1+1D and 2+1D models would not work with voltage or power controlled experiments(#3829)
- Update IDAKLU solver to fail gracefully when a variable is requested that was not in the solves
output_variableslist (#3803) - Updated
_steps_util.pyto throw a specific exception when drive cycle starts at t>0 (#3756) - Updated
plot_voltage_components.pyto support bothSimulationandSolutionobjects. Added new methods in bothSimulationandSolutionclasses for allow the syntaxsimulation.plot_voltage_componentsandsolution.plot_voltage_components. Updatedtest_plot_voltage_components.pyto reflect these changes (#3723). - The SEI thickness decreased at some intervals when the 'electron-migration limited' model was used. It has been corrected (#3622)
- Allow input parameters in ESOH model (#3921)
- Use casadi MX.interpn_linear function instead of plugin to fix casadi_interpolant_linear.dll not found on Windows (#4077)
Optimizations
- Sped up initialization of a
ProcessedVariableby making the internalxarray.DataArrayinitialization lazy (only gets created if interpolation is needed) (#3862)
Breaking changes
- Functions that are created using
pybamm.Function(function_object, children)can no longer be differentiated symbolically (e.g. to compute the Jacobian). This should affect no users, since function derivatives for all "standard" functions are explicitly implemented (#4196) - Removed data files under
pybamm/inputand released them in a separate repository upstream at pybamm-data. Note that data files underpybamm/input/parametershave not been removed. (#4098) - Removed
check_modelargument fromSimulation.solve. To change thecheck_modeloption, useSimulation(..., discretisation_kwargs={"check_model": False}). (#4020) - Removed multiple Docker images. Here on, a single Docker image tagged
pybamm/pybamm:latestwill be provided with both solvers (IDAKLUandJAX) pre-installed. (#3992) - Removed support for Python 3.8 (#3961)
- Renamed "ocp_soc_0_dimensional" to "ocp_soc_0" and "ocp_soc_100_dimensional" to "ocp_soc_100" (#3942)
- The ODES solver was removed due to compatibility issues. Users should use IDAKLU, Casadi, or JAX instead. (#3932)
- Integrated the
[pandas]extra into the core PyBaMM package, deprecating thepybamm[pandas]optional dependency. Pandas is now a required dependency and will be installed upon installing PyBaMM (#3892) - Renamed "have_optional_dependency" to "import_optional_dependency" (#3866)
- Integrated the
[latexify]extra into the core PyBaMM package, deprecating thepybamm[latexify]set of optional dependencies. SymPy is now a required dependency and will be installed upon installing PyBaMM (#3848) - Renamed "testing" argument for plots to "show_plot" and flipped its meaning (show_plot=True is now the default and shows the plot) (#3842)
- Dropped support for BPX version 0.3.0 and below (#3414)
- The function
get_spatial_varinpybamm.QuickPlot.pyis made private. (#3755)
Energy Storage - Battery
- Python
Published by kratman over 1 year ago
PyBaMM - v24.5rc2
Features
- Added new parameters
"f{pref]Initial inner SEI on cracks thickness [m]"and"f{pref]Initial outer SEI on cracks thickness [m]", instead of hardcoding these toL_inner_0 / 10000andL_outer_0 / 10000. (#4168) - Added
pybamm.DataLoaderclass to fetch data files from pybamm-data and store it under local cache. (#4098) - Added
timeas an option forExperiment.termination. Now allows solving up to a user-specified time while also allowing different cycles and steps in an experiment to be handled normally. (#4073) - Added
plot_thermal_componentsto plot the contributions to the total heat generation in a battery (#4021) - Added functions for normal probability density function (
pybamm.normal_pdf) and cumulative distribution function (pybamm.normal_cdf) (#3999) - "Basic" models are now compatible with experiments (#3995)
- Updates multiprocess
PoolinBaseSolver.solve()to be constructed with contextfork. Adds small example for multiprocess inputs. (#3974) - Lithium plating now works on composite electrodes (#3919)
- Added lithium plating parameters to
Ecker2015andEcker2015_graphite_halfcellparameter sets (#3919) - Added custom experiment steps (#3835)
- MSMR open-circuit voltage model now depends on the temperature (#3832)
- Added support for macOS arm64 (M-series) platforms. (#3789)
- Added the ability to specify a custom solver tolerance in
get_initial_stoichiometriesand related functions (#3714) - Modified
stepfunction to take an array of timet_evalas an argument and deprecated use ofnpts. (#3627) - Renamed "electrode diffusivity" to "particle diffusivity" as a non-breaking change with a deprecation warning (#3624)
- Add support for BPX version 0.4.0 which allows for blended electrodes and user-defined parameters in BPX(#3414)
- Added
by_submodelfeature inprint_parameter_infomethod to allow users to print parameters and types of submodels in a tabular and readable format (#3628) - Added
WyciskOpenCircuitPotentialfor differential capacity hysteresis state open-circuit potential submodel (#3593) - Transport efficiency submodel has new options from the literature relating to different tortuosity factor models and also a new option called "tortuosity factor" for specifying the value or function directly as parameters (#3437)
- Heat of mixing source term can now be included into thermal models (#2837)
Bug Fixes
- Fixed bug where passing deprecated
electrode diffusivityparameter resulted in a breaking change and/or the corresponding diffusivity parameter not updating. Improved the deprecated translation around BPX. (#4176) - Fixed a bug where a factor of electrode surface area to volume ratio is missing in the rhs of the LeadingOrderDifferential conductivity model (#4139)
- Fixes the breaking changes caused by #3624, specifically enables the deprecated parameter
electrode diffusivityto be used byParameterValues.update({name:value})andSolver.solve(inputs={name:value}). Fixes parameter translation from old name to new name, with corrected tests. (#4072 - Set the
remove_independent_variables_from_rhstoFalseby default, and moved the option fromDiscretisation.process_modeltoDiscretisation.__init__. This fixes a bug related to the discharge capacity, but may make the simulation slower in some cases. To set the option toTrue, useSimulation(..., discretisation_kwargs={"remove_independent_variables_from_rhs": True}). (#4020) - Fixed a bug where independent variables were removed from models even if they appeared in events (#4019)
- Fix bug with upwind and downwind schemes producing the wrong discretised system (#3979)
- Allow evaluation of an
Interpolantobject with a number (#3932) - Added scale to dead lithium variable (#3919)
plot_voltage_componentsnow works even if the time does not start at 0 (#3915)- Fixed bug where separator porosity was used in calculation instead of transport efficiency (#3905)
- Initial voltage can now match upper or lower cut-offs exactly (#3842)
- Fixed a bug where 1+1D and 2+1D models would not work with voltage or power controlled experiments(#3829)
- Update IDAKLU solver to fail gracefully when a variable is requested that was not in the solves
output_variableslist (#3803) - Updated
_steps_util.pyto throw a specific exception when drive cycle starts at t>0 (#3756) - Updated
plot_voltage_components.pyto support bothSimulationandSolutionobjects. Added new methods in bothSimulationandSolutionclasses for allow the syntaxsimulation.plot_voltage_componentsandsolution.plot_voltage_components. Updatedtest_plot_voltage_components.pyto reflect these changes (#3723). - The SEI thickness decreased at some intervals when the 'electron-migration limited' model was used. It has been corrected (#3622)
- Allow input parameters in ESOH model (#3921)
- Use casadi MX.interpn_linear function instead of plugin to fix casadi_interpolant_linear.dll not found on Windows (#4077)
Optimizations
- Sped up initialization of a
ProcessedVariableby making the internalxarray.DataArrayinitialization lazy (only gets created if interpolation is needed) (#3862)
Breaking changes
- Functions that are created using
pybamm.Function(function_object, children)can no longer be differentiated symbolically (e.g. to compute the Jacobian). This should affect no users, since function derivatives for all "standard" functions are explicitly implemented (#4196) - Removed data files under
pybamm/inputand released them in a separate repository upstream at pybamm-data. Note that data files underpybamm/input/parametershave not been removed. (#4098) - Removed
check_modelargument fromSimulation.solve. To change thecheck_modeloption, useSimulation(..., discretisation_kwargs={"check_model": False}). (#4020) - Removed multiple Docker images. Here on, a single Docker image tagged
pybamm/pybamm:latestwill be provided with both solvers (IDAKLUandJAX) pre-installed. (#3992) - Removed support for Python 3.8 (#3961)
- Renamed "ocp_soc_0_dimensional" to "ocp_soc_0" and "ocp_soc_100_dimensional" to "ocp_soc_100" (#3942)
- The ODES solver was removed due to compatibility issues. Users should use IDAKLU, Casadi, or JAX instead. (#3932)
- Integrated the
[pandas]extra into the core PyBaMM package, deprecating thepybamm[pandas]optional dependency. Pandas is now a required dependency and will be installed upon installing PyBaMM (#3892) - Renamed "have_optional_dependency" to "import_optional_dependency" (#3866)
- Integrated the
[latexify]extra into the core PyBaMM package, deprecating thepybamm[latexify]set of optional dependencies. SymPy is now a required dependency and will be installed upon installing PyBaMM (#3848) - Renamed "testing" argument for plots to "show_plot" and flipped its meaning (show_plot=True is now the default and shows the plot) (#3842)
- Dropped support for BPX version 0.3.0 and below (#3414)
Energy Storage - Battery
- Python
Published by kratman over 1 year ago
PyBaMM - v24.5rc1
Features
- Added functionality to pass in arbitrary functions of time as the argument for a (
pybamm.step). (#4222) - Added new parameters
"f{pref]Initial inner SEI on cracks thickness [m]"and"f{pref]Initial outer SEI on cracks thickness [m]", instead of hardcoding these toL_inner_0 / 10000andL_outer_0 / 10000. (#4168) - Added
pybamm.DataLoaderclass to fetch data files from pybamm-data and store it under local cache. (#4098) - Added
timeas an option forExperiment.termination. Now allows solving up to a user-specified time while also allowing different cycles and steps in an experiment to be handled normally. (#4073) - Added
plot_thermal_componentsto plot the contributions to the total heat generation in a battery (#4021) - Added functions for normal probability density function (
pybamm.normal_pdf) and cumulative distribution function (pybamm.normal_cdf) (#3999) - "Basic" models are now compatible with experiments (#3995)
- Updates multiprocess
PoolinBaseSolver.solve()to be constructed with contextfork. Adds small example for multiprocess inputs. (#3974) - Lithium plating now works on composite electrodes (#3919)
- Added lithium plating parameters to
Ecker2015andEcker2015_graphite_halfcellparameter sets (#3919) - Added custom experiment steps (#3835)
- MSMR open-circuit voltage model now depends on the temperature (#3832)
- Added support for macOS arm64 (M-series) platforms. (#3789)
- Added the ability to specify a custom solver tolerance in
get_initial_stoichiometriesand related functions (#3714) - Modified
stepfunction to take an array of timet_evalas an argument and deprecated use ofnpts. (#3627) - Renamed "electrode diffusivity" to "particle diffusivity" as a non-breaking change with a deprecation warning (#3624)
- Add support for BPX version 0.4.0 which allows for blended electrodes and user-defined parameters in BPX(#3414)
- Added
by_submodelfeature inprint_parameter_infomethod to allow users to print parameters and types of submodels in a tabular and readable format (#3628) - Added
WyciskOpenCircuitPotentialfor differential capacity hysteresis state open-circuit potential submodel (#3593) - Transport efficiency submodel has new options from the literature relating to different tortuosity factor models and also a new option called "tortuosity factor" for specifying the value or function directly as parameters (#3437)
- Heat of mixing source term can now be included into thermal models (#2837)
Bug Fixes
- Fixed bug where passing deprecated
electrode diffusivityparameter resulted in a breaking change and/or the corresponding diffusivity parameter not updating. Improved the deprecated translation around BPX. (#4176) - Fixed a bug where a factor of electrode surface area to volume ratio is missing in the rhs of the LeadingOrderDifferential conductivity model (#4139)
- Fixes the breaking changes caused by #3624, specifically enables the deprecated parameter
electrode diffusivityto be used byParameterValues.update({name:value})andSolver.solve(inputs={name:value}). Fixes parameter translation from old name to new name, with corrected tests. (#4072 - Set the
remove_independent_variables_from_rhstoFalseby default, and moved the option fromDiscretisation.process_modeltoDiscretisation.__init__. This fixes a bug related to the discharge capacity, but may make the simulation slower in some cases. To set the option toTrue, useSimulation(..., discretisation_kwargs={"remove_independent_variables_from_rhs": True}). (#4020) - Fixed a bug where independent variables were removed from models even if they appeared in events (#4019)
- Fix bug with upwind and downwind schemes producing the wrong discretised system (#3979)
- Allow evaluation of an
Interpolantobject with a number (#3932) - Added scale to dead lithium variable (#3919)
plot_voltage_componentsnow works even if the time does not start at 0 (#3915)- Fixed bug where separator porosity was used in calculation instead of transport efficiency (#3905)
- Initial voltage can now match upper or lower cut-offs exactly (#3842)
- Fixed a bug where 1+1D and 2+1D models would not work with voltage or power controlled experiments(#3829)
- Update IDAKLU solver to fail gracefully when a variable is requested that was not in the solves
output_variableslist (#3803) - Updated
_steps_util.pyto throw a specific exception when drive cycle starts at t>0 (#3756) - Updated
plot_voltage_components.pyto support bothSimulationandSolutionobjects. Added new methods in bothSimulationandSolutionclasses for allow the syntaxsimulation.plot_voltage_componentsandsolution.plot_voltage_components. Updatedtest_plot_voltage_components.pyto reflect these changes (#3723). - The SEI thickness decreased at some intervals when the 'electron-migration limited' model was used. It has been corrected (#3622)
- Allow input parameters in ESOH model (#3921)
- Use casadi MX.interpn_linear function instead of plugin to fix casadi_interpolant_linear.dll not found on Windows (#4077)
Optimizations
- Sped up initialization of a
ProcessedVariableby making the internalxarray.DataArrayinitialization lazy (only gets created if interpolation is needed) (#3862)
Breaking changes
- Functions that are created using
pybamm.Function(function_object, children)can no longer be differentiated symbolically (e.g. to compute the Jacobian). This should affect no users, since function derivatives for all "standard" functions are explicitly implemented (#4196) - Removed data files under
pybamm/inputand released them in a separate repository upstream at pybamm-data. Note that data files underpybamm/input/parametershave not been removed. (#4098) - Removed
check_modelargument fromSimulation.solve. To change thecheck_modeloption, useSimulation(..., discretisation_kwargs={"check_model": False}). (#4020) - Removed multiple Docker images. Here on, a single Docker image tagged
pybamm/pybamm:latestwill be provided with both solvers (IDAKLUandJAX) pre-installed. (#3992) - Removed support for Python 3.8 (#3961)
- Renamed "ocp_soc_0_dimensional" to "ocp_soc_0" and "ocp_soc_100_dimensional" to "ocp_soc_100" (#3942)
- The ODES solver was removed due to compatibility issues. Users should use IDAKLU, Casadi, or JAX instead. (#3932)
- Integrated the
[pandas]extra into the core PyBaMM package, deprecating thepybamm[pandas]optional dependency. Pandas is now a required dependency and will be installed upon installing PyBaMM (#3892) - Renamed "have_optional_dependency" to "import_optional_dependency" (#3866)
- Integrated the
[latexify]extra into the core PyBaMM package, deprecating thepybamm[latexify]set of optional dependencies. SymPy is now a required dependency and will be installed upon installing PyBaMM (#3848) - Renamed "testing" argument for plots to "show_plot" and flipped its meaning (show_plot=True is now the default and shows the plot) (#3842)
- Dropped support for BPX version 0.3.0 and below (#3414)
Energy Storage - Battery
- Python
Published by kratman over 1 year ago
PyBaMM - v24.5rc0
Features
- Added new parameters
"f{pref]Initial inner SEI on cracks thickness [m]"and"f{pref]Initial outer SEI on cracks thickness [m]", instead of hardcoding these toL_inner_0 / 10000andL_outer_0 / 10000. (#4168) - Added
pybamm.DataLoaderclass to fetch data files from pybamm-data and store it under local cache. (#4098) - Added
timeas an option forExperiment.termination. Now allows solving up to a user-specified time while also allowing different cycles and steps in an experiment to be handled normally. (#4073) - Added
plot_thermal_componentsto plot the contributions to the total heat generation in a battery (#4021) - Added functions for normal probability density function (
pybamm.normal_pdf) and cumulative distribution function (pybamm.normal_cdf) (#3999) - "Basic" models are now compatible with experiments (#3995)
- Updates multiprocess
PoolinBaseSolver.solve()to be constructed with contextfork. Adds small example for multiprocess inputs. (#3974) - Lithium plating now works on composite electrodes (#3919)
- Added lithium plating parameters to
Ecker2015andEcker2015_graphite_halfcellparameter sets (#3919) - Added custom experiment steps (#3835)
- MSMR open-circuit voltage model now depends on the temperature (#3832)
- Added support for macOS arm64 (M-series) platforms. (#3789)
- Added the ability to specify a custom solver tolerance in
get_initial_stoichiometriesand related functions (#3714) - Modified
stepfunction to take an array of timet_evalas an argument and deprecated use ofnpts. (#3627) - Renamed "electrode diffusivity" to "particle diffusivity" as a non-breaking change with a deprecation warning (#3624)
- Add support for BPX version 0.4.0 which allows for blended electrodes and user-defined parameters in BPX(#3414)
- Added
by_submodelfeature inprint_parameter_infomethod to allow users to print parameters and types of submodels in a tabular and readable format (#3628) - Added
WyciskOpenCircuitPotentialfor differential capacity hysteresis state open-circuit potential submodel (#3593) - Transport efficiency submodel has new options from the literature relating to different tortuosity factor models and also a new option called "tortuosity factor" for specifying the value or function directly as parameters (#3437)
- Heat of mixing source term can now be included into thermal models (#2837)
Bug Fixes
- Fixed bug where passing deprecated
electrode diffusivityparameter resulted in a breaking change and/or the corresponding diffusivity parameter not updating. Improved the deprecated translation around BPX. (#4176) - Fixed a bug where a factor of electrode surface area to volume ratio is missing in the rhs of the LeadingOrderDifferential conductivity model (#4139)
- Fixes the breaking changes caused by #3624, specifically enables the deprecated parameter
electrode diffusivityto be used byParameterValues.update({name:value})andSolver.solve(inputs={name:value}). Fixes parameter translation from old name to new name, with corrected tests. (#4072 - Set the
remove_independent_variables_from_rhstoFalseby default, and moved the option fromDiscretisation.process_modeltoDiscretisation.__init__. This fixes a bug related to the discharge capacity, but may make the simulation slower in some cases. To set the option toTrue, useSimulation(..., discretisation_kwargs={"remove_independent_variables_from_rhs": True}). (#4020) - Fixed a bug where independent variables were removed from models even if they appeared in events (#4019)
- Fix bug with upwind and downwind schemes producing the wrong discretised system (#3979)
- Allow evaluation of an
Interpolantobject with a number (#3932) - Added scale to dead lithium variable (#3919)
plot_voltage_componentsnow works even if the time does not start at 0 (#3915)- Fixed bug where separator porosity was used in calculation instead of transport efficiency (#3905)
- Initial voltage can now match upper or lower cut-offs exactly (#3842)
- Fixed a bug where 1+1D and 2+1D models would not work with voltage or power controlled experiments(#3829)
- Update IDAKLU solver to fail gracefully when a variable is requested that was not in the solves
output_variableslist (#3803) - Updated
_steps_util.pyto throw a specific exception when drive cycle starts at t>0 (#3756) - Updated
plot_voltage_components.pyto support bothSimulationandSolutionobjects. Added new methods in bothSimulationandSolutionclasses for allow the syntaxsimulation.plot_voltage_componentsandsolution.plot_voltage_components. Updatedtest_plot_voltage_components.pyto reflect these changes (#3723). - The SEI thickness decreased at some intervals when the 'electron-migration limited' model was used. It has been corrected (#3622)
- Allow input parameters in ESOH model (#3921)
- Use casadi MX.interpn_linear function instead of plugin to fix casadi_interpolant_linear.dll not found on Windows (#4077)
Optimizations
- Sped up initialization of a
ProcessedVariableby making the internalxarray.DataArrayinitialization lazy (only gets created if interpolation is needed) (#3862)
Breaking changes
- Functions that are created using
pybamm.Function(function_object, children)can no longer be differentiated symbolically (e.g. to compute the Jacobian). This should affect no users, since function derivatives for all "standard" functions are explicitly implemented (#4196) - Removed data files under
pybamm/inputand released them in a separate repository upstream at pybamm-data. Note that data files underpybamm/input/parametershave not been removed. (#4098) - Removed
check_modelargument fromSimulation.solve. To change thecheck_modeloption, useSimulation(..., discretisation_kwargs={"check_model": False}). (#4020) - Removed multiple Docker images. Here on, a single Docker image tagged
pybamm/pybamm:latestwill be provided with both solvers (IDAKLUandJAX) pre-installed. (#3992) - Removed support for Python 3.8 (#3961)
- Renamed "ocp_soc_0_dimensional" to "ocp_soc_0" and "ocp_soc_100_dimensional" to "ocp_soc_100" (#3942)
- The ODES solver was removed due to compatibility issues. Users should use IDAKLU, Casadi, or JAX instead. (#3932)
- Integrated the
[pandas]extra into the core PyBaMM package, deprecating thepybamm[pandas]optional dependency. Pandas is now a required dependency and will be installed upon installing PyBaMM (#3892) - Renamed "have_optional_dependency" to "import_optional_dependency" (#3866)
- Integrated the
[latexify]extra into the core PyBaMM package, deprecating thepybamm[latexify]set of optional dependencies. SymPy is now a required dependency and will be installed upon installing PyBaMM (#3848) - Renamed "testing" argument for plots to "show_plot" and flipped its meaning (show_plot=True is now the default and shows the plot) (#3842)
- Dropped support for BPX version 0.3.0 and below (#3414)
Energy Storage - Battery
- Python
Published by Saransh-cpp over 1 year ago
PyBaMM - v24.1
Features
- The
pybamm_install_odescommand now includes support for macOS systems and can be used to set up SUNDIALS and install thescikits.odessolver on macOS (#3417, #3706) - Added support for Python 3.12 (#3531)
- Added method to get QuickPlot axes by variable (#3596)
- Added custom experiment terminations (#3596)
- Mechanical parameters are now a function of stoichiometry and temperature (#3576)
- Added a new unary operator,
EvaluateAt, that evaluates a spatial variable at a given position (#3573) - Added a method,
insert_reference_electrode, topybamm.lithium_ion.BaseModelthat insert a reference electrode to measure the electrolyte potential at a given position in space and adds new variables that mimic a 3E cell setup. (#3573) - Serialisation added so models can be written to/read from JSON (#3397)
- Added a
get_parameter_infomethod for models and modified "print_parameter_info" functionality to extract all parameters and their type in a tabular and readable format (#3584) - Mechanical parameters are now a function of stoichiometry and temperature (#3576)
Bug fixes
- Fixed a bug that lead to a
ShapeErrorwhen specifying "Ambient temperature [K]" as anInterpolantwith an isothermal model (#3761) - Fixed a bug where if the first step(s) in a cycle are skipped then the cycle solution started from the model's initial conditions instead of from the last state of the previous cycle (#3708)
- Fixed a bug where the lumped thermal model conflates cell volume with electrode volume (#3707)
- Reverted a change to the coupled degradation example notebook that caused it to be unstable for large numbers of cycles (#3691)
- Fixed a bug where simulations using the CasADi-based solvers would fail randomly with the half-cell model (#3494)
- Fixed bug that made identical Experiment steps with different end times crash (#3516)
- Fixed bug in calculation of theoretical energy that made it very slow (#3506)
- The irreversible plating model now increments
f"{Domain} dead lithium concentration [mol.m-3]", notf"{Domain} lithium plating concentration [mol.m-3]"as it did previously. (#3485)
Optimizations
- Updated
jaxandjaxlibto the latest available versions and added Windows (Python 3.9+) support for the Jax solver (#3550)
Breaking changes
- The parameters
GeometricParameters.A_coolingandGeometricParameters.V_cellare now automatically computed from the electrode heights, widths and thicknesses if the "cell geometry" option is "pouch" and from the parameters "Cell cooling surface area [m2]" and "Cell volume [m3]", respectively, otherwise. When using the lumped thermal model we recommend using the "arbitrary" cell geometry and specifying the parameters "Cell cooling surface area [m2]", "Cell volume [m3]" and "Total heat transfer coefficient [W.m-2.K-1]" directly. (#3707) - Dropped support for the
[jax]extra, i.e., the Jax solver when running on Python 3.8. The Jax solver is now available on Python 3.9 and above (#3550)
Energy Storage - Battery
- Python
Published by Saransh-cpp almost 2 years ago
PyBaMM - v24.1rc1
Bug fixes
- Fixed a bug where if the first step(s) in a cycle are skipped then the cycle solution started from the model's initial conditions instead of from the last state of the previous cycle (#3708)
- Fixed a bug where the lumped thermal model conflates cell volume with electrode volume (#3707)
Energy Storage - Battery
- Python
Published by Saransh-cpp almost 2 years ago
PyBaMM - v24.1rc0
Features
- The
pybamm_install_odescommand now includes support for macOS systems and can be used to set up SUNDIALS and install thescikits.odessolver on macOS (#3417) - Added support for Python 3.12 (#3531)
- Added method to get QuickPlot axes by variable (#3596)
- Added custom experiment terminations (#3596)
- Mechanical parameters are now a function of stoichiometry and temperature (#3576)
- Added a new unary operator,
EvaluateAt, that evaluates a spatial variable at a given position (#3573) - Added a method,
insert_reference_electrode, topybamm.lithium_ion.BaseModelthat insert a reference electrode to measure the electrolyte potential at a given position in space and adds new variables that mimic a 3E cell setup. (#3573) - Serialisation added so models can be written to/read from JSON (#3397)
- Added a
get_parameter_infomethod for models and modified "print_parameter_info" functionality to extract all parameters and their type in a tabular and readable format (#3584) - Mechanical parameters are now a function of stoichiometry and temperature (#3576)
Bug fixes
- Reverted a change to the coupled degradation example notebook that caused it to be unstable for large numbers of cycles (#3691)
- Fixed a bug where simulations using the CasADi-based solvers would fail randomly with the half-cell model (#3494)
- Fixed bug that made identical Experiment steps with different end times crash (#3516)
- Fixed bug in calculation of theoretical energy that made it very slow (#3506)
- The irreversible plating model now increments
f"{Domain} dead lithium concentration [mol.m-3]", notf"{Domain} lithium plating concentration [mol.m-3]"as it did previously. (#3485)
Optimizations
- Updated
jaxandjaxlibto the latest available versions and added Windows (Python 3.9+) support for the Jax solver (#3550)
Breaking changes
- Dropped support for the
[jax]extra, i.e., the Jax solver when running on Python 3.8. The Jax solver is now available on Python 3.9 and above (#3550)
Energy Storage - Battery
- Python
Published by Saransh-cpp almost 2 years ago
PyBaMM - v23.9
Features
- The parameter "Ambient temperature [K]" can now be given as a function of position
(y,z)and timet. The "edge" and "current collector" heat transfer coefficient parameters can also depend on(y,z)(#3257) - Spherical and cylindrical shell domains can now be solved with any boundary conditions (#3237)
- Processed variables now get the spatial variables automatically, allowing plotting of more generic models (#3234)
- Numpy functions now work with PyBaMM symbols (e.g.
np.exp(pybamm.Symbol("a"))returnspybamm.Exp(pybamm.Symbol("a"))). This means that parameter functions can be specified using numpy functions instead of pybamm functions. Additionally, combining numpy arrays with pybamm objects now works (the numpy array is converted to a pybamm array) (#3205) - Half-cell models where graphite - or other negative electrode material of choice - is treated as the positive electrode (#3198)
- Degradation mechanisms
SEI,SEI on cracksandlithium platingcan be made to work on the positive electrode by specifying the relevant options as a 2-tuple. If a tuple is not given andworking electrodeis set toboth, they will be applied on the negative electrode only. (#3198) - Added an example notebook to demonstrate how to use half-cell models (#3198)
- Added option to use an empirical hysteresis model for the diffusivity and exchange-current density (#3194)
- Double-layer capacity can now be provided as a function of temperature (#3174)
pybamm_install_jaxis deprecated. It is now replaced withpip install pybamm[jax](#3163)- Implement the MSMR model (#3116)
- Added new example notebook
rpt-experimentto demonstrate how to set up degradation experiments with RPTs (#2851)
Bug fixes
- Fixed a bug where the JaxSolver would fails when using GPU support with no input parameters (#3423)
- Make pybamm importable with minimal dependencies (#3044, #3475)
- Fixed a bug where supplying an initial soc did not work with half cell models (#3456)
- Fixed a bug where empty lists passed to QuickPlot resulted in an IndexError and did not return a meaningful error message (#3359)
- Fixed a bug where there was a missing thermal conductivity in the thermal pouch cell models (#3330)
- Fixed a bug that caused incorrect results of “{Domain} electrode thickness change [m]” due to the absence of dimension for the variable
electrode_thickness_change(#3329). - Fixed a bug that occured in
check_ys_are_not_too_largewhen trying to referencey-slicewhere the referenced variable was not apybamm.StateVector(#3313 - Fixed a bug with
_Heaviside._evaluate_for_shapewhich meant some expressions involving heaviside function and subtractions did not work (#3306) - Attributes of
pybamm.Simulationobjects (models, parameter values, geometries, choice of solver, and output variables) are now private and as such cannot be edited in-place after the simulation has been created (#3267 - Fixed bug causing incorrect activation energies using
create_from_bpx()(#3242) - Fixed a bug where the "basic" lithium-ion models gave incorrect results when using nonlinear particle diffusivity (#3207)
- Particle size distributions now work with SPMe and NewmanTobias models (#3207)
- Attempting to set
working electrodetonegativenow triggers anOptionError. Instead, set it topositiveand use what would normally be the negative electrode as the positive electrode. (#3198) - Fix to simulate c_rate steps with drive cycles (#3186)
- Always save last cycle in experiment, to fix issues with
starting_solutionandlast_state(#3177) - Fix simulations with
starting_solutionto work withstart_timeexperiments (#3177) - Fix SEI Example Notebook (#3166)
- Thevenin() model is now constructed with standard variables:
Time [s],Time [min],Time [h](#3143) - Error generated when invalid parameter values are passed (#3132)
- Parameters in
Prada2013have been updated to better match those given in the paper, which is a 2.3 Ah cell, instead of the mix-and-match with the 1.1 Ah cell from Lain2019 (#3096) - The
OneDimensionalXthermal model has been updated to account for edge/tab cooling and account for the current collector volumetric heat capacity. It now gives the correct behaviour compared with a lumped model with the correct total heat transfer coefficient and surface area for cooling. (#3042)
Optimizations
- Improved how steps are processed in simulations to reduce memory usage (#3261)
- Added parameter list support to JAX solver, permitting multithreading / GPU execution (#3121)
Breaking changes
- The parameter "Exchange-current density for lithium plating [A.m-2]" has been renamed to "Exchange-current density for lithium metal electrode [A.m-2]" when referring to the lithium plating reaction on the surface of a lithium metal electrode (#3445)
- Dropped support for i686 (32-bit) architectures on GNU/Linux distributions (#3412)
- The class
pybamm.thermal.OneDimensionalXhas been moved topybamm.thermal.pouch_cell.OneDimensionalXto reflect the fact that the model formulation implicitly assumes a pouch cell geometry (#3257) - The "lumped" thermal option now always used the parameters "Cell cooling surface area [m2]", "Cell volume [m3]" and "Total heat transfer coefficient [W.m-2.K-1]" to compute the cell cooling regardless of the chosen "cell geometry" option. The user must now specify the correct values for these parameters instead of them being calculated based on e.g. a pouch cell. An
OptionWarningis raised to let users know to update their parameters (#3257) - Numpy functions now work with PyBaMM symbols (e.g.
np.exp(pybamm.Symbol("a"))returnspybamm.Exp(pybamm.Symbol("a"))). This means that parameter functions can be specified using numpy functions instead of pybamm functions. Additionally, combining numpy arrays with pybamm objects now works (the numpy array is converted to a pybamm array) (#3205) - The
SEI,SEI on cracksandlithium platingsubmodels can now be used on either electrode, which means the__init__functions for the relevant classes now havedomainas a required argument (#3198) - Likewise, the names of all variables corresponding to those submodels now have domains. For example, instead of
SEI thickness [m], useNegative SEI thickness [m]orPositive SEI thickness [m]. (#3198) - If
options["working electrode"] == "both"and eitherSEI,SEI on cracksorlithium platingare not provided as tuples, they are automatically made into tuples. This directly modifiesextra_options, notdefault_optionsto ensure the other changes todefault_optionsstill happen when required. (#3198) - Added option to use an empirical hysteresis model for the diffusivity and exchange-current density (#3194)
- Double-layer capacity can now be provided as a function of temperature (#3174)
pybamm_install_jaxis deprecated. It is now replaced withpip install pybamm[jax](#3163)- PyBaMM now has optional dependencies that can be installed with the pattern
pip install pybamm[option]e.g.pybamm[plot](#3044, #3475)
Energy Storage - Battery
- Python
Published by Saransh-cpp about 2 years ago
PyBaMM - v23.9rc1
Bug fixes
- Fixed a bug where the JaxSolver would fails when using GPU support with no input parameters (#3423)
- Make pybamm importable with minimal dependencies (#3044, #3475)
- Fixed a bug where supplying an initial soc did not work with half cell models (#3456)
Energy Storage - Battery
- Python
Published by Saransh-cpp about 2 years ago
PyBaMM - v23.9rc0
Features
- The parameter "Ambient temperature [K]" can now be given as a function of position
(y,z)and timet. The "edge" and "current collector" heat transfer coefficient parameters can also depend on(y,z)(#3257) - Spherical and cylindrical shell domains can now be solved with any boundary conditions (#3237)
- Processed variables now get the spatial variables automatically, allowing plotting of more generic models (#3234)
- Numpy functions now work with PyBaMM symbols (e.g.
np.exp(pybamm.Symbol("a"))returnspybamm.Exp(pybamm.Symbol("a"))). This means that parameter functions can be specified using numpy functions instead of pybamm functions. Additionally, combining numpy arrays with pybamm objects now works (the numpy array is converted to a pybamm array) (#3205) - Half-cell models where graphite - or other negative electrode material of choice - is treated as the positive electrode (#3198)
- Degradation mechanisms
SEI,SEI on cracksandlithium platingcan be made to work on the positive electrode by specifying the relevant options as a 2-tuple. If a tuple is not given andworking electrodeis set toboth, they will be applied on the negative electrode only. (#3198) - Added an example notebook to demonstrate how to use half-cell models (#3198)
- Added option to use an empirical hysteresis model for the diffusivity and exchange-current density (#3194)
- Double-layer capacity can now be provided as a function of temperature (#3174)
pybamm_install_jaxis deprecated. It is now replaced withpip install pybamm[jax](#3163)- Implement the MSMR model (#3116)
- Added new example notebook
rpt-experimentto demonstrate how to set up degradation experiments with RPTs (#2851)
Bug fixes
- Fixed a bug where empty lists passed to QuickPlot resulted in an IndexError and did not return a meaningful error message (#3359)
- Fixed a bug where there was a missing thermal conductivity in the thermal pouch cell models (#3330)
- Fixed a bug that caused incorrect results of “{Domain} electrode thickness change [m]” due to the absence of dimension for the variable
electrode_thickness_change(#3329). - Fixed a bug that occured in
check_ys_are_not_too_largewhen trying to referencey-slicewhere the referenced variable was not apybamm.StateVector(#3313 - Fixed a bug with
_Heaviside._evaluate_for_shapewhich meant some expressions involving heaviside function and subtractions did not work (#3306) - Attributes of
pybamm.Simulationobjects (models, parameter values, geometries, choice of solver, and output variables) are now private and as such cannot be edited in-place after the simulation has been created (#3267 - Fixed bug causing incorrect activation energies using
create_from_bpx()(#3242) - Fixed a bug where the "basic" lithium-ion models gave incorrect results when using nonlinear particle diffusivity (#3207)
- Particle size distributions now work with SPMe and NewmanTobias models (#3207)
- Attempting to set
working electrodetonegativenow triggers anOptionError. Instead, set it topositiveand use what would normally be the negative electrode as the positive electrode. (#3198) - Fix to simulate c_rate steps with drive cycles (#3186)
- Always save last cycle in experiment, to fix issues with
starting_solutionandlast_state(#3177) - Fix simulations with
starting_solutionto work withstart_timeexperiments (#3177) - Fix SEI Example Notebook (#3166)
- Thevenin() model is now constructed with standard variables:
Time [s],Time [min],Time [h](#3143) - Error generated when invalid parameter values are passed (#3132)
- Parameters in
Prada2013have been updated to better match those given in the paper, which is a 2.3 Ah cell, instead of the mix-and-match with the 1.1 Ah cell from Lain2019 (#3096) - The
OneDimensionalXthermal model has been updated to account for edge/tab cooling and account for the current collector volumetric heat capacity. It now gives the correct behaviour compared with a lumped model with the correct total heat transfer coefficient and surface area for cooling. (#3042)
Optimizations
- Improved how steps are processed in simulations to reduce memory usage (#3261)
- Added parameter list support to JAX solver, permitting multithreading / GPU execution (#3121)
Breaking changes
- Dropped support for i686 (32-bit) architectures on GNU/Linux distributions (#3412)
- The class
pybamm.thermal.OneDimensionalXhas been moved topybamm.thermal.pouch_cell.OneDimensionalXto reflect the fact that the model formulation implicitly assumes a pouch cell geometry (#3257) - The "lumped" thermal option now always used the parameters "Cell cooling surface area [m2]", "Cell volume [m3]" and "Total heat transfer coefficient [W.m-2.K-1]" to compute the cell cooling regardless of the chosen "cell geometry" option. The user must now specify the correct values for these parameters instead of them being calculated based on e.g. a pouch cell. An
OptionWarningis raised to let users know to update their parameters (#3257) - Numpy functions now work with PyBaMM symbols (e.g.
np.exp(pybamm.Symbol("a"))returnspybamm.Exp(pybamm.Symbol("a"))). This means that parameter functions can be specified using numpy functions instead of pybamm functions. Additionally, combining numpy arrays with pybamm objects now works (the numpy array is converted to a pybamm array) (#3205) - The
SEI,SEI on cracksandlithium platingsubmodels can now be used on either electrode, which means the__init__functions for the relevant classes now havedomainas a required argument (#3198) - Likewise, the names of all variables corresponding to those submodels now have domains. For example, instead of
SEI thickness [m], useNegative SEI thickness [m]orPositive SEI thickness [m]. (#3198) - If
options["working electrode"] == "both"and eitherSEI,SEI on cracksorlithium platingare not provided as tuples, they are automatically made into tuples. This directly modifiesextra_options, notdefault_optionsto ensure the other changes todefault_optionsstill happen when required. (#3198) - Added option to use an empirical hysteresis model for the diffusivity and exchange-current density (#3194)
- Double-layer capacity can now be provided as a function of temperature (#3174)
pybamm_install_jaxis deprecated. It is now replaced withpip install pybamm[jax](#3163)- PyBaMM now has optional dependencies that can be installed with the pattern
pip install pybamm[option]e.g.pybamm[plot](#3044)
Energy Storage - Battery
- Python
Published by Saransh-cpp over 2 years ago
PyBaMM - v23.5
Features
- Enable multithreading in IDAKLU solver (#2947)
- If a solution contains cycles and steps, the cycle number and step number are now saved when
solution.save_data()is called (#2931) - Experiments can now be given a
start_timeto define when each step should be triggered (#2616)
Optimizations
- Test
JaxSolver's compatibility with Python3.8,3.9,3.10, and3.11(#2958) - Update Jax (0.4.8) and JaxLib (0.4.7) compatibility (#2927)
Bug fixes
- Realign 'count' increment in CasadiSolver._integrate() (#2986)
- Fix
pybamm_install_odesand update the required SUNDIALS version (#2958) - Fixed a bug where all data included in a BPX was incorrectly assumed to be given as a function of time.(#2957)
- Remove brew install for Mac from the recommended developer installation options for SUNDIALS (#2925)
- Fix
bpx.pyto correctly generate parameters for "lumped" thermal model (#2860)
Breaking changes
- Deprecate functionality to load parameter set from a csv file. Parameter sets must now be provided as python dictionaries (#2959)
Energy Storage - Battery
- Python
Published by brosaplanella over 2 years ago
PyBaMM - v23.5rc0
Bug fixes
- Realign 'count' increment in CasadiSolver._integrate() (#2986)
Features
- Enable multithreading in IDAKLU solver (#2947)
- If a solution contains cycles and steps, the cycle number and step number are now saved when
solution.save_data()is called (#2931) - Experiments can now be given a
start_timeto define when each step should be triggered (#2616)
Optimizations
- Test
JaxSolver's compatibility with Python3.8,3.9,3.10, and3.11(#2958) - Update Jax (0.4.8) and JaxLib (0.4.7) compatibility (#2927)
- Removed
importlib_metadataas a required dependency for user installations (#3050)
Bug fixes
- Fix
pybamm_install_odesand update the required SUNDIALS version (#2958) - Fixed a bug where all data included in a BPX was incorrectly assumed to be given as a function of time.(#2957)
- Remove brew install for Mac from the recommended developer installation options for SUNDIALS (#2925)
- Fix
bpx.pyto correctly generate parameters for "lumped" thermal model (#2860)
Breaking changes
- Deprecate functionality to load parameter set from a csv file. Parameter sets must now be provided as python dictionaries (#2959)
Energy Storage - Battery
- Python
Published by brosaplanella over 2 years ago
PyBaMM - v23.4
Bug fixes
- Parameter sets can now contain the key "chemistry", and will ignore its value (this previously would give errors in some cases) (#2901)
- Fixed a bug in the discretisation of initial conditions of a scaled variable (#2856)
- Fixed keyerror on "all" when getting sensitivities from IDAKLU solver(#2883)
Breaking changes
- Made
Jupytera development only dependency. NowJupyterwould not be a required dependency for users while installingPyBaMM. (#2846)
Energy Storage - Battery
- Python
Published by github-actions[bot] over 2 years ago
PyBaMM - v23.3
Features
- Added option to limit the number of integrators stored in CasadiSolver, which is particularly relevant when running simulations back-to-back #2823
- Added new variables, related to electrode balance, for the
ElectrodeSOHmodel (#2807) - Added method to calculate maximum theoretical energy. (#2777) and add to summary variables (#2781)
- Renamed "Terminal voltage [V]" to just "Voltage [V]". "Terminal voltage [V]" can still be used and will return the same value as "Voltage [V]". (#2740)
- Added "Negative electrode surface potential difference at separator interface [V]", which is the value of the surface potential difference (
phi_s - phi_e) at the anode/separator interface, commonly controlled in fast-charging algorithms to avoid plating. Also added "Positive electrode surface potential difference at separator interface [V]". (#2740) - Added "Bulk open-circuit voltage [V]", which is the open-circuit voltage as calculated from the bulk particle concentrations. The old variable "Measured open circuit voltage [V]", which referred to the open-circuit potential as calculated from the surface particle concentrations, has been renamed to "Surface open-circuit voltage [V]". (#2740) "Bulk open-circuit voltage [V]" was briefly named "Open-circuit voltage [V]", but this was changed in (#2845)
- Added an example for
plot_voltage_components, explaining what the different voltage components are. (#2740)
Bug fixes
- Fixed excessive RAM consumption when running multiple simulations (#2823)
- Fixed a bug where variable bounds could not contain
InputParameters(#2795) - Improved
model.latexify()to have a cleaner and more readable output (#2764) - Fixed electrolyte conservation in the case of concentration-dependent transference number (#2758)
- Fixed
plot_voltage_componentsso that the sum of overpotentials is now equal to the voltage (#2740) - Fixed use of last_state as starting_solution in Simulation.solve() (#2822)
Optimizations
Breaking changes
ElectrodeSOH.solvenow returns a{str: float}dict instead of apybamm.Solutionobject (to avoid having to do.data[0]every time). In any code that usessol = ElectrodeSOH.solve(),sol[key].data[0]should be replaced withsol[key]. (#2779)- Removed "... cation signed stoichiometry" and "... electrons in reaction" parameters, they are now hardcoded. (#2778)
- When using
solver.step(), the first time point in the step is shifted bypybamm.settings.step_start_offset(default 1 ns) to avoid having duplicate times in the solution steps from the end of one step and the start of the next. (#2773) - Renamed "Measured open circuit voltage [V]" to "Surface open-circuit voltage [V]". This variable was calculated from surface particle concentrations, and hence "hid" the overpotential from particle gradients. The new variable "Bulk open-circuit voltage [V]" is calculated from bulk particle concentrations instead. (#2740)
- Renamed all references to "open circuit" to be "open-circuit" instead. (#2740)
- Renamed parameter "1 + dlnf/dlnc" to "Thermodynamic factor". (#2727)
- All PyBaMM models are now dimensional. This has been benchmarked against dimensionless models and found to give around the same solve time. Implementing dimensional models greatly reduces the barrier to entry for adding new models. However, this comes with several breaking changes: (i) the
timescaleandlength_scalesattributes of a model have been removed (they are no longer needed) (ii) several dimensionless variables are no longer defined, but the corresponding dimensional variables can still be accessed by adding the units to the name (iii) some parameters used only for non-dimensionalization, such as "Typical current [A]", have been removed (#2419)
Energy Storage - Battery
- Python
Published by brosaplanella almost 3 years ago
PyBaMM - v23.2
Features
- Added an option for using a banded jacobian and sundials banded solvers for the IDAKLU solve #2677
- The "particle size" option can now be a tuple to allow different behaviour in each electrode(#2672).
- Added temperature control to experiment class. #2518
Bug fixes
- Fixed current_sigmoid_ocp to be valid for both electrodes (#2719).
- Fixed the length scaling for the first dimension of r-R plots (#2663).
Energy Storage - Battery
- Python
Published by github-actions[bot] almost 3 years ago
PyBaMM - v23.1
Features
- Changed linting from
flake8toruff(#2630). - Changed docs theme to pydata theme and start to improve docs in general (#2618).
- New
contact resistanceoption, new parameterContact resistance [Ohm]and new variableContact overpotential [V](#2598). - Steps in
Experimentcan now be tagged and cycle numbers be searched based on those tags (#2593).
Bug fixes
- Fixed a bug where the solid phase conductivity was double-corrected for tortuosity when loading parameters from a BPX file (#2638).
- Changed termination from "success" to "final time" for algebraic solvers to match ODE/DAE solvers (#2613).
Energy Storage - Battery
- Python
Published by github-actions[bot] almost 3 years ago
PyBaMM - v22.12
Features
- Added functionality to create
pybamm.ParameterValuesfrom a BPX standard JSON file (#2555). - Allow the option "surface form" to be "differential" in the
MPM(#2533) - Added variables "Loss of lithium due to loss of active material in negative/positive electrode [mol]". These should be included in the calculation of "total lithium in system" to make sure that lithium is truly conserved. (#2529)
initial_soccan now be a string "x V", in which case the simulation is initialized to start from that voltage (#2508)- The
ElectrodeSOHsolver can now calculate electrode balance based on a target "cell capacity" (requires cell capacity "Q" as input), as well as the default "cyclable cell capacity" (requires cyclable lithium capacity "Q_Li" as input). Use the keyword argumentknown_valueto control which is used. (#2508)
Bug fixes
- Fixed bug with
EntryPointsin Spyder IDE (#2584) - Fixed electrolyte conservation when options {"surface form": "algebraic"} are used
- Fixed "constant concentration" electrolyte model so that "porosity times concentration" is conserved when porosity changes (#2529)
- Fix installation on
Google Colab(pybtexandColabissue) (#2526)
Breaking changes
- Renamed "Negative/Positive electrode SOC" to "Negative/Positive electrode stoichiometry" to avoid confusion with cell SOC (#2529)
- Removed external variables and submodels. InputParameter should now be used in all cases (#2502)
- Trying to use a solver to solve multiple models results in a RuntimeError exception (#2481)
- Inputs for the
ElectrodeSOHsolver are now (i) "Q_Li", the total cyclable capacity of lithium in the electrodes (previously "n_Li", the total number of moles, n_Li = 3600/F * Q_Li) (ii) "Q_n", the capacity of the negative electrode (previously "C_n"), and "Q_p", the capacity of the positive electrode (previously "C_p") (#2508)
Energy Storage - Battery
- Python
Published by github-actions[bot] about 3 years ago
PyBaMM - v22.11
Features
- Updated parameter sets so that interpolants are created explicitly in the parameter set python file. This does not change functionality but allows finer control, e.g. specifying a "cubic" interpolator instead of the default "linear" (#2510)
- Equivalent circuit models (#2478)
- New Idaklu solver options for jacobian type and linear solver, support Sundials v6 (#2444)
- Added
scaleandreferenceattributes toVariableobjects, which can be use to make the ODE/DAE solver better conditioned (#2440) - SEI reactions can now be asymmetric (#2425)
Bug fixes
- Switched from
pkg_resourcestoimportlib_metadatafor handling entry points (#2500) - Fixed some bugs related to processing
FunctionParametertoInterpolant(#2494)
Optimizations
ParameterValuesnow avoids trying to process children if a function parameter is an object that doesn't depend on its children (#2477)- Implemented memoization via
cacheandcached_propertyfrom functools (#2465) - Added more rules for simplifying expressions, especially around Concatenations. Also, meshes constructed from multiple domains are now cached (#2443)
- Added more rules for simplifying expressions. Constants in binary operators are now moved to the left by default (e.g.
x*2returns2*x) (#2424)
Breaking changes
- Interpolants created from parameter data are now "linear" by default (was "cubic") (#2494)
- Renamed entry point for parameter sets to
pybamm_parameter_sets(#2475) - Removed code for generating
ModelingToolkitproblems (#2432) - Removed
FirstOrderandCompositelead-acid models, and some submodels specific to those models (#2431)
Energy Storage - Battery
- Python
Published by tinosulzer about 3 years ago
PyBaMM - v22.10
Features
- Third-party parameter sets can be added by registering entry points to
pybamm_parameter_set(#2396) - Added three-dimensional interpolation (#2380)
Bug fixes
pybamm.have_julia()now checks that julia is properly configured (#2402)- For simulations with events that cause the simulation to stop early, the sensitivities could be evaluated incorrectly to zero (#2337)
Optimizations
- Reformatted how simulations with experiments are built (#2395)
- Added small perturbation to initial conditions for casadi solver. This seems to help the solver converge better in some cases (#2356)
- Added
ExplicitTimeIntegralfunctionality to move variables which do not appear anywhere on the rhs to a new location, and to integrate those variables explicitly whengetis called by the solution object. (#2348) - Added more rules for simplifying expressions (#2211)
- Sped up calculations of Electrode SOH variables for summary variables (#2210)
Breaking change
- Removed
pybamm.SymbolReplaceras it is no longer needed to set up simulations with experiments, which is the only place where it was being used (#2395) - Removed
get_infinite_nested_dict,BaseModel.check_default_variables_dictionaries, andDiscretisation.create_jacobianmethods, which were not used by any other functionality in the repository (#2384) - Dropped support for Python 3.7 after the release of Numpy v1.22.0 (#2379)
- Removed parameter cli tools (add/edit/remove parameters). Parameter sets can now more easily be added via python scripts. (#2342)
- Parameter sets should now be provided as single python files containing all parameters and functions. Parameters provided as "data" (e.g. OCP vs SOC) can still be csv files, but must be either in the same folder as the parameter file or in a subfolder called "data/". See for example Ai2020 (#2342)
Energy Storage - Battery
- Python
Published by github-actions[bot] about 3 years ago
PyBaMM - v22.9
Features
- Added function
pybamm.get_git_commit_info(), which returns information about the last git commit, useful for reproducibility (#2293) - Added SEI model for composite electrodes (#2290)
- For experiments, the simulation now automatically checks and skips steps that cannot be performed (e.g. "Charge at 1C until 4.2V" from 100% SOC) (#2212)
Bug fixes
- Arrhenius function for
nmc_OKane2022positive electrode actually gets used now (#2309) - Added
SEI on cracksto loop over all interfacial reactions (#2262) - Fixed
X-averaged SEI on cracks concentrationso it's an average over x only, not y and z (#2262) - Corrected initial state for SEI on cracks (#2262)
Optimizations
- Default options for
particle mechanicsnow dealt with differently in each electrode (#2262) - Sped up calculations of Electrode SOH variables for summary variables (#2210)
Breaking changes
- When creating a
pybamm.Interpolantthe default interpolator is now "linear". Passing data directly toParameterValuesusing the[data]tag will be still used to create a cubic spline interpolant, as before (#2258) - Events must now be defined in such a way that they are positive at the initial conditions (events will be triggered when they become negative, instead of when they change sign in either direction) (#2212)
Energy Storage - Battery
- Python
Published by github-actions[bot] over 3 years ago
PyBaMM - v22.8
Features
- Added
CurrentSigmoidOpenCircuitPotentialmodel to model voltage hysteresis for charge/discharge (#2256) - Added "Chen2020_composite" parameter set for a composite graphite/silicon electrode. (#2256)
- Added new cumulative variables
Throughput capacity [A.h]andThroughput energy [W.h]to standard variables and summary variables, to assist with degradation studies. Throughput variables are only calculated ifcalculate discharge energyis set totrue.Time [s]andTime [h]also added to summary variables. (#2249) - Added
lipf6_OKane2022electrolyte toOKane2022parameter set (#2249) - Reformated submodel structure to allow composite electrodes. Composite positive electrode is now also possible. With current implementation, electrodes can have at most two phases. (#2248)
Bug fixes
- Added new parameter
Ratio of lithium moles to SEI moles(short name z_sei) to fix a bug where this number was incorrectly hardcoded to 1. (#2222) - Changed short name of parameter
Inner SEI reaction proportionfrom alpha_SEI to inner_sei_proportion, to avoid confusion with transfer coefficients. (#2222) - Deleted legacy parameters with short names beta_sei and beta_plating. (#2222)
- Corrected initial SEI thickness for OKane2022 parameter set. (#2218)
Optimizations
- Simplified scaling for the exchange-current density. The dimensionless parameter
C_ris kept, but no longer used anywhere (#2238) - Added limits for variables in some functions to avoid division by zero, sqrt(negative number), etc (#2213)
Breaking changes
- Parameters specific to a (primary/secondary) phase in a domain are doubly nested. e.g.
param.c_n_maxis nowparam.n.prim.c_max(#2248)
Energy Storage - Battery
- Python
Published by github-actions[bot] over 3 years ago
PyBaMM - v22.7
Features
- Moved general code about submodels to
BaseModelinstead ofBaseBatteryModel, making it easier to build custom models from submodels. (#2169) - Events can now be plotted as a regular variable (under the name "Event: event_name", e.g. "Event: Minimum voltage [V]") (#2158)
- Added example showing how to print whether a model is compatible with a parameter set (#2112)
- Added SEI growth on cracks (#2104)
- Added Arrhenius temperature dependence of SEI growth (#2104)
- The "Inner SEI reaction proportion" parameter actually gets used now (#2104)
- New OKane2022 parameter set replaces Chen2020_plating (#2104)
- SEI growth, lithium plating and porosity change can now be set to distributed in
SPMe. There is an additional option calledx-average side reactionswhich allows to set this (note that forSPMit is always x-averaged). (#2099)
Optimizations
- Improved eSOH calculations to be more robust (#2192,#2199)
- The (2x2x2=8) particle diffusion submodels have been consolidated into just three submodels (Fickian diffusion, polynomial profile, and x-averaged polynomial profile) with optional x-averaging and size distribution. Polynomial profile and x-averaged polynomial profile are still two separate submodels, since they deal with surface concentration differently.
- Added error for when solution vector gets too large, to help debug solver errors (#2138)
Bug fixes
- Fixed error reporting for simulation with experiment (#2213)
- Fixed a bug in
Simulationthat caused initial conditions to change when solving an experiment multiple times (#2204) - Fixed labels and ylims in
plot_voltage_components(#2183) - Fixed 2D interpolant (#2180)
- Fixes a bug where the SPMe always builds even when
build=False(#2169) - Some events have been removed in the case where they are constant, i.e. can never be reached (#2158)
- Raise explicit
NotImplementedErrorif trying to callbool()on a pybamm Symbol (e.g. in an if statement condition) (#2141) - Fixed bug causing cut-off voltage to change after setting up a simulation with a model (#2138)
- A single solution cycle can now be used as a starting solution for a simulation (#2138)
Breaking changes
- Exchange-current density functions (and some other functions) now take an additional argument, the maximum particle concentration for that phase (#2134)
- Loss of lithium to SEI on cracks is now a degradation variable, so setting a particle mechanics submodel is now compulsory (NoMechanics will suffice)
Energy Storage - Battery
- Python
Published by brosaplanella over 3 years ago
PyBaMM - v22.6
Features
- Added open-circuit potential as a separate submodel (#2094)
- Added partially reversible lithium plating model and new
OKane2022parameter set to go with it (#2043) - Added
__eq__and__hash__methods forSymbolobjects, using.id(#1978)
Optimizations
- Stoichiometry inputs to OCP functions are now bounded between 1e-10 and 1-1e-10, with singularities at 0 and 1 so that OCP goes to +- infinity (#2095)
Breaking changes
- Changed some dictionary keys to
Symbolinstead ofSymbol.id(internal change only, should not affect external facing functions) (#1978)
Energy Storage - Battery
- Python
Published by github-actions[bot] over 3 years ago
PyBaMM - v22.5
Features
- Added functionality to generate Julia expressions from a model. See PyBaMM.jl for how to use these (#1942))
- Added basic callbacks to the Simulation class, and a LoggingCallback (#1880))
Bug fixes
- Corrected legend order in "plot_voltage_components.py", so each entry refers to the correct overpotential. (#2061)
Breaking changes
- Changed domain-specific parameter names to a nested attribute, e.g.
param.c_n_maxis nowparam.n.c_max(#2063)
Energy Storage - Battery
- Python
Published by github-actions[bot] over 3 years ago
PyBaMM - v22.4
v22.4 - 2022-04-30
Features
- Added a casadi version of the IDKLU solver, which is used for
model.convert_to_format = "casadi"(#2002)
Bug fixes
- Remove old deprecation errors, including those in
parameter_values.pythat caused the simulation if, for example, the reaction rate is re-introduced manually (#2022)
Energy Storage - Battery
- Python
Published by tinosulzer over 3 years ago
PyBaMM - v22.3
Features
- Added "Discharge energy [W.h]", which is the integral of the power in Watts, as an optional output. Set the option "calculate discharge energy" to "true" to get this output ("false" by default, since it can slow down some of the simple models) (#1969))
- Added an option "calculate heat source for isothermal models" to choose whether or not the heat generation terms are computed when running models with the option
thermal="isothermal"(#1958)
Bug fixes
- Fix bug where sensitivity calculation failed if len of
calculate_sensitivitieswas less thaninputs(#1897) - Fixed a bug in the eSOH variable calculation when OCV is given as data (#1975)
- Fixed a bug where isothermal models did not compute any heat source terms (#1958)
Breaking changes
- Dropped support for Windows 32-bit architecture (#1964)
Energy Storage - Battery
- Python
Published by github-actions[bot] almost 4 years ago
PyBaMM - v22.2
Features
- Isothermal models now compute heat source terms (but the temperature remains constant). The models now also account for current collector heating when
dimensionality=0(#1929) - Added new models for power control and resistance control (#1917)
- Initial concentrations can now be provided as a function of
ras well asx(#1866)
Bug fixes
- Fixed a bug where thermal submodels could not be used with half-cells (#1929)
- Parameters can now be imported from a directory having "pybamm" in its name (#1919)
scikit.odesandSUNDIALScan now be installed usingpybamm_install_odes(#1916)
Breaking changes
- The
domainsetter andauxiliary_domainsgetter have been deprecated,domainssetter/getter should be used instead. Thedomaingetter is still active. We now recommend creating symbols withdomains={...}instead ofdomain=..., auxiliary_domains={...}, but the latter is not yet deprecated (#1866)
Energy Storage - Battery
- Python
Published by priyanshuone6 almost 4 years ago
PyBaMM - v22.1
Features
- Half-cell models can now be run with "surface form" (#1913)
- Added option for different kinetics on anode and cathode (#1913)
- Allow
pybamm.Solution.save_data()to return a string if filename is None, and added json to_format option (#1909) - Added an option to force install compatible versions of jax and jaxlib if already installed using CLI (#1881)
Optimizations
- The
Symbolnodes no longer subclassesanytree.NodeMixIn. This removes some checks that were not really needed (#1912)
Bug fixes
- Parameters can now be imported from any given path in
Windows(#1900) - Fixed initial conditions for the EC SEI model (#1895)
- Fixed issue in extraction of sensitivites (#1894)
Energy Storage - Battery
- Python
Published by tinosulzer almost 4 years ago
PyBaMM - v21.12
Features
- Added new kinetics models for asymmetric Butler-Volmer, linear kinetics, and Marcus-Hush-Chidsey (#1858)
- Experiments can be set to terminate when a voltage is reached (across all steps) (#1832)
- Added cylindrical geometry and finite volume method (#1824)
Bug fixes
PyBaMMis now importable inLinuxsystems wherejaxis already installed (#1874)- Simulations with drive cycles now support
initial_soc(#1842) - Fixed bug in expression tree simplification (#1831)
- Solid tortuosity is now correctly calculated with Bruggeman coefficient of the respective electrode (#1773)
Energy Storage - Battery
- Python
Published by brosaplanella about 4 years ago
PyBaMM - v21.11
Features
- The name of a parameter set can be passed to
ParameterValuesas a string, e.g.ParameterValues("Chen2020")(#1822) - Reformatted SEI growth models into a single submodel with conditionals (#1808)
- Stress-induced diffusion is now a separate model option instead of being automatically included when using the particle mechanics submodels (#1797)
Experiments with drive cycles can be solved (#1793)- Added surface area to volume ratio as a factor to the SEI equations (#1790)
- Half-cell SPM and SPMe have been implemented (#1731)
Bug fixes
- Fixed
sympyoperators forArctanandExponential(#1786) - Fixed finite volume discretization in spherical polar coordinates (#1782)
- Fixed bug when using
Experimentwith a pouch cell model (#1707) - Fixed bug when using
Experimentwith a plating model (#1707) - Fixed hack for potentials in the SPMe model (#1707)
Breaking changes
- The
chemistrykeyword argument inParameterValueshas been deprecated. UseParameterValues(chem)instead ofParameterValues(chemistry=chem)(#1822) - Raise error when trying to convert an
Interpolantwith the "pchip" interpolator to CasADI (#1791) - Raise error if
Concatenationis used directly withVariableobjects (concatenationshould be used instead) (#1789) - Made jax, jaxlib and the PyBaMM JaxSolver optional (#1767)
Energy Storage - Battery
- Python
Published by brosaplanella about 4 years ago
PyBaMM - v21.10
Features
- Summary variables can now be user-determined (#1759)
- Added
all_first_statesto theSolutionobject for a simulation with experiment (#1759) - Added a new method (
create_gif) inQuickPlot,SimulationandBatchStudyto create a GIF of a simulation (#1754) - Added more examples for the
BatchStudyclass (#1747) - SEI models can now be included in the half-cell model (#1705)
Bug fixes
- Half-cell model and lead-acid models can now be simulated with
Experiments (#1759) - Removed in-place modification of the solution objects by
QuickPlot(#1747) - Fixed vector-vector multiplication bug that was causing errors in the SPM with constant voltage or power (#1735)
Energy Storage - Battery
- Python
Published by tinosulzer about 4 years ago
PyBaMM - v21.9
Features
- Added thermal parameters (thermal conductivity, specific heat, etc.) to the
Ecker2015parameter set from Zhao et al. (2018) and Hales et al. (2019) (#1683) - Added
plot_summary_variablesto plot and compare summary variables (#1678) - The DFN model can now be used directly (instead of
BasicDFNHalfCell) to simulate a half-cell (#1600)
Breaking changes
- Dropped support for Python 3.6 (#1696)
- The substring 'negative electrode' has been removed from variables related to SEI and lithium plating (e.g. 'Total negative electrode SEI thickness [m]' replaced by 'Total SEI thickness [m]') (#1654)
Energy Storage - Battery
- Python
Published by tinosulzer over 4 years ago
PyBaMM - v21.08
This release introduces:
- the switch to calendar versioning: from now on we will use year.month version number
- sensitivity analysis of solutions with respect to input parameters
- several new models, including many-particle and state-of-health models
- improvement on how CasADI solver's handle events, including a new "fast with events" mode
- several other new features, optimizations, and bug fixes, summarized in CHANGELOG
Energy Storage - Battery
- Python
Published by tinosulzer over 4 years ago
PyBaMM - v0.4.0
This release introduces:
- several new models, including reversible and irreversible plating submodels, submodels for loss of active material, Yang et al.'s (2017) coupled SEI/plating/pore clogging model, and the Newman-Tobias model
- internal optimizations for solving models, particularly for simulating experiments, with more accurate event detection and more efficient numerical methods and post-processing
- parallel solutions of a model with different inputs
- a cleaner installation process for Mac when installing from PyPI, no longer requiring a Homebrew installation of Sundials
- improved plotting functionality, including adding a new 'voltage component' plot
- several other new features, optimizations, and bug fixes, summarized in the CHANGELOG
Energy Storage - Battery
- Python
Published by tinosulzer almost 5 years ago
PyBaMM - v0.3.0
This release introduces a new aging model for particle swelling and cracking, a new reduced-order model (TSPMe), and a parameter set for A123 LFP cells. Additionally, there have been several backend optimizations to speed up model creation and solving, and other minor features and bug fixes. See CHANGELOG for more details.
Energy Storage - Battery
- Python
Published by tinosulzer about 5 years ago
PyBaMM - v0.3.0-beta
This release introduces a new aging model for particle swelling and cracking, a new reduced-order model (TSPMe), and a parameter set for A123 LFP cells. Additionally, there have been several backend optimizations to speed up model creation and solving, and other minor features and bug fixes. See CHANGELOG for more details.
Energy Storage - Battery
- Python
Published by tinosulzer about 5 years ago
PyBaMM - v0.2.4
This release adds new operators for more complex models, some basic sensitivity analysis, a half-cell DFN model, and a spectral volumes spatial method, as well as some small bug fixes. See CHANGELOG for more details.
Energy Storage - Battery
- Python
Published by tinosulzer over 5 years ago
PyBaMM - v0.2.3
This release enables the use of Google Colab for running example notebooks, and adds some small new features and bug fixes. See CHANGELOG for more details.
Energy Storage - Battery
- Python
Published by tinosulzer over 5 years ago
PyBaMM - v0.2.0
This release introduces many new features and optimizations. All models can now be solved using the pip installation - in particular, the DFN can be solved in around 0.1s. Other highlights include an improved user interface, simulations of experimental protocols (GITT, CCCV, etc) and drive cycles, new parameter sets for NCA and LGM50, "input parameters" and "external variables" for quickly solving models with different parameter values and coupling with external software, and general bug fixes and optimizations. See CHANGELOG for more details.
Energy Storage - Battery
- Python
Published by tinosulzer almost 6 years ago
PyBaMM - v0.1.0
This is the first official version of PyBaMM.
Please note that PyBaMM in still under active development, and so the API may change in the future.
Features
Models
Lithium-ion
- Single Particle Model (SPM)
- Single Particle Model with electrolyte (SPMe)
- Doyle-Fuller-Newman (DFN) model
with the following optional physics:
- Thermal effects
- Fast diffusion in particles
- 2+1D (pouch cell)
Lead-acid
- Leading-Order Quasi-Static model
- First-Order Quasi-Static model
- Composite model
- Full model
with the following optional physics:
- Hydrolysis side reaction
- Capacitance effects
- 2+1D
Spatial discretisations
- Finite Volume (1D only)
- Finite Element (scikit, 2D only)
Solvers
- Scipy
- Scikits ODE
- Scikits DAE
- Algebraic (root-finding)
Energy Storage - Battery
- Python
Published by tinosulzer about 6 years ago