Axen Open Circuit Potential#

class pybamm.open_circuit_potential.AxenOpenCircuitPotential(param, domain, reaction, options, phase='primary')#

Class for open-circuit potential (OCP) with hysteresis based on the approach outlined by Axen et al. https://doi.org/10.1016/j.est.2022.103985. This approach tracks the evolution of the hysteresis using an ODE system scaled by the volumetric interfacial current density and a decay rate parameter.

The original method defines the open-circuit potential as OCP = OCP_delithiation + (OCP_lithiation - OCP_delithiation) * h, where h is the hysteresis state. By allowing h to vary between 0 and 1, the OCP approaches OCP_lithiation when h tends to 1 and OCP_delithiation when h tends to 0. These interval limits are achieved by defining the ODE system as dh/dt = S_lith * (1 - h) for lithiation and dh/dt = S_delith * h for delithiation, where S_lith and S_delith are rate coefficients.

The original implementation is modified to ensure h varies between -1 and 1, thus assuming an unified framework within pybamm. This new variation interval is obtained with the ODE system dh/dt = S_lith * (1 + h) for lithiation and dh/dt = S_delith * (1 - h) for delithiation. Now, OCP = OCP_delithiation + (OCP_lithiation - OCP_delithiation) * (1 - h) / 2, implying that the OCP approaches OCP_lithiation when h tends to -1 and OCP_delithiation when h tends to 1.

Extends: pybamm.models.submodels.interface.open_circuit_potential.base_ocp.BaseOpenCircuitPotential

View inheritance diagram for this model

Inheritance diagram of pybamm.models.submodels.interface.open_circuit_potential.axen_ocp.AxenOpenCircuitPotential

get_coupled_variables(variables)#

A public method that creates and returns the variables in a submodel which require variables in other submodels to be set first. For example, the exchange current density requires the concentration in the electrolyte to be created before it can be created. If a variable can be created independent of other submodels then it should be created in ‘get_fundamental_variables’ instead of this method.

Parameters:

variables (dict) – The variables in the whole model.

Returns:

The variables created in this submodel which depend on variables in other submodels.

Return type:

dict

get_fundamental_variables()#

A public method that creates and returns the variables in a submodel which can be created independent of other submodels. For example, the electrolyte concentration variables can be created independent of whether any other variables have been defined in the model. As a rule, if a variable can be created without variables from other submodels, then it should be placed in this method.

Returns:

The variables created by the submodel which are independent of variables in other submodels.

Return type:

dict

set_initial_conditions(variables)#

A method to set the initial conditions for the submodel. Note: this method modifies the state of self.initial_conditions. Unless overwritten by a submodel, the default behaviour of ‘pass’ is used as implemented in pybamm.BaseSubModel.

Parameters:

variables (dict) – The variables in the whole model.

set_rhs(variables)#

A method to set the right hand side of the differential equations which contain a time derivative. Note: this method modifies the state of self.rhs. Unless overwritten by a submodel, the default behaviour of ‘pass’ is used as implemented in pybamm.BaseSubModel.

Parameters:

variables (dict) – The variables in the whole model.