Source code for pybamm.models.submodels.electrolyte_diffusion.leading_order_diffusion

#
# Class for leading-order electrolyte diffusion employing stefan-maxwell
#
import numpy as np

import pybamm

from .base_electrolyte_diffusion import BaseElectrolyteDiffusion


[docs] class LeadingOrder(BaseElectrolyteDiffusion): """Class for conservation of mass in the electrolyte employing the Stefan-Maxwell constitutive equations. (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_e_av = pybamm.Variable( "X-averaged electrolyte concentration [mol.m-3]", domain="current collector", bounds=(0, np.inf), ) c_e_av.print_name = "c_e_av" c_e_dict = { domain: pybamm.PrimaryBroadcast(c_e_av, domain) for domain in self.options.whole_cell_domains } variables = self._get_standard_concentration_variables(c_e_dict) N_e = pybamm.FullBroadcastToEdges( 0, self.options.whole_cell_domains, "current collector" ) variables.update(self._get_standard_flux_variables(N_e)) return variables
[docs] def get_coupled_variables(self, variables): c_e = variables["Electrolyte concentration [mol.m-3]"] eps = variables["Porosity"] variables.update(self._get_total_concentration_electrolyte(eps * c_e)) return variables
[docs] def set_rhs(self, variables): c_e_av = variables["X-averaged electrolyte concentration [mol.m-3]"] T_av = variables["X-averaged cell temperature [K]"] 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]"] div_Vbox_s_av = variables[ "X-averaged separator transverse volume-averaged acceleration [m.s-2]" ] sum_a_j_n_0 = variables[ "Sum of x-averaged negative electrode volumetric " "interfacial current densities [A.m-3]" ] sum_a_j_p_0 = variables[ "Sum of x-averaged positive electrode volumetric " "interfacial current densities [A.m-3]" ] sum_s_j_n_0 = variables[ "Sum of x-averaged negative electrode electrolyte " "reaction source terms [A.m-3]" ] sum_s_j_p_0 = variables[ "Sum of x-averaged positive electrode electrolyte " "reaction source terms [A.m-3]" ] source_terms = ( self.param.n.L * (sum_s_j_n_0 - self.param.t_plus(c_e_av, T_av) * sum_a_j_n_0) + self.param.p.L * (sum_s_j_p_0 - self.param.t_plus(c_e_av, T_av) * sum_a_j_p_0) ) / self.param.F self.rhs = { c_e_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 - c_e_av * (self.param.n.L * deps_n_dt_av + self.param.p.L * deps_p_dt_av) - c_e_av * self.param.s.L * div_Vbox_s_av ) }
[docs] def set_initial_conditions(self, variables): c_e = variables["X-averaged electrolyte concentration [mol.m-3]"] self.initial_conditions = {c_e: self.param.c_e_init}