Source code for pybop.models.empirical.base_ecm

from pybop.models.base_model import BaseModel, Inputs


[docs] class ECircuitModel(BaseModel): """ Overwrites and extends `BaseModel` class for circuit-based PyBaMM models. Parameters ---------- pybamm_model : pybamm.BaseModel A subclass of the pybamm Base Model. name : str, optional The name for the model instance, defaulting to "Empirical Base Model". parameter_set : pybamm.ParameterValues or dict, optional The parameters for the model. If None, default parameters provided by PyBaMM are used. geometry : dict, optional The geometry definitions for the model. If None, default geometry from PyBaMM is used. submesh_types : dict, optional The types of submeshes to use. If None, default submesh types from PyBaMM are used. var_pts : dict, optional The discretization points for each variable in the model. If None, default points from PyBaMM are used. spatial_methods : dict, optional The spatial methods used for discretization. If None, default spatial methods from PyBaMM are used. solver : pybamm.Solver, optional The solver to use for simulating the model. If None, the default solver from PyBaMM is used. **model_kwargs : optional Valid PyBaMM model option keys and their values. For example, build : bool, optional If True, the model is built upon creation (default: False). options : dict, optional A dictionary of options to customise the behaviour of the PyBaMM model. """ def __init__( self, pybamm_model, name="Empirical Base Model", parameter_set=None, geometry=None, submesh_types=None, var_pts=None, spatial_methods=None, solver=None, **model_kwargs, ):
[docs] model_options = dict(build=False)
for key, value in model_kwargs.items(): model_options[key] = value
[docs] self.pybamm_model = pybamm_model(**model_options)
[docs] self._unprocessed_model = self.pybamm_model
# Correct OCP if set to default if ( parameter_set is not None and "Open-circuit voltage [V]" in parameter_set.keys() ): default_ocp = self.pybamm_model.default_parameter_values[ "Open-circuit voltage [V]" ] if parameter_set["Open-circuit voltage [V]"] == "default": print("Setting open-circuit voltage to default function") parameter_set["Open-circuit voltage [V]"] = default_ocp super().__init__(name=name, parameter_set=parameter_set) # Set parameters, using either the provided ones or the default
[docs] self.default_parameter_values = self.pybamm_model.default_parameter_values
[docs] self._parameter_set = self._parameter_set or self.default_parameter_values
[docs] self._unprocessed_parameter_set = self._parameter_set
# Define model geometry and discretization self.geometry = geometry or self.pybamm_model.default_geometry self.submesh_types = submesh_types or self.pybamm_model.default_submesh_types self.var_pts = var_pts or self.pybamm_model.default_var_pts self.spatial_methods = ( spatial_methods or self.pybamm_model.default_spatial_methods ) self.solver = solver or self.pybamm_model.default_solver # Internal attributes for the built model are initialized but not set
[docs] self._model_with_set_params = None
[docs] self._built_model = None
[docs] self._built_initial_soc = None
[docs] self._mesh = None
[docs] self._disc = None
[docs] self.geometric_parameters = {}
[docs] def _check_params(self, inputs: Inputs = None, allow_infeasible_solutions=True): """ Check the compatibility of the model parameters. Parameters ---------- inputs : Inputs The input parameters for the simulation. allow_infeasible_solutions : bool, optional If True, infeasible parameter values will be allowed in the optimisation (default: True). Returns ------- bool A boolean which signifies whether the parameters are compatible. """ return True