Skip to content

Commit 804ea24

Browse files
Merge pull request #1976 from pybamm-team/issue-1970-ocv-data
#1970 fix bug
2 parents 78d1feb + 763274f commit 804ea24

File tree

3 files changed

+12
-17
lines changed

3 files changed

+12
-17
lines changed

CHANGELOG.md

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

88
## Bug fixes
99

10+
- Fixed a bug in the eSOH variable calculation when OCV is given as data ([#1975](https://github.com/pybamm-team/PyBaMM/pull/1975))
1011
- Fixed a bug where isothermal models did not compute any heat source terms ([#1958](https://github.com/pybamm-team/PyBaMM/pull/1958))
1112

1213
## Breaking changes

pybamm/parameters/parameter_values.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,6 @@ def update(self, values, check_conflict=False, check_already_exists=True, path="
299299
if value.startswith("[function]"):
300300
loaded_value = pybamm.load_function(os.path.join(path, value[10:]))
301301
self._dict_items[name] = loaded_value
302-
values[name] = loaded_value
303302
# Data is flagged with the string "[data]" or "[current data]"
304303
elif value.startswith("[current data]") or value.startswith("[data]"):
305304
if value.startswith("[current data]"):
@@ -317,8 +316,6 @@ def update(self, values, check_conflict=False, check_already_exists=True, path="
317316
).to_numpy()
318317
# Save name and data
319318
self._dict_items[name] = (function_name, ([data[:, 0]], data[:, 1]))
320-
values[name] = (function_name, ([data[:, 0]], data[:, 1]))
321-
322319
# parse 2D parameter data
323320
elif value.startswith("[2D data]"):
324321
filename = os.path.join(path, value[9:] + ".json")
@@ -330,14 +327,19 @@ def update(self, values, check_conflict=False, check_already_exists=True, path="
330327
data[0] = [np.array(el) for el in data[0]]
331328
data[1] = np.array(data[1])
332329
self._dict_items[name] = (function_name, data)
333-
values[name] = (function_name, data)
334330

335331
elif value == "[input]":
336332
self._dict_items[name] = pybamm.InputParameter(name)
337333
# Anything else should be a converted to a float
338334
else:
339335
self._dict_items[name] = float(value)
340-
values[name] = float(value)
336+
elif isinstance(value, tuple) and isinstance(value[1], np.ndarray):
337+
# If data is provided as a 2-column array (1D data),
338+
# convert to two arrays for compatibility with 2D data
339+
# see #1805
340+
func_name, data = value
341+
data = ([data[:, 0]], data[:, 1])
342+
self._dict_items[name] = (func_name, data)
341343
else:
342344
self._dict_items[name] = value
343345
# reset processed symbols
@@ -645,9 +647,6 @@ def _process_symbol(self, symbol):
645647
# to create an Interpolant
646648
name, data = function_name
647649

648-
if isinstance(data, np.ndarray):
649-
data = [data[:, 0]], data[:, 1]
650-
651650
if len(data[0]) == 1:
652651
input_data = data[0][0], data[1]
653652

pybamm/solvers/solution.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -551,8 +551,7 @@ def save(self, filename):
551551
pickle.dump(self, f, pickle.HIGHEST_PROTOCOL)
552552

553553
def save_data(
554-
self, filename=None, variables=None,
555-
to_format="pickle", short_names=None
554+
self, filename=None, variables=None, to_format="pickle", short_names=None
556555
):
557556
"""
558557
Save solution data only (raw arrays)
@@ -613,16 +612,12 @@ def save_data(
613612

614613
if to_format == "pickle":
615614
if filename is None:
616-
raise ValueError(
617-
"pickle format must be written to a file"
618-
)
615+
raise ValueError("pickle format must be written to a file")
619616
with open(filename, "wb") as f:
620617
pickle.dump(data_short_names, f, pickle.HIGHEST_PROTOCOL)
621618
elif to_format == "matlab":
622619
if filename is None:
623-
raise ValueError(
624-
"matlab format must be written to a file"
625-
)
620+
raise ValueError("matlab format must be written to a file")
626621
# Check all the variable names only contain a-z, A-Z or _ or numbers
627622
for name in data_short_names.keys():
628623
# Check the string only contains the following ASCII:
@@ -888,7 +883,7 @@ def get_cycle_summary_variables(cycle_solution, esoh_sim):
888883
esoh_sim.parameter_values["Positive electrode OCP [V]"], tuple
889884
):
890885
y_100_min = np.min(
891-
esoh_sim.parameter_values["Positive electrode OCP [V]"][1][:, 0]
886+
esoh_sim.parameter_values["Positive electrode OCP [V]"][1][0][0]
892887
)
893888
x_100_max = (
894889
n_Li * pybamm.constants.F.value / 3600 - y_100_min * C_p

0 commit comments

Comments
 (0)