Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# [Unreleased](https://github.com/pybamm-team/PyBaMM/)

# [v26.4.1](https://github.com/pybamm-team/PyBaMM/tree/v26.4.1) - 2026-04-24

## Bug fixes

- Fixed overly-aggressive removal of solver step caches. ([#5458](https://github.com/pybamm-team/PyBaMM/pull/5458))

# [v26.4.0](https://github.com/pybamm-team/PyBaMM/tree/v26.4.0) - 2026-04-22

## Features
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ keywords:
- "expression tree"
- "python"
- "symbolic differentiation"
version: "26.4.0"
version: "26.4.1"
repository-code: "https://github.com/pybamm-team/PyBaMM"
title: "Python Battery Mathematical Modelling (PyBaMM)"
1 change: 0 additions & 1 deletion src/pybamm/simulation/base_simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,6 @@ def _recompute_initial_conditions(self):
built_model.initial_conditions = processed_ics
built_model.concatenated_initial_conditions = concat_ics

self._solver._model_set_up = {}
self._needs_ic_rebuild = False

def build(self, initial_soc=None, direction=None, inputs=None):
Expand Down
9 changes: 0 additions & 9 deletions src/pybamm/simulation/simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -549,15 +549,6 @@ def _get_built_models(self):
models.extend(self.steps_to_built_models.values())
return models

def _recompute_initial_conditions(self):
super()._recompute_initial_conditions()
# Also clear per-step solver caches so they re-process the updated models
if self.steps_to_built_solvers is not None:
for solver in self.steps_to_built_solvers.values():
solver._model_set_up = {}
if self._built_experiment_solver is not None:
self._built_experiment_solver._model_set_up = {}

def _build_experiment_state_mappers(self, inputs: dict):
self.model_state_mappers = {}
self._compiled_model_state_mappers = {}
Expand Down
20 changes: 20 additions & 0 deletions tests/unit/test_experiments/test_simulation_with_experiment.py
Original file line number Diff line number Diff line change
Expand Up @@ -2057,3 +2057,23 @@ def test_inputs_with_initial_soc(self):

# ICs must differ when inputs change at same SOC
assert ic1 != ic2

@pytest.mark.parametrize("experiment_model_mode", ["legacy", "unified"])
def test_repeated_solves_refresh_initial_soc(self, experiment_model_mode):
model = pybamm.lithium_ion.SPM()
experiment = pybamm.Experiment(["Rest for 10 minutes", "Rest for 10 minutes"])
sim = pybamm.Simulation(
model,
parameter_values=pybamm.ParameterValues("Chen2020"),
experiment=experiment,
experiment_model_mode=experiment_model_mode,
)

sol1 = sim.solve(calc_esoh=False, initial_soc=0.2)
ic1 = sol1["X-averaged negative particle surface concentration"].data[0]

sol2 = sim.solve(calc_esoh=False, initial_soc=0.8)
ic2 = sol2["X-averaged negative particle surface concentration"].data[0]

# Reusing the same Simulation must refresh experiment ICs when SOC changes.
assert ic1 != ic2
Loading