Base Model#

class pybamm.BaseModel(name='Unnamed model')[source]#

Base model class for other models to extend.

name#

A string representing the name of the model.

Type:

str

submodels#

A dictionary of submodels that the model is composed of.

Type:

dict

use_jacobian#

Whether to use the Jacobian when solving the model (default is True).

Type:

bool

convert_to_format#

Specifies the format to convert the expression trees representing the RHS, algebraic equations, Jacobian, and events. Options are:

  • None: retain PyBaMM expression tree structure.

  • “python”: convert to Python code for evaluating evaluate(t, y) on expressions.

  • “casadi”: convert to CasADi expression tree for Jacobian calculation.

  • “jax”: convert to JAX expression tree.

Default is “casadi”.

Type:

str

is_discretised#

Indicates whether the model has been discretised (default is False).

Type:

bool

y_slices#

Slices of the concatenated state vector after discretisation, used to track different submodels in the full concatenated solution vector.

Type:

None or list

property algebraic#

Returns a dictionary mapping expressions (variables) to expressions that represent the algebraic equations of the model.

property boundary_conditions#

Returns a dictionary mapping expressions (variables) to expressions representing the boundary conditions of the model.

property calc_esoh#

Whether to include eSOH variables in the summary variables.

check_algebraic_equations(post_discretisation)[source]#

Check that the algebraic equations are well-posed. After discretisation, there must be at least one StateVector in each algebraic equation.

check_discretised_or_discretise_inplace_if_0D()[source]#

Discretise model if it isn’t already discretised This only works with purely 0D models, as otherwise the mesh and spatial method should be specified by the user

check_ics_bcs()[source]#

Check that the initial and boundary conditions are well-posed.

check_no_repeated_keys()[source]#

Check that no equation keys are repeated.

check_well_determined(post_discretisation)[source]#

Check that the model is not under- or over-determined.

check_well_posedness(post_discretisation=False)[source]#

Check that the model is well-posed by executing the following tests: - Model is not over- or underdetermined, by comparing keys and equations in rhs and algebraic. Overdetermined if more equations than variables, underdetermined if more variables than equations. - There is an initial condition in self.initial_conditions for each variable/equation pair in self.rhs - There are appropriate boundary conditions in self.boundary_conditions for each variable/equation pair in self.rhs and self.algebraic

Parameters:

post_discretisation (boolean) – A flag indicating tests to be skipped after discretisation

property concatenated_algebraic#

Returns the concatenated algebraic equations for the model after discretisation.

property concatenated_initial_conditions#

Returns the initial conditions for all variables after discretization, providing the initial values for the state variables.

property concatenated_rhs#

Returns the concatenated right-hand side (RHS) expressions for the model after discretisation.

property coupled_variables#

Returns a dictionary mapping strings to expressions representing variables needed by the model but whose equations were set by other models.

property default_geometry#

Returns a dictionary of the default geometry for the model, which is empty by default.

property default_parameter_values#

Returns the default parameter values for the model (an empty set of parameters by default).

property default_quick_plot_variables#

Returns the default variables for quick plotting (None by default).

property default_solver#

Returns the default solver for the model, based on whether it is an ODE/DAE or algebraic model.

property default_spatial_methods#

Returns a dictionary of the default spatial methods for the model, which is empty by default.

property default_submesh_types#

Returns a dictionary of the default submesh types for the model, which is empty by default.

property default_var_pts#

Returns a dictionary of the default variable points for the model, which is empty by default.

classmethod deserialise(properties: dict)[source]#

Create a model instance from a serialised object.

property events#

Returns a dictionary mapping expressions (variables) to expressions that represent the initial conditions for the state variables.

export_casadi_objects(variable_names, input_parameter_order=None)[source]#

Export the constituent parts of the model (rhs, algebraic, initial conditions, etc) as casadi objects.

Parameters:
  • variable_names (list) – Variables to be exported alongside the model structure

  • input_parameter_order (list, optional) – Order in which the input parameters should be stacked. If input_parameter_order=None and len(self.input_parameters) > 1, a ValueError is raised (this helps to avoid accidentally using the wrong order)

Returns:

casadi_dict – Dictionary of {str: casadi object} pairs representing the model in casadi format

Return type:

dict

generate(filename, variable_names, input_parameter_order=None, cg_options=None)[source]#

Generate the model in C, using CasADi.

