From 8f255c3ee9fbb6f2ca82e5e3c6044bbf31d10b44 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Sun, 4 Aug 2024 11:31:00 +0100 Subject: [PATCH 01/13] #4274 fix small typo in docstring LaTeX rendering --- pybamm/expression_tree/unary_operators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pybamm/expression_tree/unary_operators.py b/pybamm/expression_tree/unary_operators.py index ace1cd9942..b1e8aa2e2d 100644 --- a/pybamm/expression_tree/unary_operators.py +++ b/pybamm/expression_tree/unary_operators.py @@ -770,7 +770,7 @@ class IndefiniteIntegral(BaseIndefiniteIntegral): A node in the expression tree representing an indefinite integral operator. .. math:: - I = \\int_{x_\text{min}}^{x}\\!f(u)\\,du + I = \\int_{x_{\text{min}}}^{x}\\!f(u)\\,du where :math:`u\\in\\text{domain}` which can represent either a spatial or temporal variable. From e82682156a37b8ffed6bd10f692f83d04e6d256d Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Sun, 4 Aug 2024 16:20:25 +0100 Subject: [PATCH 02/13] #4274 update electrolyte conductivity --- .../composite_conductivity.py | 126 ++++++++---------- 1 file changed, 52 insertions(+), 74 deletions(-) diff --git a/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py b/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py index 475d1a4232..47ae15909b 100644 --- a/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py +++ b/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py @@ -30,9 +30,12 @@ def _higher_order_macinnes_function(self, x): x = pybamm.maximum(x, tol) return pybamm.log(x) - def get_coupled_variables(self, variables): - c_e_av = variables["X-averaged electrolyte concentration [mol.m-3]"] + def _gradient_macinnes_function(self, x): + "Gradient of the MacInnes function" + tol = pybamm.settings.tolerances["macinnes__c_e"] + return pybamm.gradient(x) / pybamm.maximum(x, tol) + def get_coupled_variables(self, variables): i_boundary_cc = variables["Current collector current density [A.m-2]"] if self.options.electrode_types["negative"] == "porous": c_e_n = variables["Negative electrolyte concentration [mol.m-3]"] @@ -40,47 +43,46 @@ def get_coupled_variables(self, variables): "X-averaged negative electrode surface potential difference [V]" ] phi_s_n_av = variables["X-averaged negative electrode potential [V]"] - tor_n_av = variables["X-averaged negative electrolyte transport efficiency"] + tor_n = variables["Negative electrolyte transport efficiency"] c_e_s = variables["Separator electrolyte concentration [mol.m-3]"] c_e_p = variables["Positive electrolyte concentration [mol.m-3]"] - tor_s_av = variables["X-averaged separator electrolyte transport efficiency"] - tor_p_av = variables["X-averaged positive electrolyte transport efficiency"] + tor_s = variables["Separator electrolyte transport efficiency"] + tor_p = variables["Positive electrolyte transport efficiency"] T_av = variables["X-averaged cell temperature [K]"] T_av_s = pybamm.PrimaryBroadcast(T_av, "separator") T_av_p = pybamm.PrimaryBroadcast(T_av, "positive electrode") param = self.param - RT_F_av = param.R * T_av / param.F RT_F_av_s = param.R * T_av_s / param.F RT_F_av_p = param.R * T_av_p / param.F L_n = param.n.L - L_s = param.s.L + # L_s = param.s.L L_p = param.p.L L_x = param.L_x x_s = pybamm.standard_spatial_vars.x_s x_p = pybamm.standard_spatial_vars.x_p # bulk conductivities - kappa_s_av = param.kappa_e(c_e_av, T_av) * tor_s_av - kappa_p_av = param.kappa_e(c_e_av, T_av) * tor_p_av + # kappa_s_av = param.kappa_e(c_e_av, T_av) * tor_s_av + # kappa_p_av = param.kappa_e(c_e_av, T_av) * tor_p_av - chi_av = param.chi(c_e_av, T_av) - chi_av_s = pybamm.PrimaryBroadcast(chi_av, "separator") - chi_av_p = pybamm.PrimaryBroadcast(chi_av, "positive electrode") + # chi_av = param.chi(c_e_av, T_av) + # chi_av_s = pybamm.PrimaryBroadcast(chi_av, "separator") + # chi_av_p = pybamm.PrimaryBroadcast(chi_av, "positive electrode") # electrolyte current if self.options.electrode_types["negative"] == "planar": i_e_n = None else: x_n = pybamm.standard_spatial_vars.x_n - chi_av_n = pybamm.PrimaryBroadcast(chi_av, "negative electrode") + # chi_av_n = pybamm.PrimaryBroadcast(chi_av, "negative electrode") T_av_n = pybamm.PrimaryBroadcast(T_av, "negative electrode") RT_F_av_n = param.R * T_av_n / param.F - kappa_n_av = param.kappa_e(c_e_av, T_av) * tor_n_av + # kappa_n_av = param.kappa_e(c_e_av, T_av) * tor_n_av i_e_n = i_boundary_cc * x_n / L_n i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc, "separator") i_e_p = i_boundary_cc * (L_x - x_p) / L_p @@ -90,85 +92,61 @@ def get_coupled_variables(self, variables): # electrolyte potential if self.options.electrode_types["negative"] == "planar": - phi_e_li = variables["Lithium metal interface electrolyte potential [V]"] - c_e_n = pybamm.boundary_value(c_e_s, "left") - phi_e_const = ( - phi_e_li - - chi_av - * RT_F_av - * self._higher_order_macinnes_function(c_e_n / c_e_av) - + (i_boundary_cc / kappa_s_av) * L_n + phi_e_n_right = variables[ + "Lithium metal interface electrolyte potential [V]" + ] + eta_c_n = pybamm.PrimaryBroadcast(pybamm.Scalar(0), "negative electrode") + delta_phi_e_n = pybamm.PrimaryBroadcast( + pybamm.Scalar(0), "negative electrode" ) else: + eta_c_n = -RT_F_av_n * pybamm.IndedfiniteIntegral( + param.chi(c_e_n, T_av_n) * self._gradient_macinnes_function(c_e_n), + x_n, + ) + delta_phi_e_n = pybamm.IndefiniteIntegral( + i_e_n / (param.kappa_e(c_e_n, T_av_n) * tor_n), x_n + ) phi_e_const = ( -delta_phi_n_av + phi_s_n_av - - ( - chi_av - * RT_F_av - * pybamm.x_average( - self._higher_order_macinnes_function(c_e_n / c_e_av) - ) - ) - - ((i_boundary_cc * L_n) * (1 / (3 * kappa_n_av) - 1 / kappa_s_av)) + + pybamm.x_average(eta_c_n) + + pybamm.x_average(delta_phi_e_n) ) - phi_e_n = ( - phi_e_const - + ( - chi_av_n - * RT_F_av_n - * self._higher_order_macinnes_function(c_e_n / c_e_av) - ) - - (i_boundary_cc / kappa_n_av) * (x_n**2 - L_n**2) / (2 * L_n) - - i_boundary_cc * L_n / kappa_s_av - ) + phi_e_n = phi_e_const - (delta_phi_e_n + eta_c_n) + phi_e_n_right = pybamm.boundary_value(phi_e_n, "right") phi_e_dict["negative electrode"] = phi_e_n - phi_e_s = ( - phi_e_const - + ( - chi_av_s - * RT_F_av_s - * self._higher_order_macinnes_function(c_e_s / c_e_av) - ) - - (i_boundary_cc / kappa_s_av) * x_s + eta_c_s = -RT_F_av_s * pybamm.IndedfiniteIntegral( + param.chi(c_e_s, T_av_s) * self._gradient_macinnes_function(c_e_s), + x_s, + ) + delta_phi_e_s = pybamm.IndefiniteIntegral( + i_e_s / (param.kappa_e(c_e_s, T_av_s) * tor_s), x_s ) - phi_e_p = ( - phi_e_const - + ( - chi_av_p - * RT_F_av_p - * self._higher_order_macinnes_function(c_e_p / c_e_av) - ) - - (i_boundary_cc / kappa_p_av) - * (x_p * (2 * L_x - x_p) + L_p**2 - L_x**2) - / (2 * L_p) - - i_boundary_cc * (L_x - L_p) / kappa_s_av + phi_e_s = phi_e_n_right - (delta_phi_e_s + eta_c_s) + + eta_c_p = -RT_F_av_p * pybamm.IndedfiniteIntegral( + param.chi(c_e_p, T_av_p) * self._gradient_macinnes_function(c_e_p), + x_p, + ) + delta_phi_e_p = pybamm.IndefiniteIntegral( + i_e_p / (param.kappa_e(c_e_p, T_av_p) * tor_p), x_p ) + phi_e_p = pybamm.boundary_value(phi_e_s, "right") - (delta_phi_e_p + eta_c_p) + phi_e_dict["separator"] = phi_e_s phi_e_dict["positive electrode"] = phi_e_p # concentration overpotential - macinnes_c_e_p = pybamm.x_average( - self._higher_order_macinnes_function(c_e_p / c_e_av) - ) - if self.options.electrode_types["negative"] == "planar": - macinnes_c_e_n = 0 - ohmic_n = 0 - else: - macinnes_c_e_n = pybamm.x_average( - self._higher_order_macinnes_function(c_e_n / c_e_av) - ) - ohmic_n = L_n / (3 * kappa_n_av) - - eta_c_av = chi_av * RT_F_av * (macinnes_c_e_p - macinnes_c_e_n) + eta_c_av = pybamm.x_average(eta_c_p) - pybamm.x_average(eta_c_n) # average electrolyte ohmic losses - delta_phi_e_av = -(i_boundary_cc) * ( - ohmic_n + L_s / kappa_s_av + L_p / (3 * kappa_p_av) + delta_phi_e_av = -pybamm.x_average(delta_phi_e_p) + pybamm.x_average( + delta_phi_e_n ) variables.update(self._get_standard_potential_variables(phi_e_dict)) From 627da45b7cf1a4a834db4592fcd98ccd72e2304d Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Thu, 8 Aug 2024 16:45:14 +0200 Subject: [PATCH 03/13] implemented updated SPMe, need to debug --- .../electrolyte_conductivity/__init__.py | 1 + .../composite_conductivity.py | 52 ++--- .../composite_conductivity_old.py | 181 ++++++++++++++++++ 3 files changed, 212 insertions(+), 22 deletions(-) create mode 100644 pybamm/models/submodels/electrolyte_conductivity/composite_conductivity_old.py diff --git a/pybamm/models/submodels/electrolyte_conductivity/__init__.py b/pybamm/models/submodels/electrolyte_conductivity/__init__.py index 48b3232d44..fe0402161a 100644 --- a/pybamm/models/submodels/electrolyte_conductivity/__init__.py +++ b/pybamm/models/submodels/electrolyte_conductivity/__init__.py @@ -1,6 +1,7 @@ from .base_electrolyte_conductivity import BaseElectrolyteConductivity from .leading_order_conductivity import LeadingOrder from .composite_conductivity import Composite +from .composite_conductivity_old import CompositeOld from .full_conductivity import Full from .integrated_conductivity import Integrated diff --git a/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py b/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py index 47ae15909b..f7ba228f5d 100644 --- a/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py +++ b/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py @@ -32,8 +32,13 @@ def _higher_order_macinnes_function(self, x): def _gradient_macinnes_function(self, x): "Gradient of the MacInnes function" - tol = pybamm.settings.tolerances["macinnes__c_e"] - return pybamm.gradient(x) / pybamm.maximum(x, tol) + # tol = pybamm.settings.tolerances["macinnes__c_e"] + # x_edge = pybamm.FullBroadcastToEdges( + # x, + # broadcast_domains=x.domains, + # ) + # return pybamm.grad(x) / pybamm.maximum(x_edge, tol) + return pybamm.grad(self._higher_order_macinnes_function(x)) def get_coupled_variables(self, variables): i_boundary_cc = variables["Current collector current density [A.m-2]"] @@ -60,29 +65,18 @@ def get_coupled_variables(self, variables): RT_F_av_p = param.R * T_av_p / param.F L_n = param.n.L - # L_s = param.s.L L_p = param.p.L L_x = param.L_x x_s = pybamm.standard_spatial_vars.x_s x_p = pybamm.standard_spatial_vars.x_p - # bulk conductivities - # kappa_s_av = param.kappa_e(c_e_av, T_av) * tor_s_av - # kappa_p_av = param.kappa_e(c_e_av, T_av) * tor_p_av - - # chi_av = param.chi(c_e_av, T_av) - # chi_av_s = pybamm.PrimaryBroadcast(chi_av, "separator") - # chi_av_p = pybamm.PrimaryBroadcast(chi_av, "positive electrode") - # electrolyte current if self.options.electrode_types["negative"] == "planar": i_e_n = None else: x_n = pybamm.standard_spatial_vars.x_n - # chi_av_n = pybamm.PrimaryBroadcast(chi_av, "negative electrode") T_av_n = pybamm.PrimaryBroadcast(T_av, "negative electrode") RT_F_av_n = param.R * T_av_n / param.F - # kappa_n_av = param.kappa_e(c_e_av, T_av) * tor_n_av i_e_n = i_boundary_cc * x_n / L_n i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc, "separator") i_e_p = i_boundary_cc * (L_x - x_p) / L_p @@ -100,12 +94,21 @@ def get_coupled_variables(self, variables): pybamm.Scalar(0), "negative electrode" ) else: - eta_c_n = -RT_F_av_n * pybamm.IndedfiniteIntegral( - param.chi(c_e_n, T_av_n) * self._gradient_macinnes_function(c_e_n), + # need to have current evaluated on edge as integral will make it + # evaluate on node + x_n_edge = pybamm.standard_spatial_vars.x_n_edge + i_e_n_edge = i_boundary_cc * x_n_edge / L_n + c_e_n_edge = pybamm.FullBroadcastToEdges( + c_e_n, broadcast_domains=c_e_n.domains + ) + + eta_c_n = -RT_F_av_n * pybamm.IndefiniteIntegral( + param.chi(c_e_n, T_av_n) * c_e_n_edge.diff(x_n) / c_e_n_edge, x_n, ) + delta_phi_e_n = pybamm.IndefiniteIntegral( - i_e_n / (param.kappa_e(c_e_n, T_av_n) * tor_n), x_n + i_e_n_edge / (param.kappa_e(c_e_n, T_av_n) * tor_n), x_n ) phi_e_const = ( -delta_phi_n_av @@ -118,22 +121,27 @@ def get_coupled_variables(self, variables): phi_e_n_right = pybamm.boundary_value(phi_e_n, "right") phi_e_dict["negative electrode"] = phi_e_n - eta_c_s = -RT_F_av_s * pybamm.IndedfiniteIntegral( - param.chi(c_e_s, T_av_s) * self._gradient_macinnes_function(c_e_s), + i_e_s_edge = pybamm.PrimaryBroadcastToEdges(i_boundary_cc, "separator") + c_e_s_edge = pybamm.FullBroadcastToEdges(c_e_s, broadcast_domains=c_e_s.domains) + eta_c_s = -RT_F_av_s * pybamm.IndefiniteIntegral( + param.chi(c_e_s, T_av_s) * c_e_s_edge.diff(x_s) / c_e_s_edge, x_s, ) delta_phi_e_s = pybamm.IndefiniteIntegral( - i_e_s / (param.kappa_e(c_e_s, T_av_s) * tor_s), x_s + i_e_s_edge / (param.kappa_e(c_e_s, T_av_s) * tor_s), x_s ) phi_e_s = phi_e_n_right - (delta_phi_e_s + eta_c_s) - eta_c_p = -RT_F_av_p * pybamm.IndedfiniteIntegral( - param.chi(c_e_p, T_av_p) * self._gradient_macinnes_function(c_e_p), + x_p_edge = pybamm.standard_spatial_vars.x_p_edge + i_e_p_edge = i_boundary_cc * (L_x - x_p_edge) / L_p + c_e_p_edge = pybamm.FullBroadcastToEdges(c_e_p, broadcast_domains=c_e_p.domains) + eta_c_p = -RT_F_av_p * pybamm.IndefiniteIntegral( + param.chi(c_e_p, T_av_p) * c_e_p_edge.diff(x_p) / c_e_p_edge, x_p, ) delta_phi_e_p = pybamm.IndefiniteIntegral( - i_e_p / (param.kappa_e(c_e_p, T_av_p) * tor_p), x_p + i_e_p_edge / (param.kappa_e(c_e_p, T_av_p) * tor_p), x_p ) phi_e_p = pybamm.boundary_value(phi_e_s, "right") - (delta_phi_e_p + eta_c_p) diff --git a/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity_old.py b/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity_old.py new file mode 100644 index 0000000000..faa530166e --- /dev/null +++ b/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity_old.py @@ -0,0 +1,181 @@ +# +# Composite electrolyte potential employing stefan-maxwell +# +import pybamm +from .base_electrolyte_conductivity import BaseElectrolyteConductivity + + +class CompositeOld(BaseElectrolyteConductivity): + """Base class for conservation of charge in the electrolyte employing the + Stefan-Maxwell constitutive equations. + + Parameters + ---------- + param : parameter class + The parameters to use for this submodel + domain : str, optional + The domain in which the model holds + options : dict, optional + A dictionary of options to be passed to the model. + higher_order_terms : str + What kind of higher-order terms to use ('composite' or 'first-order') + """ + + def __init__(self, param, domain=None, options=None): + super().__init__(param, domain, options=options) + + def _higher_order_macinnes_function(self, x): + "Function to differentiate between composite and first-order models" + tol = pybamm.settings.tolerances["macinnes__c_e"] + x = pybamm.maximum(x, tol) + return pybamm.log(x) + + def get_coupled_variables(self, variables): + c_e_av = variables["X-averaged electrolyte concentration [mol.m-3]"] + + i_boundary_cc = variables["Current collector current density [A.m-2]"] + if self.options.electrode_types["negative"] == "porous": + c_e_n = variables["Negative electrolyte concentration [mol.m-3]"] + delta_phi_n_av = variables[ + "X-averaged negative electrode surface potential difference [V]" + ] + phi_s_n_av = variables["X-averaged negative electrode potential [V]"] + tor_n_av = variables["X-averaged negative electrolyte transport efficiency"] + + c_e_s = variables["Separator electrolyte concentration [mol.m-3]"] + c_e_p = variables["Positive electrolyte concentration [mol.m-3]"] + + tor_s_av = variables["X-averaged separator electrolyte transport efficiency"] + tor_p_av = variables["X-averaged positive electrolyte transport efficiency"] + + T_av = variables["X-averaged cell temperature [K]"] + T_av_s = pybamm.PrimaryBroadcast(T_av, "separator") + T_av_p = pybamm.PrimaryBroadcast(T_av, "positive electrode") + + param = self.param + RT_F_av = param.R * T_av / param.F + RT_F_av_s = param.R * T_av_s / param.F + RT_F_av_p = param.R * T_av_p / param.F + + L_n = param.n.L + L_s = param.s.L + L_p = param.p.L + L_x = param.L_x + x_s = pybamm.standard_spatial_vars.x_s + x_p = pybamm.standard_spatial_vars.x_p + + # bulk conductivities + kappa_s_av = param.kappa_e(c_e_av, T_av) * tor_s_av + kappa_p_av = param.kappa_e(c_e_av, T_av) * tor_p_av + + chi_av = param.chi(c_e_av, T_av) + chi_av_s = pybamm.PrimaryBroadcast(chi_av, "separator") + chi_av_p = pybamm.PrimaryBroadcast(chi_av, "positive electrode") + + # electrolyte current + if self.options.electrode_types["negative"] == "planar": + i_e_n = None + else: + x_n = pybamm.standard_spatial_vars.x_n + chi_av_n = pybamm.PrimaryBroadcast(chi_av, "negative electrode") + T_av_n = pybamm.PrimaryBroadcast(T_av, "negative electrode") + RT_F_av_n = param.R * T_av_n / param.F + kappa_n_av = param.kappa_e(c_e_av, T_av) * tor_n_av + i_e_n = i_boundary_cc * x_n / L_n + i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc, "separator") + i_e_p = i_boundary_cc * (L_x - x_p) / L_p + i_e = pybamm.concatenation(i_e_n, i_e_s, i_e_p) + + phi_e_dict = {} + + # electrolyte potential + if self.options.electrode_types["negative"] == "planar": + phi_e_li = variables["Lithium metal interface electrolyte potential [V]"] + c_e_n = pybamm.boundary_value(c_e_s, "left") + phi_e_const = ( + phi_e_li + - chi_av + * RT_F_av + * self._higher_order_macinnes_function(c_e_n / c_e_av) + + (i_boundary_cc / kappa_s_av) * L_n + ) + else: + phi_e_const = ( + -delta_phi_n_av + + phi_s_n_av + - ( + chi_av + * RT_F_av + * pybamm.x_average( + self._higher_order_macinnes_function(c_e_n / c_e_av) + ) + ) + - ((i_boundary_cc * L_n) * (1 / (3 * kappa_n_av) - 1 / kappa_s_av)) + ) + + phi_e_n = ( + phi_e_const + + ( + chi_av_n + * RT_F_av_n + * self._higher_order_macinnes_function(c_e_n / c_e_av) + ) + - (i_boundary_cc / kappa_n_av) * (x_n**2 - L_n**2) / (2 * L_n) + - i_boundary_cc * L_n / kappa_s_av + ) + phi_e_dict["negative electrode"] = phi_e_n + + phi_e_s = ( + phi_e_const + + ( + chi_av_s + * RT_F_av_s + * self._higher_order_macinnes_function(c_e_s / c_e_av) + ) + - (i_boundary_cc / kappa_s_av) * x_s + ) + + phi_e_p = ( + phi_e_const + + ( + chi_av_p + * RT_F_av_p + * self._higher_order_macinnes_function(c_e_p / c_e_av) + ) + - (i_boundary_cc / kappa_p_av) + * (x_p * (2 * L_x - x_p) + L_p**2 - L_x**2) + / (2 * L_p) + - i_boundary_cc * (L_x - L_p) / kappa_s_av + ) + + phi_e_dict["separator"] = phi_e_s + phi_e_dict["positive electrode"] = phi_e_p + + # concentration overpotential + macinnes_c_e_p = pybamm.x_average( + self._higher_order_macinnes_function(c_e_p / c_e_av) + ) + if self.options.electrode_types["negative"] == "planar": + macinnes_c_e_n = 0 + ohmic_n = 0 + else: + macinnes_c_e_n = pybamm.x_average( + self._higher_order_macinnes_function(c_e_n / c_e_av) + ) + ohmic_n = L_n / (3 * kappa_n_av) + + eta_c_av = chi_av * RT_F_av * (macinnes_c_e_p - macinnes_c_e_n) + + # average electrolyte ohmic losses + delta_phi_e_av = -(i_boundary_cc) * ( + ohmic_n + L_s / kappa_s_av + L_p / (3 * kappa_p_av) + ) + + variables.update(self._get_standard_potential_variables(phi_e_dict)) + variables.update(self._get_standard_current_variables(i_e)) + variables.update(self._get_split_overpotential(eta_c_av, delta_phi_e_av)) + + # Override print_name + i_e.print_name = "i_e" + + return variables From 655b0faba4e55383df49e768c904f33163e611a9 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Fri, 9 Aug 2024 17:33:01 +0100 Subject: [PATCH 04/13] fixed bugs composite conductivity --- .../composite_conductivity.py | 77 ++++++-- .../composite_conductivity_old.py | 181 ------------------ 2 files changed, 56 insertions(+), 202 deletions(-) delete mode 100644 src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity_old.py diff --git a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py index f7ba228f5d..7ebcfbf696 100644 --- a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py +++ b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py @@ -86,24 +86,19 @@ def get_coupled_variables(self, variables): # electrolyte potential if self.options.electrode_types["negative"] == "planar": - phi_e_n_right = variables[ - "Lithium metal interface electrolyte potential [V]" - ] - eta_c_n = pybamm.PrimaryBroadcast(pybamm.Scalar(0), "negative electrode") - delta_phi_e_n = pybamm.PrimaryBroadcast( - pybamm.Scalar(0), "negative electrode" - ) + phi_e_const = variables["Lithium metal interface electrolyte potential [V]"] + eta_c_n = pybamm.Scalar(0) + delta_phi_e_n = pybamm.Scalar(0) else: # need to have current evaluated on edge as integral will make it # evaluate on node x_n_edge = pybamm.standard_spatial_vars.x_n_edge i_e_n_edge = i_boundary_cc * x_n_edge / L_n - c_e_n_edge = pybamm.FullBroadcastToEdges( - c_e_n, broadcast_domains=c_e_n.domains - ) eta_c_n = -RT_F_av_n * pybamm.IndefiniteIntegral( - param.chi(c_e_n, T_av_n) * c_e_n_edge.diff(x_n) / c_e_n_edge, + param.chi(c_e_n, T_av_n) + * self._higher_order_macinnes_function(c_e_n).diff(c_e_n) + * pybamm.grad(c_e_n), x_n, ) @@ -118,43 +113,64 @@ def get_coupled_variables(self, variables): ) phi_e_n = phi_e_const - (delta_phi_e_n + eta_c_n) - phi_e_n_right = pybamm.boundary_value(phi_e_n, "right") phi_e_dict["negative electrode"] = phi_e_n i_e_s_edge = pybamm.PrimaryBroadcastToEdges(i_boundary_cc, "separator") - c_e_s_edge = pybamm.FullBroadcastToEdges(c_e_s, broadcast_domains=c_e_s.domains) eta_c_s = -RT_F_av_s * pybamm.IndefiniteIntegral( - param.chi(c_e_s, T_av_s) * c_e_s_edge.diff(x_s) / c_e_s_edge, + param.chi(c_e_s, T_av_s) + * self._higher_order_macinnes_function(c_e_s).diff(c_e_s) + * pybamm.grad(c_e_s), x_s, ) delta_phi_e_s = pybamm.IndefiniteIntegral( i_e_s_edge / (param.kappa_e(c_e_s, T_av_s) * tor_s), x_s ) - phi_e_s = phi_e_n_right - (delta_phi_e_s + eta_c_s) + phi_e_s = ( + phi_e_const + - pybamm.boundary_value(delta_phi_e_n, "right") + - pybamm.boundary_value(eta_c_n, "right") + - (delta_phi_e_s + eta_c_s) + ) x_p_edge = pybamm.standard_spatial_vars.x_p_edge i_e_p_edge = i_boundary_cc * (L_x - x_p_edge) / L_p - c_e_p_edge = pybamm.FullBroadcastToEdges(c_e_p, broadcast_domains=c_e_p.domains) eta_c_p = -RT_F_av_p * pybamm.IndefiniteIntegral( - param.chi(c_e_p, T_av_p) * c_e_p_edge.diff(x_p) / c_e_p_edge, + param.chi(c_e_p, T_av_p) + * self._higher_order_macinnes_function(c_e_p).diff(c_e_p) + * pybamm.grad(c_e_p), x_p, ) delta_phi_e_p = pybamm.IndefiniteIntegral( i_e_p_edge / (param.kappa_e(c_e_p, T_av_p) * tor_p), x_p ) - phi_e_p = pybamm.boundary_value(phi_e_s, "right") - (delta_phi_e_p + eta_c_p) + phi_e_p = ( + phi_e_const + - pybamm.boundary_value(delta_phi_e_n, "right") + - pybamm.boundary_value(eta_c_n, "right") + - pybamm.boundary_value(delta_phi_e_s, "right") + - pybamm.boundary_value(eta_c_s, "right") + - (delta_phi_e_p + eta_c_p) + ) phi_e_dict["separator"] = phi_e_s phi_e_dict["positive electrode"] = phi_e_p # concentration overpotential - eta_c_av = pybamm.x_average(eta_c_p) - pybamm.x_average(eta_c_n) + eta_c_av = ( + -pybamm.x_average(eta_c_p) + + pybamm.x_average(eta_c_n) + - pybamm.boundary_value(eta_c_s, "right") + - pybamm.boundary_value(eta_c_n, "right") + ) # average electrolyte ohmic losses - delta_phi_e_av = -pybamm.x_average(delta_phi_e_p) + pybamm.x_average( - delta_phi_e_n + delta_phi_e_av = ( + -pybamm.x_average(delta_phi_e_p) + + pybamm.x_average(delta_phi_e_n) + - pybamm.boundary_value(delta_phi_e_s, "right") + - pybamm.boundary_value(delta_phi_e_n, "right") ) variables.update(self._get_standard_potential_variables(phi_e_dict)) @@ -165,3 +181,22 @@ def get_coupled_variables(self, variables): i_e.print_name = "i_e" return variables + + def set_boundary_conditions(self, variables): + if self.options.electrode_types["negative"] == "planar": + domains = ["separator", "positive"] + else: + domains = ["negative", "separator", "positive"] + + for domain in domains: + c_e = variables[ + domain.capitalize() + " electrolyte concentration [mol.m-3]" + ] + self.boundary_conditions.update( + { + c_e: { + "left": (pybamm.boundary_gradient(c_e, "left"), "Neumann"), + "right": (pybamm.boundary_gradient(c_e, "right"), "Neumann"), + } + } + ) diff --git a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity_old.py b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity_old.py deleted file mode 100644 index faa530166e..0000000000 --- a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity_old.py +++ /dev/null @@ -1,181 +0,0 @@ -# -# Composite electrolyte potential employing stefan-maxwell -# -import pybamm -from .base_electrolyte_conductivity import BaseElectrolyteConductivity - - -class CompositeOld(BaseElectrolyteConductivity): - """Base class for conservation of charge in the electrolyte employing the - Stefan-Maxwell constitutive equations. - - Parameters - ---------- - param : parameter class - The parameters to use for this submodel - domain : str, optional - The domain in which the model holds - options : dict, optional - A dictionary of options to be passed to the model. - higher_order_terms : str - What kind of higher-order terms to use ('composite' or 'first-order') - """ - - def __init__(self, param, domain=None, options=None): - super().__init__(param, domain, options=options) - - def _higher_order_macinnes_function(self, x): - "Function to differentiate between composite and first-order models" - tol = pybamm.settings.tolerances["macinnes__c_e"] - x = pybamm.maximum(x, tol) - return pybamm.log(x) - - def get_coupled_variables(self, variables): - c_e_av = variables["X-averaged electrolyte concentration [mol.m-3]"] - - i_boundary_cc = variables["Current collector current density [A.m-2]"] - if self.options.electrode_types["negative"] == "porous": - c_e_n = variables["Negative electrolyte concentration [mol.m-3]"] - delta_phi_n_av = variables[ - "X-averaged negative electrode surface potential difference [V]" - ] - phi_s_n_av = variables["X-averaged negative electrode potential [V]"] - tor_n_av = variables["X-averaged negative electrolyte transport efficiency"] - - c_e_s = variables["Separator electrolyte concentration [mol.m-3]"] - c_e_p = variables["Positive electrolyte concentration [mol.m-3]"] - - tor_s_av = variables["X-averaged separator electrolyte transport efficiency"] - tor_p_av = variables["X-averaged positive electrolyte transport efficiency"] - - T_av = variables["X-averaged cell temperature [K]"] - T_av_s = pybamm.PrimaryBroadcast(T_av, "separator") - T_av_p = pybamm.PrimaryBroadcast(T_av, "positive electrode") - - param = self.param - RT_F_av = param.R * T_av / param.F - RT_F_av_s = param.R * T_av_s / param.F - RT_F_av_p = param.R * T_av_p / param.F - - L_n = param.n.L - L_s = param.s.L - L_p = param.p.L - L_x = param.L_x - x_s = pybamm.standard_spatial_vars.x_s - x_p = pybamm.standard_spatial_vars.x_p - - # bulk conductivities - kappa_s_av = param.kappa_e(c_e_av, T_av) * tor_s_av - kappa_p_av = param.kappa_e(c_e_av, T_av) * tor_p_av - - chi_av = param.chi(c_e_av, T_av) - chi_av_s = pybamm.PrimaryBroadcast(chi_av, "separator") - chi_av_p = pybamm.PrimaryBroadcast(chi_av, "positive electrode") - - # electrolyte current - if self.options.electrode_types["negative"] == "planar": - i_e_n = None - else: - x_n = pybamm.standard_spatial_vars.x_n - chi_av_n = pybamm.PrimaryBroadcast(chi_av, "negative electrode") - T_av_n = pybamm.PrimaryBroadcast(T_av, "negative electrode") - RT_F_av_n = param.R * T_av_n / param.F - kappa_n_av = param.kappa_e(c_e_av, T_av) * tor_n_av - i_e_n = i_boundary_cc * x_n / L_n - i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc, "separator") - i_e_p = i_boundary_cc * (L_x - x_p) / L_p - i_e = pybamm.concatenation(i_e_n, i_e_s, i_e_p) - - phi_e_dict = {} - - # electrolyte potential - if self.options.electrode_types["negative"] == "planar": - phi_e_li = variables["Lithium metal interface electrolyte potential [V]"] - c_e_n = pybamm.boundary_value(c_e_s, "left") - phi_e_const = ( - phi_e_li - - chi_av - * RT_F_av - * self._higher_order_macinnes_function(c_e_n / c_e_av) - + (i_boundary_cc / kappa_s_av) * L_n - ) - else: - phi_e_const = ( - -delta_phi_n_av - + phi_s_n_av - - ( - chi_av - * RT_F_av - * pybamm.x_average( - self._higher_order_macinnes_function(c_e_n / c_e_av) - ) - ) - - ((i_boundary_cc * L_n) * (1 / (3 * kappa_n_av) - 1 / kappa_s_av)) - ) - - phi_e_n = ( - phi_e_const - + ( - chi_av_n - * RT_F_av_n - * self._higher_order_macinnes_function(c_e_n / c_e_av) - ) - - (i_boundary_cc / kappa_n_av) * (x_n**2 - L_n**2) / (2 * L_n) - - i_boundary_cc * L_n / kappa_s_av - ) - phi_e_dict["negative electrode"] = phi_e_n - - phi_e_s = ( - phi_e_const - + ( - chi_av_s - * RT_F_av_s - * self._higher_order_macinnes_function(c_e_s / c_e_av) - ) - - (i_boundary_cc / kappa_s_av) * x_s - ) - - phi_e_p = ( - phi_e_const - + ( - chi_av_p - * RT_F_av_p - * self._higher_order_macinnes_function(c_e_p / c_e_av) - ) - - (i_boundary_cc / kappa_p_av) - * (x_p * (2 * L_x - x_p) + L_p**2 - L_x**2) - / (2 * L_p) - - i_boundary_cc * (L_x - L_p) / kappa_s_av - ) - - phi_e_dict["separator"] = phi_e_s - phi_e_dict["positive electrode"] = phi_e_p - - # concentration overpotential - macinnes_c_e_p = pybamm.x_average( - self._higher_order_macinnes_function(c_e_p / c_e_av) - ) - if self.options.electrode_types["negative"] == "planar": - macinnes_c_e_n = 0 - ohmic_n = 0 - else: - macinnes_c_e_n = pybamm.x_average( - self._higher_order_macinnes_function(c_e_n / c_e_av) - ) - ohmic_n = L_n / (3 * kappa_n_av) - - eta_c_av = chi_av * RT_F_av * (macinnes_c_e_p - macinnes_c_e_n) - - # average electrolyte ohmic losses - delta_phi_e_av = -(i_boundary_cc) * ( - ohmic_n + L_s / kappa_s_av + L_p / (3 * kappa_p_av) - ) - - variables.update(self._get_standard_potential_variables(phi_e_dict)) - variables.update(self._get_standard_current_variables(i_e)) - variables.update(self._get_split_overpotential(eta_c_av, delta_phi_e_av)) - - # Override print_name - i_e.print_name = "i_e" - - return variables From dbe61f4f1308297cd1e73ea136fb307bda651650 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Fri, 9 Aug 2024 17:35:14 +0100 Subject: [PATCH 05/13] remove integrated conductivity --- .../integrated_conductivity.py | 166 ------------------ 1 file changed, 166 deletions(-) delete mode 100644 src/pybamm/models/submodels/electrolyte_conductivity/integrated_conductivity.py diff --git a/src/pybamm/models/submodels/electrolyte_conductivity/integrated_conductivity.py b/src/pybamm/models/submodels/electrolyte_conductivity/integrated_conductivity.py deleted file mode 100644 index cb9979c6bb..0000000000 --- a/src/pybamm/models/submodels/electrolyte_conductivity/integrated_conductivity.py +++ /dev/null @@ -1,166 +0,0 @@ -# -# Composite electrolyte potential employing integrated Stefan-Maxwell -# -import pybamm -from .base_electrolyte_conductivity import BaseElectrolyteConductivity - - -class Integrated(BaseElectrolyteConductivity): - """ - Integrated model for conservation of charge in the electrolyte derived from - integrating the Stefan-Maxwell constitutive equations, from - :footcite:t:`BrosaPlanella2021`. - - Parameters - ---------- - param : parameter class - The parameters to use for this submodel - domain : str, optional - The domain in which the model holds - options : dict, optional - A dictionary of options to be passed to the model. - - """ - - def __init__(self, param, domain=None, options=None): - super().__init__(param, domain, options=options) - pybamm.citations.register("BrosaPlanella2021") - - def _higher_order_macinnes_function(self, x): - tol = pybamm.settings.tolerances["macinnes__c_e"] - x = pybamm.maximum(x, tol) - return pybamm.log(x) - - def get_coupled_variables(self, variables): - param = self.param - c_e_av = variables["X-averaged electrolyte concentration [mol.m-3]"] - - i_boundary_cc = variables["Current collector current density [A.m-2]"] - c_e_n = variables["Negative electrolyte concentration [mol.m-3]"] - c_e_s = variables["Separator electrolyte concentration [mol.m-3]"] - c_e_p = variables["Positive electrolyte concentration [mol.m-3]"] - c_e_n0 = pybamm.boundary_value(c_e_n, "left") - - delta_phi_n_av = variables[ - "X-averaged negative electrode surface potential difference [V]" - ] - phi_s_n_av = variables["X-averaged negative electrode potential [V]"] - - tor_n = variables["Negative electrolyte transport efficiency"] - tor_s = variables["Separator electrolyte transport efficiency"] - tor_p = variables["Positive electrolyte transport efficiency"] - - T_av = variables["X-averaged cell temperature [K]"] - T_av_n = pybamm.PrimaryBroadcast(T_av, "negative electrode") - T_av_s = pybamm.PrimaryBroadcast(T_av, "separator") - T_av_p = pybamm.PrimaryBroadcast(T_av, "positive electrode") - - RT_F_av = param.R * T_av / param.F - RT_F_av_n = param.R * T_av_n / param.F - RT_F_av_s = param.R * T_av_s / param.F - RT_F_av_p = param.R * T_av_p / param.F - - param = self.param - L_n = param.n.L - L_p = param.p.L - L_x = param.L_x - x_n = pybamm.standard_spatial_vars.x_n - x_s = pybamm.standard_spatial_vars.x_s - x_p = pybamm.standard_spatial_vars.x_p - x_n_edge = pybamm.standard_spatial_vars.x_n_edge - x_p_edge = pybamm.standard_spatial_vars.x_p_edge - - chi_av = param.chi(c_e_av, T_av) - chi_av_n = pybamm.PrimaryBroadcast(chi_av, "negative electrode") - chi_av_s = pybamm.PrimaryBroadcast(chi_av, "separator") - chi_av_p = pybamm.PrimaryBroadcast(chi_av, "positive electrode") - - # electrolyte current - i_e_n = i_boundary_cc * x_n / L_n - i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc, "separator") - i_e_p = i_boundary_cc * (L_x - x_p) / L_p - i_e = pybamm.concatenation(i_e_n, i_e_s, i_e_p) - - i_e_n_edge = i_boundary_cc * x_n_edge / L_n - i_e_s_edge = pybamm.PrimaryBroadcastToEdges(i_boundary_cc, "separator") - i_e_p_edge = i_boundary_cc * (L_x - x_p_edge) / L_p - - # electrolyte potential - indef_integral_n = pybamm.IndefiniteIntegral( - i_e_n_edge / (param.kappa_e(c_e_n, T_av_n) * tor_n), x_n - ) - indef_integral_s = pybamm.IndefiniteIntegral( - i_e_s_edge / (param.kappa_e(c_e_s, T_av_s) * tor_s), x_s - ) - indef_integral_p = pybamm.IndefiniteIntegral( - i_e_p_edge / (param.kappa_e(c_e_p, T_av_p) * tor_p), x_p - ) - - integral_n = indef_integral_n - integral_s = indef_integral_s + pybamm.boundary_value(integral_n, "right") - integral_p = indef_integral_p + pybamm.boundary_value(integral_s, "right") - - phi_e_const = ( - -delta_phi_n_av - + phi_s_n_av - - ( - chi_av - * RT_F_av - * pybamm.x_average(self._higher_order_macinnes_function(c_e_n / c_e_n0)) - ) - + pybamm.x_average(integral_n) - ) - - phi_e_n = ( - phi_e_const - + ( - chi_av_n - * RT_F_av_n - * self._higher_order_macinnes_function(c_e_n / c_e_n0) - ) - - integral_n - ) - - phi_e_s = ( - phi_e_const - + ( - chi_av_s - * RT_F_av_s - * self._higher_order_macinnes_function(c_e_s / c_e_n0) - ) - - integral_s - ) - - phi_e_p = ( - phi_e_const - + ( - chi_av_p - * RT_F_av_p - * self._higher_order_macinnes_function(c_e_p / c_e_n0) - ) - - integral_p - ) - - # concentration overpotential - eta_c_av = ( - chi_av - * RT_F_av - * ( - pybamm.x_average(self._higher_order_macinnes_function(c_e_p / c_e_av)) - - pybamm.x_average(self._higher_order_macinnes_function(c_e_n / c_e_av)) - ) - ) - - # average electrolyte ohmic losses - delta_phi_e_av = -(pybamm.x_average(integral_p) - pybamm.x_average(integral_n)) - - phi_e_dict = { - "negative electrode": phi_e_n, - "separator": phi_e_s, - "positive electrode": phi_e_p, - } - variables.update(self._get_standard_potential_variables(phi_e_dict)) - variables.update(self._get_standard_current_variables(i_e)) - variables.update(self._get_split_overpotential(eta_c_av, delta_phi_e_av)) - - return variables From 0d8be924d117f82c8225e202e0d9870d9c22a188 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Fri, 9 Aug 2024 17:50:57 +0100 Subject: [PATCH 06/13] #4274 fully remove Integrated conductivity model --- .../submodels/electrolyte_conductivity/index.rst | 1 - .../integrated_conductivity.rst | 7 ------- .../models/full_battery_models/base_battery_model.py | 5 +---- .../models/full_battery_models/lithium_ion/spme.py | 6 ------ .../submodels/electrolyte_conductivity/__init__.py | 2 -- .../test_lithium_ion/test_spme.py | 4 ---- tests/unit/test_citations.py | 10 ---------- .../test_lithium_ion/test_dfn.py | 5 ----- .../test_lithium_ion/test_newman_tobias.py | 5 ----- .../test_lithium_ion/test_spme.py | 4 ---- 10 files changed, 1 insertion(+), 48 deletions(-) delete mode 100644 docs/source/api/models/submodels/electrolyte_conductivity/integrated_conductivity.rst diff --git a/docs/source/api/models/submodels/electrolyte_conductivity/index.rst b/docs/source/api/models/submodels/electrolyte_conductivity/index.rst index a723c32aab..8d0be2223a 100644 --- a/docs/source/api/models/submodels/electrolyte_conductivity/index.rst +++ b/docs/source/api/models/submodels/electrolyte_conductivity/index.rst @@ -7,6 +7,5 @@ Electrolyte Conductivity base_electrolyte_conductivity leading_order_conductivity composite_conductivity - integrated_conductivity full_conductivity surface_form/index diff --git a/docs/source/api/models/submodels/electrolyte_conductivity/integrated_conductivity.rst b/docs/source/api/models/submodels/electrolyte_conductivity/integrated_conductivity.rst deleted file mode 100644 index 144e1a19c7..0000000000 --- a/docs/source/api/models/submodels/electrolyte_conductivity/integrated_conductivity.rst +++ /dev/null @@ -1,7 +0,0 @@ -Integrated Model -================ - -.. autoclass:: pybamm.electrolyte_conductivity.Integrated - :members: - -.. footbibliography:: diff --git a/src/pybamm/models/full_battery_models/base_battery_model.py b/src/pybamm/models/full_battery_models/base_battery_model.py index 8a2e443338..27e7e29a79 100644 --- a/src/pybamm/models/full_battery_models/base_battery_model.py +++ b/src/pybamm/models/full_battery_models/base_battery_model.py @@ -63,8 +63,7 @@ class BatteryModelOptions(pybamm.FuzzyDict): Sets the dimension of the current collector problem. Can be 0 (default), 1 or 2. * "electrolyte conductivity" : str - Can be "default" (default), "full", "leading order", "composite" or - "integrated". + Can be "default" (default), "full", "leading order", "composite". * "exchange-current density" : str Sets the model for the exchange-current density. Can be "single" (default) or "current sigmoid". A 2-tuple can be provided for different @@ -235,7 +234,6 @@ def __init__(self, extra_options): "full", "leading order", "composite", - "integrated", ], "exchange-current density": ["single", "current sigmoid"], "heat of mixing": ["false", "true"], @@ -941,7 +939,6 @@ def options(self, extra_options): if options["electrolyte conductivity"] not in [ "default", "composite", - "integrated", ]: raise pybamm.OptionError( "electrolyte conductivity '{}' not suitable for SPMe".format( diff --git a/src/pybamm/models/full_battery_models/lithium_ion/spme.py b/src/pybamm/models/full_battery_models/lithium_ion/spme.py index 6e0784ff60..a07b8a82cf 100644 --- a/src/pybamm/models/full_battery_models/lithium_ion/spme.py +++ b/src/pybamm/models/full_battery_models/lithium_ion/spme.py @@ -61,12 +61,6 @@ def set_electrolyte_potential_submodel(self): self.param, options=self.options ) ) - elif self.options["electrolyte conductivity"] == "integrated": - self.submodels["electrolyte conductivity"] = ( - pybamm.electrolyte_conductivity.Integrated( - self.param, options=self.options - ) - ) if self.options["surface form"] == "false": surf_model = surf_form.Explicit elif self.options["surface form"] == "differential": diff --git a/src/pybamm/models/submodels/electrolyte_conductivity/__init__.py b/src/pybamm/models/submodels/electrolyte_conductivity/__init__.py index fe0402161a..686606e64d 100644 --- a/src/pybamm/models/submodels/electrolyte_conductivity/__init__.py +++ b/src/pybamm/models/submodels/electrolyte_conductivity/__init__.py @@ -1,9 +1,7 @@ from .base_electrolyte_conductivity import BaseElectrolyteConductivity from .leading_order_conductivity import LeadingOrder from .composite_conductivity import Composite -from .composite_conductivity_old import CompositeOld from .full_conductivity import Full -from .integrated_conductivity import Integrated from . import surface_potential_form diff --git a/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_spme.py b/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_spme.py index 6360b513c7..66345614e7 100644 --- a/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_spme.py +++ b/tests/integration/test_models/test_full_battery_models/test_lithium_ion/test_spme.py @@ -10,7 +10,3 @@ class TestSPMe(BaseIntegrationTestLithiumIon): @pytest.fixture(autouse=True) def setup(self): self.model = pybamm.lithium_ion.SPMe - - def test_integrated_conductivity(self): - options = {"electrolyte conductivity": "integrated"} - self.run_basic_processing_test(options) diff --git a/tests/unit/test_citations.py b/tests/unit/test_citations.py index 978569d864..2d8e2887fa 100644 --- a/tests/unit/test_citations.py +++ b/tests/unit/test_citations.py @@ -225,16 +225,6 @@ def test_subramanian_2005(self): self.assertIn("Subramanian2005", citations._papers_to_cite) self.assertIn("Subramanian2005", citations._citation_tags.keys()) - def test_brosaplanella_2021(self): - # Test that calling relevant bits of code adds the right paper to citations - citations = pybamm.citations - - citations._reset() - self.assertNotIn("BrosaPlanella2021", citations._papers_to_cite) - pybamm.electrolyte_conductivity.Integrated(None) - self.assertIn("BrosaPlanella2021", citations._papers_to_cite) - self.assertIn("BrosaPlanella2021", citations._citation_tags.keys()) - def test_brosaplanella_2022(self): # Test that calling relevant bits of code adds the right paper to citations citations = pybamm.citations diff --git a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_dfn.py b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_dfn.py index cddd59c352..76166adc57 100644 --- a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_dfn.py +++ b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_dfn.py @@ -11,11 +11,6 @@ class TestDFN(BaseUnitTestLithiumIon): def setUp(self): self.model = pybamm.lithium_ion.DFN - def test_electrolyte_options(self): - options = {"electrolyte conductivity": "integrated"} - with pytest.raises(pybamm.OptionError, match="electrolyte conductivity"): - pybamm.lithium_ion.DFN(options) - def test_well_posed_size_distribution(self): options = {"particle size": "distribution"} self.check_well_posedness(options) diff --git a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_newman_tobias.py b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_newman_tobias.py index c979474e13..af6cc1ec2e 100644 --- a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_newman_tobias.py +++ b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_newman_tobias.py @@ -11,11 +11,6 @@ class TestNewmanTobias(BaseUnitTestLithiumIon): def setUp(self): self.model = pybamm.lithium_ion.NewmanTobias - def test_electrolyte_options(self): - options = {"electrolyte conductivity": "integrated"} - with pytest.raises(pybamm.OptionError, match="electrolyte conductivity"): - pybamm.lithium_ion.NewmanTobias(options) - @pytest.mark.skip(reason="Test currently not implemented") def test_well_posed_particle_phases(self): pass # skip this test diff --git a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_spme.py b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_spme.py index b0d38fa9c7..9e3293b7f1 100644 --- a/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_spme.py +++ b/tests/unit/test_models/test_full_battery_models/test_lithium_ion/test_spme.py @@ -33,7 +33,3 @@ def test_electrolyte_options(self): options = {"electrolyte conductivity": "full"} with pytest.raises(pybamm.OptionError, match="electrolyte conductivity"): pybamm.lithium_ion.SPMe(options) - - def test_integrated_conductivity(self): - options = {"electrolyte conductivity": "integrated"} - self.check_well_posedness(options) From f1c876fa17640bc4567554996199deedf3b5551f Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Fri, 9 Aug 2024 18:22:27 +0100 Subject: [PATCH 07/13] #4274 fix test options --- .../test_full_battery_models/test_base_battery_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/test_models/test_full_battery_models/test_base_battery_model.py b/tests/unit/test_models/test_full_battery_models/test_base_battery_model.py index 6ee38faf9a..41c6d939e0 100644 --- a/tests/unit/test_models/test_full_battery_models/test_base_battery_model.py +++ b/tests/unit/test_models/test_full_battery_models/test_base_battery_model.py @@ -24,7 +24,7 @@ 'current collector': 'uniform' (possible: ['uniform', 'potential pair', 'potential pair quite conductive']) 'diffusivity': 'single' (possible: ['single', 'current sigmoid']) 'dimensionality': 0 (possible: [0, 1, 2]) -'electrolyte conductivity': 'default' (possible: ['default', 'full', 'leading order', 'composite', 'integrated']) +'electrolyte conductivity': 'default' (possible: ['default', 'full', 'leading order', 'composite']) 'exchange-current density': 'single' (possible: ['single', 'current sigmoid']) 'heat of mixing': 'false' (possible: ['false', 'true']) 'hydrolysis': 'false' (possible: ['false', 'true']) From 455d488138fb67cff5a5dc182190dd55572eaf5e Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Sun, 25 Aug 2024 18:07:35 +0100 Subject: [PATCH 08/13] #4274 fix issue with latexify --- .../composite_conductivity.py | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py index 7ebcfbf696..6de3180ae8 100644 --- a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py +++ b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py @@ -24,21 +24,11 @@ class Composite(BaseElectrolyteConductivity): def __init__(self, param, domain=None, options=None): super().__init__(param, domain, options=options) - def _higher_order_macinnes_function(self, x): - "Function to differentiate between composite and first-order models" + def _derivative_macinnes_function(self, x): + "Compute the derivative of the MacInnes function." tol = pybamm.settings.tolerances["macinnes__c_e"] x = pybamm.maximum(x, tol) - return pybamm.log(x) - - def _gradient_macinnes_function(self, x): - "Gradient of the MacInnes function" - # tol = pybamm.settings.tolerances["macinnes__c_e"] - # x_edge = pybamm.FullBroadcastToEdges( - # x, - # broadcast_domains=x.domains, - # ) - # return pybamm.grad(x) / pybamm.maximum(x_edge, tol) - return pybamm.grad(self._higher_order_macinnes_function(x)) + return 1 / x def get_coupled_variables(self, variables): i_boundary_cc = variables["Current collector current density [A.m-2]"] @@ -97,7 +87,7 @@ def get_coupled_variables(self, variables): eta_c_n = -RT_F_av_n * pybamm.IndefiniteIntegral( param.chi(c_e_n, T_av_n) - * self._higher_order_macinnes_function(c_e_n).diff(c_e_n) + * self._derivative_macinnes_function(c_e_n) * pybamm.grad(c_e_n), x_n, ) @@ -118,7 +108,7 @@ def get_coupled_variables(self, variables): i_e_s_edge = pybamm.PrimaryBroadcastToEdges(i_boundary_cc, "separator") eta_c_s = -RT_F_av_s * pybamm.IndefiniteIntegral( param.chi(c_e_s, T_av_s) - * self._higher_order_macinnes_function(c_e_s).diff(c_e_s) + * self._derivative_macinnes_function(c_e_s) * pybamm.grad(c_e_s), x_s, ) @@ -137,7 +127,7 @@ def get_coupled_variables(self, variables): i_e_p_edge = i_boundary_cc * (L_x - x_p_edge) / L_p eta_c_p = -RT_F_av_p * pybamm.IndefiniteIntegral( param.chi(c_e_p, T_av_p) - * self._higher_order_macinnes_function(c_e_p).diff(c_e_p) + * self._derivative_macinnes_function(c_e_p) * pybamm.grad(c_e_p), x_p, ) From 711bffcae9d597260eec802d0cc0deb90a41604e Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Sun, 25 Aug 2024 18:41:24 +0100 Subject: [PATCH 09/13] #4272 add bcs to electrolyte potential to fix dimension bug --- .../electrolyte_conductivity/composite_conductivity.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py index 6de3180ae8..8891749c59 100644 --- a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py +++ b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py @@ -173,6 +173,8 @@ def get_coupled_variables(self, variables): return variables def set_boundary_conditions(self, variables): + # Define the boundary conditions for electrolyte concentration and potential + # so the gradients can be computed if self.options.electrode_types["negative"] == "planar": domains = ["separator", "positive"] else: @@ -182,11 +184,16 @@ def set_boundary_conditions(self, variables): c_e = variables[ domain.capitalize() + " electrolyte concentration [mol.m-3]" ] + phi_e = variables[domain.capitalize() + " electrolyte potential [V]"] self.boundary_conditions.update( { c_e: { "left": (pybamm.boundary_gradient(c_e, "left"), "Neumann"), "right": (pybamm.boundary_gradient(c_e, "right"), "Neumann"), - } + }, + phi_e: { + "left": (pybamm.boundary_gradient(phi_e, "left"), "Neumann"), + "right": (pybamm.boundary_gradient(phi_e, "right"), "Neumann"), + }, } ) From bffbe815204d54dd2351c597d966e382017c8aac Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Tue, 27 Aug 2024 14:59:08 +0100 Subject: [PATCH 10/13] #4274 start debugging shape error --- .../composite_conductivity.py | 72 +++++++++++-------- .../models/submodels/thermal/base_thermal.py | 3 + 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py index 8891749c59..d603a7dc59 100644 --- a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py +++ b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py @@ -59,19 +59,24 @@ def get_coupled_variables(self, variables): L_x = param.L_x x_s = pybamm.standard_spatial_vars.x_s x_p = pybamm.standard_spatial_vars.x_p + x_p_edge = pybamm.standard_spatial_vars.x_p_edge # electrolyte current if self.options.electrode_types["negative"] == "planar": - i_e_n = None + # i_e_n = None + pass else: x_n = pybamm.standard_spatial_vars.x_n + x_n_edge = pybamm.standard_spatial_vars.x_n_edge T_av_n = pybamm.PrimaryBroadcast(T_av, "negative electrode") RT_F_av_n = param.R * T_av_n / param.F - i_e_n = i_boundary_cc * x_n / L_n - i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc, "separator") - i_e_p = i_boundary_cc * (L_x - x_p) / L_p - i_e = pybamm.concatenation(i_e_n, i_e_s, i_e_p) - + # i_e_n = i_boundary_cc * x_n / L_n + i_e_n_edge = i_boundary_cc * x_n_edge / L_n + # i_e_s = pybamm.PrimaryBroadcast(i_boundary_cc, "separator") + i_e_s_edge = pybamm.PrimaryBroadcastToEdges(i_boundary_cc, "separator") + # i_e_p = i_boundary_cc * (L_x - x_p) / L_p + i_e_p_edge = i_boundary_cc * (L_x - x_p_edge) / L_p + i_e = pybamm.concatenation(i_e_n_edge, i_e_s_edge, i_e_p_edge) phi_e_dict = {} # electrolyte potential @@ -82,8 +87,6 @@ def get_coupled_variables(self, variables): else: # need to have current evaluated on edge as integral will make it # evaluate on node - x_n_edge = pybamm.standard_spatial_vars.x_n_edge - i_e_n_edge = i_boundary_cc * x_n_edge / L_n eta_c_n = -RT_F_av_n * pybamm.IndefiniteIntegral( param.chi(c_e_n, T_av_n) @@ -105,7 +108,6 @@ def get_coupled_variables(self, variables): phi_e_n = phi_e_const - (delta_phi_e_n + eta_c_n) phi_e_dict["negative electrode"] = phi_e_n - i_e_s_edge = pybamm.PrimaryBroadcastToEdges(i_boundary_cc, "separator") eta_c_s = -RT_F_av_s * pybamm.IndefiniteIntegral( param.chi(c_e_s, T_av_s) * self._derivative_macinnes_function(c_e_s) @@ -123,8 +125,6 @@ def get_coupled_variables(self, variables): - (delta_phi_e_s + eta_c_s) ) - x_p_edge = pybamm.standard_spatial_vars.x_p_edge - i_e_p_edge = i_boundary_cc * (L_x - x_p_edge) / L_p eta_c_p = -RT_F_av_p * pybamm.IndefiniteIntegral( param.chi(c_e_p, T_av_p) * self._derivative_macinnes_function(c_e_p) @@ -176,24 +176,34 @@ def set_boundary_conditions(self, variables): # Define the boundary conditions for electrolyte concentration and potential # so the gradients can be computed if self.options.electrode_types["negative"] == "planar": - domains = ["separator", "positive"] + domains = ["Separator", "Positive"] else: - domains = ["negative", "separator", "positive"] - - for domain in domains: - c_e = variables[ - domain.capitalize() + " electrolyte concentration [mol.m-3]" - ] - phi_e = variables[domain.capitalize() + " electrolyte potential [V]"] - self.boundary_conditions.update( - { - c_e: { - "left": (pybamm.boundary_gradient(c_e, "left"), "Neumann"), - "right": (pybamm.boundary_gradient(c_e, "right"), "Neumann"), - }, - phi_e: { - "left": (pybamm.boundary_gradient(phi_e, "left"), "Neumann"), - "right": (pybamm.boundary_gradient(phi_e, "right"), "Neumann"), - }, - } - ) + domains = ["Negative", "Separator", "Positive"] + + var_names = [ + " electrode porosity times concentration [mol.m-3]", + " electrolyte concentration [mol.m-3]", + " electrolyte potential [V]", + ] + + for name in var_names: + for domain in domains: + full_var_name = domain + name + + # Fix inconcsistency in naming, where porosity times concentration is + # called "electrode porosity times concentration" + full_var_name = full_var_name.replace( + "Separator electrode", "Separator" + ) + var = variables[full_var_name] + self.boundary_conditions.update( + { + var: { + "left": (pybamm.boundary_gradient(var, "left"), "Neumann"), + "right": ( + pybamm.boundary_gradient(var, "right"), + "Neumann", + ), + }, + } + ) diff --git a/src/pybamm/models/submodels/thermal/base_thermal.py b/src/pybamm/models/submodels/thermal/base_thermal.py index c5ebbc7dbd..8a89759e28 100644 --- a/src/pybamm/models/submodels/thermal/base_thermal.py +++ b/src/pybamm/models/submodels/thermal/base_thermal.py @@ -105,8 +105,11 @@ def _get_standard_coupled_variables(self, variables): i_e_n, i_e_s, i_e_p = i_e.orphans phi_e_n = variables["Negative electrolyte potential [V]"] Q_ohm_e_n = -pybamm.inner(i_e_n, pybamm.grad(phi_e_n)) + # Q_ohm_e_n = -pybamm.inner(i_e_n, i_e_n) Q_ohm_e_s = -pybamm.inner(i_e_s, pybamm.grad(phi_e_s)) + # Q_ohm_e_s = -pybamm.inner(i_e_s, i_e_s) Q_ohm_e_p = -pybamm.inner(i_e_p, pybamm.grad(phi_e_p)) + # Q_ohm_e_p = -pybamm.inner(i_e_p, i_e_p) Q_ohm_e = pybamm.concatenation(Q_ohm_e_n, Q_ohm_e_s, Q_ohm_e_p) else: # else compute using i_e across all domains From 57bf506e788d6c7bdc82a04c910bb2f5d2f22114 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Wed, 28 Aug 2024 20:03:42 +0100 Subject: [PATCH 11/13] #4274 define electrolyte potential BCs for compatibility with thermal models --- .../electrolyte_conductivity/composite_conductivity.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py index d603a7dc59..efea65a55a 100644 --- a/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py +++ b/src/pybamm/models/submodels/electrolyte_conductivity/composite_conductivity.py @@ -64,7 +64,7 @@ def get_coupled_variables(self, variables): # electrolyte current if self.options.electrode_types["negative"] == "planar": # i_e_n = None - pass + i_e_n_edge = None else: x_n = pybamm.standard_spatial_vars.x_n x_n_edge = pybamm.standard_spatial_vars.x_n_edge @@ -173,6 +173,9 @@ def get_coupled_variables(self, variables): return variables def set_boundary_conditions(self, variables): + # Define boundary conditions for electrolyte potential + super().set_boundary_conditions(variables) + # Define the boundary conditions for electrolyte concentration and potential # so the gradients can be computed if self.options.electrode_types["negative"] == "planar": @@ -181,9 +184,9 @@ def set_boundary_conditions(self, variables): domains = ["Negative", "Separator", "Positive"] var_names = [ - " electrode porosity times concentration [mol.m-3]", + # " electrode porosity times concentration [mol.m-3]", " electrolyte concentration [mol.m-3]", - " electrolyte potential [V]", + # " electrolyte potential [V]", ] for name in var_names: From 437ffc53d503511c134b0d6fb804cfc62c6f38d2 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Wed, 9 Oct 2024 15:21:08 +0100 Subject: [PATCH 12/13] #4274 add SPM description --- docs/_static/model_hierarchy.png | Bin 0 -> 151656 bytes .../user_guide/fundamentals/battery_models.md | 74 +++++++++++++++++- 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 docs/_static/model_hierarchy.png diff --git a/docs/_static/model_hierarchy.png b/docs/_static/model_hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..34411d183b06f3b543919db169b7bd5f6c5e9417 GIT binary patch literal 151656 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 @XCHIW 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 RzSj^wj6JlM^TEHq_#YG!L5ctX literal 0 HcmV?d00001 diff --git a/docs/source/user_guide/fundamentals/battery_models.md b/docs/source/user_guide/fundamentals/battery_models.md index b2faff98dd..04f1bf762f 100644 --- a/docs/source/user_guide/fundamentals/battery_models.md +++ b/docs/source/user_guide/fundamentals/battery_models.md @@ -4,8 +4,78 @@ References for the battery models used in PyBaMM simulations can be found callin ```python pybamm.print_citations() ``` -However, a few papers are provided in this section for anyone interested in reading the theory -behind the models before doing the tutorials. +However, each model can be defined in slightly different ways depending on the paper. For this reason, in this page we state some of the standard battery models with the exact definition used in PyBaMM. Familiarising with the theory of battery model is fundamental before doing the PyBaMM tutorials. + +## Lithium-ion battery models + +The standard models for lithium-ion batteries can be classified in a hierarchical structure, from simple to complex. Here, as shown in the figure, we focus on the SPM, SPMe and DFN models. This hierarchy is discussed in a lot more detail in the review article by [Brosa Planella et al. (2022)](https://doi.org/10.1088/2516-1083/ac7d31), and also explains in detail how these models are derived. + +A diagram showing the hierarchy of lithium-ion battery models, from simple (SPM) to complex (DFN). The diagram also includes what each model captures and misses compared to the others. + +These models impose conservation of lithium and charge, so the variables we are interested in are the lithium concentration in the solid and electrolyte phases, $c_k$ and $c_\mathrm{e}$ respectively, and the electric potential $\phi_k$ and $\phi_\mathrm{e}$ in the solid and electrolyte phases, respectively. The subscript $k \in \{\mathrm{n}, \mathrm{p}\}$ denotes the negative and positive electrodes, respectively. + +**Important remark:** these models account for the electrochemistry of the battery, and thus not include the thermal and degradation effects. These effects can be added to the electrochemical models as additional equations (and through the PyBaMM model options). + +The parameters involved in these models are defined in the following table (where parameters with $k \in \{\mathrm{n}, \mathrm{s}, \mathrm{p}\}$ may have different values for each electrode and separator): + +| Symbol | Description | Units | +|:------:|:-----------:|:-----:| +| $R_k$ | Particle radius | m | +| $L_k$ | Electrode/separator thickness | m | +| $D_k (c_k)$ | Electrode particle diffusivity | m $^2$ s $^{-1}$ | +| $\sigma_k$ | Electrode conductivity | S m $^{-1}$ | +| $U_k (c_k)$ | Open-circuit potential | V | +| $j_{0 k} (c_k, c_\mathrm{e})$ | Exchange current density | A m $^{-2}$ | +| $\varepsilon_{\mathrm{s}, k}$ | Solid phase volume fraction | - | +| $\varepsilon$ | Porosity | - | +| $\mathcal{B}$ | Transport efficiency | - | +| $D_\mathrm{e}(c_\mathrm{e})$ | Electrolyte diffusivity | m $^2$ s $^{-1}$ | +| $\sigma_\mathrm{e}(c_\mathrm{e})$ | Electrolyte conductivity | S m $^{-1}$ | +| $t^+(c_\mathrm{e})$ | Transference number | - | +| $c_\mathrm{e0}$ | Initial electrolyte concentration | mol m $^{-3}$ | +| $T$ | Temperature | K | +| $i_\mathrm{app}$ | Applied current density | A m $^{-2}$ | + +The surface area per unite volume $a_k$ is defined as $a_k = 3 \varepsilon_{\mathrm{s}, k}/ R_k$. The two physical constants appearing in the models are the Faraday constant is $F$, the gas constant $R$. + +Note that not all models use all of these parameters. For example, the SPM only uses a subset. + +### Single particle model (SPM) +The SPM is the simplest of the three models considered here. It assumes that the active material particles behave similarly so they can be described by an averaged particle. The model considers two particles: one for the positive electrode and one for the negative electrode, where we model the lithium concentration as a function of space and time, denoted as $c_\mathrm{p}$ and $c_\mathrm{n}$ respectively. Two (independent) diffusion equations need to be solved for the two particles, and any additional quantities (such as the cell voltage) are computed from explicit expressions. + + +In PyBaMM, the Single Particle Model is defined as follows: +$$\begin{align} +\frac{\partial c_\mathrm{n}}{\partial t} &= \frac{1}{r^2} \frac{\partial}{\partial r} \left (r^2 D_\mathrm{n} (c_\mathrm{n}) \frac{\partial c_\mathrm{n}}{\partial r} \right), & \text{ in } \quad 0 < r < R_\mathrm{n},\\ +\frac{\partial c_\mathrm{p}}{\partial t} &= \frac{1}{r^2} \frac{\partial}{\partial r} \left (r^2 D_\mathrm{p} (c_\mathrm{p}) \frac{\partial c_\mathrm{p}}{\partial r} \right), & \text{ in } \quad 0 < r < R_\mathrm{p}, +\end{align}$$ + +with boundary conditions +$$\begin{align} +\frac{\partial c_\mathrm{n}}{\partial r} &= 0, & \text{ at } \quad r = 0,\\ +-D_\mathrm{p} (c_\mathrm{n}) \frac{\partial c_\mathrm{n}}{\partial r} &= \frac{i_\mathrm{app}(t)}{a_\mathrm{n} L_\mathrm{n} F}, & \text{ at } \quad r = R_\mathrm{n},\\ +\frac{\partial c_\mathrm{p}}{\partial r} &= 0, & \text{ at } \quad r = 0,\\ +-D_\mathrm{p} (c_\mathrm{p}) \frac{\partial c_\mathrm{p}}{\partial r} &= -\frac{i_\mathrm{app}(t)}{a_\mathrm{p} L_\mathrm{p} F}, & \text{ at } \quad r = R_\mathrm{p}, +\end{align}$$ + +and initial conditions +$$\begin{align} +c_\mathrm{n}(r, 0) &= c_\mathrm{n0}(r), & \text{ at } \quad t = 0,\\ +c_\mathrm{p}(r, 0) &= c_\mathrm{p0}(r), & \text{ at } \quad t = 0. +\end{align} +$$ + +The voltage can then be computed from $c_\mathrm{n}$ and $c_\mathrm{p}$ as +$$\begin{align} +V(t) &= U_\mathrm{p}(c_\mathrm{p}(R_\mathrm{p}, t)) - U_\mathrm{n}(c_\mathrm{n}(R_\mathrm{n}, t)) \\ +& \quad - \frac{2 R T}{F} \mathrm{arcsinh} \left(\frac{i_\mathrm{app}(t)}{a_\mathrm{n} L_\mathrm{n} j_{0\mathrm{n}}} \right) - \frac{2 R T}{F} \mathrm{arcsinh} \left(\frac{i_\mathrm{app}(t)}{a_\mathrm{p} L_\mathrm{p} j_{0\mathrm{p}}} \right),\nonumber +\end{align}$$ + +where $j_{0\mathrm{n}}(c_\mathrm{n})$ and $j_{0\mathrm{p}}(c_\mathrm{p})$ are the interfacial current densities at the negative and positive electrodes, respectively, and can be defined in the parameter set by the user. + +### Single particle model with electrolyte (SPMe) + +### Doyle-Fuller-Newman model (DFN) ## Review Articles From 4db41b61ad355c231e12ca15ee96bd49e081952f Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Wed, 16 Oct 2024 19:02:57 +0100 Subject: [PATCH 13/13] #4274 update model definition --- .../user_guide/fundamentals/battery_models.md | 118 ++++++++++++++++-- 1 file changed, 106 insertions(+), 12 deletions(-) diff --git a/docs/source/user_guide/fundamentals/battery_models.md b/docs/source/user_guide/fundamentals/battery_models.md index 04f1bf762f..c552124d15 100644 --- a/docs/source/user_guide/fundamentals/battery_models.md +++ b/docs/source/user_guide/fundamentals/battery_models.md @@ -4,7 +4,7 @@ References for the battery models used in PyBaMM simulations can be found callin ```python pybamm.print_citations() ``` -However, each model can be defined in slightly different ways depending on the paper. For this reason, in this page we state some of the standard battery models with the exact definition used in PyBaMM. Familiarising with the theory of battery model is fundamental before doing the PyBaMM tutorials. +However, each model can be defined in slightly different ways depending on the paper. For this reason, in this page we state some of the standard battery models with the exact definition used in PyBaMM. The goal is not to provide a thorough explanation of the models, but just to state them. For more details, we strongly advise the reader to follow the references provided in this page. ## Lithium-ion battery models @@ -32,6 +32,7 @@ The parameters involved in these models are defined in the following table (wher | $D_\mathrm{e}(c_\mathrm{e})$ | Electrolyte diffusivity | m $^2$ s $^{-1}$ | | $\sigma_\mathrm{e}(c_\mathrm{e})$ | Electrolyte conductivity | S m $^{-1}$ | | $t^+(c_\mathrm{e})$ | Transference number | - | +| $f_\mathrm{therm}(c_\mathrm{e})$ | Thermodynamic factor | - | | $c_\mathrm{e0}$ | Initial electrolyte concentration | mol m $^{-3}$ | | $T$ | Temperature | K | | $i_\mathrm{app}$ | Applied current density | A m $^{-2}$ | @@ -41,7 +42,7 @@ The surface area per unite volume $a_k$ is defined as $a_k = 3 \varepsilon_{\mat Note that not all models use all of these parameters. For example, the SPM only uses a subset. ### Single particle model (SPM) -The SPM is the simplest of the three models considered here. It assumes that the active material particles behave similarly so they can be described by an averaged particle. The model considers two particles: one for the positive electrode and one for the negative electrode, where we model the lithium concentration as a function of space and time, denoted as $c_\mathrm{p}$ and $c_\mathrm{n}$ respectively. Two (independent) diffusion equations need to be solved for the two particles, and any additional quantities (such as the cell voltage) are computed from explicit expressions. +The SPM is the simplest of the three models considered here. It assumes that the active material particles behave similarly so they can be described by an averaged particle. The model considers two particles: one for the positive electrode and one for the negative electrode, where we model the lithium concentration as a function of space and time, denoted as $c_\mathrm{p}$ and $c_\mathrm{n}$ respectively. The model assumes spherical symmetry and the domains are $0 \leq r \leq R_k$. Two (independent) diffusion equations need to be solved for the two particles, and any additional quantities (such as the cell voltage) are computed from explicit expressions. In PyBaMM, the Single Particle Model is defined as follows: @@ -74,26 +75,119 @@ V(t) &= U_\mathrm{p}(c_\mathrm{p}(R_\mathrm{p}, t)) - U_\mathrm{n}(c_\mathrm{n}( where $j_{0\mathrm{n}}(c_\mathrm{n})$ and $j_{0\mathrm{p}}(c_\mathrm{p})$ are the interfacial current densities at the negative and positive electrodes, respectively, and can be defined in the parameter set by the user. ### Single particle model with electrolyte (SPMe) +The SPMe enhances the SPM by including an electrolyte phase. This model is more complex than the SPM, but still relatively simple. In addition to the two particles, the model considers the electrolyte concentration $c_\mathrm{e}$ over the electrodes (and separator) thickness $0 \leq x \leq L$ (where $L = L_\mathrm{n} + L_\mathrm{s} + L_\mathrm{p}$). + +The equation for the electrolyte concentration is given by +$$\begin{equation} +\varepsilon\frac{\partial c_\mathrm{e}}{\partial t} = \frac{\partial}{\partial x} \left(D_\mathrm{e}(c_\mathrm{e}) \mathcal{B}(x) \frac{\partial c_\mathrm{e}}{\partial x} + \frac{1 - t^+(c_\mathrm{e})}{F} i_\mathrm{e}\right), +\end{equation}$$ +with boundary conditions +$$\begin{align} +\frac{\partial c_\mathrm{e}}{\partial x} &= 0, & \text{ at } \quad x = 0 \quad \text{and} \quad x = L,\\ +\end{align}$$ +and initial condition +$$\begin{align} +c_\mathrm{e}(x, 0) &= c_\mathrm{e0}, & \text{ at } \quad t = 0. +\end{align}$$ + +The current in the electrolyte can be explicitly computed as +$$\begin{equation} +i_\mathrm{e}(x, t) = \begin{cases} +\frac{i_\mathrm{app}(t)}{L_\mathrm{n}} x, & \text{ in } \quad 0 \leq x < L_\mathrm{n},\\ +i_\mathrm{app}(t), & \text{ in } \quad L_\mathrm{n} \leq x < L - L_\mathrm{p},\\ +\frac{i_\mathrm{app}(t)}{L_\mathrm{p}} (L - x), & \text{ in } \quad L - L_\mathrm{p} \leq x \leq L. +\end{cases} +\end{equation}$$ + +From the electrolyte concentration, we can compute additional corrections to the SPM voltage expression. Then, the voltage can be computed as +$$\begin{align} +V(t) &= U_\mathrm{eq} + \eta_\mathrm{r} + \eta_\mathrm{e} + \Delta \phi_\mathrm{e} - \Delta \phi_\mathrm{s}, +\end{align}$$ +where each component is defined as +$$\begin{align} +U_\mathrm{eq} &= U_\mathrm{p}(c_\mathrm{p}(R_\mathrm{p}, t)) - U_\mathrm{n}(c_\mathrm{n}(R_\mathrm{n}, t)),\\ +\eta_\mathrm{r} &= -\frac{2 R T}{F} \left( \frac{1}{L_\mathrm{p}}\int_{L - L_\mathrm{p}}^L\mathrm{arcsinh} \left(\frac{i_\mathrm{app}(t)}{a_\mathrm{p} L_\mathrm{p} j_{0\mathrm{p}}} \right) \mathrm{d} x + \frac{1}{L_\mathrm{n}} \int_0^{L_\mathrm{n}}\mathrm{arcsinh} \left(\frac{i_\mathrm{app}(t)}{a_\mathrm{n} L_\mathrm{n} j_{0\mathrm{n}}} \right) \mathrm{d} x \right),\\ +\eta_\mathrm{e} &= \frac{2 R T}{F} \left( \frac{1}{L_\mathrm{p}}\int_{L - L_\mathrm{p}}^L \int_0^x (1 - t^+)f_\mathrm{therm} \frac{\partial \log c_\mathrm{e}(s, t)}{\partial s} \mathrm{d} s \mathrm{d} x + \frac{1}{L_\mathrm{n}} \int_0^{L_\mathrm{n}}\int_0^x (1 - t^+)f_\mathrm{therm} \frac{\partial \log c_\mathrm{e}(s, t)}{\partial s} \mathrm{d} s \mathrm{d} x \right),\\ +\Delta \phi_\mathrm{e} &= - \frac{1}{L_\mathrm{p}} \int_{L - L_\mathrm{p}}^L \int_0^x\frac{i_\mathrm{app}(t)}{\sigma_\mathrm{e}(c_\mathrm{e}(s, t)) \mathcal{B}(s)} \mathrm{d} s \mathrm{d} x + \frac{1}{L_\mathrm{n}} \int_0^{L_\mathrm{n}} \int_0^x\frac{i_\mathrm{app}(t)}{\sigma_\mathrm{e}(c_\mathrm{e}(s, t)) \mathcal{B}(s)} \mathrm{d} s \mathrm{d} x,\\ +\Delta \phi_\mathrm{s} &= -\frac{i_\mathrm{app}(t)}{3} \left( \frac{L_\mathrm{p}}{\sigma_\mathrm{p}} + \frac{L_\mathrm{n}}{\sigma_\mathrm{n}} \right), +\end{align}$$ +where now $j_{0k}(c_k, c_\mathrm{e})$ depends both on the particle surface concentration and the electrolyte concentration. ### Doyle-Fuller-Newman model (DFN) +Finally, we present the DFN model, which is the most complex of the models considered here. The model still considers the multiscale domain of the particles $0 \leq r \leq R_k$ and the electrolyte $0 \leq x \leq L$, but now the model allows for a different particle at each point $x$ of the macroscale. Then, the model requires solving for the concentrations and potentials in both electrodes and the electrolyte: $c_k(r, x, t)$, $c_\mathrm{e}(x, t)$, $\phi_k(x, t)$, $\phi_\mathrm{e}(x, t)$. -## Review Articles +The concentration in the particles is described at the microscale by +$$\begin{align} +\frac{\partial c_k}{\partial t} &= \frac{1}{r^2} \frac{\partial}{\partial r} \left (r^2 D_k (c_k) \frac{\partial c_k}{\partial r} \right), & \text{ in } \quad 0 < r < R_k,\\ +\end{align}$$ +with boundary and initial conditions +$$\begin{align} +\frac{\partial c_k}{\partial r} &= 0, & \text{ at } \quad r = 0,\\ +-D_k (c_k) \frac{\partial c_k}{\partial r} &= \frac{J_k}{a_k F}, & \text{ at } \quad r = R_k,\\ +c_k(r, x, 0) &= c_{k0}(r, x), & \text{ at } \quad t = 0. +\end{align}$$ -[Review of physics-based lithium-ion battery models](https://doi.org/10.1088/2516-1083/ac7d31) +The concentration in the electrolyte is described by +$$\begin{equation} +\varepsilon\frac{\partial c_\mathrm{e}}{\partial t} = \frac{\partial}{\partial x} \left(D_\mathrm{e}(c_\mathrm{e}) \mathcal{B}(x) \frac{\partial c_\mathrm{e}}{\partial x} + \frac{1 - t^+(c_\mathrm{e})}{F} i_\mathrm{e}\right), \quad \text{ in } \quad 0 < x < L, +\end{equation}$$ +with boundary and initial conditions +$$\begin{align} +\frac{\partial c_\mathrm{e}}{\partial x} &= 0, & \text{ at } \quad x = 0 \quad \text{and} \quad x = L,\\ +c_\mathrm{e}(x, 0) &= c_\mathrm{e0}, & \text{ at } \quad t = 0. +\end{align}$$ -[Review of parameterisation and a novel database for Li-ion battery models](https://doi.org/10.1088/2516-1083/ac692c) +The potential in the electrodes is described by +$$\begin{align} +\frac{\partial i_k}{\partial x} = -J_k, +\end{align}$$ +with +$$\begin{align} +i_k = -\sigma_k \frac{\partial \phi_k}{\partial x}, +\end{align}$$ +which for $k = \mathrm{n}$ is defined in $x \in [0, L_\mathrm{n}]$, and for $k = \mathrm{p}$ is defined in $x \in [L - L_\mathrm{p}, L]$. The boundary conditions are +$$\begin{align} +\phi_\mathrm{n} &= 0, & \text{ at } \quad x = 0,\\ +i_\mathrm{n} &= 0, & \text{ at } \quad x = L_\mathrm{n},\\ +i_\mathrm{p} &= 0, & \text{ at } \quad x = L - L_\mathrm{p},\\ +i_\mathrm{p} &= i_\mathrm{app}(t), & \text{ at } \quad x = L. +\end{align}$$ -## Model References +Finally, the potential in the electrolyte is described by +$$\begin{align} +\frac{\partial i_\mathrm{e}}{\partial x} = J, & \quad \text{ in } \quad 0 < x < L, +\end{align}$$ +with +$$\begin{align} +i_\mathrm{e} = -\sigma_\mathrm{e} \mathcal{B}(x) \left(\frac{\partial \phi_\mathrm{e}}{\partial x} - 2 (1 - t^+) f_\mathrm{therm} \frac{R T}{F} \frac{\partial \log c_\mathrm{e}}{\partial x}\right), +\end{align}$$ +and boundary conditions +$$\begin{align} +i_\mathrm{e} &= 0, & \text{ at } \quad x = 0 \quad \text{ and } \quad x = L. +\end{align}$$ + +The intercalation current density $J$ is defined as +$$\begin{align} +J = \begin{cases} +J_\mathrm{n}, & \text{ in } \quad 0 \leq x \leq L_\mathrm{n},\\ +0, & \text{ in } \quad L_\mathrm{n} < x \leq L - L_\mathrm{p},\\ +J_\mathrm{p}, & \text{ in } \quad L - L_\mathrm{p} < x \leq L, +\end{cases} +\end{align}$$ +where $J_\mathrm{n}$ and $J_\mathrm{p}$ are the intercalation current densities at the negative and positive electrodes, respectively, defined as +$$\begin{align} +J_k = -a_k j_{0 k} \sinh \left( \frac{F}{2RT} \left(\phi_k - \phi_\mathrm{e} - U_k(c_k(R_k, t)) \right) \right). +\end{align}$$ -### Lithium-Ion Batteries +## Further references -[Doyle-Fuller-Newman model](https://doi.org/10.1149/1.2221597) +1. M. Doyle, T.F. Fuller, J. Newman, [Modeling of Galvanostatic Charge and Discharge of the Lithium/Polymer/Insertion Cell](https://doi.org/10.1149/1.2221597), Journal of The Electrochemical Society 140 (1993) 1526–1533. -[Single particle model](https://doi.org/10.1149/2.0341915jes) +2. T.F. Fuller, M. Doyle, J. Newman, [Simulation and Optimization of the Dual Lithium Ion Insertion Cell](https://doi.org/10.1149/1.2054684), Journal of The Electrochemical Society 141 (1994) 1–10. -### Lead-Acid Batteries +3. S.G. Marquis, V. Sulzer, R. Timms, C.P. Please, S.J. Chapman, [An Asymptotic Derivation of a Single Particle Model with Electrolyte](https://doi.org/10.1149/2.0341915jes), Journal of The Electrochemical Society 166 (2019) A3693–A3706. -[Isothermal porous-electrode model](https://doi.org/10.1149/2.0301910jes) +4. F. Brosa Planella, W. Ai, A.M. Boyce, A. Ghosh, I. Korotkin, S. Sahu, V. Sulzer, R. Timms, T.G. Tranter, M. Zyskin, S.J. Cooper, J.S. Edge, J.M. Foster, M. Marinescu, B. Wu, G. Richardson, [A continuum of physics-based lithium-ion battery models reviewed](https://doi.org/10.1088/2516-1083/ac7d31), Prog. Energy 4 (2022) 042003. -[Leading-Order Quasi-Static model](https://doi.org/10.1149/2.0441908jes) +5. F. Brosa Planella, W.D. Widanage, [A Single Particle model with electrolyte and side reactions for degradation of lithium-ion batteries](https://doi.org/10.1016/j.apm.2022.12.009), Applied Mathematical Modelling 121 (2023) 586–610.