From 447dd2bc2c4a2d7ea8790842fdd43a44fcf69a84 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Mon, 11 Jan 2021 15:54:32 +0100 Subject: [PATCH 01/10] #1322 made density a function of temperature --- pybamm/models/submodels/thermal/lumped.py | 2 +- .../pouch_cell_1D_current_collectors.py | 2 +- .../pouch_cell_2D_current_collectors.py | 2 +- pybamm/models/submodels/thermal/x_full.py | 8 +- pybamm/parameters/lead_acid_parameters.py | 19 +-- pybamm/parameters/lithium_ion_parameters.py | 19 +-- pybamm/parameters/thermal_parameters.py | 122 ++++++++++++------ .../test_lithium_ion_parameters.py | 11 +- 8 files changed, 122 insertions(+), 63 deletions(-) diff --git a/pybamm/models/submodels/thermal/lumped.py b/pybamm/models/submodels/thermal/lumped.py index d55cf63c01..74f911b370 100644 --- a/pybamm/models/submodels/thermal/lumped.py +++ b/pybamm/models/submodels/thermal/lumped.py @@ -105,7 +105,7 @@ def set_rhs(self, variables): T_vol_av: ( self.param.B * Q_vol_av + total_cooling_coefficient * (T_vol_av - T_amb) ) - / (self.param.C_th * self.param.rho) + / (self.param.C_th * self.param.rho(T_vol_av)) } def set_initial_conditions(self, variables): diff --git a/pybamm/models/submodels/thermal/pouch_cell/pouch_cell_1D_current_collectors.py b/pybamm/models/submodels/thermal/pouch_cell/pouch_cell_1D_current_collectors.py index 3b47bf1604..0facc49aeb 100644 --- a/pybamm/models/submodels/thermal/pouch_cell/pouch_cell_1D_current_collectors.py +++ b/pybamm/models/submodels/thermal/pouch_cell/pouch_cell_1D_current_collectors.py @@ -85,7 +85,7 @@ def set_rhs(self, variables): + self.param.B * Q_av + total_cooling_coefficient * (T_av - T_amb) ) - / (self.param.C_th * self.param.rho) + / (self.param.C_th * self.param.rho(T_av)) } def set_boundary_conditions(self, variables): diff --git a/pybamm/models/submodels/thermal/pouch_cell/pouch_cell_2D_current_collectors.py b/pybamm/models/submodels/thermal/pouch_cell/pouch_cell_2D_current_collectors.py index 36aa2e5a51..381500ee6b 100644 --- a/pybamm/models/submodels/thermal/pouch_cell/pouch_cell_2D_current_collectors.py +++ b/pybamm/models/submodels/thermal/pouch_cell/pouch_cell_2D_current_collectors.py @@ -84,7 +84,7 @@ def set_rhs(self, variables): - edge_cooling_coefficient * pybamm.source(T_av - T_amb, T_av, boundary=True) ) - / (self.param.C_th * self.param.rho) + / (self.param.C_th * self.param.rho(T_av)) } # TODO: Make h_edge a function of position to have bottom/top/side cooled cells. diff --git a/pybamm/models/submodels/thermal/x_full.py b/pybamm/models/submodels/thermal/x_full.py index 41f8d75d94..cb70cf5eb2 100644 --- a/pybamm/models/submodels/thermal/x_full.py +++ b/pybamm/models/submodels/thermal/x_full.py @@ -48,13 +48,19 @@ def set_rhs(self, variables): T = variables["Cell temperature"] Q = variables["Total heating"] + rho_k = pybamm.Concatenation( + self.param.rho_n(pybamm.standard_variables.T_n), + self.param.rho_s(pybamm.standard_variables.T_s), + self.param.rho_p(pybamm.standard_variables.T_p), + ) + # Fourier's law for heat flux q = -self.param.lambda_k * pybamm.grad(T) # N.B only y-z surface cooling is implemented for this model self.rhs = { T: (-pybamm.div(q) / self.param.delta ** 2 + self.param.B * Q) - / (self.param.C_th * self.param.rho_k) + / (self.param.C_th * rho_k) } def set_boundary_conditions(self, variables): diff --git a/pybamm/parameters/lead_acid_parameters.py b/pybamm/parameters/lead_acid_parameters.py index 2961189e5c..d2907b3147 100644 --- a/pybamm/parameters/lead_acid_parameters.py +++ b/pybamm/parameters/lead_acid_parameters.py @@ -618,13 +618,6 @@ def _set_dimensionless_parameters(self): self.rho_p = self.therm.rho_p self.rho_cp = self.therm.rho_cp self.rho_k = self.therm.rho_k - self.rho = ( - self.rho_cn * self.l_cn - + self.rho_n * self.l_n - + self.rho_s * self.l_s - + self.rho_p * self.l_p - + self.rho_cp * self.l_cp - ) / self.l # effective volumetric heat capacity self.lambda_cn = self.therm.lambda_cn self.lambda_n = self.therm.lambda_n @@ -647,7 +640,7 @@ def _set_dimensionless_parameters(self): * self.R * self.T_ref * self.tau_th_yz - / (self.therm.rho_eff_dim * self.F * self.Delta_T * self.L_x) + / (self.therm.rho_eff_dim(self.T_ref) * self.F * self.Delta_T * self.L_x) ) self.T_amb_dim = self.therm.T_amb_dim @@ -771,6 +764,16 @@ def a_p(self, x): x_dim = x * self.L_x return self.a_p_dimensional(x_dim) / self.a_p_typ + def rho(self, T): + "Dimensionless effective volumetric heat capacity" + return ( + self.rho_cn(T) * self.l_cn + + self.rho_n(T) * self.l_n + + self.rho_s(T) * self.l_s + + self.rho_p(T) * self.l_p + + self.rho_cp(T) * self.l_cp + ) / self.l + def _set_input_current(self): "Set the input current" diff --git a/pybamm/parameters/lithium_ion_parameters.py b/pybamm/parameters/lithium_ion_parameters.py index d60a25c88e..7ae975e0fc 100644 --- a/pybamm/parameters/lithium_ion_parameters.py +++ b/pybamm/parameters/lithium_ion_parameters.py @@ -573,13 +573,6 @@ def _set_dimensionless_parameters(self): self.rho_p = self.therm.rho_p self.rho_cp = self.therm.rho_cp self.rho_k = self.therm.rho_k - self.rho = ( - self.rho_cn * self.l_cn - + self.rho_n * self.l_n - + self.rho_s * self.l_s - + self.rho_p * self.l_p - + self.rho_cp * self.l_cp - ) / self.l # effective volumetric heat capacity self.lambda_cn = self.therm.lambda_cn self.lambda_n = self.therm.lambda_n @@ -602,7 +595,7 @@ def _set_dimensionless_parameters(self): * self.R * self.T_ref * self.tau_th_yz - / (self.therm.rho_eff_dim * self.F * self.Delta_T * self.L_x) + / (self.therm.rho_eff_dim(self.T_ref) * self.F * self.Delta_T * self.L_x) ) self.T_amb_dim = self.therm.T_amb_dim @@ -848,6 +841,16 @@ def c_p_init(self, x): "Dimensionless initial concentration as a function of dimensionless position x" return self.c_p_init_dimensional(x) / self.c_p_max + def rho(self, T): + "Dimensionless effective volumetric heat capacity" + return ( + self.rho_cn(T) * self.l_cn + + self.rho_n(T) * self.l_n + + self.rho_s(T) * self.l_s + + self.rho_p(T) * self.l_p + + self.rho_cp(T) * self.l_cp + ) / self.l + def _set_input_current(self): "Set the input current" diff --git a/pybamm/parameters/thermal_parameters.py b/pybamm/parameters/thermal_parameters.py index 69251ccd96..eccf0bb3b5 100644 --- a/pybamm/parameters/thermal_parameters.py +++ b/pybamm/parameters/thermal_parameters.py @@ -30,17 +30,6 @@ def _set_dimensional_parameters(self): # Reference temperature self.T_ref = pybamm.Parameter("Reference temperature [K]") - # Density - self.rho_cn_dim = pybamm.Parameter( - "Negative current collector density [kg.m-3]" - ) - self.rho_n_dim = pybamm.Parameter("Negative electrode density [kg.m-3]") - self.rho_s_dim = pybamm.Parameter("Separator density [kg.m-3]") - self.rho_p_dim = pybamm.Parameter("Positive electrode density [kg.m-3]") - self.rho_cp_dim = pybamm.Parameter( - "Positive current collector density [kg.m-3]" - ) - # Specific heat capacity self.c_p_cn_dim = pybamm.Parameter( "Negative current collector specific heat capacity [J.kg-1.K-1]" @@ -75,15 +64,6 @@ def _set_dimensional_parameters(self): "Positive current collector thermal conductivity [W.m-1.K-1]" ) - # Effective volumetic heat capacity - self.rho_eff_dim = ( - self.rho_cn_dim * self.c_p_cn_dim * self.geo.L_cn - + self.rho_n_dim * self.c_p_n_dim * self.geo.L_n - + self.rho_s_dim * self.c_p_s_dim * self.geo.L_s - + self.rho_p_dim * self.c_p_p_dim * self.geo.L_p - + self.rho_cp_dim * self.c_p_cp_dim * self.geo.L_cp - ) / self.geo.L - # Effective thermal conductivity self.lambda_eff_dim = ( self.lambda_cn_dim * self.geo.L_cn @@ -118,32 +98,66 @@ def _set_dimensional_parameters(self): self.T_init_dim = pybamm.Parameter("Initial temperature [K]") # Planar (y,z) thermal diffusion timescale - self.tau_th_yz = self.rho_eff_dim * (self.geo.L_z ** 2) / self.lambda_eff_dim + self.tau_th_yz = ( + self.rho_eff_dim(self.T_ref) * (self.geo.L_z ** 2) / self.lambda_eff_dim + ) def T_amb_dim(self, t): "Dimensional ambient temperature" return pybamm.FunctionParameter("Ambient temperature [K]", {"Times [s]": t}) + def rho_cn_dim(self, T): + "Negative current collector density [kg.m-3]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Negative current collector density [kg.m-3]", inputs + ) + + def rho_n_dim(self, T): + "Negative electrode density [kg.m-3]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter("Negative electrode density [kg.m-3]", inputs) + + def rho_s_dim(self, T): + "Separator density [kg.m-3]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter("Separator density [kg.m-3]", inputs) + + def rho_p_dim(self, T): + "Positive electrode density [kg.m-3]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter("Positive electrode density [kg.m-3]", inputs) + + def rho_cp_dim(self, T): + "Positive current collector density [kg.m-3]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Positive current collector density [kg.m-3]", inputs + ) + + def rho_eff_dim(self, T): + "Effective volumetric heat capacity" + return ( + self.rho_cn_dim(T) * self.c_p_cn_dim * self.geo.L_cn + + self.rho_n_dim(T) * self.c_p_n_dim * self.geo.L_n + + self.rho_s_dim(T) * self.c_p_s_dim * self.geo.L_s + + self.rho_p_dim(T) * self.c_p_p_dim * self.geo.L_p + + self.rho_cp_dim(T) * self.c_p_cp_dim * self.geo.L_cp + ) / self.geo.L + def _set_dimensionless_parameters(self): "Defines the dimensionless parameters" - # Density - self.rho_cn = self.rho_cn_dim * self.c_p_cn_dim / self.rho_eff_dim - self.rho_n = self.rho_n_dim * self.c_p_n_dim / self.rho_eff_dim - self.rho_s = self.rho_s_dim * self.c_p_s_dim / self.rho_eff_dim - self.rho_p = self.rho_p_dim * self.c_p_p_dim / self.rho_eff_dim - self.rho_cp = self.rho_cp_dim * self.c_p_cp_dim / self.rho_eff_dim - - self.rho_k = pybamm.Concatenation( - pybamm.FullBroadcast( - self.rho_n, ["negative electrode"], "current collector" - ), - pybamm.FullBroadcast(self.rho_s, ["separator"], "current collector"), - pybamm.FullBroadcast( - self.rho_p, ["positive electrode"], "current collector" - ), - ) - # Thermal conductivity self.lambda_cn = self.lambda_cn_dim / self.lambda_eff_dim self.lambda_n = self.lambda_n_dim / self.lambda_eff_dim @@ -179,5 +193,37 @@ def T_amb(self, t): "Dimensionless ambient temperature" return (self.T_amb_dim(t) - self.T_ref) / self.Delta_T + def rho_cn(self, T): + "Dimensionless negative current collector density [kg.m-3]" + return self.rho_cn_dim(T) * self.c_p_cn_dim / self.rho_eff_dim(T) + + def rho_n(self, T): + "Dimensionless negative electrode density" + return self.rho_n_dim(T) * self.c_p_n_dim / self.rho_eff_dim(T) + + def rho_s(self, T): + "Dimensionless separator density" + return self.rho_s_dim(T) * self.c_p_s_dim / self.rho_eff_dim(T) + + def rho_p(self, T): + "Dimensionless positive electrode density" + return self.rho_p_dim(T) * self.c_p_p_dim / self.rho_eff_dim(T) + + def rho_cp(self, T): + "Dimensionless positive current collector density" + return self.rho_cp_dim(T) * self.c_p_cp_dim / self.rho_eff_dim(T) + + def rho_k(self, T): + "Concatenated dimensionless density" + return pybamm.Concatenation( + pybamm.FullBroadcast( + self.rho_n(T), ["negative electrode"], "current collector" + ), + pybamm.FullBroadcast(self.rho_s(T), ["separator"], "current collector"), + pybamm.FullBroadcast( + self.rho_p(T), ["positive electrode"], "current collector" + ), + ) + thermal_parameters = ThermalParameters() diff --git a/tests/unit/test_parameters/test_lithium_ion_parameters.py b/tests/unit/test_parameters/test_lithium_ion_parameters.py index 4eba7a046d..152dce0bc3 100644 --- a/tests/unit/test_parameters/test_lithium_ion_parameters.py +++ b/tests/unit/test_parameters/test_lithium_ion_parameters.py @@ -167,13 +167,14 @@ def test_thermal_parameters(self): values = pybamm.lithium_ion.BaseModel().default_parameter_values param = pybamm.LithiumIonParameters() c_rate = param.i_typ / 24 + T = 1 # dummy temperature as the values are constant # Density - np.testing.assert_almost_equal(values.evaluate(param.rho_cn), 1.9019, 2) - np.testing.assert_almost_equal(values.evaluate(param.rho_n), 0.6403, 2) - np.testing.assert_almost_equal(values.evaluate(param.rho_s), 0.1535, 2) - np.testing.assert_almost_equal(values.evaluate(param.rho_p), 1.2605, 2) - np.testing.assert_almost_equal(values.evaluate(param.rho_cp), 1.3403, 2) + np.testing.assert_almost_equal(values.evaluate(param.rho_cn(T)), 1.9019, 2) + np.testing.assert_almost_equal(values.evaluate(param.rho_n(T)), 0.6403, 2) + np.testing.assert_almost_equal(values.evaluate(param.rho_s(T)), 0.1535, 2) + np.testing.assert_almost_equal(values.evaluate(param.rho_p(T)), 1.2605, 2) + np.testing.assert_almost_equal(values.evaluate(param.rho_cp(T)), 1.3403, 2) # Thermal conductivity np.testing.assert_almost_equal(values.evaluate(param.lambda_cn), 6.7513, 2) From 66e2a1b47618b4503ab298b4c941afef9be19b6a Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Mon, 11 Jan 2021 16:53:58 +0100 Subject: [PATCH 02/10] #1322 made conductivity temperature dependent --- pybamm/models/submodels/thermal/x_full.py | 18 +- pybamm/parameters/thermal_parameters.py | 230 ++++++++++++------ .../test_lithium_ion_parameters.py | 10 +- 3 files changed, 172 insertions(+), 86 deletions(-) diff --git a/pybamm/models/submodels/thermal/x_full.py b/pybamm/models/submodels/thermal/x_full.py index cb70cf5eb2..52d5800da2 100644 --- a/pybamm/models/submodels/thermal/x_full.py +++ b/pybamm/models/submodels/thermal/x_full.py @@ -48,14 +48,22 @@ def set_rhs(self, variables): T = variables["Cell temperature"] Q = variables["Total heating"] + # Define volumetric heat capacity rho_k = pybamm.Concatenation( self.param.rho_n(pybamm.standard_variables.T_n), self.param.rho_s(pybamm.standard_variables.T_s), self.param.rho_p(pybamm.standard_variables.T_p), ) + # Devine thermal conductivity + lambda_k = pybamm.Concatenation( + self.param.lambda_n(pybamm.standard_variables.T_n), + self.param.lambda_s(pybamm.standard_variables.T_s), + self.param.lambda_p(pybamm.standard_variables.T_p), + ) + # Fourier's law for heat flux - q = -self.param.lambda_k * pybamm.grad(T) + q = -lambda_k * pybamm.grad(T) # N.B only y-z surface cooling is implemented for this model self.rhs = { @@ -74,11 +82,15 @@ def set_boundary_conditions(self, variables): self.boundary_conditions = { T: { "left": ( - self.param.h_cn * (T_n_left - T_amb) / self.param.lambda_n, + self.param.h_cn + * (T_n_left - T_amb) + / self.param.lambda_n(T_n_left), "Neumann", ), "right": ( - -self.param.h_cp * (T_p_right - T_amb) / self.param.lambda_p, + -self.param.h_cp + * (T_p_right - T_amb) + / self.param.lambda_p(T_p_right), "Neumann", ), } diff --git a/pybamm/parameters/thermal_parameters.py b/pybamm/parameters/thermal_parameters.py index eccf0bb3b5..955cc576d4 100644 --- a/pybamm/parameters/thermal_parameters.py +++ b/pybamm/parameters/thermal_parameters.py @@ -30,49 +30,6 @@ def _set_dimensional_parameters(self): # Reference temperature self.T_ref = pybamm.Parameter("Reference temperature [K]") - # Specific heat capacity - self.c_p_cn_dim = pybamm.Parameter( - "Negative current collector specific heat capacity [J.kg-1.K-1]" - ) - self.c_p_n_dim = pybamm.Parameter( - "Negative electrode specific heat capacity [J.kg-1.K-1]" - ) - self.c_p_s_dim = pybamm.Parameter( - "Separator specific heat capacity [J.kg-1.K-1]" - ) - self.c_p_p_dim = pybamm.Parameter( - "Negative electrode specific heat capacity [J.kg-1.K-1]" - ) - self.c_p_cp_dim = pybamm.Parameter( - "Positive current collector specific heat capacity [J.kg-1.K-1]" - ) - - # Thermal conductivity - self.lambda_cn_dim = pybamm.Parameter( - "Negative current collector thermal conductivity [W.m-1.K-1]" - ) - self.lambda_n_dim = pybamm.Parameter( - "Negative electrode thermal conductivity [W.m-1.K-1]" - ) - self.lambda_s_dim = pybamm.Parameter( - "Separator thermal conductivity [W.m-1.K-1]" - ) - self.lambda_p_dim = pybamm.Parameter( - "Positive electrode thermal conductivity [W.m-1.K-1]" - ) - self.lambda_cp_dim = pybamm.Parameter( - "Positive current collector thermal conductivity [W.m-1.K-1]" - ) - - # Effective thermal conductivity - self.lambda_eff_dim = ( - self.lambda_cn_dim * self.geo.L_cn - + self.lambda_n_dim * self.geo.L_n - + self.lambda_s_dim * self.geo.L_s - + self.lambda_p_dim * self.geo.L_p - + self.lambda_cp_dim * self.geo.L_cp - ) / self.geo.L - # Cooling coefficient self.h_cn_dim = pybamm.Parameter( "Negative current collector surface heat transfer coefficient [W.m-2.K-1]" @@ -99,7 +56,9 @@ def _set_dimensional_parameters(self): # Planar (y,z) thermal diffusion timescale self.tau_th_yz = ( - self.rho_eff_dim(self.T_ref) * (self.geo.L_z ** 2) / self.lambda_eff_dim + self.rho_eff_dim(self.T_ref) + * (self.geo.L_z ** 2) + / self.lambda_eff_dim(self.T_ref) ) def T_amb_dim(self, t): @@ -146,45 +105,128 @@ def rho_cp_dim(self, T): ) def rho_eff_dim(self, T): - "Effective volumetric heat capacity" + "Effective volumetric heat capacity [J.m-3.K-1]" return ( - self.rho_cn_dim(T) * self.c_p_cn_dim * self.geo.L_cn - + self.rho_n_dim(T) * self.c_p_n_dim * self.geo.L_n - + self.rho_s_dim(T) * self.c_p_s_dim * self.geo.L_s - + self.rho_p_dim(T) * self.c_p_p_dim * self.geo.L_p - + self.rho_cp_dim(T) * self.c_p_cp_dim * self.geo.L_cp + self.rho_cn_dim(T) * self.c_p_cn_dim(T) * self.geo.L_cn + + self.rho_n_dim(T) * self.c_p_n_dim(T) * self.geo.L_n + + self.rho_s_dim(T) * self.c_p_s_dim(T) * self.geo.L_s + + self.rho_p_dim(T) * self.c_p_p_dim(T) * self.geo.L_p + + self.rho_cp_dim(T) * self.c_p_cp_dim(T) * self.geo.L_cp ) / self.geo.L - def _set_dimensionless_parameters(self): - "Defines the dimensionless parameters" + def c_p_cn_dim(self, T): + "Negative current collector specific heat capacity [J.kg-1.K-1]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Negative current collector specific heat capacity [J.kg-1.K-1]", inputs + ) + + def c_p_n_dim(self, T): + "Negative electrode specific heat capacity [J.kg-1.K-1]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Negative electrode specific heat capacity [J.kg-1.K-1]", inputs + ) - # Thermal conductivity - self.lambda_cn = self.lambda_cn_dim / self.lambda_eff_dim - self.lambda_n = self.lambda_n_dim / self.lambda_eff_dim - self.lambda_s = self.lambda_s_dim / self.lambda_eff_dim - self.lambda_p = self.lambda_p_dim / self.lambda_eff_dim - self.lambda_cp = self.lambda_cp_dim / self.lambda_eff_dim + def c_p_s_dim(self, T): + "Separator specific heat capacity [J.kg-1.K-1]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Separator specific heat capacity [J.kg-1.K-1]", inputs + ) - self.lambda_k = pybamm.Concatenation( - pybamm.FullBroadcast( - self.lambda_n, ["negative electrode"], "current collector" - ), - pybamm.FullBroadcast(self.lambda_s, ["separator"], "current collector"), - pybamm.FullBroadcast( - self.lambda_p, ["positive electrode"], "current collector" - ), + def c_p_p_dim(self, T): + "Positive electrode specific heat capacity [J.kg-1.K-1]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Positive electrode specific heat capacity [J.kg-1.K-1]", inputs + ) + + def c_p_cp_dim(self, T): + "Positive current collector specific heat capacity [J.kg-1.K-1]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Positive current collector specific heat capacity [J.kg-1.K-1]", inputs + ) + + def lambda_cn_dim(self, T): + "Negative current collector thermal conductivity [W.m-1.K-1]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Negative current collector thermal conductivity [W.m-1.K-1]", inputs + ) + + def lambda_n_dim(self, T): + "Negative electrode thermal conductivity [W.m-1.K-1]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Negative electrode thermal conductivity [W.m-1.K-1]", inputs + ) + + def lambda_s_dim(self, T): + "Separator thermal conductivity [W.m-1.K-1]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Separator thermal conductivity [W.m-1.K-1]", inputs + ) + + def lambda_p_dim(self, T): + "Positive electrode thermal conductivity [W.m-1.K-1]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Positive electrode thermal conductivity [W.m-1.K-1]", inputs + ) + + def lambda_cp_dim(self, T): + "Positive current collector thermal conductivity [W.m-1.K-1]" + inputs = { + "Temperature [K]": self.Delta_T * T + self.T_ref, + } + return pybamm.FunctionParameter( + "Positive current collector thermal conductivity [W.m-1.K-1]", inputs ) + def lambda_eff_dim(self, T): + "Effective thermal conductivity [W.m-1.K-1]" + return ( + self.lambda_cn_dim(T) * self.geo.L_cn + + self.lambda_n_dim(T) * self.geo.L_n + + self.lambda_s_dim(T) * self.geo.L_s + + self.lambda_p_dim(T) * self.geo.L_p + + self.lambda_cp_dim(T) * self.geo.L_cp + ) / self.geo.L + + def _set_dimensionless_parameters(self): + "Defines the dimensionless parameters" + # Relative temperature rise self.Theta = self.Delta_T / self.T_ref # Cooling coefficient - self.h_cn = self.h_cn_dim * self.geo.L_x / self.lambda_eff_dim - self.h_cp = self.h_cp_dim * self.geo.L_x / self.lambda_eff_dim - self.h_tab_n = self.h_tab_n_dim * self.geo.L_x / self.lambda_eff_dim - self.h_tab_p = self.h_tab_p_dim * self.geo.L_x / self.lambda_eff_dim - self.h_edge = self.h_edge_dim * self.geo.L_x / self.lambda_eff_dim - self.h_total = self.h_total_dim * self.geo.L_x / self.lambda_eff_dim + self.h_cn = self.h_cn_dim * self.geo.L_x / self.lambda_eff_dim(self.T_ref) + self.h_cp = self.h_cp_dim * self.geo.L_x / self.lambda_eff_dim(self.T_ref) + self.h_tab_n = self.h_tab_n_dim * self.geo.L_x / self.lambda_eff_dim(self.T_ref) + self.h_tab_p = self.h_tab_p_dim * self.geo.L_x / self.lambda_eff_dim(self.T_ref) + self.h_edge = self.h_edge_dim * self.geo.L_x / self.lambda_eff_dim(self.T_ref) + self.h_total = self.h_total_dim * self.geo.L_x / self.lambda_eff_dim(self.T_ref) # Initial temperature self.T_init = (self.T_init_dim - self.T_ref) / self.Delta_T @@ -194,24 +236,24 @@ def T_amb(self, t): return (self.T_amb_dim(t) - self.T_ref) / self.Delta_T def rho_cn(self, T): - "Dimensionless negative current collector density [kg.m-3]" - return self.rho_cn_dim(T) * self.c_p_cn_dim / self.rho_eff_dim(T) + "Dimensionless negative current collector density" + return self.rho_cn_dim(T) * self.c_p_cn_dim(T) / self.rho_eff_dim(self.T_ref) def rho_n(self, T): "Dimensionless negative electrode density" - return self.rho_n_dim(T) * self.c_p_n_dim / self.rho_eff_dim(T) + return self.rho_n_dim(T) * self.c_p_n_dim(T) / self.rho_eff_dim(self.T_ref) def rho_s(self, T): "Dimensionless separator density" - return self.rho_s_dim(T) * self.c_p_s_dim / self.rho_eff_dim(T) + return self.rho_s_dim(T) * self.c_p_s_dim(T) / self.rho_eff_dim(self.T_ref) def rho_p(self, T): "Dimensionless positive electrode density" - return self.rho_p_dim(T) * self.c_p_p_dim / self.rho_eff_dim(T) + return self.rho_p_dim(T) * self.c_p_p_dim(T) / self.rho_eff_dim(self.T_ref) def rho_cp(self, T): "Dimensionless positive current collector density" - return self.rho_cp_dim(T) * self.c_p_cp_dim / self.rho_eff_dim(T) + return self.rho_cp_dim(T) * self.c_p_cp_dim(T) / self.rho_eff_dim(self.T_ref) def rho_k(self, T): "Concatenated dimensionless density" @@ -225,5 +267,37 @@ def rho_k(self, T): ), ) + def lambda_cn(self, T): + "Dimensionless negative current collector thermal conductivity" + return self.lambda_cn_dim(T) / self.lambda_eff_dim(self.T_ref) + + def lambda_n(self, T): + "Dimensionless negative electrode thermal conductivity" + return self.lambda_n_dim(T) / self.lambda_eff_dim(self.T_ref) + + def lambda_s(self, T): + "Dimensionless separator thermal conductivity" + return self.lambda_s_dim(T) / self.lambda_eff_dim(self.T_ref) + + def lambda_p(self, T): + "Dimensionless positive electrode thermal conductivity" + return self.lambda_p_dim(T) / self.lambda_eff_dim(self.T_ref) + + def lambda_cp(self, T): + "Dimensionless positive current collector thermal conductivity" + return self.lambda_cp_dim(T) / self.lambda_eff_dim(self.T_ref) + + def lambda_k(self, T): + "Concatenated dimensionless thermal conductivity" + return pybamm.Concatenation( + pybamm.FullBroadcast( + self.lambda_n, ["negative electrode"], "current collector" + ), + pybamm.FullBroadcast(self.lambda_s, ["separator"], "current collector"), + pybamm.FullBroadcast( + self.lambda_p, ["positive electrode"], "current collector" + ), + ) + thermal_parameters = ThermalParameters() diff --git a/tests/unit/test_parameters/test_lithium_ion_parameters.py b/tests/unit/test_parameters/test_lithium_ion_parameters.py index 152dce0bc3..16c3a0ad97 100644 --- a/tests/unit/test_parameters/test_lithium_ion_parameters.py +++ b/tests/unit/test_parameters/test_lithium_ion_parameters.py @@ -177,11 +177,11 @@ def test_thermal_parameters(self): np.testing.assert_almost_equal(values.evaluate(param.rho_cp(T)), 1.3403, 2) # Thermal conductivity - np.testing.assert_almost_equal(values.evaluate(param.lambda_cn), 6.7513, 2) - np.testing.assert_almost_equal(values.evaluate(param.lambda_n), 0.0296, 2) - np.testing.assert_almost_equal(values.evaluate(param.lambda_s), 0.0027, 2) - np.testing.assert_almost_equal(values.evaluate(param.lambda_p), 0.0354, 2) - np.testing.assert_almost_equal(values.evaluate(param.lambda_cp), 3.9901, 2) + np.testing.assert_almost_equal(values.evaluate(param.lambda_cn(T)), 6.7513, 2) + np.testing.assert_almost_equal(values.evaluate(param.lambda_n(T)), 0.0296, 2) + np.testing.assert_almost_equal(values.evaluate(param.lambda_s(T)), 0.0027, 2) + np.testing.assert_almost_equal(values.evaluate(param.lambda_p(T)), 0.0354, 2) + np.testing.assert_almost_equal(values.evaluate(param.lambda_cp(T)), 3.9901, 2) # other thermal parameters From bf587f3ee63f4107db424cf3ddb5b83395152220 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Mon, 11 Jan 2021 18:28:47 +0100 Subject: [PATCH 03/10] #1322 improve coverage --- pybamm/parameters/lead_acid_parameters.py | 2 -- pybamm/parameters/lithium_ion_parameters.py | 2 -- pybamm/parameters/thermal_parameters.py | 24 --------------------- 3 files changed, 28 deletions(-) diff --git a/pybamm/parameters/lead_acid_parameters.py b/pybamm/parameters/lead_acid_parameters.py index d2907b3147..1888943610 100644 --- a/pybamm/parameters/lead_acid_parameters.py +++ b/pybamm/parameters/lead_acid_parameters.py @@ -617,14 +617,12 @@ def _set_dimensionless_parameters(self): self.rho_s = self.therm.rho_s self.rho_p = self.therm.rho_p self.rho_cp = self.therm.rho_cp - self.rho_k = self.therm.rho_k self.lambda_cn = self.therm.lambda_cn self.lambda_n = self.therm.lambda_n self.lambda_s = self.therm.lambda_s self.lambda_p = self.therm.lambda_p self.lambda_cp = self.therm.lambda_cp - self.lambda_k = self.therm.lambda_k self.Theta = self.therm.Theta diff --git a/pybamm/parameters/lithium_ion_parameters.py b/pybamm/parameters/lithium_ion_parameters.py index 7ae975e0fc..2442ed9e9e 100644 --- a/pybamm/parameters/lithium_ion_parameters.py +++ b/pybamm/parameters/lithium_ion_parameters.py @@ -572,14 +572,12 @@ def _set_dimensionless_parameters(self): self.rho_s = self.therm.rho_s self.rho_p = self.therm.rho_p self.rho_cp = self.therm.rho_cp - self.rho_k = self.therm.rho_k self.lambda_cn = self.therm.lambda_cn self.lambda_n = self.therm.lambda_n self.lambda_s = self.therm.lambda_s self.lambda_p = self.therm.lambda_p self.lambda_cp = self.therm.lambda_cp - self.lambda_k = self.therm.lambda_k self.Theta = self.therm.Theta diff --git a/pybamm/parameters/thermal_parameters.py b/pybamm/parameters/thermal_parameters.py index 955cc576d4..5ac2a4df3c 100644 --- a/pybamm/parameters/thermal_parameters.py +++ b/pybamm/parameters/thermal_parameters.py @@ -255,18 +255,6 @@ def rho_cp(self, T): "Dimensionless positive current collector density" return self.rho_cp_dim(T) * self.c_p_cp_dim(T) / self.rho_eff_dim(self.T_ref) - def rho_k(self, T): - "Concatenated dimensionless density" - return pybamm.Concatenation( - pybamm.FullBroadcast( - self.rho_n(T), ["negative electrode"], "current collector" - ), - pybamm.FullBroadcast(self.rho_s(T), ["separator"], "current collector"), - pybamm.FullBroadcast( - self.rho_p(T), ["positive electrode"], "current collector" - ), - ) - def lambda_cn(self, T): "Dimensionless negative current collector thermal conductivity" return self.lambda_cn_dim(T) / self.lambda_eff_dim(self.T_ref) @@ -287,17 +275,5 @@ def lambda_cp(self, T): "Dimensionless positive current collector thermal conductivity" return self.lambda_cp_dim(T) / self.lambda_eff_dim(self.T_ref) - def lambda_k(self, T): - "Concatenated dimensionless thermal conductivity" - return pybamm.Concatenation( - pybamm.FullBroadcast( - self.lambda_n, ["negative electrode"], "current collector" - ), - pybamm.FullBroadcast(self.lambda_s, ["separator"], "current collector"), - pybamm.FullBroadcast( - self.lambda_p, ["positive electrode"], "current collector" - ), - ) - thermal_parameters = ThermalParameters() From 80944c64741cf8d9b9fee56d44b910d0af8be7fc Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Mon, 11 Jan 2021 18:29:00 +0100 Subject: [PATCH 04/10] #1322 update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 434c0ef82d..3fda6d4a09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Features +- Added temperature dependence to density, heat capacity and thermal conductivity ([1323](https://github.com/pybamm-team/PyBaMM/pull/1323)) - Added temperature dependence to the transference number (`t_plus`) ([1317](https://github.com/pybamm-team/PyBaMM/pull/1317)) - Added new functionality for `Interpolant` ([#1312](https://github.com/pybamm-team/PyBaMM/pull/1312)) - Added option to express experiments (and extract solutions) in terms of cycles of operating condition ([#1309](https://github.com/pybamm-team/PyBaMM/pull/1309)) From 8c4693302528f7d07ec7023ee0739fb10db9e857 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Mon, 11 Jan 2021 20:51:10 +0100 Subject: [PATCH 05/10] 1322 improve coverage --- pybamm/parameters/lead_acid_parameters.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pybamm/parameters/lead_acid_parameters.py b/pybamm/parameters/lead_acid_parameters.py index 1888943610..d8efa94842 100644 --- a/pybamm/parameters/lead_acid_parameters.py +++ b/pybamm/parameters/lead_acid_parameters.py @@ -762,15 +762,15 @@ def a_p(self, x): x_dim = x * self.L_x return self.a_p_dimensional(x_dim) / self.a_p_typ - def rho(self, T): - "Dimensionless effective volumetric heat capacity" - return ( - self.rho_cn(T) * self.l_cn - + self.rho_n(T) * self.l_n - + self.rho_s(T) * self.l_s - + self.rho_p(T) * self.l_p - + self.rho_cp(T) * self.l_cp - ) / self.l + # def rho(self, T): + # "Dimensionless effective volumetric heat capacity" + # return ( + # self.rho_cn(T) * self.l_cn + # + self.rho_n(T) * self.l_n + # + self.rho_s(T) * self.l_s + # + self.rho_p(T) * self.l_p + # + self.rho_cp(T) * self.l_cp + # ) / self.l def _set_input_current(self): "Set the input current" From 00f3ab51cad08f194c5dd853fb2bb8023d33f295 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Mon, 11 Jan 2021 20:52:11 +0100 Subject: [PATCH 06/10] flake8 --- pybamm/parameters/lead_acid_parameters.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/pybamm/parameters/lead_acid_parameters.py b/pybamm/parameters/lead_acid_parameters.py index d8efa94842..49eb871246 100644 --- a/pybamm/parameters/lead_acid_parameters.py +++ b/pybamm/parameters/lead_acid_parameters.py @@ -762,16 +762,6 @@ def a_p(self, x): x_dim = x * self.L_x return self.a_p_dimensional(x_dim) / self.a_p_typ - # def rho(self, T): - # "Dimensionless effective volumetric heat capacity" - # return ( - # self.rho_cn(T) * self.l_cn - # + self.rho_n(T) * self.l_n - # + self.rho_s(T) * self.l_s - # + self.rho_p(T) * self.l_p - # + self.rho_cp(T) * self.l_cp - # ) / self.l - def _set_input_current(self): "Set the input current" From 01932e5e64a733134d97ad9901a953754cafad81 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Tue, 12 Jan 2021 10:04:55 +0100 Subject: [PATCH 07/10] #1322 fixed typo lead-acid parameters --- .../parameters/lead-acid/anodes/lead_Sulzer2019/parameters.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pybamm/input/parameters/lead-acid/anodes/lead_Sulzer2019/parameters.csv b/pybamm/input/parameters/lead-acid/anodes/lead_Sulzer2019/parameters.csv index 9265543638..54987b321b 100644 --- a/pybamm/input/parameters/lead-acid/anodes/lead_Sulzer2019/parameters.csv +++ b/pybamm/input/parameters/lead-acid/anodes/lead_Sulzer2019/parameters.csv @@ -36,7 +36,7 @@ Hydrogen reference OCP vs SHE [V],0,srinivasan2003mathematical, Negative electrode double-layer capacity [F.m-2],0.2,, ,,, # Density,,, -Negative electrode density [kg.m-3],113400,CRC Handbook of Chemistry and Physics, +Negative electrode density [kg.m-3],11300,CRC Handbook of Chemistry and Physics, ,,, # Thermal parameters,,, Negative electrode specific heat capacity [J.kg-1.K-1],130,CRC Handbook of Chemistry and Physics, From 49be342c6175b9c2d66810f2fbbe939a36b3c042 Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Tue, 12 Jan 2021 10:05:09 +0100 Subject: [PATCH 08/10] #1322 added test for lead acid parameters --- pybamm/parameters/lead_acid_parameters.py | 10 ++++++++++ .../test_lead_acid_parameters.py | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/pybamm/parameters/lead_acid_parameters.py b/pybamm/parameters/lead_acid_parameters.py index 49eb871246..1888943610 100644 --- a/pybamm/parameters/lead_acid_parameters.py +++ b/pybamm/parameters/lead_acid_parameters.py @@ -762,6 +762,16 @@ def a_p(self, x): x_dim = x * self.L_x return self.a_p_dimensional(x_dim) / self.a_p_typ + def rho(self, T): + "Dimensionless effective volumetric heat capacity" + return ( + self.rho_cn(T) * self.l_cn + + self.rho_n(T) * self.l_n + + self.rho_s(T) * self.l_s + + self.rho_p(T) * self.l_p + + self.rho_cp(T) * self.l_cp + ) / self.l + def _set_input_current(self): "Set the input current" diff --git a/tests/unit/test_parameters/test_lead_acid_parameters.py b/tests/unit/test_parameters/test_lead_acid_parameters.py index 2e7be47a38..24bcd601c8 100644 --- a/tests/unit/test_parameters/test_lead_acid_parameters.py +++ b/tests/unit/test_parameters/test_lead_acid_parameters.py @@ -97,6 +97,26 @@ def test_current_functions(self): ) self.assertEqual(dimensionless_current_density_eval.evaluate(t=3), 1) + def test_thermal_parameters(self): + values = pybamm.lead_acid.BaseModel().default_parameter_values + param = pybamm.LeadAcidParameters() + T = 1 # dummy temperature as the values are constant + + # Density + self.assertAlmostEqual(values.evaluate(param.rho_cn(T)), 0.8810, places=2) + self.assertAlmostEqual(values.evaluate(param.rho_n(T)), 0.8810, places=2) + self.assertAlmostEqual(values.evaluate(param.rho_s(T)), 0.7053, places=2) + self.assertAlmostEqual(values.evaluate(param.rho_p(T)), 1.4393, places=2) + self.assertAlmostEqual(values.evaluate(param.rho_cp(T)), 1.4393, places=2) + self.assertAlmostEqual(values.evaluate(param.rho(T)), 1.7102, places=2) + + # Thermal conductivity + self.assertAlmostEqual(values.evaluate(param.lambda_cn(T)), 1.6963, places=2) + self.assertAlmostEqual(values.evaluate(param.lambda_n(T)), 1.6963, places=2) + self.assertAlmostEqual(values.evaluate(param.lambda_s(T)), 0.0019, places=2) + self.assertAlmostEqual(values.evaluate(param.lambda_p(T)), 1.6963, places=2) + self.assertAlmostEqual(values.evaluate(param.lambda_cp(T)), 1.6963, places=2) + def test_functions_lead_acid(self): # Load parameters to be tested param = pybamm.LeadAcidParameters() From 67128398edcce52c476c8f3ca8e8bd88ff302cdf Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Tue, 12 Jan 2021 18:18:14 +0100 Subject: [PATCH 09/10] #1322 Tino's comments --- pybamm/models/submodels/thermal/x_full.py | 14 ++++++----- pybamm/parameters/thermal_parameters.py | 30 +++++++++++------------ 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/pybamm/models/submodels/thermal/x_full.py b/pybamm/models/submodels/thermal/x_full.py index 52d5800da2..b7efba9169 100644 --- a/pybamm/models/submodels/thermal/x_full.py +++ b/pybamm/models/submodels/thermal/x_full.py @@ -46,20 +46,22 @@ def get_coupled_variables(self, variables): def set_rhs(self, variables): T = variables["Cell temperature"] + T_n, T_s, T_p = T.orphans + Q = variables["Total heating"] # Define volumetric heat capacity rho_k = pybamm.Concatenation( - self.param.rho_n(pybamm.standard_variables.T_n), - self.param.rho_s(pybamm.standard_variables.T_s), - self.param.rho_p(pybamm.standard_variables.T_p), + self.param.rho_n(T_n), + self.param.rho_s(T_s), + self.param.rho_p(T_p), ) # Devine thermal conductivity lambda_k = pybamm.Concatenation( - self.param.lambda_n(pybamm.standard_variables.T_n), - self.param.lambda_s(pybamm.standard_variables.T_s), - self.param.lambda_p(pybamm.standard_variables.T_p), + self.param.lambda_n(T_n), + self.param.lambda_s(T_s), + self.param.lambda_p(T_p), ) # Fourier's law for heat flux diff --git a/pybamm/parameters/thermal_parameters.py b/pybamm/parameters/thermal_parameters.py index 5ac2a4df3c..e37875699e 100644 --- a/pybamm/parameters/thermal_parameters.py +++ b/pybamm/parameters/thermal_parameters.py @@ -68,7 +68,7 @@ def T_amb_dim(self, t): def rho_cn_dim(self, T): "Negative current collector density [kg.m-3]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Negative current collector density [kg.m-3]", inputs @@ -77,28 +77,28 @@ def rho_cn_dim(self, T): def rho_n_dim(self, T): "Negative electrode density [kg.m-3]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter("Negative electrode density [kg.m-3]", inputs) def rho_s_dim(self, T): "Separator density [kg.m-3]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter("Separator density [kg.m-3]", inputs) def rho_p_dim(self, T): "Positive electrode density [kg.m-3]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter("Positive electrode density [kg.m-3]", inputs) def rho_cp_dim(self, T): "Positive current collector density [kg.m-3]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Positive current collector density [kg.m-3]", inputs @@ -117,7 +117,7 @@ def rho_eff_dim(self, T): def c_p_cn_dim(self, T): "Negative current collector specific heat capacity [J.kg-1.K-1]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Negative current collector specific heat capacity [J.kg-1.K-1]", inputs @@ -126,7 +126,7 @@ def c_p_cn_dim(self, T): def c_p_n_dim(self, T): "Negative electrode specific heat capacity [J.kg-1.K-1]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Negative electrode specific heat capacity [J.kg-1.K-1]", inputs @@ -135,7 +135,7 @@ def c_p_n_dim(self, T): def c_p_s_dim(self, T): "Separator specific heat capacity [J.kg-1.K-1]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Separator specific heat capacity [J.kg-1.K-1]", inputs @@ -144,7 +144,7 @@ def c_p_s_dim(self, T): def c_p_p_dim(self, T): "Positive electrode specific heat capacity [J.kg-1.K-1]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Positive electrode specific heat capacity [J.kg-1.K-1]", inputs @@ -153,7 +153,7 @@ def c_p_p_dim(self, T): def c_p_cp_dim(self, T): "Positive current collector specific heat capacity [J.kg-1.K-1]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Positive current collector specific heat capacity [J.kg-1.K-1]", inputs @@ -162,7 +162,7 @@ def c_p_cp_dim(self, T): def lambda_cn_dim(self, T): "Negative current collector thermal conductivity [W.m-1.K-1]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Negative current collector thermal conductivity [W.m-1.K-1]", inputs @@ -171,7 +171,7 @@ def lambda_cn_dim(self, T): def lambda_n_dim(self, T): "Negative electrode thermal conductivity [W.m-1.K-1]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Negative electrode thermal conductivity [W.m-1.K-1]", inputs @@ -180,7 +180,7 @@ def lambda_n_dim(self, T): def lambda_s_dim(self, T): "Separator thermal conductivity [W.m-1.K-1]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Separator thermal conductivity [W.m-1.K-1]", inputs @@ -189,7 +189,7 @@ def lambda_s_dim(self, T): def lambda_p_dim(self, T): "Positive electrode thermal conductivity [W.m-1.K-1]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Positive electrode thermal conductivity [W.m-1.K-1]", inputs @@ -198,7 +198,7 @@ def lambda_p_dim(self, T): def lambda_cp_dim(self, T): "Positive current collector thermal conductivity [W.m-1.K-1]" inputs = { - "Temperature [K]": self.Delta_T * T + self.T_ref, + "Temperature [K]": T, } return pybamm.FunctionParameter( "Positive current collector thermal conductivity [W.m-1.K-1]", inputs From 75678684c71746d0d271fa924300275eae1d5cee Mon Sep 17 00:00:00 2001 From: Ferran Brosa Planella Date: Wed, 13 Jan 2021 09:54:06 +0100 Subject: [PATCH 10/10] #1322 fixed dimensionless parameters to take dimensionless temperature --- pybamm/parameters/thermal_parameters.py | 44 +++++++++++++++++++------ 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/pybamm/parameters/thermal_parameters.py b/pybamm/parameters/thermal_parameters.py index e37875699e..2755b1d48b 100644 --- a/pybamm/parameters/thermal_parameters.py +++ b/pybamm/parameters/thermal_parameters.py @@ -237,43 +237,67 @@ def T_amb(self, t): def rho_cn(self, T): "Dimensionless negative current collector density" - return self.rho_cn_dim(T) * self.c_p_cn_dim(T) / self.rho_eff_dim(self.T_ref) + T_dim = self.Delta_T * T + self.T_ref + return ( + self.rho_cn_dim(T_dim) + * self.c_p_cn_dim(T_dim) + / self.rho_eff_dim(self.T_ref) + ) def rho_n(self, T): "Dimensionless negative electrode density" - return self.rho_n_dim(T) * self.c_p_n_dim(T) / self.rho_eff_dim(self.T_ref) + T_dim = self.Delta_T * T + self.T_ref + return ( + self.rho_n_dim(T_dim) * self.c_p_n_dim(T_dim) / self.rho_eff_dim(self.T_ref) + ) def rho_s(self, T): "Dimensionless separator density" - return self.rho_s_dim(T) * self.c_p_s_dim(T) / self.rho_eff_dim(self.T_ref) + T_dim = self.Delta_T * T + self.T_ref + return ( + self.rho_s_dim(T_dim) * self.c_p_s_dim(T_dim) / self.rho_eff_dim(self.T_ref) + ) def rho_p(self, T): "Dimensionless positive electrode density" - return self.rho_p_dim(T) * self.c_p_p_dim(T) / self.rho_eff_dim(self.T_ref) + T_dim = self.Delta_T * T + self.T_ref + return ( + self.rho_p_dim(T_dim) * self.c_p_p_dim(T_dim) / self.rho_eff_dim(self.T_ref) + ) def rho_cp(self, T): "Dimensionless positive current collector density" - return self.rho_cp_dim(T) * self.c_p_cp_dim(T) / self.rho_eff_dim(self.T_ref) + T_dim = self.Delta_T * T + self.T_ref + return ( + self.rho_cp_dim(T_dim) + * self.c_p_cp_dim(T_dim) + / self.rho_eff_dim(self.T_ref) + ) def lambda_cn(self, T): "Dimensionless negative current collector thermal conductivity" - return self.lambda_cn_dim(T) / self.lambda_eff_dim(self.T_ref) + T_dim = self.Delta_T * T + self.T_ref + return self.lambda_cn_dim(T_dim) / self.lambda_eff_dim(self.T_ref) def lambda_n(self, T): "Dimensionless negative electrode thermal conductivity" - return self.lambda_n_dim(T) / self.lambda_eff_dim(self.T_ref) + T_dim = self.Delta_T * T + self.T_ref + return self.lambda_n_dim(T_dim) / self.lambda_eff_dim(self.T_ref) def lambda_s(self, T): "Dimensionless separator thermal conductivity" - return self.lambda_s_dim(T) / self.lambda_eff_dim(self.T_ref) + T_dim = self.Delta_T * T + self.T_ref + return self.lambda_s_dim(T_dim) / self.lambda_eff_dim(self.T_ref) def lambda_p(self, T): "Dimensionless positive electrode thermal conductivity" - return self.lambda_p_dim(T) / self.lambda_eff_dim(self.T_ref) + T_dim = self.Delta_T * T + self.T_ref + return self.lambda_p_dim(T_dim) / self.lambda_eff_dim(self.T_ref) def lambda_cp(self, T): "Dimensionless positive current collector thermal conductivity" - return self.lambda_cp_dim(T) / self.lambda_eff_dim(self.T_ref) + T_dim = self.Delta_T * T + self.T_ref + return self.lambda_cp_dim(T_dim) / self.lambda_eff_dim(self.T_ref) thermal_parameters = ThermalParameters()