Releases: pybamm-team/PyBaMM
Releases · pybamm-team/PyBaMM
v24.1rc1
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)
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)
v23.9rc1
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)
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)
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)
v23.4.1
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)
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)