Skip to content

Commit acff2a2

Browse files
authored
fix calculation of bulk ocp in hysteresis models (#5169)
* fix calculation of bulk ocp * remove print statements
1 parent 6618fe1 commit acff2a2

File tree

5 files changed

+16
-15
lines changed

5 files changed

+16
-15
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
## Bug fixes
1111

12+
- Fix a bug in the calculation of "Bulk" OCP terms in hysteresis models ([#5169](https://github.com/pybamm-team/PyBaMM/pull/5169))
1213
- Fixed a bug where the final duration of a drive cycle would not be inferred correctly. ([#5153](https://github.com/pybamm-team/PyBaMM/pull/5153))
1314

1415
# [v25.8.0](https://github.com/pybamm-team/PyBaMM/tree/v25.8.0) - 2025-08-04

src/pybamm/models/submodels/interface/open_circuit_potential/base_hysteresis_ocp.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,15 @@ def _get_coupled_variables(self, variables):
7878

7979
if self.reaction == "lithium-ion main":
8080
# Get equilibrium, delithiation and lithiation OCPs
81-
sto_surf, T = self._get_stoichiometry_and_temperature(variables)
81+
sto_surf, sto_bulk, T, T_bulk = self._get_stoichiometry_and_temperature(
82+
variables
83+
)
8284
U_eq = self.phase_param.U(sto_surf, T)
8385
U_eq_x_av = self.phase_param.U(sto_surf, T)
8486
U_lith = self.phase_param.U(sto_surf, T, "lithiation")
85-
U_lith_x_av = pybamm.x_average(U_lith)
87+
U_lith_bulk = self.phase_param.U(sto_bulk, T_bulk)
8688
U_delith = self.phase_param.U(sto_surf, T, "delithiation")
87-
U_delith_x_av = pybamm.x_average(U_delith)
89+
U_delith_bulk = self.phase_param.U(sto_bulk, T_bulk, "delithiation")
8890

8991
H = U_lith - U_delith
9092
H_x_av = pybamm.x_average(H)
@@ -122,11 +124,8 @@ def _get_coupled_variables(self, variables):
122124
ocp_surf = (1 + h) / 2 * U_delith + (1 - h) / 2 * U_lith
123125

124126
# Size average
125-
U_delith_s_av = pybamm.size_average(U_delith_x_av)
126-
U_lith_s_av = pybamm.size_average(U_lith_x_av)
127127
h_s_av = pybamm.size_average(h_x_av)
128-
129-
ocp_bulk = (1 + h_s_av) / 2 * U_delith_s_av + (1 - h_s_av) / 2 * U_lith_s_av
128+
ocp_bulk = (1 + h_s_av) / 2 * U_delith_bulk + (1 - h_s_av) / 2 * U_lith_bulk
130129
dUdT = self.phase_param.dUdT(sto_surf)
131130

132131
variables.update(self._get_standard_ocp_variables(ocp_surf, ocp_bulk, dUdT))

src/pybamm/models/submodels/interface/open_circuit_potential/base_ocp.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ def _get_stoichiometry_and_temperature(self, variables):
132132
domain_options = getattr(self.options, domain)
133133
phase_name = self.phase_name
134134

135+
sto_bulk = variables[f"{Domain} electrode {phase_name}stoichiometry"]
135136
T = variables[f"{Domain} electrode temperature [K]"]
137+
T_bulk = pybamm.xyzs_average(T)
136138

137139
# For "particle-size distribution" models, take distribution version
138140
# of sto_surf that depends on particle size.
@@ -156,4 +158,4 @@ def _get_stoichiometry_and_temperature(self, variables):
156158
sto_surf = sto_surf.orphans[0]
157159
T = T.orphans[0]
158160

159-
return sto_surf, T
161+
return sto_surf, sto_bulk, T, T_bulk

src/pybamm/models/submodels/interface/open_circuit_potential/one_state_differential_capacity_hysteresis_ocp.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,8 @@ def get_coupled_variables(self, variables):
4747

4848
if self.reaction == "lithium-ion main":
4949
# determine dQ/dU
50-
sto_surf, T = self._get_stoichiometry_and_temperature(variables)
50+
sto_surf, _, T, T_bulk = self._get_stoichiometry_and_temperature(variables)
5151
sto_surf = pybamm.size_average(sto_surf)
52-
T_bulk = pybamm.xyz_average(pybamm.size_average(T))
5352
if phase_name == "":
5453
Q_mag = variables[f"{Domain} electrode capacity [A.h]"]
5554
else:

src/pybamm/models/submodels/interface/open_circuit_potential/single_ocp.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ def get_coupled_variables(self, variables):
1212
phase_name = self.phase_name
1313

1414
if self.reaction == "lithium-ion main":
15-
sto_surf, T = self._get_stoichiometry_and_temperature(variables)
15+
sto_surf, sto_bulk, T, T_bulk = self._get_stoichiometry_and_temperature(
16+
variables
17+
)
1618

1719
ocp_surf = self.phase_param.U(sto_surf, T)
18-
dUdT = self.phase_param.dUdT(sto_surf)
19-
20-
sto_bulk = variables[f"{Domain} electrode {phase_name}stoichiometry"]
21-
T_bulk = pybamm.xyzs_average(T)
2220
ocp_bulk = self.phase_param.U(sto_bulk, T_bulk)
2321

22+
dUdT = self.phase_param.dUdT(sto_surf)
23+
2424
variables.update(
2525
{
2626
f"{Domain} electrode {phase_name}equilibrium open-circuit potential [V]": ocp_surf,

0 commit comments

Comments
 (0)