def get_coupled_variables(self, variables): param = self.param delta_phi = variables[ f"{self.domain} electrode surface potential difference"] c_e_n = variables[f"{self.domain} electrolyte concentration"] T = variables[f"{self.domain} electrode temperature"] eta_sei = variables[f"{self.domain} electrode SEI film overpotential"] c_plated_Li = variables[ f"{self.domain} electrode lithium plating concentration"] j0_stripping = param.j0_stripping(c_e_n, c_plated_Li, T) j0_plating = param.j0_plating(c_e_n, c_plated_Li, T) phi_ref = param.U_n_ref / param.potential_scale eta_stripping = delta_phi + phi_ref + eta_sei eta_plating = -eta_stripping prefactor = 1 / (2 * (1 + self.param.Theta * T)) j_stripping = j0_stripping * pybamm.exp( prefactor * eta_stripping) - j0_plating * pybamm.exp( prefactor * eta_plating) variables.update( self._get_standard_overpotential_variables(eta_stripping)) variables.update(self._get_standard_reaction_variables(j_stripping)) # Update whole cell variables, which also updates the "sum of" variables if ("Negative electrode lithium plating interfacial current density" in variables and "Positive electrode lithium plating interfacial current density" in variables and "Lithium plating interfacial current density" not in variables): variables.update( self._get_standard_whole_cell_interfacial_current_variables( variables)) return variables
def electrolyte_diffusivity_Capiglia1999(c_e, T): """ Diffusivity of LiPF6 in EC:DMC as a function of ion concentration. The original data is from [1]. The fit from Dualfoil [2]. References ---------- .. [1] C Capiglia et al. 7Li and 19F diffusion coefficients and thermal properties of non-aqueous electrolyte solutions for rechargeable lithium batteries. Journal of power sources 81 (1999): 859-862. .. [2] http://www.cchem.berkeley.edu/jsngrp/fortran.html Parameters ---------- c_e: :class:`pybamm.Symbol` Dimensional electrolyte concentration T: :class:`pybamm.Symbol` Dimensional temperature Returns ------- :class:`pybamm.Symbol` Solid diffusivity """ D_c_e = 5.34e-10 * exp(-0.65 * c_e / 1000) E_D_e = 37040 arrhenius = exp(E_D_e / constants.R * (1 / 298.15 - 1 / T)) return D_c_e * arrhenius
def electrolyte_conductivity_Landesfeind2019_base(c_e, T, coeffs): """ Conductivity of LiPF6 in solvent_X as a function of ion concentration and Temperature. The data comes from [1]. References ---------- .. [1] Landesfeind, J. and Gasteiger, H.A., 2019. Temperature and Concentration Dependence of the Ionic Transport Properties of Lithium-Ion Battery Electrolytes. Journal of The Electrochemical Society, 166(14), pp.A3079-A3097. ---------- c_e: :class: `numpy.Array` Dimensional electrolyte concentration T: :class: `numpy.Array` Dimensional temperature coeffs: :class: `numpy.Array` Fitting parameter coefficients Returns ------- :`numpy.Array` Electrolyte diffusivity """ c = c_e / 1000 # mol.m-3 -> mol.l p1, p2, p3, p4, p5, p6 = coeffs A = p1 * (1 + (T - p2)) B = 1 + p3 * sqrt(c) + p4 * (1 + p5 * exp(1000 / T)) * c C = 1 + c**4 * (p6 * exp(1000 / T)) sigma_e = A * c * B / C # mS.cm-1 return sigma_e / 10
def electrolyte_diffusivity_Landesfeind2019_base(c_e, T, coeffs): """ Conductivity of LiPF6 in solvent_X as a function of ion concentration and Temperature. The data comes from [1]. References ---------- .. [1] Landesfeind, J. and Gasteiger, H.A., 2019. Temperature and Concentration Dependence of the Ionic Transport Properties of Lithium-Ion Battery Electrolytes. Journal of The Electrochemical Society, 166(14), pp.A3079-A3097. ---------- c_e: :class:`pybamm.Symbol` Dimensional electrolyte concentration T: :class:`pybamm.Symbol` Dimensional temperature coeffs: :class:`pybamm.Symbol` Fitting parameter coefficients Returns ------- :class:`pybamm.Symbol` Electrolyte diffusivity """ c = c_e / 1000 # mol.m-3 -> mol.l p1, p2, p3, p4 = coeffs A = p1 * exp(p2 * c) B = exp(p3 / T) C = exp(p4 * c / T) D_e = A * B * C * 1e-10 # m2/s return D_e
def electrolyte_diffusivity_Kim2011(c_e, T, T_inf, E_D_e, R_g): """ Diffusivity of LiPF6 in EC as a function of ion concentration from [1]. References ---------- .. [1] Kim, G. H., Smith, K., Lee, K. J., Santhanagopalan, S., & Pesaran, A. (2011). Multi-domain modeling of lithium-ion batteries encompassing multi-physics in varied length scales. Journal of The Electrochemical Society, 158(8), A955-A969. Parameters ---------- c_e: :class: `numpy.Array` Dimensional electrolyte concentration T: :class: `numpy.Array` Dimensional temperature T_inf: double Reference temperature E_D_e: double Electrolyte diffusion activation energy R_g: double The ideal gas constant Returns ------- :`numpy.Array` Solid diffusivity """ D_c_e = (5.84 * 10**(-7) * exp(-2870 / T) * (c_e / 1000)**2 - 33.9 * 10**(-7) * exp(-2920 / T) * (c_e / 1000) + 129 * 10**(-7) * exp(-3200 / T)) return D_c_e
def nco_diffusivity_Ecker2015(sto, T): """ NCO diffusivity as a function of stochiometry [1, 2, 3]. References ---------- .. [1] Ecker, Madeleine, et al. "Parameterization of a physico-chemical model of a lithium-ion battery i. determination of parameters." Journal of the Electrochemical Society 162.9 (2015): A1836-A1848. .. [2] Ecker, Madeleine, et al. "Parameterization of a physico-chemical model of a lithium-ion battery ii. model validation." Journal of The Electrochemical Society 162.9 (2015): A1849-A1857. .. [3] Richardson, Giles, et. al. "Generalised single particle models for high-rate operation of graded lithium-ion electrodes: Systematic derivation and validation." Electrochemica Acta 339 (2020): 135862 Parameters ---------- sto: :class:`pybamm.Symbol` Electrode stochiometry T: :class:`pybamm.Symbol` Dimensional temperature Returns ------- :class:`pybamm.Symbol` Solid diffusivity """ D_ref = 3.7e-13 - 3.4e-13 * exp(-12 * (sto - 0.62) * (sto - 0.62)) E_D_s = 8.06e4 arrhenius = exp(-E_D_s / (constants.R * T)) * exp(E_D_s / (constants.R * 296.15)) return D_ref * arrhenius
def electrolyte_conductivity_Kim2011(c_e, T): """ Conductivity of LiPF6 in EC as a function of ion concentration from [1]. References ---------- .. [1] Kim, G. H., Smith, K., Lee, K. J., Santhanagopalan, S., & Pesaran, A. (2011). Multi-domain modeling of lithium-ion batteries encompassing multi-physics in varied length scales. Journal of The Electrochemical Society, 158(8), A955-A969. Parameters ---------- c_e: :class:`pybamm.Symbol` Dimensional electrolyte concentration T: :class:`pybamm.Symbol` Dimensional temperature Returns ------- :class:`pybamm.Symbol` Solid diffusivity """ sigma_e = ( 3.45 * exp(-798 / T) * (c_e / 1000) ** 3 - 48.5 * exp(-1080 / T) * (c_e / 1000) ** 2 + 244 * exp(-1440 / T) * (c_e / 1000) ) return sigma_e
def electrolyte_diffusivity_Capiglia1999(c_e, T, T_inf, E_D_e, R_g): """ Diffusivity of LiPF6 in EC:DMC as a function of ion concentration. The original data is from [1]. The fit from Dualfoil [2]. References ---------- .. [1] C Capiglia et al. 7Li and 19F diffusion coefficients and thermal properties of non-aqueous electrolyte solutions for rechargeable lithium batteries. Journal of power sources 81 (1999): 859-862. .. [2] http://www.cchem.berkeley.edu/jsngrp/fortran.html Parameters ---------- c_e: :class: `numpy.Array` Dimensional electrolyte concentration T: :class: `numpy.Array` Dimensional temperature T_inf: double Reference temperature E_D_e: double Electrolyte diffusion activation energy R_g: double The ideal gas constant Returns ------- :`numpy.Array` Solid diffusivity """ D_c_e = 5.34e-10 * exp(-0.65 * c_e / 1000) arrhenius = exp(E_D_e / R_g * (1 / T_inf - 1 / T)) return D_c_e * arrhenius
def test_advanced_functions(self): a = pybamm.StateVector(slice(0, 1)) b = pybamm.StateVector(slice(1, 2)) y = np.array([5, 3]) # func = a * pybamm.exp(b) self.assertAlmostEqual(func.diff(a).evaluate(y=y)[0], np.exp(3)) func = pybamm.exp(a + 2 * b + a * b) + a * pybamm.exp(b) self.assertEqual( func.diff(a).evaluate(y=y), (4 * np.exp(3 * 5 + 5 + 2 * 3) + np.exp(3)) ) self.assertEqual( func.diff(b).evaluate(y=y), np.exp(3) * (7 * np.exp(3 * 5 + 5 + 3) + 5) ) # func = pybamm.sin(pybamm.cos(a * 4) / 2) * pybamm.cos(4 * pybamm.exp(b / 3)) self.assertEqual( func.diff(a).evaluate(y=y), -2 * np.sin(20) * np.cos(np.cos(20) / 2) * np.cos(4 * np.exp(1)), ) self.assertEqual( func.diff(b).evaluate(y=y), -4 / 3 * np.exp(1) * np.sin(4 * np.exp(1)) * np.sin(np.cos(20) / 2), ) # func = pybamm.sin(a * b) self.assertEqual(func.diff(a).evaluate(y=y), 3 * np.cos(15))
def graphite_ocp_Ecker2015_function(sto): """ Graphite OCP as a function of stochiometry [1, 2, 3]. References ---------- .. [1] Ecker, Madeleine, et al. "Parameterization of a physico-chemical model of a lithium-ion battery i. determination of parameters." Journal of the Electrochemical Society 162.9 (2015): A1836-A1848. .. [2] Ecker, Madeleine, et al. "Parameterization of a physico-chemical model of a lithium-ion battery ii. model validation." Journal of The Electrochemical Society 162.9 (2015): A1849-A1857. .. [3] Richardson, Giles, et. al. "Generalised single particle models for high-rate operation of graded lithium-ion electrodes: Systematic derivation and validation." Electrochemica Acta 339 (2020): 135862 Parameters ---------- sto: :class:`pybamm.Symbol` Electrode stochiometry Returns ------- :class:`pybamm.Symbol` Open circuit potential """ # Graphite negative electrode from Ecker, Kabitz, Laresgoiti et al. # Analytical fit (WebPlotDigitizer + gnuplot) a = 0.716502 b = 369.028 c = 0.12193 d = 35.6478 e = 0.0530947 g = 0.0169644 h = 27.1365 i = 0.312832 j = 0.0199313 k = 28.5697 m = 0.614221 n = 0.931153 o = 36.328 p = 1.10743 q = 0.140031 r = 0.0189193 s = 21.1967 t = 0.196176 u_eq = ( a * exp(-b * sto) + c * exp(-d * (sto - e)) - r * tanh(s * (sto - t)) - g * tanh(h * (sto - i)) - j * tanh(k * (sto - m)) - n * exp(o * (sto - p)) + q ) return u_eq
def test_exp(self): a = pybamm.InputParameter("a") fun = pybamm.exp(a) self.assertIsInstance(fun, pybamm.Exponential) self.assertEqual(fun.children[0].id, a.id) self.assertEqual(fun.evaluate(inputs={"a": 3}), np.exp(3)) h = 0.0000001 self.assertAlmostEqual( fun.diff(a).evaluate(inputs={"a": 3}), (pybamm.exp(pybamm.Scalar(3 + h)).evaluate() - fun.evaluate(inputs={"a": 3})) / h, places=5, )
def electrolyte_diffusivity_Nyman2008(c_e, T, T_inf, E_D_e, R_g): """ Diffusivity of LiPF6 in EC:EMC (3:7) as a function of ion concentration. The data comes from [1] References ---------- .. [1] A. Nyman, M. Behm, and G. Lindbergh, "Electrochemical characterisation and modelling of the mass transport phenomena in LiPF6-EC-EMC electrolyte," Electrochim. Acta, vol. 53, no. 22, pp. 6356–6365, 2008. Parameters ---------- c_e: :class: `numpy.Array` Dimensional electrolyte concentration T: :class: `numpy.Array` Dimensional temperature T_inf: double Reference temperature E_D_e: double Electrolyte diffusion activation energy R_g: double The ideal gas constant Returns ------- :`numpy.Array` Solid diffusivity """ D_c_e = 8.794e-11 * (c_e / 1000) ** 2 - 3.972e-10 * (c_e / 1000) + 4.862e-10 arrhenius = exp(E_D_e / R_g * (1 / T_inf - 1 / T)) return D_c_e * arrhenius
def test_diff(self): a = pybamm.StateVector(slice(0, 1)) b = pybamm.StateVector(slice(1, 2)) y = np.array([5]) func = pybamm.Function(test_function, a) self.assertEqual(func.diff(a).evaluate(y=y), 2) self.assertEqual(func.diff(func).evaluate(), 1) func = pybamm.sin(a) self.assertEqual(func.evaluate(y=y), np.sin(a.evaluate(y=y))) self.assertEqual(func.diff(a).evaluate(y=y), np.cos(a.evaluate(y=y))) func = pybamm.exp(a) self.assertEqual(func.evaluate(y=y), np.exp(a.evaluate(y=y))) self.assertEqual(func.diff(a).evaluate(y=y), np.exp(a.evaluate(y=y))) # multiple variables func = pybamm.Function(test_multi_var_function, 4 * a, 3 * a) self.assertEqual(func.diff(a).evaluate(y=y), 7) func = pybamm.Function(test_multi_var_function, 4 * a, 3 * b) self.assertEqual(func.diff(a).evaluate(y=np.array([5, 6])), 4) self.assertEqual(func.diff(b).evaluate(y=np.array([5, 6])), 3) func = pybamm.Function(test_multi_var_function_cube, 4 * a, 3 * b) self.assertEqual(func.diff(a).evaluate(y=np.array([5, 6])), 4) self.assertEqual( func.diff(b).evaluate(y=np.array([5, 6])), 3 * 3 * (3 * 6) ** 2 ) # exceptions func = pybamm.Function( test_multi_var_function_cube, 4 * a, 3 * b, derivative="derivative" ) with self.assertRaises(ValueError): func.diff(a)
def graphite_entropic_change_Moura2016(sto, c_n_max): """ Graphite entropic change in open circuit potential (OCP) at a temperature of 298.15K as a function of the stochiometry taken from Scott Moura's FastDFN code [1]. References ---------- .. [1] https://github.com/scott-moura/fastDFN Parameters ---------- sto: double Stochiometry of material (li-fraction) """ du_dT = ( -1.5 * (120.0 / c_n_max) * exp(-120 * sto) + (0.0351 / (0.083 * c_n_max)) * ((cosh((sto - 0.286) / 0.083)) ** (-2)) - (0.0045 / (0.119 * c_n_max)) * ((cosh((sto - 0.849) / 0.119)) ** (-2)) - (0.035 / (0.05 * c_n_max)) * ((cosh((sto - 0.9233) / 0.05)) ** (-2)) - (0.0147 / (0.034 * c_n_max)) * ((cosh((sto - 0.5) / 0.034)) ** (-2)) - (0.102 / (0.142 * c_n_max)) * ((cosh((sto - 0.194) / 0.142)) ** (-2)) - (0.022 / (0.0164 * c_n_max)) * ((cosh((sto - 0.9) / 0.0164)) ** (-2)) - (0.011 / (0.0226 * c_n_max)) * ((cosh((sto - 0.124) / 0.0226)) ** (-2)) + (0.0155 / (0.029 * c_n_max)) * ((cosh((sto - 0.105) / 0.029)) ** (-2)) ) return du_dT
def graphite_electrolyte_exchange_current_density_Ramadass2004( c_e, c_s_surf, T): """ Exchange-current density for Butler-Volmer reactions between graphite and LiPF6 in EC:DMC. References ---------- .. [1] P. Ramadass, Bala Haran, Parthasarathy M. Gomadam, Ralph White, and Branko N. Popov. "Development of First Principles Capacity Fade Model for Li-Ion Cells." (2004) Parameters ---------- c_e : :class:`pybamm.Symbol` Electrolyte concentration [mol.m-3] c_s_surf : :class:`pybamm.Symbol` Particle concentration [mol.m-3] T : :class:`pybamm.Symbol` Temperature [K] Returns ------- :class:`pybamm.Symbol` Exchange-current density [A.m-2] """ m_ref = 4.854 * 10**(-6) # (A/m2)(mol/m3)**1.5 E_r = 37480 arrhenius = exp(E_r / constants.R * (1 / 298.15 - 1 / T)) c_n_max = standard_parameters_lithium_ion.c_n_max return (m_ref * arrhenius * c_e**0.5 * c_s_surf**0.5 * (c_n_max - c_s_surf)**0.5)
def test_exp(self): a = pybamm.Scalar(3) fun = pybamm.exp(a) self.assertIsInstance(fun, pybamm.Exponential) self.assertEqual(fun.children[0].id, a.id) self.assertEqual(fun.evaluate(), np.exp(3)) self.assertEqual(fun.diff(a).evaluate(), np.exp(3))
def NMC_entropic_change_PeymanMPM(sto): """ Nickel Manganese Cobalt (NMC) entropic change in open circuit potential (OCP) at a temperature of 298.15K as a function of the OCP. The fit is taken from [1]. References ---------- .. [1] W. Le, I. Belharouak, D. Vissers, K. Amine, "In situ thermal study of li1+ x [ni1/ 3co1/ 3mn1/ 3] 1- x o2 using isothermal micro-clorimetric techniques", J. of the Electrochemical Society 153 (11) (2006) A2147–A2151. Parameters ---------- sto : :class:`pybamm.Symbol` Stochiometry of material (li-fraction) """ # Since the equation uses the OCP at each stoichiometry as input, # we need OCP function here u_eq = (4.3452 - 1.6518 * sto + 1.6225 * sto**2 - 2.0843 * sto**3 + 3.5146 * sto**4 - 0.5623 * 10**(-4) * pybamm.exp(109.451 * sto - 100.006)) du_dT = (-800 + 779 * u_eq - 284 * u_eq**2 + 46 * u_eq**3 - 2.8 * u_eq**4) * 10**(-3) return du_dT
def graphite_mcmb2528_ocp_Dualfoil1998(sto): """ Graphite MCMB 2528 Open Circuit Potential (OCP) as a function of the stochiometry. The fit is taken from Dualfoil [1]. Dualfoil states that the data was measured by Chris Bogatu at Telcordia and PolyStor materials, 2000. However, we could not find any other records of this measurment. References ---------- .. [1] http://www.cchem.berkeley.edu/jsngrp/fortran.html """ u_eq = ( 0.194 + 1.5 * exp(-120.0 * sto) + 0.0351 * tanh((sto - 0.286) / 0.083) - 0.0045 * tanh((sto - 0.849) / 0.119) - 0.035 * tanh((sto - 0.9233) / 0.05) - 0.0147 * tanh((sto - 0.5) / 0.034) - 0.102 * tanh((sto - 0.194) / 0.142) - 0.022 * tanh((sto - 0.9) / 0.0164) - 0.011 * tanh((sto - 0.124) / 0.0226) + 0.0155 * tanh((sto - 0.105) / 0.029) ) return u_eq
def get_coupled_variables(self, variables): L_sei_inner = variables["Inner " + self.domain.lower() + " electrode sei thickness"] phi_s_n = variables[self.domain + " electrode potential"] if self.domain == "Negative": C_sei = pybamm.sei_parameters.C_sei_inter_n j_sei = -pybamm.exp(-phi_s_n) / (C_sei * L_sei_inner) alpha = 0.5 j_inner = alpha * j_sei j_outer = (1 - alpha) * j_sei variables.update( self._get_standard_reaction_variables(j_inner, j_outer)) # Update whole cell variables, which also updates the "sum of" variables if ("Negative electrode sei interfacial current density" in variables and "Positive electrode sei interfacial current density" in variables and "Sei interfacial current density" not in variables): variables.update( self._get_standard_whole_cell_interfacial_current_variables( variables)) return variables
def set_algebraic(self, variables): phi_s_n = variables[self.domain + " electrode potential"] phi_e_n = variables[self.domain + " electrolyte potential"] j_sei = variables["Outer " + self.domain.lower() + " electrode sei interfacial current density"] L_sei = variables["Outer " + self.domain.lower() + " electrode sei thickness"] c_ec = variables[self.domain + " electrode EC surface concentration"] # Look for current that contributes to the -IR drop # If we can't find the interfacial current density from the main reaction, j, # it's ok to fall back on the total interfacial current density, j_tot # This should only happen when the interface submodel is "InverseButlerVolmer" # in which case j = j_tot (uniform) anyway try: j = variables["Total " + self.domain.lower() + " electrode interfacial current density"] except KeyError: j = variables["X-averaged " + self.domain.lower() + " electrode total interfacial current density"] if self.domain == "Negative": C_sei_ec = self.param.C_sei_ec_n R_sei = self.param.R_sei_n # need to revise for thermal case self.algebraic = { j_sei: j_sei + C_sei_ec * c_ec * pybamm.exp(-0.5 * (phi_s_n - phi_e_n - j * L_sei * R_sei)) }
def graphite_LGM50_diffusivity_Chen2020(sto, T): """ LG M50 Graphite diffusivity as a function of stochiometry, in this case the diffusivity is taken to be a constant. The value is taken from [1]. References ---------- .. [1] Chang-Hui Chen, Ferran Brosa Planella, Kieran O’Regan, Dominika Gastol, W. Dhammika Widanage, and Emma Kendrick. "Development of Experimental Techniques for Parameterization of Multi-scale Lithium-ion Battery Models." Journal of the Electrochemical Society 167 (2020): 080534. Parameters ---------- sto: :class:`pybamm.Symbol` Electrode stochiometry T: :class:`pybamm.Symbol` Dimensional temperature Returns ------- :class:`pybamm.Symbol` Solid diffusivity """ D_ref = 3.3e-14 E_D_s = 0 # to be implemented arrhenius = exp(E_D_s / constants.R * (1 / 298.15 - 1 / T)) return D_ref * arrhenius
def graphite_LGM50_electrolyte_reaction_rate_Chen2020(T, T_inf, E_r, R_g): """ Reaction rate for Butler-Volmer reactions between graphite and LiPF6 in EC:DMC. References ---------- .. [1] Chang-Hui Chen, Ferran Brosa Planella, Kieran O’Regan, Dominika Gastol, W. Dhammika Widanage, and Emma Kendrick. "Development of Experimental Techniques for Parameterization of Multi-scale Lithium-ion Battery Models." Submitted for publication (2020). Parameters ---------- T: :class: `numpy.Array` Dimensional temperature T_inf: double Reference temperature E_r: double Reaction activation energy R_g: double The ideal gas constant Returns ------- :`numpy.Array` Reaction rate """ m_ref = 6.48e-7 arrhenius = exp(E_r / R_g * (1 / T_inf - 1 / T)) return m_ref * arrhenius
def graphite_electrolyte_exchange_current_density_Dualfoil1998( c_e, c_s_surf, T): """ Exchange-current density for Butler-Volmer reactions between graphite and LiPF6 in EC:DMC. References ---------- .. [2] http://www.cchem.berkeley.edu/jsngrp/fortran.html Parameters ---------- c_e : :class:`pybamm.Symbol` Electrolyte concentration [mol.m-3] c_s_surf : :class:`pybamm.Symbol` Particle concentration [mol.m-3] T : :class:`pybamm.Symbol` Temperature [K] Returns ------- :class:`pybamm.Symbol` Exchange-current density [A.m-2] """ m_ref = (1 * 10**(-11) * constants.F ) # (A/m2)(mol/m3)**1.5 - includes ref concentrations E_r = 5000 # activation energy for Temperature Dependent Reaction Constant [J/mol] arrhenius = exp(E_r / constants.R * (1 / 298.15 - 1 / T)) c_n_max = Parameter( "Maximum concentration in negative electrode [mol.m-3]") return (m_ref * arrhenius * c_e**0.5 * c_s_surf**0.5 * (c_n_max - c_s_surf)**0.5)
def beta(T): T_inf = pybamm.FunctionParameter("T_inf", {"x": self.x}) h = pybamm.Parameter("h") eps0 = pybamm.Parameter("eps0") return (1e-4 * (1.0 + 5.0 * pybamm.sin(3 * np.pi * T / 200.0) + pybamm.exp(0.02 * T)) / eps0 + h * (T_inf - T) / (T_inf**4 - T**4) / eps0)
def nmc_LGM50_electrolyte_exchange_current_density_Chen2020(c_e, c_s_surf, T): """ Exchange-current density for Butler-Volmer reactions between NMC and LiPF6 in EC:DMC. References ---------- .. [1] Chang-Hui Chen, Ferran Brosa Planella, Kieran O’Regan, Dominika Gastol, W. Dhammika Widanage, and Emma Kendrick. "Development of Experimental Techniques for Parameterization of Multi-scale Lithium-ion Battery Models." Journal of the Electrochemical Society 167 (2020): 080534. Parameters ---------- c_e : :class:`pybamm.Symbol` Electrolyte concentration [mol.m-3] c_s_surf : :class:`pybamm.Symbol` Particle concentration [mol.m-3] T : :class:`pybamm.Symbol` Temperature [K] Returns ------- :class:`pybamm.Symbol` Exchange-current density [A.m-2] """ m_ref = 3.42e-6 # (A/m2)(mol/m3)**1.5 - includes ref concentrations E_r = 17800 arrhenius = exp(E_r / constants.R * (1 / 298.15 - 1 / T)) c_p_max = standard_parameters_lithium_ion.c_p_max return ( m_ref * arrhenius * c_e ** 0.5 * c_s_surf ** 0.5 * (c_p_max - c_s_surf) ** 0.5 )
def lico2_diffusivity_Dualfoil1998(sto, T): """ LiCo2 diffusivity as a function of stochiometry, in this case the diffusivity is taken to be a constant. The value is taken from Dualfoil [1]. References ---------- .. [1] http://www.cchem.berkeley.edu/jsngrp/fortran.html Parameters ---------- sto: :class:`pybamm.Symbol` Electrode stochiometry T: :class:`pybamm.Symbol` Dimensional temperature, [K] Returns ------- :class:`pybamm.Symbol` Solid diffusivity [m2.s-1] """ D_ref = 5.387 * 10**(-15) E_D_s = 5000 T_ref = Parameter("Reference temperature [K]") arrhenius = exp(E_D_s / constants.R * (1 / T_ref - 1 / T)) return D_ref * arrhenius
def graphite_diffusivity_PeymanMPM(sto, T): """ Graphite diffusivity as a function of stochiometry, in this case the diffusivity is taken to be a constant. The value is taken from Peyman MPM. References ---------- .. [1] http://www.cchem.berkeley.edu/jsngrp/fortran.html Parameters ---------- sto: :class:`pybamm.Symbol` Electrode stochiometry T: :class:`pybamm.Symbol` Dimensional temperature Returns ------- :class:`pybamm.Symbol` Solid diffusivity """ D_ref = 5.0 * 10**(-15) E_D_s = 42770 arrhenius = exp(E_D_s / constants.R * (1 / 298.15 - 1 / T)) return D_ref * arrhenius
def _get_dj_ddeltaphi(self, variables): "See :meth:`pybamm.interface.kinetics.BaseKinetics._get_dj_ddeltaphi`" _, delta_phi, j0, ne, ocp, T = self._get_interface_variables_for_first_order( variables) eta_r = delta_phi - ocp return (2 * j0 * (ne / (2 * (1 + self.param.Theta * T))) * pybamm.exp( (ne / 2) * eta_r))
def NMC_electrolyte_exchange_current_density_PeymanMPM(c_e, c_s_surf, T): """ Exchange-current density for Butler-Volmer reactions between NMC and LiPF6 in EC:DMC. References ---------- .. Peyman MPM manuscript (to be submitted) Parameters ---------- c_e : :class:`pybamm.Symbol` Electrolyte concentration [mol.m-3] c_s_surf : :class:`pybamm.Symbol` Particle concentration [mol.m-3] T : :class:`pybamm.Symbol` Temperature [K] Returns ------- :class:`pybamm.Symbol` Exchange-current density [A.m-2] """ m_ref = 4.824 * 10 ** (-6) # (A/m2)(mol/m3)**1.5 - includes ref concentrations E_r = 39570 arrhenius = exp(E_r / constants.R * (1 / 298.15 - 1 / T)) c_p_max = Parameter("Maximum concentration in positive electrode [mol.m-3]") return ( m_ref * arrhenius * c_e ** 0.5 * c_s_surf ** 0.5 * (c_p_max - c_s_surf) ** 0.5 )
def graphite_LGM50_diffusivity_Chen2020(sto, T, T_inf, E_D_s, R_g): """ LG M50 Graphite diffusivity as a function of stochiometry, in this case the diffusivity is taken to be a constant. The value is taken from [1]. References ---------- .. [1] Chang-Hui Chen, Ferran Brosa Planella, Kieran O’Regan, Dominika Gastol, W. Dhammika Widanage, and Emma Kendrick. "Development of Experimental Techniques for Parameterization of Multi-scale Lithium-ion Battery Models." Submitted for publication (2020). Parameters ---------- sto: :class: `numpy.Array` Electrode stochiometry T: :class: `numpy.Array` Dimensional temperature T_inf: double Reference temperature E_D_s: double Solid diffusion activation energy R_g: double The ideal gas constant Returns ------- : double Solid diffusivity """ D_ref = 3.3e-14 arrhenius = exp(E_D_s / R_g * (1 / T_inf - 1 / T)) return D_ref * arrhenius