Source code for pybamm.models.submodels.convection.through_cell.explicit_convection

#
# Class for leading-order pressure driven convection
#
import pybamm

from .base_through_cell_convection import BaseThroughCellModel


[docs] class Explicit(BaseThroughCellModel): """A submodel for the leading-order approximation of pressure-driven convection Parameters ---------- param : parameter class The parameters to use for this submodel """ def __init__(self, param): super().__init__(param)
[docs] def get_coupled_variables(self, variables): # Set up p_s = variables["X-averaged separator pressure [Pa]"] for domain in self.options.whole_cell_domains: if domain == "separator": continue a_j_k_av = variables[ f"X-averaged {domain} volumetric interfacial current density [A.m-3]" ] if domain == "negative electrode": x_n = pybamm.standard_spatial_vars.x_n DeltaV_k = self.param.n.DeltaV p_k = ( -DeltaV_k * a_j_k_av / self.param.F * (-(x_n**2) + self.param.n.L**2) / 2 + p_s ) v_box_k = -DeltaV_k * a_j_k_av / self.param.F * x_n elif domain == "positive electrode": x_p = pybamm.standard_spatial_vars.x_p DeltaV_k = self.param.p.DeltaV p_k = ( -DeltaV_k * a_j_k_av / self.param.F * ((x_p - 1) ** 2 - self.param.p.L**2) / 2 + p_s ) v_box_k = -DeltaV_k * a_j_k_av / self.param.F * (x_p - self.param.L_x) div_v_box_k = pybamm.PrimaryBroadcast( -DeltaV_k * a_j_k_av / self.param.F, domain ) variables.update( self._get_standard_convection_variables( domain, v_box_k, div_v_box_k, p_k ) ) # Transverse velocity in the separator determines through-cell velocity div_Vbox_s = variables[ "X-averaged separator transverse volume-averaged acceleration [m.s-2]" ] i_boundary_cc = variables["Current collector current density [A.m-2]"] v_box_n_right = -self.param.n.DeltaV * i_boundary_cc / self.param.F div_v_box_s_av = -div_Vbox_s div_v_box_s = pybamm.PrimaryBroadcast(div_v_box_s_av, "separator") # Simple formula for velocity in the separator x_s = pybamm.standard_spatial_vars.x_s v_box_s = div_v_box_s_av * (x_s - self.param.n.L) + v_box_n_right variables.update( self._get_standard_sep_velocity_variables(v_box_s, div_v_box_s) ) variables.update(self._get_standard_whole_cell_velocity_variables(variables)) variables.update( self._get_standard_whole_cell_acceleration_variables(variables) ) variables.update(self._get_standard_whole_cell_pressure_variables(variables)) return variables