diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ec5e39b8b..d6927f20bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ## Bug fixes +- Fixed a bug that occured in `check_ys_are_not_too_large` when trying to reference `y-slice` where the referenced variable was not a `pybamm.StateVector` ([#3313](https://github.com/pybamm-team/PyBaMM/pull/3313) - Fixed a bug with `_Heaviside._evaluate_for_shape` which meant some expressions involving heaviside function and subtractions did not work ([#3306](https://github.com/pybamm-team/PyBaMM/pull/3306)) - The `OneDimensionalX` thermal 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](https://github.com/pybamm-team/PyBaMM/pull/3042)) - Fixed a bug where the "basic" lithium-ion models gave incorrect results when using nonlinear particle diffusivity ([#3207](https://github.com/pybamm-team/PyBaMM/pull/3207)) diff --git a/pybamm/solvers/solution.py b/pybamm/solvers/solution.py index 411341f887..65c3e0b5a7 100644 --- a/pybamm/solvers/solution.py +++ b/pybamm/solvers/solution.py @@ -308,7 +308,20 @@ def check_ys_are_not_too_large(self): y = y[:, -1] if np.any(y > pybamm.settings.max_y_value): for var in [*model.rhs.keys(), *model.algebraic.keys()]: - y_var = y[model.variables[var.name].y_slices[0]] + var = model.variables[var.name] + # find the statevector corresponding to this variable + statevector = None + for node in var.pre_order(): + if isinstance(node, pybamm.StateVector): + statevector = node + + # there will always be a statevector, but just in case + if statevector is None: # pragma: no cover + raise RuntimeError( + "Cannot find statevector corresponding to variable {}" + .format(var.name) + ) + y_var = y[statevector.y_slices[0]] if np.any(y_var > pybamm.settings.max_y_value): pybamm.logger.error( f"Solution for '{var}' exceeds the maximum allowed value "