diff --git a/CHANGELOG.md b/CHANGELOG.md index bd9c751af7..1b8e1a869b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Features - Serialisation added so models can be written to/read from JSON ([#3397](https://github.com/pybamm-team/PyBaMM/pull/3397)) +- Mechanical parameters are now a function of stoichiometry and temperature ([#3576](https://github.com/pybamm-team/PyBaMM/pull/3576)) ## Bug fixes diff --git a/pybamm/models/submodels/particle/base_particle.py b/pybamm/models/submodels/particle/base_particle.py index dd5a94afc6..0f46615724 100644 --- a/pybamm/models/submodels/particle/base_particle.py +++ b/pybamm/models/submodels/particle/base_particle.py @@ -56,8 +56,9 @@ def _get_effective_diffusivity(self, c, T, current): if stress_option == "true": # Ai2019 eq [12] - Omega = domain_param.Omega - E = domain_param.E + sto = c / phase_param.c_max + Omega = pybamm.r_average(domain_param.Omega(sto, T)) + E = pybamm.r_average(domain_param.E(sto, T)) nu = domain_param.nu theta_M = Omega / (param.R * T) * (2 * Omega * E) / (9 * (1 - nu)) stress_factor = 1 + theta_M * (c - domain_param.c_0) diff --git a/pybamm/models/submodels/particle_mechanics/base_mechanics.py b/pybamm/models/submodels/particle_mechanics/base_mechanics.py index feffbdd380..35adadf47d 100644 --- a/pybamm/models/submodels/particle_mechanics/base_mechanics.py +++ b/pybamm/models/submodels/particle_mechanics/base_mechanics.py @@ -43,12 +43,19 @@ def _get_mechanical_results(self, variables): sto_rav = variables[f"R-averaged {domain} particle concentration"] c_s_surf = variables[f"{Domain} particle surface concentration [mol.m-3]"] T_xav = variables["X-averaged cell temperature [K]"] + phase_name = self.phase_name + T = pybamm.PrimaryBroadcast( + variables[f"{Domain} electrode temperature [K]"], + [f"{domain} {phase_name}particle"], + ) eps_s = variables[f"{Domain} electrode active material volume fraction"] - Omega = domain_param.Omega + #use a tangential approximation for omega + sto = variables[f"{Domain} particle concentration"] + Omega = pybamm.r_average(domain_param.Omega(sto, T)) R0 = domain_param.prim.R c_0 = domain_param.c_0 - E0 = domain_param.E + E0 = pybamm.r_average(domain_param.E(sto, T)) nu = domain_param.nu L0 = domain_param.L sto_init = pybamm.r_average(domain_param.prim.c_init / domain_param.prim.c_max) diff --git a/pybamm/parameters/lithium_ion_parameters.py b/pybamm/parameters/lithium_ion_parameters.py index c459a4ef1e..12196c4044 100644 --- a/pybamm/parameters/lithium_ion_parameters.py +++ b/pybamm/parameters/lithium_ion_parameters.py @@ -303,14 +303,11 @@ def _set_parameters(self): # Mechanical parameters self.nu = pybamm.Parameter(f"{Domain} electrode Poisson's ratio") - self.E = pybamm.Parameter(f"{Domain} electrode Young's modulus [Pa]") self.c_0 = pybamm.Parameter( f"{Domain} electrode reference concentration for free of deformation " "[mol.m-3]" ) - self.Omega = pybamm.Parameter( - f"{Domain} electrode partial molar volume [m3.mol-1]" - ) + self.l_cr_0 = pybamm.Parameter(f"{Domain} electrode initial crack length [m]") self.w_cr = pybamm.Parameter(f"{Domain} electrode initial crack width [m]") self.rho_cr = pybamm.Parameter( @@ -349,6 +346,22 @@ def C_dl(self, T): f"{Domain} electrode double-layer capacity [F.m-2]", inputs ) + def Omega(self, sto, T): + """Dimensional partial molar volume of Li in solid solution [m3.mol-1]""" + Domain = self.domain.capitalize() + inputs = {f"{Domain} particle stoichiometry": sto, "Temperature [K]": T} + return pybamm.FunctionParameter( + f"{Domain} electrode partial molar volume [m3.mol-1]", inputs + ) + + def E(self, sto, T): + """Dimensional Young's modulus""" + Domain = self.domain.capitalize() + inputs = {f"{Domain} particle stoichiometry": sto, "Temperature [K]": T} + return pybamm.FunctionParameter( + f"{Domain} electrode Young's modulus [Pa]", inputs + ) + def sigma(self, T): """Dimensional electrical conductivity in electrode""" inputs = {"Temperature [K]": T}