Skip to content

Commit

Permalink
Revert to _parameter_set
Browse files Browse the repository at this point in the history
  • Loading branch information
NicolaCourtier committed Aug 5, 2024
1 parent cbda2ef commit b19035d
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 29 deletions.
27 changes: 12 additions & 15 deletions pybop/models/base_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def __init__(
"""
self.name = name
if parameter_set is None:
self.parameter_set = None
self._parameter_set = None
elif isinstance(parameter_set, dict):
self.parameter_set = pybamm.ParameterValues(parameter_set)
elif isinstance(parameter_set, pybamm.ParameterValues):
Expand Down Expand Up @@ -221,25 +221,25 @@ def set_params(self, rebuild: bool = False, dataset: Dataset = None):

# Mark any simulation inputs in the parameter set
for key in self.standard_parameters.keys():
self.parameter_set[key] = "[input]"
self._parameter_set[key] = "[input]"

if "Current function [A]" in self.parameter_set.keys():
if "Current function [A]" in self._parameter_set.keys():
if dataset is not None and (not self.rebuild_parameters or not rebuild):
if "Current function [A]" not in self.parameters.keys():
self.current_function = pybamm.Interpolant(
dataset["Time [s]"],
dataset["Current function [A]"],
pybamm.t,
)
self.parameter_set["Current function [A]"] = self.current_function
self._parameter_set["Current function [A]"] = self.current_function
elif rebuild and self.current_function is not None:
self.parameter_set["Current function [A]"] = self.current_function
self._parameter_set["Current function [A]"] = self.current_function

self._model_with_set_params = self.parameter_set.process_model(
self._model_with_set_params = self._parameter_set.process_model(
self._unprocessed_model, inplace=False
)
if self.geometry is not None:
self.parameter_set.process_geometry(self.geometry)
self._parameter_set.process_geometry(self.geometry)
self.pybamm_model = self._model_with_set_params

def rebuild(
Expand Down Expand Up @@ -326,9 +326,9 @@ def classify_and_update_parameters(self, parameters: Parameters):
self.geometry = self.pybamm_model.default_geometry

# Update both the active and unprocessed parameter sets for consistency
if self.parameter_set is not None:
self.parameter_set.update(parameter_dictionary)
self._unprocessed_parameter_set = self.parameter_set
if self._parameter_set is not None:
self._parameter_set.update(parameter_dictionary)
self._unprocessed_parameter_set = self._parameter_set

def reinit(
self, inputs: Inputs, t: float = 0.0, x: Optional[np.ndarray] = None
Expand Down Expand Up @@ -610,7 +610,7 @@ def check_params(
"""
inputs = self.parameters.verify(inputs) or {}
parameter_set = parameter_set or self.parameter_set
parameter_set = parameter_set or self._parameter_set

return self._check_params(
inputs=inputs,
Expand Down Expand Up @@ -722,10 +722,7 @@ def parameter_set(self):

@parameter_set.setter
def parameter_set(self, parameter_set):
if parameter_set is None:
self._parameter_set = None
else:
self._parameter_set = parameter_set.copy()
self._parameter_set = parameter_set.copy()

@property
def model_with_set_params(self):
Expand Down
5 changes: 2 additions & 3 deletions pybop/models/empirical/base_ecm.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,8 @@ def __init__(

# Set parameters, using either the provided ones or the default
self.default_parameter_values = self.pybamm_model.default_parameter_values
if self.parameter_set is None:
self.parameter_set = self.default_parameter_values
self._unprocessed_parameter_set = self.parameter_set
self._parameter_set = self._parameter_set or self.default_parameter_values
self._unprocessed_parameter_set = self._parameter_set

# Define model geometry and discretization
self.geometry = geometry or self.pybamm_model.default_geometry
Expand Down
23 changes: 12 additions & 11 deletions pybop/models/lithium_ion/base_echem.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,8 @@ def __init__(

# Set parameters, using either the provided ones or the default
self.default_parameter_values = self.pybamm_model.default_parameter_values
if self.parameter_set is None:
self.parameter_set = self.default_parameter_values
self._unprocessed_parameter_set = self.parameter_set
self._parameter_set = self._parameter_set or self.default_parameter_values
self._unprocessed_parameter_set = self._parameter_set

# Define model geometry and discretization
self.geometry = geometry or self.pybamm_model.default_geometry
Expand Down Expand Up @@ -166,7 +165,7 @@ def cell_volume(self, parameter_set=None):
float
The total volume of the cell in m3.
"""
parameter_set = parameter_set or self.parameter_set
parameter_set = parameter_set or self._parameter_set

# Calculate cell thickness
cell_thickness = (
Expand Down Expand Up @@ -205,7 +204,7 @@ def cell_mass(self, parameter_set=None):
float
The total mass of the cell in kilograms.
"""
parameter_set = parameter_set or self.parameter_set
parameter_set = parameter_set or self._parameter_set

def mass_density(
active_material_vol_frac, density, porosity, electrolyte_density
Expand Down Expand Up @@ -288,11 +287,11 @@ def approximate_capacity(self, inputs: Inputs):
The nominal cell capacity is updated directly in the model's parameter set.
"""
inputs = self.parameters.verify(inputs)
self.parameter_set.update(inputs)
self._parameter_set.update(inputs)

# Calculate theoretical energy density
theoretical_energy = self._electrode_soh.calculate_theoretical_energy(
self.parameter_set
self._parameter_set
)

# Extract stoichiometries and compute mean values
Expand All @@ -301,13 +300,13 @@ def approximate_capacity(self, inputs: Inputs):
max_sto_neg,
min_sto_pos,
max_sto_pos,
) = self._electrode_soh.get_min_max_stoichiometries(self.parameter_set)
) = self._electrode_soh.get_min_max_stoichiometries(self._parameter_set)
mean_sto_neg = (min_sto_neg + max_sto_neg) / 2
mean_sto_pos = (min_sto_pos + max_sto_pos) / 2

# Calculate average voltage
positive_electrode_ocp = self.parameter_set["Positive electrode OCP [V]"]
negative_electrode_ocp = self.parameter_set["Negative electrode OCP [V]"]
positive_electrode_ocp = self._parameter_set["Positive electrode OCP [V]"]
negative_electrode_ocp = self._parameter_set["Negative electrode OCP [V]"]
try:
average_voltage = positive_electrode_ocp(
mean_sto_pos
Expand All @@ -317,7 +316,9 @@ def approximate_capacity(self, inputs: Inputs):

# Calculate and update nominal capacity
theoretical_capacity = theoretical_energy / average_voltage
self.parameter_set.update({"Nominal cell capacity [A.h]": theoretical_capacity})
self._parameter_set.update(
{"Nominal cell capacity [A.h]": theoretical_capacity}
)

def set_geometric_parameters(self):
"""
Expand Down

0 comments on commit b19035d

Please sign in to comment.