Skip to content

Commit

Permalink
Merge pull request #2104 from DrSOKane/SEIoncracks
Browse files Browse the repository at this point in the history
SEI on cracks
  • Loading branch information
valentinsulzer authored Jul 27, 2022
2 parents 468b39f + 5276a9b commit 58194b0
Show file tree
Hide file tree
Showing 52 changed files with 1,458 additions and 255 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@

- Moved general code about submodels to `BaseModel` instead of `BaseBatteryModel`, making it easier to build custom models from submodels. ([#2169](https://github.com/pybamm-team/PyBaMM/pull/2169))
- Events can now be plotted as a regular variable (under the name "Event: event_name", e.g. "Event: Minimum voltage [V]") ([#2158](https://github.com/pybamm-team/PyBaMM/pull/2158))
- Added SEI growth on cracks ([#2104](https://github.com/pybamm-team/PyBaMM/pull/2104))
- Added Arrhenius temperature dependence of SEI growth ([#2104](https://github.com/pybamm-team/PyBaMM/pull/2104))
- The "Inner SEI reaction proportion" parameter actually gets used now ([#2104](https://github.com/pybamm-team/PyBaMM/pull/2104))
- New OKane2022 parameter set replaces Chen2020_plating ([#2104](https://github.com/pybamm-team/PyBaMM/pull/2104))
- SEI growth, lithium plating and porosity change can now be set to distributed in `SPMe`. There is an additional option called `x-average side reactions` which allows to set this (note that for `SPM` it is always x-averaged). ([#2099](https://github.com/pybamm-team/PyBaMM/pull/2099))

## Optimizations
Expand All @@ -26,6 +30,7 @@
## Breaking changes

- Exchange-current density functions (and some other functions) now take an additional argument, the maximum particle concentration for that phase ([#2134](https://github.com/pybamm-team/PyBaMM/pull/2134))
- Loss of lithium to SEI on cracks is now a degradation variable, so setting a particle mechanics submodel is now compulsory (NoMechanics will suffice)

# [v22.6](https://github.com/pybamm-team/PyBaMM/tree/v22.6) - 2022-06-30

Expand Down
219 changes: 219 additions & 0 deletions examples/notebooks/models/SEI-on-cracks.ipynb

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion examples/notebooks/models/compare-ecker-data.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.0"
"version": "3.8.10"
},
"toc": {
"base_numbering": 1,
Expand Down
92 changes: 46 additions & 46 deletions examples/notebooks/models/lithium-plating.ipynb

Large diffs are not rendered by default.

13 changes: 10 additions & 3 deletions examples/notebooks/models/using-submodels.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"We don't want any SEI formation or lithium plating in this model"
"We don't want any particle mechanics, SEI formation or lithium plating in this model"
]
},
{
Expand All @@ -478,7 +478,14 @@
"metadata": {},
"outputs": [],
"source": [
"model.submodels[\n",
" \"Negative particle mechanics\"\n",
"] = pybamm.particle_mechanics.NoMechanics(model.param, \"Negative\")\n",
"model.submodels[\n",
" \"Positive particle mechanics\"\n",
"] = pybamm.particle_mechanics.NoMechanics(model.param, \"Positive\")\n",
"model.submodels[\"sei\"] = pybamm.sei.NoSEI(model.param)\n",
"model.submodels[\"sei on cracks\"] = pybamm.sei.NoSEI(model.param, cracks=True)\n",
"model.submodels[\"lithium plating\"] = pybamm.lithium_plating.NoPlating(model.param)"
]
},
Expand Down Expand Up @@ -603,7 +610,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.8.12 ('conda_jl')",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
Expand All @@ -617,7 +624,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.12"
"version": "3.8.10"
},
"toc": {
"base_numbering": 1,
Expand Down
7 changes: 7 additions & 0 deletions examples/scripts/custom_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,14 @@
] = pybamm.electrolyte_conductivity.surface_potential_form.Explicit(
model.param, "Positive"
)
model.submodels[
"Negative particle mechanics"
] = pybamm.particle_mechanics.NoMechanics(model.param, "Negative")
model.submodels[
"Positive particle mechanics"
] = pybamm.particle_mechanics.NoMechanics(model.param, "Positive")
model.submodels["sei"] = pybamm.sei.NoSEI(model.param)
model.submodels["sei on cracks"] = pybamm.sei.NoSEI(model.param, cracks=True)
model.submodels["lithium plating"] = pybamm.lithium_plating.NoPlating(model.param)

# build model
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Electrode height [m],6.5E-2,Chen 2020,
Electrode width [m],1.58,Chen 2020,accounts for both sides of unwound electrode (double-sided coating)
Cell cooling surface area [m2],5.31E-3,Chen 2020,cylindrical
Cell volume [m3],2.42E-5,Chen 2020,cylindrical
Cell thermal expansion coefficient [m.K-1],1.1E-6,Ai2020,
,,,
# Current collector properties ,,,
Negative current collector conductivity [S.m-1],58411000,CRC Handbook,copper
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# LG M50 Graphite anode parameters

Parameters for a LG M50 graphite anode, 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.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from pybamm import constants, exp


def graphite_cracking_rate_Ai2020(T_dim):
"""
Graphite particle cracking rate as a function of temperature [1, 2].
References
----------
.. [1] Ai, W., Kraft, L., Sturm, J., Jossen, A., & Wu, B. (2020).
Electrochemical Thermal-Mechanical Modelling of Stress Inhomogeneity in
Lithium-Ion Pouch Cells. Journal of The Electrochemical Society, 167(1), 013512
DOI: 10.1149/2.0122001JES.
.. [2] Deshpande, R., Verbrugge, M., Cheng, Y. T., Wang, J., & Liu, P. (2012).
Battery cycle life prediction with coupled chemical degradation and fatigue
mechanics. Journal of the Electrochemical Society, 159(10), A1730.
Parameters
----------
T_dim: :class:`pybamm.Symbol`
temperature, [K]
Returns
-------
k_cr: :class:`pybamm.Symbol`
cracking rate, [m/(Pa.m0.5)^m_cr]
where m_cr is another Paris' law constant
"""
k_cr = 3.9e-20
Eac_cr = 0 # to be implemented
arrhenius = exp(Eac_cr / constants.R * (1 / T_dim - 1 / 298.15))
return k_cr * arrhenius
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
def graphite_volume_change_Ai2020(sto, c_s_max):
"""
Graphite particle volume change as a function of stochiometry [1, 2].
References
----------
.. [1] Ai, W., Kraft, L., Sturm, J., Jossen, A., & Wu, B. (2020).
Electrochemical Thermal-Mechanical Modelling of Stress Inhomogeneity in
Lithium-Ion Pouch Cells. Journal of The Electrochemical Society, 167(1), 013512
DOI: 10.1149/2.0122001JES.
.. [2] Rieger, B., Erhard, S. V., Rumpf, K., & Jossen, A. (2016).
A new method to model the thickness change of a commercial pouch cell
during discharge. Journal of The Electrochemical Society, 163(8), A1566-A1575.
Parameters
----------
sto: :class:`pybamm.Symbol`
Electrode stochiometry, dimensionless
should be R-averaged particle concentration
Returns
-------
t_change:class:`pybamm.Symbol`
volume change, dimensionless, normalised by particle volume
"""
p1 = 145.907
p2 = -681.229
p3 = 1334.442
p4 = -1415.710
p5 = 873.906
p6 = -312.528
p7 = 60.641
p8 = -5.706
p9 = 0.386
p10 = -4.966e-05
t_change = (
p1 * sto ** 9
+ p2 * sto ** 8
+ p3 * sto ** 7
+ p4 * sto ** 6
+ p5 * sto ** 5
+ p6 * sto ** 4
+ p7 * sto ** 3
+ p8 * sto ** 2
+ p9 * sto
+ p10
)
return t_change
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Name [units],Value,Reference,Notes
Negative electrode conductivity [S.m-1],215,Chen 2020,graphite
Maximum concentration in negative electrode [mol.m-3],33133,Chen 2020,tuned for 1C
Negative electrode diffusivity [m2.s-1],[function]graphite_LGM50_diffusivity_Chen2020,Chen 2020,tuned for 1C
Negative electrode OCP [V],[function]graphite_LGM50_ocp_Chen2020,Chen 2020,
Negative electrode OCP [V],[data]graphite_LGM50_ocp_Chen2020,Chen 2020,
,,,
# Microstructure,,,
Negative electrode porosity,0.25,Chen 2020,
Expand All @@ -29,6 +29,23 @@ Negative electrode specific heat capacity [J.kg-1.K-1],700,default,
Negative electrode thermal conductivity [W.m-1.K-1],1.7,default,
Negative electrode OCP entropic change [V.K-1],0,,
,,,
,,,
,,,
# Mechanical properties,,,
Negative electrode Poisson's ratio,0.3,,
Negative electrode Young's modulus [Pa],15e9,,
Negative electrode reference concentration for free of deformation [mol.m-3],0,,
Negative electrode partial molar volume [m3.mol-1],3.1e-6,,
Negative electrode volume change,[function]graphite_volume_change_Ai2020,Ai2020,
,,,
# Crack model,,,
Negative electrode initial crack length [m],20e-9,,
Negative electrode initial crack width [m],15e-9,,
Negative electrode number of cracks per unit area [m-2],3.18e15,,
Negative electrode Paris' law constant b,1.12,,
Negative electrode Paris' law constant m,2.2,,
Negative electrode cracking rate,[function]graphite_cracking_rate_Ai2020,Ai2020,
,,,
# Loss of active materials (LAM) model,,,
Negative electrode LAM constant proportional term [s-1],2.7778E-7,0.001/3600,
Negative electrode LAM constant exponential term,2,,
Negative electrode critical stress [Pa],60e6,,
,,,
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# NMC 811 positive electrode parameters

Parameters for an LG M50 NMC 811 positive electrode, 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.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from pybamm import constants, exp


def cracking_rate_Ai2020(T_dim):
"""
Particle cracking rate as a function of temperature [1, 2].
References
----------
.. [1] > Ai, W., Kraft, L., Sturm, J., Jossen, A., & Wu, B. (2020).
Electrochemical Thermal-Mechanical Modelling of Stress Inhomogeneity in
Lithium-Ion Pouch Cells. Journal of The Electrochemical Society, 167(1), 013512
DOI: 10.1149/2.0122001JES.
.. [2] > Deshpande, R., Verbrugge, M., Cheng, Y. T., Wang, J., & Liu, P. (2012).
Battery cycle life prediction with coupled chemical degradation and fatigue
mechanics. Journal of the Electrochemical Society, 159(10), A1730.
Parameters
----------
T: :class:`pybamm.Symbol`
temperature, [K]
Returns
-------
k_cr: :class:`pybamm.Symbol`
cracking rate, [m/(Pa.m0.5)^m_cr]
where m_cr is another Paris' law constant
"""
k_cr = 3.9e-20
Eac_cr = 0 # to be implemented
arrhenius = exp(Eac_cr / constants.R * (1 / T_dim - 1 / 298.15))
return k_cr * arrhenius
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from pybamm import exp, constants


def nmc_LGM50_diffusivity_Chen2020(sto, T):
"""
NMC diffusivity as a function of stoichiometry, 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 = 4e-15
E_D_s = 25000 # O'Kane et al. (2022), after Cabanero et al. (2018)
arrhenius = exp(E_D_s / constants.R * (1 / 298.15 - 1 / T))

return D_ref * arrhenius
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from pybamm import exp, constants


def nmc_LGM50_electrolyte_exchange_current_density_Chen2020(c_e, c_s_surf, c_s_max, 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))

return (
m_ref * arrhenius * c_e ** 0.5 * c_s_surf ** 0.5 * (c_s_max - c_s_surf) ** 0.5
)
Loading

0 comments on commit 58194b0

Please sign in to comment.