Source code for pybamm.models.submodels.oxygen_diffusion.leading_oxygen_diffusion
#
# Class for leading-order oxygen diffusion
#
import pybamm
from .base_oxygen_diffusion import BaseModel
[docs]
class LeadingOrder(BaseModel):
"""Class for conservation of mass of oxygen. (Leading refers to leading order
of asymptotic reduction)
Parameters
----------
param : parameter class
The parameters to use for this submodel
"""
def __init__(self, param):
super().__init__(param)
[docs]
def get_fundamental_variables(self):
c_ox_av = pybamm.Variable(
"X-averaged oxygen concentration [mol.m-3]", domain="current collector"
)
c_ox_n = pybamm.PrimaryBroadcast(c_ox_av, "negative electrode")
c_ox_s = pybamm.PrimaryBroadcast(c_ox_av, "separator")
c_ox_p = pybamm.PrimaryBroadcast(c_ox_av, "positive electrode")
return self._get_standard_concentration_variables(c_ox_n, c_ox_s, c_ox_p)
[docs]
def get_coupled_variables(self, variables):
N_ox = pybamm.FullBroadcast(
0,
["negative electrode", "separator", "positive electrode"],
"current collector",
)
variables.update(self._get_standard_flux_variables(N_ox))
return variables
[docs]
def set_rhs(self, variables):
c_ox_av = variables["X-averaged oxygen concentration [mol.m-3]"]
eps_n_av = variables["X-averaged negative electrode porosity"]
eps_s_av = variables["X-averaged separator porosity"]
eps_p_av = variables["X-averaged positive electrode porosity"]
deps_n_dt_av = variables["X-averaged negative electrode porosity change [s-1]"]
deps_p_dt_av = variables["X-averaged positive electrode porosity change [s-1]"]
a_j_ox_n_av = variables[
"X-averaged negative electrode oxygen "
"volumetric interfacial current density [A.m-3]"
]
a_j_ox_p_av = variables[
"X-averaged positive electrode oxygen "
"volumetric interfacial current density [A.m-3]"
]
source_terms = (
self.param.n.L * self.param.s_ox_Ox * a_j_ox_n_av
+ self.param.p.L * self.param.s_ox_Ox * a_j_ox_p_av
)
self.rhs = {
c_ox_av: 1
/ (
self.param.n.L * eps_n_av
+ self.param.s.L * eps_s_av
+ self.param.p.L * eps_p_av
)
* (
source_terms / self.param.F
- c_ox_av
* (self.param.n.L * deps_n_dt_av + self.param.p.L * deps_p_dt_av)
)
}
[docs]
def set_initial_conditions(self, variables):
c_ox = variables["X-averaged oxygen concentration [mol.m-3]"]
self.initial_conditions = {c_ox: self.param.c_ox_init}