Source code for pybamm.models.submodels.interface.open_circuit_potential.single_ocp

#
# Single open-circuit potential, same for charge and discharge
#
import pybamm

from . import BaseOpenCircuitPotential


[docs] class SingleOpenCircuitPotential(BaseOpenCircuitPotential):
[docs] def get_coupled_variables(self, variables): domain, Domain = self.domain_Domain phase_name = self.phase_name if self.reaction == "lithium-ion main": sto_surf, sto_bulk, T, T_bulk = self._get_stoichiometry_and_temperature( variables ) ocp_surf = self.phase_param.U(sto_surf, T) ocp_bulk = self.phase_param.U(sto_bulk, T_bulk) dUdT = self.phase_param.dUdT(sto_surf) variables.update( { f"{Domain} electrode {phase_name}equilibrium open-circuit potential [V]": ocp_surf, f"X-averaged {domain} electrode {phase_name}equilibrium open-circuit potential [V]": pybamm.x_average( ocp_surf ), } ) elif self.reaction == "lithium metal plating": T = variables[f"{Domain} electrode temperature [K]"] ocp_surf = 0 * T ocp_bulk = pybamm.Scalar(0) dUdT = 0 * T elif self.reaction == "lead-acid main": c_e = variables[f"{Domain} electrolyte concentration [mol.m-3]"] # If c_e was broadcast, take only the orphan if isinstance(c_e, pybamm.Broadcast): c_e = c_e.orphans[0] ocp_surf = self.phase_param.U(c_e, self.param.T_init) dUdT = pybamm.Scalar(0) c_e_av = variables["X-averaged electrolyte concentration [mol.m-3]"] ocp_bulk = self.phase_param.U(c_e_av, self.param.T_init) elif self.reaction == "lead-acid oxygen": ocp_surf = self.param.U_Ox ocp_bulk = self.param.U_Ox dUdT = pybamm.Scalar(0) variables.update(self._get_standard_ocp_variables(ocp_surf, ocp_bulk, dUdT)) return variables