Parameters:
  • filename (str) – Name of the file to which to save the code

  • variable_names (list) – Variables to be exported alongside the model structure

  • input_parameter_order (list, optional) – Order in which the input parameters should be stacked. If input_parameter_order=None and len(self.input_parameters) > 1, a ValueError is raised (this helps to avoid accidentally using the wrong order)

  • cg_options (dict) – Options to pass to the code generator. See https://web.casadi.org/docs/#generating-c-code

property geometry#

Returns the geometry of the model.

get_parameter_info(by_submodel=False)[source]#

Extracts the parameter information and returns it as a dictionary. To get a list of all parameter-like objects without extra information, use model.parameters.

Parameters:

by_submodel (bool, optional) – Whether to return the parameter info sub-model wise or not (default False)

info(symbol_name)[source]#

Provides helpful summary information for a symbol.

Parameters:

symbol_name (str)

property initial_conditions#

Returns a dictionary mapping expressions (variables) to expressions that represent the initial conditions for the state variables.

property input_parameters#

Returns a list of all input parameter symbols used in the model.

property is_standard_form_dae#

Check if the model is a DAE in standard form with a mass matrix that is all zeros except for along the diagonal, which is either ones or zeros.

property jacobian#

Returns the Jacobian matrix for the model, computed automatically if use_jacobian is True.

property jacobian_algebraic#

Returns the Jacobian matrix for the algebraic part of the model, computed automatically during solver setup if use_jacobian is True.

property jacobian_rhs#

Returns the Jacobian matrix for the right-hand side (RHS) part of the model, computed if use_jacobian is True.

latexify(filename=None, newline=True, output_variables=None)[source]#

Converts all model equations in latex.

Parameters:
  • filename (str (optional)) – Accepted file formats - any image format, pdf and tex Default is None, When None returns all model equations in latex If not None, returns all model equations in given file format.

  • newline (bool (optional)) – Default is True, If True, returns every equation in a new line. If False, returns the list of all the equations.

  • model (Load)

  • pybamm.lithium_ion.SPM() (>>> model =)

  • png (This will returns all model equations in)

  • doctest (>>> model.latexify(newline=False) #)

  • latex (This will return all the model equations in)

  • doctest

  • equations (This will return first five model)

  • doctest

  • equations

  • model.latexify(newline=False)[1 (>>>)

property mass_matrix#

Returns the mass matrix for the system of differential equations after discretisation.

property mass_matrix_inv#

Returns the inverse of the mass matrix for the differential equations after discretisation.

new_copy()[source]#

Creates a copy of the model, explicitly copying all the mutable attributes to avoid issues with shared objects.

property options#

Returns the model options dictionary that allows customization of the model’s behavior.

property param#

Returns a dictionary to store parameter values for the model.

property parameters#

Returns a list of all parameter symbols used in the model.

print_parameter_info(by_submodel=False)[source]#

Print parameter information in a formatted table from a dictionary of parameters

Parameters:

by_submodel (bool, optional) – Whether to print the parameter info sub-model wise or not (default False)

process_parameters_and_discretise(symbol, parameter_values, disc)[source]#

Process parameters and discretise a symbol using supplied parameter values and discretisation. Note: care should be taken if using spatial operators on dimensional symbols. Operators in pybamm are written in non-dimensional form, so may need to be scaled by the appropriate length scale. It is recommended to use this method on non-dimensional symbols.

Parameters:
Returns:

Processed symbol

Return type:

pybamm.Symbol

property rhs#

Returns a dictionary mapping expressions (variables) to expressions that represent the right-hand side (RHS) of the model’s differential equations.

save_model(filename=None, mesh=None, variables=None)[source]#

Write out a discretised model to a JSON file

Parameters:
  • filename (str, optional)

  • provided (The desired name of the JSON file. If no name is)

  • created (one will be)

  • name (based on the model)

  • datetime. (and the current)

set_initial_conditions_from(solution, inplace=True, return_type='model')[source]#

Update initial conditions with the final states from a Solution object or from a dictionary. This assumes that, for each variable in self.initial_conditions, there is a corresponding variable in the solution with the same name and size.

Parameters:
  • solution (pybamm.Solution, or dict) – The solution to use to initialize the model

  • inplace (bool, optional) – Whether to modify the model inplace or create a new model (default True)

  • return_type (str, optional) – Whether to return the model (default) or initial conditions (“ics”)

update(*submodels)[source]#

Update model to add new physics from submodels

Parameters:

submodel (iterable of pybamm.BaseModel) – The submodels from which to create new model

property variables#

Returns a dictionary mapping strings to expressions representing the model’s useful variables.

property variables_and_events#

Returns a dictionary containing both models variables and events.