From 8198b8e58e08e0a496df72a44d0b5735880a0c13 Mon Sep 17 00:00:00 2001 From: Sravan Pannala <57152030+sravanpannala@users.noreply.github.com> Date: Sun, 10 Sep 2023 13:10:16 -0400 Subject: [PATCH] merge hamid dissociation model --- .../cells/UMBL_Andrew2022/parameters.csv | 34 +++++++++ .../electrolytes/LiPF6_Andrew2022/__init__.py | 0 .../electrolyte_conductivity_Siegel.py | 33 +++++++++ .../electrolyte_diffusivity_Siegel.py | 34 +++++++++ .../LiPF6_Andrew2022/parameters.csv | 11 +++ .../Andrew_Li_plating/README.md | 9 +++ .../SEI_limited_dead_lithium_Mohtat2020.py | 30 ++++++++ .../Andrew_Li_plating/__init__.py | 0 .../Andrew_Li_plating/parameters.csv | 14 ++++ ...ing_exchange_current_density_Mohtat2020.py | 29 ++++++++ ...ing_exchange_current_density_Mohtat2020.py | 35 +++++++++ .../graphite_UMBL_Andrew2022/__init__.py | 0 .../graphite_diffusivity_AndrewMPM.py | 34 +++++++++ ...lyte_exchange_current_density_AndrewMPM.py | 47 ++++++++++++ .../graphite_entropic_change_AndrewMPM.py | 28 ++++++++ .../graphite_ocp_AndrewMPM.py | 42 +++++++++++ .../graphite_UMBL_Andrew2022/parameters.csv | 33 +++++++++ ...lyte_exchange_current_density_PeymanMPM.py | 2 +- ...trolyte_exchange_current_density_Siegel.py | 2 +- .../NMC_diffusivity_AndrewMPM.py | 32 +++++++++ ...lyte_exchange_current_density_AndrewMPM.py | 38 ++++++++++ .../NMC_entropic_change_AndrewMPM.py | 39 ++++++++++ .../NMC_UMBL_Andrew2022/NMC_ocp_AndrewMPM.py | 61 ++++++++++++++++ .../NMC_UMBL_Andrew2022/__init__.py | 0 .../NMC_UMBL_Andrew2022/parameters.csv | 33 +++++++++ ...lyte_exchange_current_density_PeymanMPM.py | 2 +- ...trolyte_exchange_current_density_Siegel.py | 2 +- .../separator_Andrew2022/parameters.csv | 9 +++ .../active_material/base_active_material.py | 25 ++++++- .../active_material/loss_active_material.py | 72 +++++++++++++++++-- .../submodels/interface/base_interface.py | 6 +- .../submodels/interface/sei/base_sei.py | 1 + .../submodels/interface/sei/sei_growth.py | 26 +++++-- pybamm/parameters/lithium_ion_parameters.py | 29 ++++++-- pybamm/parameters/parameter_sets.py | 14 ++++ 35 files changed, 785 insertions(+), 21 deletions(-) create mode 100644 pybamm/input/parameters/lithium_ion/cells/UMBL_Andrew2022/parameters.csv create mode 100644 pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/__init__.py create mode 100644 pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/electrolyte_conductivity_Siegel.py create mode 100644 pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/electrolyte_diffusivity_Siegel.py create mode 100644 pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/parameters.csv create mode 100644 pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/README.md create mode 100644 pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/SEI_limited_dead_lithium_Mohtat2020.py create mode 100644 pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/__init__.py create mode 100644 pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/parameters.csv create mode 100644 pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/plating_exchange_current_density_Mohtat2020.py create mode 100644 pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/stripping_exchange_current_density_Mohtat2020.py create mode 100644 pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/__init__.py create mode 100644 pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_diffusivity_AndrewMPM.py create mode 100644 pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_electrolyte_exchange_current_density_AndrewMPM.py create mode 100644 pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_entropic_change_AndrewMPM.py create mode 100644 pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_ocp_AndrewMPM.py create mode 100644 pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/parameters.csv create mode 100644 pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_diffusivity_AndrewMPM.py create mode 100644 pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_electrolyte_exchange_current_density_AndrewMPM.py create mode 100644 pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_entropic_change_AndrewMPM.py create mode 100644 pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_ocp_AndrewMPM.py create mode 100644 pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/__init__.py create mode 100644 pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/parameters.csv create mode 100644 pybamm/input/parameters/lithium_ion/separators/separator_Andrew2022/parameters.csv diff --git a/pybamm/input/parameters/lithium_ion/cells/UMBL_Andrew2022/parameters.csv b/pybamm/input/parameters/lithium_ion/cells/UMBL_Andrew2022/parameters.csv new file mode 100644 index 0000000000..7b53319df1 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/cells/UMBL_Andrew2022/parameters.csv @@ -0,0 +1,34 @@ +Name [units],Value,Reference,Notes +# Empty rows and rows starting with ‘#’ will be ignored,,, +,,, +# Macroscale geometry,,, +Negative current collector thickness [m],2.5E-05,Scott Moura FastDFN,no info from Peyman MPM +Negative electrode thickness [m],62E-06,Peyman MPM, +Separator thickness [m],12E-06,Peyman MPM, +Positive electrode thickness [m],67E-06,Peyman MPM, +Positive current collector thickness [m],2.5E-05,Scott Moura FastDFN,no info from Peyman MPM +Electrode height [m],1,KOKAM SLPB78205130H,Not needed for 1D +Electrode width [m],0.2050,KOKAM SLPB78205130H,Not needed for 1D +Cell cooling surface area [m2],0.41,,pouch +Cell volume [m3],3.92E-5,,pouch +,,, +# Current collector properties ,,, +Negative current collector conductivity [S.m-1],59600000,LIONSIMBA,carbon +Positive current collector conductivity [S.m-1],35500000,LIONSIMBA,aluminium +,,, +# Density,,, +Negative current collector density [kg.m-3],8954,, +Positive current collector density [kg.m-3],2707,, +,,, +# Specific heat capacity,,, +Negative current collector specific heat capacity [J.kg-1.K-1],385,, +Positive current collector specific heat capacity [J.kg-1.K-1],897,, +,,, +# Thermal conductivity,,, +Negative current collector thermal conductivity [W.m-1.K-1],401,, +Positive current collector thermal conductivity [W.m-1.K-1],237,, +,,, +# Electrical,,, +Nominal cell capacity [A.h],5,Peyman MPM, +Typical current [A],5,,1C current +Current function [A],5,default current function, diff --git a/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/__init__.py b/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/electrolyte_conductivity_Siegel.py b/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/electrolyte_conductivity_Siegel.py new file mode 100644 index 0000000000..5de5fa9eaf --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/electrolyte_conductivity_Siegel.py @@ -0,0 +1,33 @@ +from pybamm import exp, constants + + +def electrolyte_conductivity_Siegel(c_e, T): + """ + Conductivity of LiPF6 in EC:DMC as a function of ion concentration. The original + data is from [1]. The fit is 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` + Electrolyte conductivity + """ + + sigma_e = 1.3 + E_k_e = 34700 + arrhenius = exp(E_k_e / constants.R * (1 / 298.15 - 1 / T)) + + return sigma_e * arrhenius diff --git a/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/electrolyte_diffusivity_Siegel.py b/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/electrolyte_diffusivity_Siegel.py new file mode 100644 index 0000000000..9467593dba --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/electrolyte_diffusivity_Siegel.py @@ -0,0 +1,34 @@ +from pybamm import exp, constants + + +def electrolyte_diffusivity_Siegel(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` + Electrolyte diffusivity + """ + + D_c_e = 5.35 * 10 ** (-10) + E_D_e = 37040 + arrhenius = exp(E_D_e / constants.R * (1 / 298.15 - 1 / T)) + + return D_c_e * arrhenius diff --git a/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/parameters.csv b/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/parameters.csv new file mode 100644 index 0000000000..0972df6cb1 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/electrolytes/LiPF6_Andrew2022/parameters.csv @@ -0,0 +1,11 @@ +Name [units],Value,Reference,Notes +# Empty rows and rows starting with ‘#’ will be ignored,,, +,,, +# Electrolyte properties,,, +Typical electrolyte concentration [mol.m-3],1000,Peyman MPM,from MPM code +Initial concentration in electrolyte [mol.m-3],1000,Peyman MPM,from MPM code +Cation transference number,0.38,Peyman MPM, +1 + dlnf/dlnc,1,, +Typical lithium ion diffusivity [m2.s-1],5.34E-10,Scott Moura FastDFN, +Electrolyte diffusivity [m2.s-1],[function]electrolyte_diffusivity_Siegel,Peyman MPM, +Electrolyte conductivity [S.m-1],[function]electrolyte_conductivity_Siegel,Peyman MPM, diff --git a/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/README.md b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/README.md new file mode 100644 index 0000000000..82095310dc --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/README.md @@ -0,0 +1,9 @@ +# Lithium plating parameters + +Some example parameters for lithium plating from the paper: + +> Simon O'Kane, Weilong Ai, Ganesh Madabattula, Diego Alonso-Alvarez, Robert Timms, Valentin Sulzer, Jacqueline Edge, Billy Wu, Gregory Offer, and Monica Marinescu. ["Lithium-ion battery degradation: how to model it."](https://pubs.rsc.org/en/content/articlelanding/2022/cp/d2cp00417h) Physical Chemistry: Chemical Physics 24 (2022): 7909-7922 + +and references therein. + +Note: this parameter set does not claim to be representative of the true parameter values. These are merely the parameter values that were used in the referenced papers. diff --git a/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/SEI_limited_dead_lithium_Mohtat2020.py b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/SEI_limited_dead_lithium_Mohtat2020.py new file mode 100644 index 0000000000..ec53781cf8 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/SEI_limited_dead_lithium_Mohtat2020.py @@ -0,0 +1,30 @@ +from pybamm import Parameter + + +def SEI_limited_dead_lithium_Mohtat2020(L_sei): + """ + Decay rate for dead lithium formation [s-1]. + References + ---------- + .. [1] Simon E. J. O'Kane, Weilong Ai, Ganesh Madabattula, Diega Alonso-Alvarez, + Robert Timms, Valentin Sulzer, Jaqueline Sophie Edge, Billy Wu, Gregory J. Offer + and Monica Marinescu. "Lithium-ion battery degradation: how to model it." + Physical Chemistry: Chemical Physics 24, no. 13 (2022): 7909-7922. + Parameters + ---------- + L_sei : :class:`pybamm.Symbol` + Total SEI thickness [m] + Returns + ------- + :class:`pybamm.Symbol` + Dead lithium decay rate [s-1] + """ + + gamma_0 = Parameter("Dead lithium decay constant [s-1]") + L_inner_0 = Parameter("Initial inner SEI thickness [m]") + L_outer_0 = Parameter("Initial outer SEI thickness [m]") + L_sei_0 = L_inner_0 + L_outer_0 + + gamma = gamma_0 * L_sei_0 / L_sei + + return gamma diff --git a/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/__init__.py b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/parameters.csv b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/parameters.csv new file mode 100644 index 0000000000..45f9b8a44d --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/parameters.csv @@ -0,0 +1,14 @@ +Name [units],Value,Reference,Notes +,,, +,,, +# Lithium plating parameters,,, +Lithium metal partial molar volume [m3.mol-1],1.30E-05,Yang2017, +Lithium plating kinetic rate constant [m.s-1],1E-9,, +Exchange-current density for plating [A.m-2],[function]plating_exchange_current_density_Mohtat2020,, +Exchange-current density for stripping [A.m-2],[function]stripping_exchange_current_density_Mohtat2020,, +Initial plated lithium concentration [mol.m-3],0.00E+00,, +Typical plated lithium concentration [mol.m-3],1000,1 molar, +Lithium plating transfer coefficient,0.65,, +Dead lithium decay constant [s-1],1E-6,, +Dead lithium decay rate [s-1],[function]SEI_limited_dead_lithium_Mohtat2020,, +Li plating open-circuit potential [V],0.05,Pannala, \ No newline at end of file diff --git a/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/plating_exchange_current_density_Mohtat2020.py b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/plating_exchange_current_density_Mohtat2020.py new file mode 100644 index 0000000000..46a8dcddf0 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/plating_exchange_current_density_Mohtat2020.py @@ -0,0 +1,29 @@ +from pybamm import constants, Parameter + + +def plating_exchange_current_density_Mohtat2020(c_e, c_Li, T): + """ + Exchange-current density for Li plating reaction [A.m-2]. + References + ---------- + .. [1] O’Kane, Simon EJ, Ian D. Campbell, Mohamed WJ Marzook, Gregory J. Offer, and + Monica Marinescu. "Physical origin of the differential voltage minimum associated + with lithium plating in Li-ion batteries." Journal of The Electrochemical Society + 167, no. 9 (2020): 090540. + Parameters + ---------- + c_e : :class:`pybamm.Symbol` + Electrolyte concentration [mol.m-3] + c_Li : :class:`pybamm.Symbol` + Plated lithium concentration [mol.m-3] + T : :class:`pybamm.Symbol` + Temperature [K] + Returns + ------- + :class:`pybamm.Symbol` + Exchange-current density [A.m-2] + """ + + k_plating = Parameter("Lithium plating kinetic rate constant [m.s-1]") + + return constants.F * k_plating * c_e diff --git a/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/stripping_exchange_current_density_Mohtat2020.py b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/stripping_exchange_current_density_Mohtat2020.py new file mode 100644 index 0000000000..37e84d46dc --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/lithium_platings/Andrew_Li_plating/stripping_exchange_current_density_Mohtat2020.py @@ -0,0 +1,35 @@ +from pybamm import constants, Parameter + + +def stripping_exchange_current_density_Mohtat2020(c_e, c_Li, T): + """ + Exchange-current density for Li stripping reaction [A.m-2]. + + References + ---------- + + .. [1] O’Kane, Simon EJ, Ian D. Campbell, Mohamed WJ Marzook, Gregory J. Offer, and + Monica Marinescu. "Physical origin of the differential voltage minimum associated + with lithium plating in Li-ion batteries." Journal of The Electrochemical Society + 167, no. 9 (2020): 090540. + + Parameters + ---------- + + c_e : :class:`pybamm.Symbol` + Electrolyte concentration [mol.m-3] + c_Li : :class:`pybamm.Symbol` + Plated lithium concentration [mol.m-3] + T : :class:`pybamm.Symbol` + Temperature [K] + + Returns + ------- + + :class:`pybamm.Symbol` + Exchange-current density [A.m-2] + """ + + k_plating = Parameter("Lithium plating kinetic rate constant [m.s-1]") + + return constants.F * k_plating * c_Li diff --git a/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/__init__.py b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_diffusivity_AndrewMPM.py b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_diffusivity_AndrewMPM.py new file mode 100644 index 0000000000..ffd538895c --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_diffusivity_AndrewMPM.py @@ -0,0 +1,34 @@ +from pybamm import exp, constants, Parameter + + +def graphite_diffusivity_AndrewMPM(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 = Parameter("Negative electrode diffusion coefficient [m2.s-1]") + # D_ref = 16*5.0 * 10 ** (-15) +# E_D_s = 42770 + E_D_s = 0 + + + arrhenius = exp(E_D_s / constants.R * (1 / 298.15 - 1 / T)) +# arrhenius = exp(E_D_s / constants.R * (1 / 318.15 - 1 / T)) + + return D_ref * arrhenius diff --git a/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_electrolyte_exchange_current_density_AndrewMPM.py b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_electrolyte_exchange_current_density_AndrewMPM.py new file mode 100644 index 0000000000..e916ea6477 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_electrolyte_exchange_current_density_AndrewMPM.py @@ -0,0 +1,47 @@ +from pybamm import exp, constants, Parameter, Variable +# import pybamm + +# def graphite_electrolyte_exchange_current_density_PeymanMPM(c_e, c_s_surf, c_s_max, T): +def graphite_electrolyte_exchange_current_density_AndrewMPM(c_e, c_s_surf, c_s_max, T,N_nick): + + """ + Exchange-current density for Butler-Volmer reactions between graphite and LiPF6 in + EC:DMC. + Check the unit of Reaction rate constant k0 is from Peyman MPM. + + 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] + c_s_max : :class:`pybamm.Symbol` + Maximum particle concentration [mol.m-3] + T : :class:`pybamm.Symbol` + Temperature [K] + + Returns + ------- + :class:`pybamm.Symbol` + Exchange-current density [A.m-2] + """ + m_ref = Parameter("Negative electrode reference exchange-current density [A.m-2(m3.mol)1.5]") + k_Nickel_intercalation_n = Parameter("Negative electrode dissolution nickel intercalation coefficient") +# # Multiplier_diss=1 - N_nick * k_Nickel_intercalation_n + Multiplier_diss=1/(1 + N_nick * k_Nickel_intercalation_n) +# Multiplier_diss = 1 + + # m_ref = 4*1.061 * 10 ** (-6) # unit has been converted + # units are (A/m2)(mol/m3)**1.5 - includes ref concentrations +# E_r = 37480 + E_r=0 + arrhenius = exp(E_r / constants.R * (1 / 298.15 - 1 / T)) +# arrhenius = exp(E_r / constants.R * (1 / 318.15 - 1 / T)) + + return ( + m_ref * Multiplier_diss * arrhenius * c_e**0.5 * c_s_surf**0.5 * (c_s_max - c_s_surf) ** 0.5 + ) diff --git a/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_entropic_change_AndrewMPM.py b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_entropic_change_AndrewMPM.py new file mode 100644 index 0000000000..5f7ddba818 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_entropic_change_AndrewMPM.py @@ -0,0 +1,28 @@ +def graphite_entropic_change_AndrewMPM(sto, c_s_max): + """ + Graphite entropic change in open circuit potential (OCP) at a temperature of + 298.15K as a function of the stochiometry taken from [1] + + References + ---------- + .. [1] K.E. Thomas, J. Newman, "Heats of mixing and entropy in porous insertion + electrode", J. of Power Sources 119 (2003) 844-849 + + Parameters + ---------- + sto : :class:`pybamm.Symbol` + Stochiometry of material (li-fraction) + + """ + + du_dT = 10 ** (-3) * ( + 0.28 + - 1.56 * sto + - 8.92 * sto ** (2) + + 57.21 * sto ** (3) + - 110.7 * sto ** (4) + + 90.71 * sto ** (5) + - 27.14 * sto ** (6) + ) + + return du_dT diff --git a/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_ocp_AndrewMPM.py b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_ocp_AndrewMPM.py new file mode 100644 index 0000000000..b7ce2b9218 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/graphite_ocp_AndrewMPM.py @@ -0,0 +1,42 @@ +import pybamm + + +def graphite_ocp_AndrewMPM(sto): + """ + Graphite Open Circuit Potential (OCP) as a function of the + stochiometry. The fit is taken from Peyman MPM [1]. + + References + ---------- + .. [1] Peyman Mohtat et al, MPM (to be submitted) + """ +# Peyman + u_eq = ( +# 0.063 +# + 0.8 * pybamm.exp(-75 * (sto + 0.007)) +# - 0.0120 * pybamm.tanh((sto - 0.127) / 0.016) +# - 0.0118 * pybamm.tanh((sto - 0.155) / 0.016) +# - 0.0035 * pybamm.tanh((sto - 0.220) / 0.020) +# - 0.0095 * pybamm.tanh((sto - 0.190) / 0.013) +# - 0.0145 * pybamm.tanh((sto - 0.490) / 0.020) +# - 0.0800 * pybamm.tanh((sto - 1.030) / 0.055) +# Andrew + 0.09753 + + 0.6722 * pybamm.exp(-41.1 * (sto + 0.0029)) + - 0.0147 * pybamm.tanh((sto - 0.1503) / 0.0161) + - 0.0121 * pybamm.tanh((sto - 0.1789) / 0.0179) + - 0.0024 * pybamm.tanh((sto - 0.2503) / 0.0069) + - 0.0083 * pybamm.tanh((sto - 0.2118) / 0.0133) + - 0.0125 * pybamm.tanh((sto - 0.5158) / 0.0180) + - 0.0538 * pybamm.tanh((sto - 0.9961) / 0.0482) + + + ) + + return u_eq + + +# if __name__ == "__main__": # pragma: no cover +# x = pybamm.linspace(1e-10, 1 - 1e-10, 1000) +# # pybamm.plot(x, graphite_ocp_PeymanMPM(x)) +# pybamm.plot(x, -1e-8 * pybamm.log(x / (1 - x))) diff --git a/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/parameters.csv b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/parameters.csv new file mode 100644 index 0000000000..9c6b3dac08 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Andrew2022/parameters.csv @@ -0,0 +1,33 @@ +Name [units],Value,Reference,Notes +# Empty rows and rows starting with ‘#’ will be ignored,,, +,,, +# Electrode properties,,, +Negative electrode conductivity [S.m-1],100,Scott Moura FastDFN,no info from Peyman MPM +Maximum concentration in negative electrode [mol.m-3],28746,Peyman MPM, +Negative electrode diffusion coefficient [m2.s-1],8.0E-14,Peyman MPM, +Negative electrode diffusivity [m2.s-1],[function]graphite_diffusivity_AndrewMPM,, +Negative electrode OCP [V],[function]graphite_ocp_AndrewMPM,Peyman MPM, +,,, +# Microstructure,,, +Negative electrode porosity,0.3,Peyman MPM, +Negative electrode active material volume fraction,0.61,Peyman MPM,rest is binder +Negative particle radius [m],10E-06,Peyman MPM, +Negative electrode Bruggeman coefficient (electrode),1.5,Peyman MPM, +Negative electrode Bruggeman coefficient (electrolyte),1.5,Peyman MPM, +Negative electrode transport efficiency, 0.16, +,,, +# Interfacial reactions,,, +Negative electrode cation signed stoichiometry,-1,,no info from Peyman MPM +Negative electrode electrons in reaction,1,,no info from Peyman MPM +Negative electrode reference exchange-current density [A.m-2(m3.mol)1.5],4.244E-6,Peyman MPM,convert unit +Negative electrode charge transfer coefficient,0.5,Peyman MPM, +Negative electrode double-layer capacity [F.m-2],0.2,,no info from Peyman MPM +Negative electrode exchange-current density [A.m-2],[function]graphite_electrolyte_exchange_current_density_AndrewMPM,, +,,, +# Density,,, +Negative electrode density [kg.m-3],3100,Peyman MPM, cell lumped value +,,, +# Thermal parameters,,, +Negative electrode specific heat capacity [J.kg-1.K-1],1100,Peyman MPM,cell lumped value +Negative electrode thermal conductivity [W.m-1.K-1],1.7,,no info from Peyman MPM +Negative electrode OCP entropic change [V.K-1],[function]graphite_entropic_change_AndrewMPM,, diff --git a/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Mohtat2020/graphite_electrolyte_exchange_current_density_PeymanMPM.py b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Mohtat2020/graphite_electrolyte_exchange_current_density_PeymanMPM.py index 3691aa0ac5..3a0e271b21 100644 --- a/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Mohtat2020/graphite_electrolyte_exchange_current_density_PeymanMPM.py +++ b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Mohtat2020/graphite_electrolyte_exchange_current_density_PeymanMPM.py @@ -1,7 +1,7 @@ from pybamm import exp, constants, Parameter -def graphite_electrolyte_exchange_current_density_PeymanMPM(c_e, c_s_surf, c_s_max, T): +def graphite_electrolyte_exchange_current_density_PeymanMPM(c_e, c_s_surf, c_s_max, T, nNick): """ Exchange-current density for Butler-Volmer reactions between graphite and LiPF6 in EC:DMC. diff --git a/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Siegel2022/graphite_electrolyte_exchange_current_density_Siegel.py b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Siegel2022/graphite_electrolyte_exchange_current_density_Siegel.py index d563b80597..fc625d0d95 100644 --- a/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Siegel2022/graphite_electrolyte_exchange_current_density_Siegel.py +++ b/pybamm/input/parameters/lithium_ion/negative_electrodes/graphite_UMBL_Siegel2022/graphite_electrolyte_exchange_current_density_Siegel.py @@ -1,7 +1,7 @@ from pybamm import exp, constants -def graphite_electrolyte_exchange_current_density_Siegel(c_e, c_s_surf, c_s_max, T): +def graphite_electrolyte_exchange_current_density_Siegel(c_e, c_s_surf, c_s_max, T, N_nick): """ Exchange-current density for Butler-Volmer reactions between graphite and LiPF6 in EC:DMC. diff --git a/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_diffusivity_AndrewMPM.py b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_diffusivity_AndrewMPM.py new file mode 100644 index 0000000000..78b2c3956e --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_diffusivity_AndrewMPM.py @@ -0,0 +1,32 @@ +from pybamm import exp, constants, Parameter + + +def NMC_diffusivity_AndrewMPM(sto, T): + """ + NMC 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 = Parameter("Positive electrode diffusion coefficient [m2.s-1]") + # D_ref = 8 * 10 ** (-15) +# E_D_s = 18550 + E_D_s = 0 + arrhenius = exp(E_D_s / constants.R * (1 / 298.15 - 1 / T)) +# arrhenius = exp(E_D_s / constants.R * (1 / 318.15 - 1 / T)) + + return D_ref * arrhenius diff --git a/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_electrolyte_exchange_current_density_AndrewMPM.py b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_electrolyte_exchange_current_density_AndrewMPM.py new file mode 100644 index 0000000000..0cbe211278 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_electrolyte_exchange_current_density_AndrewMPM.py @@ -0,0 +1,38 @@ +from pybamm import exp, constants, Parameter + + +def NMC_electrolyte_exchange_current_density_AndrewMPM(c_e, c_s_surf, c_s_max, T, N_nick): + """ + 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] + c_s_max : :class:`pybamm.Symbol` + Maximum particle concentration [mol.m-3] + T : :class:`pybamm.Symbol` + Temperature [K] + + Returns + ------- + :class:`pybamm.Symbol` + Exchange-current density [A.m-2] + """ + m_ref = Parameter("Positive electrode reference exchange-current density [A.m-2(m3.mol)1.5]") + m_ref = 4.824 * 10 ** (-6) # (A/m2)(mol/m3)**1.5 - includes ref concentrations +# E_r = 39570 + E_r = 0 + arrhenius = exp(E_r / constants.R * (1 / 298.15 - 1 / T)) +# arrhenius = exp(E_r / constants.R * (1 / 318.15 - 1 / T)) + + return ( + m_ref * arrhenius * c_e**0.5 * c_s_surf**0.5 * (c_s_max - c_s_surf) ** 0.5 + ) diff --git a/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_entropic_change_AndrewMPM.py b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_entropic_change_AndrewMPM.py new file mode 100644 index 0000000000..fc4bbe7cce --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_entropic_change_AndrewMPM.py @@ -0,0 +1,39 @@ +import pybamm + + +def NMC_entropic_change_AndrewMPM(sto, c_s_max): + """ + 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 diff --git a/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_ocp_AndrewMPM.py b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_ocp_AndrewMPM.py new file mode 100644 index 0000000000..562c55c3e4 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/NMC_ocp_AndrewMPM.py @@ -0,0 +1,61 @@ +import pybamm + + +def NMC_ocp_AndrewMPM(x): + """ + Nickel Managanese Cobalt Oxide (NMC) Open Circuit Potential (OCP) as a + function of the stochiometry. The fit is taken from Peyman MPM. + + References + ---------- + Peyman MPM manuscript (to be submitted) + + Parameters + ---------- + sto : :class:`pybamm.Symbol` + Stochiometry of material (li-fraction) + + """ +# Peyman + +# u_eq = ( +# 4.3452 +# - 1.6518 * sto +# + 1.6225 * (sto ** 2) +# - 2.0843 * (sto ** 3) +# + 3.5146 * (sto ** 4) +# - 2.2166 * (sto ** 5) +# - 0.5623 * pybamm.exp(109.451 * sto - 100.006) +# ) + +# Andrew_not shifted +# u_eq = ( +# 2.992 +# - 2.098 * sto +# - 0.6943 * (sto ** 2) +# + 4.341 * (sto ** 3) +# - 3.883 * (sto ** 4) +# + 0.611 * (sto ** 5) +# + 0.8258 * pybamm.exp(0.4484 * sto + 0.4757) +# ) + +# GM July 2022 + p1 = -199.3069 + p2 = 762.6359 + p3 = -1.1957e+03 + p4 = 1.0031e+03 + p5 = -500.7007 + p6 = 158.2556 + p7 = -32.0707 + p8 = 4.6323 + p9 = -1.6569 + p10 = 4.2932 + + u_eq = p1*x**9 + p2*x**8 + p3*x**7 + p4*x**6 + p5*x**5 + p6*x**4 + p7*x**3 + p8*x**2 + p9*x + p10; + + return u_eq + + +# if __name__ == "__main__": # pragma: no cover +# x = pybamm.linspace(0, 1) +# pybamm.plot(x, NMC_ocp_PeymanMPM(x)) diff --git a/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/__init__.py b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/parameters.csv b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/parameters.csv new file mode 100644 index 0000000000..2db5172c99 --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Andrew2022/parameters.csv @@ -0,0 +1,33 @@ +Name [units],Value,Reference,Notes +# Empty rows and rows starting with ‘#’ will be ignored,,, +,,, +# Electrode properties,,, +Positive electrode conductivity [S.m-1],100,Scott Moura FastDFN,no info from Peyman MPM +Maximum concentration in positive electrode [mol.m-3],35380,Peyman MPM, nickel manganese cobalt oxide +Positive electrode diffusion coefficient [m2.s-1],8.0E-15,Peyman MPM, +Positive electrode diffusivity [m2.s-1],[function]NMC_diffusivity_AndrewMPM,, +Positive electrode OCP [V],[function]NMC_ocp_AndrewMPM,, +,,, +# Microstructure,,, +Positive electrode porosity,0.3,Peyman MPM, +Positive electrode active material volume fraction,0.445,Peyman MPM,rest is binder +Positive particle radius [m],3.5E-06,Peyman MPM, +Positive electrode Bruggeman coefficient (electrode),1.5,Peyman MPM, +Positive electrode Bruggeman coefficient (electrolyte),1.5,Peyman MPM, +Positive electrode transport efficiency,0.16, +,,, +# Interfacial reactions,,, +Positive electrode cation signed stoichiometry,-1,,no info from Peyman MPM +Positive electrode electrons in reaction,1,,no info from Peyman MPM +Positive electrode reference exchange-current density [A.m-2(m3.mol)1.5],4.824E-06,Peyman MPM,converted unit +Positive electrode charge transfer coefficient,0.5,Peyman MPM, +Positive electrode double-layer capacity [F.m-2],0.2,,no info from Peyman MPM +Positive electrode exchange-current density [A.m-2],[function]NMC_electrolyte_exchange_current_density_AndrewMPM,, +,,, +# Density,,, +Positive electrode density [kg.m-3],3100,Peyman MPM, cell lumped value +,,, +# Thermal parameters,,, +Positive electrode specific heat capacity [J.kg-1.K-1],1100,Peyman MPM, cell lumped value +Positive electrode thermal conductivity [W.m-1.K-1],2.1,,no info from Peyman MPM +Positive electrode OCP entropic change [V.K-1],[function]NMC_entropic_change_AndrewMPM, diff --git a/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Mohtat2020/NMC_electrolyte_exchange_current_density_PeymanMPM.py b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Mohtat2020/NMC_electrolyte_exchange_current_density_PeymanMPM.py index b145029514..5670180a20 100644 --- a/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Mohtat2020/NMC_electrolyte_exchange_current_density_PeymanMPM.py +++ b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Mohtat2020/NMC_electrolyte_exchange_current_density_PeymanMPM.py @@ -1,7 +1,7 @@ from pybamm import exp, constants, Parameter -def NMC_electrolyte_exchange_current_density_PeymanMPM(c_e, c_s_surf, c_s_max, T): +def NMC_electrolyte_exchange_current_density_PeymanMPM(c_e, c_s_surf, c_s_max, T, N_nick): """ Exchange-current density for Butler-Volmer reactions between NMC and LiPF6 in EC:DMC. diff --git a/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Siegel2022/NMC_electrolyte_exchange_current_density_Siegel.py b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Siegel2022/NMC_electrolyte_exchange_current_density_Siegel.py index 3f8862c545..555fce829e 100644 --- a/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Siegel2022/NMC_electrolyte_exchange_current_density_Siegel.py +++ b/pybamm/input/parameters/lithium_ion/positive_electrodes/NMC_UMBL_Siegel2022/NMC_electrolyte_exchange_current_density_Siegel.py @@ -1,7 +1,7 @@ from pybamm import exp, constants -def NMC_electrolyte_exchange_current_density_Siegel(c_e, c_s_surf, c_s_max, T): +def NMC_electrolyte_exchange_current_density_Siegel(c_e, c_s_surf, c_s_max, T, N_nick): """ Exchange-current density for Butler-Volmer reactions between NMC and LiPF6 in EC:DMC. diff --git a/pybamm/input/parameters/lithium_ion/separators/separator_Andrew2022/parameters.csv b/pybamm/input/parameters/lithium_ion/separators/separator_Andrew2022/parameters.csv new file mode 100644 index 0000000000..4cd11126ba --- /dev/null +++ b/pybamm/input/parameters/lithium_ion/separators/separator_Andrew2022/parameters.csv @@ -0,0 +1,9 @@ +Name [units],Value,Reference,Notes +# Empty rows and rows starting with ‘#’ will be ignored,,, +,,, +Separator porosity,0.48,Siegel2022, +Separator Bruggeman coefficient (electrolyte),1.5,Peyman MPM, +Separator density [kg.m-3],516.67,,6.2g/m2 +Separator specific heat capacity [J.kg-1.K-1],700,,no info from Peyman MPM +Separator thermal conductivity [W.m-1.K-1],0.16,,no info from Peyman MPM +Separator transport efficiency , 0.25, diff --git a/pybamm/models/submodels/active_material/base_active_material.py b/pybamm/models/submodels/active_material/base_active_material.py index dd4a1ecbaa..e148b9f5ba 100644 --- a/pybamm/models/submodels/active_material/base_active_material.py +++ b/pybamm/models/submodels/active_material/base_active_material.py @@ -24,7 +24,7 @@ class BaseModel(pybamm.BaseSubModel): def __init__(self, param, domain, options, phase="primary"): super().__init__(param, domain, options=options, phase=phase) - def _get_standard_active_material_variables(self, eps_solid): + def _get_standard_active_material_variables(self, eps_solid, n_nickel_diss): param = self.param phase_name = self.phase_name Domain = self.domain @@ -32,15 +32,25 @@ def _get_standard_active_material_variables(self, eps_solid): if eps_solid.domain == []: eps_solid = pybamm.PrimaryBroadcast(eps_solid, "current collector") + n_nickel_diss = pybamm.PrimaryBroadcast(n_nickel_diss, "current collector") if eps_solid.domain == ["current collector"]: eps_solid = pybamm.PrimaryBroadcast(eps_solid, domain + " electrode") + n_nickel_diss = pybamm.PrimaryBroadcast(n_nickel_diss, domain + " electrode") + eps_solid_av = pybamm.x_average(eps_solid) + n_nickel_diss_av = pybamm.x_average(n_nickel_diss) + variables = { f"{Domain} electrode {phase_name}" "active material volume fraction": eps_solid, f"X-averaged {domain} electrode {phase_name}" "active material volume fraction": eps_solid_av, + + f"{Domain} electrode {phase_name}" + "loss nickel dissolution": n_nickel_diss, + f"X-averaged {domain} electrode {phase_name}" + "loss nickel dissolution": n_nickel_diss_av, } # Update other microstructure variables @@ -127,20 +137,31 @@ def _get_standard_active_material_variables(self, eps_solid): return variables - def _get_standard_active_material_change_variables(self, deps_solid_dt): + def _get_standard_active_material_change_variables(self, deps_solid_dt,j_diss): if deps_solid_dt.domain == ["current collector"]: deps_solid_dt_av = deps_solid_dt deps_solid_dt = pybamm.PrimaryBroadcast( deps_solid_dt_av, self.domain.lower() + " electrode" ) + j_diss_av = j_diss + j_diss = pybamm.PrimaryBroadcast( + j_diss_av, self.domain.lower() + " electrode" + ) else: deps_solid_dt_av = pybamm.x_average(deps_solid_dt) + j_diss_av = pybamm.x_average(j_diss) variables = { f"{self.domain} electrode {self.phase_name}" "active material volume fraction change": deps_solid_dt, f"X-averaged {self.domain.lower()} electrode {self.phase_name}" "active material volume fraction change": deps_solid_dt_av, + + f"{self.domain} electrode {self.phase_name}" + "dissolution exchange current": j_diss, + f"X-averaged {self.domain.lower()} electrode {self.phase_name}" + "dissolution exchange current": j_diss_av, + } return variables diff --git a/pybamm/models/submodels/active_material/loss_active_material.py b/pybamm/models/submodels/active_material/loss_active_material.py index 68de0205a5..d94803eef5 100644 --- a/pybamm/models/submodels/active_material/loss_active_material.py +++ b/pybamm/models/submodels/active_material/loss_active_material.py @@ -40,6 +40,12 @@ def __init__(self, param, domain, options, x_average): def get_fundamental_variables(self): domain = self.domain.lower() + " electrode" if self.x_average is True: + n_nickel_diss_xav = pybamm.Variable( + "X-averaged " + domain + " loss nickel dissolution", + domain="current collector", + ) + n_nickel_diss = pybamm.PrimaryBroadcast(n_nickel_diss_xav, domain) + eps_solid_xav = pybamm.Variable( "X-averaged " + domain + " active material volume fraction", domain="current collector", @@ -51,7 +57,7 @@ def get_fundamental_variables(self): domain=domain, auxiliary_domains={"secondary": "current collector"}, ) - variables = self._get_standard_active_material_variables(eps_solid) + variables = self._get_standard_active_material_variables(eps_solid, n_nickel_diss) return variables def get_coupled_variables(self, variables): @@ -114,7 +120,40 @@ def get_coupled_variables(self, variables): # -beta_LAM*(abs(stress_h_surf1) / stress_critical) ** m_LAM # ) deps_solid_dt += j_stress_LAM + + + +## ## ##### # Added for dissolution-begin + + if self.domain == "Positive": + T_p=variables["Positive electrode temperature"] + prefactor_p = 1 / (1 + self.param.Theta * T_p) + delta_phi_p=variables["Positive electrode surface potential difference [V]"] + eta_diss=delta_phi_p - 4.0 #assuming E_qdiss=4 + csmax_pos=self.domain_param.prim.c_max + thickness_p=self.domain_param.L + Time_scale=self.param.timescale + i0_diss=self.domain_param.i0_dissolution + c_ss_p = variables["Positive particle surface concentration"] + c_save_p = variables["R-averaged positive particle concentration"] + + +# print(thickness_p) + if self.x_average is True: + j_diss= i0_diss*pybamm.exp(prefactor_p * eta_diss)/ csmax_pos / thickness_p /self.param.F +# j_diss_numerator= i0_diss* (c_ss_p-c_save_p) * pybamm.exp(prefactor_p * eta_diss) + deps_diss_dt = j_diss +# deps_diss_dt=-j_diss/ csmax_pos / thickness_p /self.param.F ################### change + + deps_solid_dt +=-deps_diss_dt + else: + j_diss = 0 * j_stress_LAM + +# deps_solid_dt +=-.0045* (delta_phi_p) # Just an output shoing LAM postive *1 + +## ## ### ## Added for dissolution-end + if "reaction" in lam_option: if self.x_average is True: a = variables[ @@ -139,7 +178,7 @@ def get_coupled_variables(self, variables): j_stress_reaction = beta_LAM_sei * a * j_sei deps_solid_dt += j_stress_reaction variables.update( - self._get_standard_active_material_change_variables(deps_solid_dt) + self._get_standard_active_material_change_variables(deps_solid_dt, j_diss) ) return variables @@ -154,17 +193,29 @@ def set_rhs(self, variables): + Domain.lower() + " active material volume fraction change" ] + n_nickel_diss = variables[ + "X-averaged " + Domain.lower() + " loss nickel dissolution" + ] + j_diss = variables[ + "X-averaged " + Domain.lower() + " dissolution exchange current" + ] + else: eps_solid = variables[Domain + " active material volume fraction"] deps_solid_dt = variables[ Domain + " active material volume fraction change" ] + n_nickel_diss = variables[Domain + " loss nickel dissolution"] + j_diss = variables[ + Domain + " dissolution exchange current" + ] - self.rhs = {eps_solid: deps_solid_dt} + self.rhs = {eps_solid: deps_solid_dt, n_nickel_diss:j_diss} def set_initial_conditions(self, variables): eps_solid_init = self.domain_param.prim.epsilon_s + loss_nick = 0 * self.domain_param.prim.epsilon_s if self.x_average is True: eps_solid_xav = variables[ @@ -172,9 +223,20 @@ def set_initial_conditions(self, variables): + self.domain.lower() + " electrode active material volume fraction" ] - self.initial_conditions = {eps_solid_xav: pybamm.x_average(eps_solid_init)} + + n_nickel_diss_xav = variables[ + "X-averaged " + self.domain.lower() + " electrode loss nickel dissolution"#Added Hamid diss + ] + + self.initial_conditions = {eps_solid_xav: pybamm.x_average(eps_solid_init), n_nickel_diss_xav: pybamm.x_average(loss_nick)}# added Hamid diss + + + else: eps_solid = variables[ self.domain + " electrode active material volume fraction" ] - self.initial_conditions = {eps_solid: eps_solid_init} + eps_solid = variables[ + self.domain + " electrode loss nickel dissolution" + ] + self.initial_conditions = {eps_solid: eps_solid_init, n_nickel_diss: loss_nick} diff --git a/pybamm/models/submodels/interface/base_interface.py b/pybamm/models/submodels/interface/base_interface.py index 2f223eb288..7e73db41e0 100644 --- a/pybamm/models/submodels/interface/base_interface.py +++ b/pybamm/models/submodels/interface/base_interface.py @@ -70,10 +70,14 @@ def _get_exchange_current_density(self, variables): c_e = variables[f"{Domain} electrolyte concentration"] T = variables[f"{Domain} electrode temperature"] + + N_nick= variables["X-averaged positive electrode loss nickel dissolution"] if self.reaction == "lithium-ion main": # For "particle-size distribution" submodels, take distribution version # of c_s_surf that depends on particle size. + + if self.options["particle size"] == "distribution": c_s_surf = variables[ f"{Domain} {phase_name}particle surface concentration distribution" @@ -110,7 +114,7 @@ def _get_exchange_current_density(self, variables): c_e = c_e.orphans[0] T = T.orphans[0] - j0 = phase_param.j0(c_e, c_s_surf, T) + j0 = phase_param.j0(c_e, c_s_surf, T, N_nick) elif self.reaction == "lithium metal plating": j0 = param.j0_plating(c_e, 1, T) diff --git a/pybamm/models/submodels/interface/sei/base_sei.py b/pybamm/models/submodels/interface/sei/base_sei.py index 5f8090e7b7..92061c929b 100644 --- a/pybamm/models/submodels/interface/sei/base_sei.py +++ b/pybamm/models/submodels/interface/sei/base_sei.py @@ -360,6 +360,7 @@ def _get_standard_total_reaction_variables(self, j_sei): variables = { f"{self.reaction_name}interfacial current density": j_sei, f"{self.reaction_name}interfacial current density [A.m-2]": j_sei * j_scale, +# "X-averaged Dissolution interfacial current density":j_diss } if self.reaction_loc != "interface": diff --git a/pybamm/models/submodels/interface/sei/sei_growth.py b/pybamm/models/submodels/interface/sei/sei_growth.py index 81388298d7..784c094d77 100644 --- a/pybamm/models/submodels/interface/sei/sei_growth.py +++ b/pybamm/models/submodels/interface/sei/sei_growth.py @@ -75,7 +75,9 @@ def get_coupled_variables(self, variables): else: delta_phi = variables["Negative electrode surface potential difference"] phi_s_n = variables["Negative electrode potential"] - + #added for dissolution + + # 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 @@ -124,7 +126,11 @@ def get_coupled_variables(self, variables): elif self.options["SEI"] == "ec reaction limited": C_sei_ec = phase_param.C_sei_ec C_ec = phase_param.C_ec - + + k_nick_SEI = phase_param.k_Nickel_SEI + n_nick = variables["X-averaged positive electrode loss nickel dissolution"] + Multiplier_SEI = 1+k_nick_SEI * n_nick + # we have a linear system for j_sei and c_ec # c_ec = 1 + j_sei * L_sei * C_ec # j_sei = - C_sei_ec * c_ec * exp() @@ -134,9 +140,21 @@ def get_coupled_variables(self, variables): # j_sei = -C_sei_ec * exp() / (1 + L_sei * C_ec * C_sei_ec * exp()) # c_ec = 1 / (1 + L_sei * C_ec * C_sei_ec * exp()) C_sei_exp = C_sei_ec * pybamm.exp(-0.5 * prefactor * eta_SEI) - j_sei = -C_sei_exp / (1 + L_sei * C_ec * C_sei_exp) + j_sei = -C_sei_exp / (1 + L_sei * C_ec * C_sei_exp) * Multiplier_SEI c_ec = 1 / (1 + L_sei * C_ec * C_sei_exp) - + + ## Added dissolution-begin + ## cathod dissolution added-begin +# T_p=variables["Positive electrode temperature"] +# prefactor_p = 1 / (1 + self.param.Theta * T_p) +# delta_phi_p=variables["Positive electrode surface potential difference"] +# eta_diss=delta_phi_p - 4.0 #assuming E_qdiss=4 +# j_diss= 6e-05 * pybamm.exp(prefactor_p * eta_diss) + + ## Added-dissolution-end + + + # Get variables related to the concentration c_ec_av = pybamm.x_average(c_ec) c_ec_scale = phase_param.c_ec_0_dim diff --git a/pybamm/parameters/lithium_ion_parameters.py b/pybamm/parameters/lithium_ion_parameters.py index 2e8ded938c..29eeb24357 100644 --- a/pybamm/parameters/lithium_ion_parameters.py +++ b/pybamm/parameters/lithium_ion_parameters.py @@ -521,7 +521,21 @@ def _set_dimensional_parameters(self): self.beta_LAM_sei_dimensional = pybamm.Parameter( f"{Domain} electrode reaction-driven LAM factor [m3.mol-1]" ) - + # Dissolution parameters + self.i0_dissolution_dimensional = pybamm.Parameter(## added 3/15/2023 + f"{Domain} electrode dissolution exchange current density" + ) + + self.k_Nickel_SEI = pybamm.Parameter(## added 5/5/2023 + f"{Domain} electrode dissolution nickel SEI coefficient" + ) + + self.k_Nickel_intercalation = pybamm.Parameter(## added 5/5/2023 + f"{Domain} electrode dissolution nickel intercalation coefficient" + ) + + + # utilisation parameters self.u_init = pybamm.Parameter( f"Initial {domain} electrode interface utilisation" @@ -597,6 +611,7 @@ def _set_dimensionless_parameters(self): self.c_0 = self.c_0_dim / self.prim.c_max self.beta_LAM = self.beta_LAM_dimensional * main.timescale self.beta_LAM2 = self.beta_LAM_dimensional2 * main.timescale + self.i0_dissolution = self.i0_dissolution_dimensional * main.timescale ## added 3/15/2023 # normalised typical time for one cycle self.stress_critical = self.stress_critical_dim / self.E self.stress_LAM_min = self.stress_LAM_min_dim / self.E @@ -809,7 +824,7 @@ def D_dimensional(self, sto, T): inputs, ) - def j0_dimensional(self, c_e, c_s_surf, T): + def j0_dimensional(self, c_e, c_s_surf, T, N_nick): """Dimensional exchange-current density [A.m-2]""" inputs = { "Electrolyte concentration [mol.m-3]": c_e, @@ -819,6 +834,8 @@ def j0_dimensional(self, c_e, c_s_surf, T): "Temperature [K]": T, f"{self.phase_prefactor}Maximum {self.domain.lower()} particle " "surface concentration [mol.m-3]": self.c_max, + f"{self.domain} dissolution nickel intercalation coefficient": N_nick, + } return pybamm.FunctionParameter( f"{self.phase_prefactor}{self.domain} electrode " @@ -889,7 +906,7 @@ def _set_scales(self): # Reference exchange-current density self.j0_ref_dimensional = ( - self.j0_dimensional(main.c_e_typ, self.c_max / 2, main.T_ref) * 2 + self.j0_dimensional(main.c_e_typ, self.c_max / 2, main.T_ref, 0) * 2 ) # Reaction timescales @@ -1026,6 +1043,8 @@ def _set_dimensionless_parameters(self): ) ) self.c_sei_init = self.c_ec_0_dim / self.c_sei_outer_scale + self.k_Nickel_SEI = domain_param.k_Nickel_SEI #test + def D(self, c_s, T): """Dimensionless particle diffusivity""" @@ -1033,7 +1052,7 @@ def D(self, c_s, T): T_dim = self.main_param.Delta_T * T + self.main_param.T_ref return self.D_dimensional(sto, T_dim) / self.D_typ_dim - def j0(self, c_e, c_s_surf, T): + def j0(self, c_e, c_s_surf, T, N_nick): """Dimensionless exchange-current density""" tol = pybamm.settings.tolerances["j0__c_e"] c_e = pybamm.maximum(c_e, tol) @@ -1043,7 +1062,7 @@ def j0(self, c_e, c_s_surf, T): c_s_surf_dim = c_s_surf * self.c_max T_dim = self.main_param.Delta_T * T + self.main_param.T_ref - return self.j0_dimensional(c_e_dim, c_s_surf_dim, T_dim) / self.j_scale + return self.j0_dimensional(c_e_dim, c_s_surf_dim, T_dim,N_nick) / self.j_scale def U(self, c_s, T, lithiation=None): """Dimensionless open-circuit potential in the electrode""" diff --git a/pybamm/parameters/parameter_sets.py b/pybamm/parameters/parameter_sets.py index 6cec6e5432..5674dd6fd7 100644 --- a/pybamm/parameters/parameter_sets.py +++ b/pybamm/parameters/parameter_sets.py @@ -210,6 +210,20 @@ # "citation": "Siegel2022", } +Andrew2022 = { + "chemistry": "lithium_ion", + "cell": "UMBL_Andrew2022", + "negative electrode": "graphite_UMBL_Andrew2022", + "separator": "separator_Andrew2022", + "positive electrode": "NMC_UMBL_Andrew2022", + "electrolyte": "LiPF6_Andrew2022", + "experiment": "1C_charge_from_empty_Mohtat2020", + "sei": "example", + "lithium plating": "mohtat2020_Li_plating", + # "citation": "Siegel2022", +} + + Ramadass2004 = { "chemistry": "lithium_ion", "cell": "sony_Ramadass2004",