Source code for pybamm.models.submodels.electrolyte_diffusion.constant_concentration
#
# Class for leading-order electrolyte diffusion employing stefan-maxwell
#
import pybamm
from .base_electrolyte_diffusion import BaseElectrolyteDiffusion
[docs]
class ConstantConcentration(BaseElectrolyteDiffusion):
"""Class for constant concentration of electrolyte
Parameters
----------
param : parameter class
The parameters to use for this submodel
options : dict, optional
A dictionary of options to be passed to the model.
"""
def __init__(self, param, options=None):
super().__init__(param, options)
[docs]
def get_fundamental_variables(self):
c_e_init = self.param.c_e_init
eps_c_e_dict = {
domain: self.param.domain_params[domain.split()[0]].epsilon_init * c_e_init
for domain in self.options.whole_cell_domains
}
variables = self._get_standard_porosity_times_concentration_variables(
eps_c_e_dict
)
N_e = pybamm.FullBroadcastToEdges(
0,
[domain for domain in 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_dict = {}
for domain in self.options.whole_cell_domains:
Domain = domain.capitalize()
eps_k = variables[f"{Domain} porosity"]
eps_c_e_k = variables[f"{Domain} porosity times concentration [mol.m-3]"]
c_e_k = eps_c_e_k / eps_k
c_e_dict[domain] = c_e_k
variables["Electrolyte concentration concatenation [mol.m-3]"] = (
pybamm.concatenation(*c_e_dict.values())
)
variables.update(self._get_standard_domain_concentration_variables(c_e_dict))
c_e = (
variables["Porosity times concentration [mol.m-3]"] / variables["Porosity"]
)
variables.update(self._get_standard_whole_cell_concentration_variables(c_e))
return variables
[docs]
def set_boundary_conditions(self, variables):
"""
We provide boundary conditions even though the concentration is constant
so that the gradient of the concentration has the correct shape after
discretisation.
"""
c_e = variables["Electrolyte concentration [mol.m-3]"]
self.boundary_conditions = {
c_e: {
"left": (pybamm.Scalar(0), "Neumann"),
"right": (pybamm.Scalar(0), "Neumann"),
}
}
[docs]
def add_events_from(self, variables):
# No event since the concentration is constant
pass