From 53b8a52a927e6c47bf5442d98a6f803d9933ca84 Mon Sep 17 00:00:00 2001 From: Valentin Sulzer Date: Thu, 20 Jul 2023 15:11:20 -0400 Subject: [PATCH 1/2] allow double-layer capacitance to depend on temperature --- pybamm/models/submodels/electrode/ohm/li_metal.py | 6 +++++- .../composite_surface_form_conductivity.py | 4 +++- .../full_surface_form_conductivity.py | 4 +++- .../leading_surface_form_conductivity.py | 4 +++- pybamm/parameters/lead_acid_parameters.py | 14 ++++++++++---- pybamm/parameters/lithium_ion_parameters.py | 12 ++++++++---- .../test_printing/test_print_name.py | 2 +- 7 files changed, 33 insertions(+), 13 deletions(-) diff --git a/pybamm/models/submodels/electrode/ohm/li_metal.py b/pybamm/models/submodels/electrode/ohm/li_metal.py index e03ed770ad..49de25231a 100644 --- a/pybamm/models/submodels/electrode/ohm/li_metal.py +++ b/pybamm/models/submodels/electrode/ohm/li_metal.py @@ -85,8 +85,12 @@ def set_rhs(self, variables): delta_phi = variables[ "Lithium metal interface surface potential difference [V]" ] + # temperature at the interface of the negative electrode with the separator + T = pybamm.boundary_value( + variables["Negative electrode temperature [K]"], "right" + ) - C_dl = self.domain_param.C_dl + C_dl = self.domain_param.C_dl(T) self.rhs[delta_phi] = 1 / C_dl * (i_cc - sum_j) diff --git a/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/composite_surface_form_conductivity.py b/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/composite_surface_form_conductivity.py index eea9d1bfaf..4b40e28e7d 100644 --- a/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/composite_surface_form_conductivity.py +++ b/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/composite_surface_form_conductivity.py @@ -110,7 +110,9 @@ def set_rhs(self, variables): f"X-averaged {domain} electrode surface potential difference [V]" ] - C_dl = self.domain_param.C_dl + T = variables[f"X-averaged {domain} electrode temperature [K]"] + + C_dl = self.domain_param.C_dl(T) self.rhs[delta_phi] = 1 / C_dl * (sum_a_j_av - sum_a_j) diff --git a/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/full_surface_form_conductivity.py b/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/full_surface_form_conductivity.py index dafd2dd0d3..7afeeac47e 100644 --- a/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/full_surface_form_conductivity.py +++ b/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/full_surface_form_conductivity.py @@ -269,7 +269,9 @@ def set_rhs(self, variables): domain, Domain = self.domain_Domain - C_dl = self.domain_param.C_dl + T = variables[f"{Domain} electrode temperature [K]"] + + C_dl = self.domain_param.C_dl(T) delta_phi = variables[f"{Domain} electrode surface potential difference [V]"] i_e = variables[f"{Domain} electrolyte current density [A.m-2]"] diff --git a/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/leading_surface_form_conductivity.py b/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/leading_surface_form_conductivity.py index 00d2c9078e..042d143f36 100644 --- a/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/leading_surface_form_conductivity.py +++ b/pybamm/models/submodels/electrolyte_conductivity/surface_potential_form/leading_surface_form_conductivity.py @@ -97,7 +97,9 @@ def set_rhs(self, variables): f"X-averaged {domain} electrode surface potential difference [V]" ] - C_dl = self.domain_param.C_dl + T = variables[f"X-averaged {domain} electrode temperature [K]"] + + C_dl = self.domain_param.C_dl(T) self.rhs[delta_phi] = 1 / C_dl * (sum_a_j_av - sum_a_j) diff --git a/pybamm/parameters/lead_acid_parameters.py b/pybamm/parameters/lead_acid_parameters.py index 4688887a6f..b1302aff05 100644 --- a/pybamm/parameters/lead_acid_parameters.py +++ b/pybamm/parameters/lead_acid_parameters.py @@ -303,9 +303,6 @@ def _set_parameters(self): self.DeltaV = self.DeltaVsurf + self.DeltaVliq self.Q_max = pybamm.Parameter(f"{Domain} electrode volumetric capacity [C.m-3]") - self.C_dl = pybamm.Parameter( - f"{Domain} electrode double-layer capacity [F.m-2]" - ) # In lead-acid the current collector and electrodes are the same (same # conductivity) but we correct here for Bruggeman. Note that because for @@ -314,8 +311,17 @@ def _set_parameters(self): # T_ref. self.sigma_cc = self.sigma(main.T_ref) * (1 - self.eps_max) ** self.b_s + def C_dl(self, T): + """Dimensional double-layer capacity [F.m-2]""" + inputs = {"Temperature [K]": T} + Domain = self.domain.capitalize() + return pybamm.FunctionParameter( + f"{Domain} electrode double-layer capacity [F.m-2]", inputs + ) + def sigma(self, T): - """Dimensional electrical conductivity""" + """Dimensional electrical conductivity [S.m-1]""" + inputs = {"Temperature [K]": T} Domain = self.domain.capitalize() return pybamm.FunctionParameter( diff --git a/pybamm/parameters/lithium_ion_parameters.py b/pybamm/parameters/lithium_ion_parameters.py index d035ad6c7d..7c649f1600 100644 --- a/pybamm/parameters/lithium_ion_parameters.py +++ b/pybamm/parameters/lithium_ion_parameters.py @@ -298,10 +298,6 @@ def _set_parameters(self): # Tortuosity parameters self.b_s = self.geo.b_s - self.C_dl = pybamm.Parameter( - f"{Domain} electrode double-layer capacity [F.m-2]" - ) - # Mechanical parameters self.nu = pybamm.Parameter(f"{Domain} electrode Poisson's ratio") self.E = pybamm.Parameter(f"{Domain} electrode Young's modulus [Pa]") @@ -342,6 +338,14 @@ def _set_parameters(self): f"{Domain} electrode current-driven interface utilisation factor [m3.mol-1]" ) + def C_dl(self, T): + """Dimensional double-layer capacity [F.m-2]""" + inputs = {"Temperature [K]": T} + Domain = self.domain.capitalize() + return pybamm.FunctionParameter( + f"{Domain} electrode double-layer capacity [F.m-2]", inputs + ) + def sigma(self, T): """Dimensional electrical conductivity in electrode""" inputs = {"Temperature [K]": T} diff --git a/tests/unit/test_expression_tree/test_printing/test_print_name.py b/tests/unit/test_expression_tree/test_printing/test_print_name.py index a9b7cd3a8b..554e6567f1 100644 --- a/tests/unit/test_expression_tree/test_printing/test_print_name.py +++ b/tests/unit/test_expression_tree/test_printing/test_print_name.py @@ -21,7 +21,7 @@ def test_prettify_print_name(self): ) # Test subscripts - self.assertEqual(param.n.C_dl.print_name, r"C_{\mathrm{dl,n}}") + self.assertEqual(param.n.C_dl(0).print_name, r"C_{\mathrm{dl,n}}") # Test bar c_e_av = pybamm.Variable("c_e_av") From 039c78612eb3f77da2e0d25af58004f9853686a6 Mon Sep 17 00:00:00 2001 From: Valentin Sulzer Date: Fri, 21 Jul 2023 10:05:16 -0400 Subject: [PATCH 2/2] changelog --- CHANGELOG.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 187a264223..336e763b8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,18 @@ # [Unreleased](https://github.com/pybamm-team/PyBaMM/) -## Breaking changes +## Features -- PyBaMM now has optional dependencies that can be installed with the pattern `pip install pybamm[option]` e.g. `pybamm[plot]` ([#3044](https://github.com/pybamm-team/PyBaMM/pull/3044)) +- Double-layer capacity can now be provided as a function of temperature ([#3174](https://github.com/pybamm-team/PyBaMM/pull/3174)) ## Bug fixes - Parameters in `Prada2013` have been updated to better match those given in the paper, which is a 2.3 Ah cell, instead of the mix-and-match with the 1.1 Ah cell from Lain2019. - Error generated when invalid parameter values are passed. -- Thevenin() model is now constructed with standard variables: `Time [s], Time [min], Time [h]` ([#3143](https://github.com/pybamm-team/PyBaMM/pull/3143)) +- Thevenin() model is now constructed with standard variables: `Time [s], Time [min], Time [h]` ([#3143](https://github.com/pybamm-team/PyBaMM/pull/3143)) + +## Breaking changes + +- PyBaMM now has optional dependencies that can be installed with the pattern `pip install pybamm[option]` e.g. `pybamm[plot]` ([#3044](https://github.com/pybamm-team/PyBaMM/pull/3044)) # [v23.5](https://github.com/pybamm-team/PyBaMM/tree/v23.5) - 2023-06-18 @@ -27,7 +31,7 @@ ## Bug fixes -- Realign 'count' increment in CasadiSolver._integrate() ([#2986](https://github.com/pybamm-team/PyBaMM/pull/2986)) +- Realign 'count' increment in CasadiSolver.\_integrate() ([#2986](https://github.com/pybamm-team/PyBaMM/pull/2986)) - Fix `pybamm_install_odes` and update the required SUNDIALS version ([#2958](https://github.com/pybamm-team/PyBaMM/pull/2958)) - Fixed a bug where all data included in a BPX was incorrectly assumed to be given as a function of time.([#2957](https://github.com/pybamm-team/PyBaMM/pull/2957)) - Remove brew install for Mac from the recommended developer installation options for SUNDIALS ([#2925](https://github.com/pybamm-team/PyBaMM/pull/2925))