Skip to content

Commit

Permalink
Merge pull request #1446 from pybamm-team/issue-1443-yang-model
Browse files Browse the repository at this point in the history
Issue 1443 yang model
  • Loading branch information
valentinsulzer authored Mar 25, 2021
2 parents e6ffa2d + 0c45082 commit 42486f8
Show file tree
Hide file tree
Showing 24 changed files with 104 additions and 82 deletions.
37 changes: 18 additions & 19 deletions examples/scripts/cycling_ageing_yang.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import pybamm as pb

pb.set_logging_level("INFO")
options = {"SEI": "ec reaction limited", "SEI porosity change": "true"}
param = pb.ParameterValues(chemistry=pb.parameter_sets.Ramadass2004)
model = pb.lithium_ion.DFN(options)
pb.set_logging_level("NOTICE")
model = pb.lithium_ion.Yang2017()

experiment = pb.Experiment(
[
(
"Charge at 1 C until 4.2 V",
"Hold at 4.2 V until C/10",
"Rest for 5 minutes",
"Discharge at 2 C until 2.8 V",
"Discharge at 1 C until 2.8 V",
"Rest for 5 minutes",
)
]
Expand All @@ -28,22 +27,22 @@
"Rest for 30 minutes",
"Discharge at 1 C until 2.8 V",
),
(
"Charge at 1 C until 4.2 V",
"Hold at 4.2 V until C/20",
"Rest for 30 minutes",
"Discharge at 2 C until 2.8 V",
),
(
"Charge at 1 C until 4.2 V",
"Hold at 4.2 V until C/20",
"Rest for 30 minutes",
"Discharge at 3 C until 2.8 V",
),
# (
# "Charge at 1 C until 4.2 V",
# "Hold at 4.2 V until C/20",
# "Rest for 30 minutes",
# "Discharge at 2 C until 2.8 V",
# ),
# (
# "Charge at 1 C until 4.2 V",
# "Hold at 4.2 V until C/20",
# "Rest for 30 minutes",
# "Discharge at 3 C until 2.8 V",
# ),
]
)
sim = pb.Simulation(model, experiment=experiment, parameter_values=param)
sim.solve(solver=pb.CasadiSolver(mode="safe", dt_max=120))
sim = pb.Simulation(model, experiment=experiment)
sim.solve(solver=pb.CasadiSolver(mode="safe"))
sim.plot(
[
"Current [A]",
Expand Down
9 changes: 9 additions & 0 deletions examples/scripts/print_parameters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#
# Example for printing the (dimensional and dimensionless) parameters of a parameter set
#
import pybamm

parameters = pybamm.LithiumIonParameters()
parameter_values = pybamm.ParameterValues(chemistry=pybamm.parameter_sets.Yang2017)
output_file = "lithium_ion_parameters.txt"
parameter_values.print_parameters(parameters, output_file)
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ Name [units],Value,Reference,Notes
,,,
Maximum porosity of separator,0.92,,
Separator Bruggeman coefficient (electrolyte),1.5,,
Separator Bruggeman coefficient (electrode),1.5,,
Separator density [kg.m-3],1680, Bulk density from Gigova 2006,
Separator specific heat capacity [J.kg-1.K-1],700, Electronics Cooling (fiberglass),
Separator thermal conductivity [W.m-1.K-1],0.04, University Physics Sears et al. 1999 (fiberglass),
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ 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],12.4,Yang2017,,,
Typical current [A],12.4,,1C current,,
Current function [A],12.4,default current function,,,
Nominal cell capacity [A.h],2.4,Yang2017,,,
Typical current [A],2.4,,1C current,,
Current function [A],2.4,default current function,,,
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ Name [units],Value,Reference,Notes
,,,
,,,
# Lithium plating parameters,,,
Lithium metal partial molar volume [m3.mol-1],1.30E-05,Yang2017,
Lithium metal partial molar volume [m3.mol-1],1.30E-05,Yang2017,6.94e-3/534
Exchange-current density for plating [A.m-2],0.001,,
Initial plated lithium concentration [mol.m-3],0.00E+00,,
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
# SEI parameters

Some example parameters for SEI growth from the papers:
Some example parameters for SEI growth from the paper:

> Ramadass, P., Haran, B., Gomadam, P. M., White, R., & Popov, B. N. (2004). Development of first principles capacity fade model for Li-ion cells. Journal of the Electrochemical Society, 151(2), A196-A203.
> Ploehn, H. J., Ramadass, P., & White, R. E. (2004). Solvent diffusion model for aging of lithium-ion battery cells. Journal of The Electrochemical Society, 151(3), A456-A462.
> Single, F., Latz, A., & Horstmann, B. (2018). Identifying the mechanism of continued growth of the solid–electrolyte interphase. ChemSusChem, 11(12), 1950-1955.
> Safari, M., Morcrette, M., Teyssot, A., & Delacour, C. (2009). Multimodal Physics-Based Aging Model for Life Prediction of Li-Ion Batteries. Journal of The Electrochemical Society, 156(3),
> Yang, X., Leng, Y., Zhang, G., Ge, S., Wang, C. (2017). Modeling of lithium plating induced aging of lithium-ion batteries: Transition from linear to nonlinear aging. Journal of Power Sources, 360, 28-40.
Note: this parameter set does not claim to be representative of the true parameter values. Instead these are parameter values that were used to fit SEI models to observed experimental data in the referenced papers.
and references therein
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,12 @@ Name [units],Value,Reference,Notes
# Empty rows and rows starting with ‘#’ will be ignored,,,
,,,
# SEI properties,,,
Inner SEI reaction proportion,0.5,,
Inner SEI partial molar volume [m3.mol-1],9.47E-05, Safari paper,
Outer SEI partial molar volume [m3.mol-1],9.47E-05, Safari paper,
SEI reaction exchange current density [A.m-2],1.50E-07, Guess,
SEI resistivity [Ohm.m],5.00E+06, Safari paper,
Outer SEI solvent diffusivity [m2.s-1],2.50E-22, Single paper,
Bulk solvent concentration [mol.m-3],2.64E+03, Ploehn paper,
Ratio of inner and outer SEI exchange current densities,1, Assume same,
Inner SEI open-circuit potential [V],0.1,,
Outer SEI open-circuit potential [V],0.8,,
Inner SEI electron conductivity [S.m-1],8.95E-14, Single paper,
Inner SEI lithium interstitial diffusivity [m2.s-1],1.00E-20, Guess,
Lithium interstitial reference concentration [mol.m-3],15, Single paper,
Initial inner SEI thickness [m],2.50E-09, 2.5E-9 1/2 of initial thickness in Safari paper,
Initial outer SEI thickness [m],2.50E-09, 1/2 of initial thickness in Safari paper,
EC initial concentration in electrolyte [mol.m-3],4.54E+03, Safari paper,
Inner SEI partial molar volume [m3.mol-1],9.586E-05, Safari paper, 0.162/1690
Outer SEI partial molar volume [m3.mol-1],9.586E-05, Safari paper, 0.162/1690
SEI resistivity [Ohm.m],2.00E+06, Safari paper (1/5e-6),
Initial inner SEI thickness [m],0,,
Initial outer SEI thickness [m],5E-09,,
EC initial concentration in electrolyte [mol.m-3],4.541E+03, Safari paper,
EC diffusivity [m2.s-1],2.00E-18, adjusted parameter in Yang paper,
SEI kinetic rate constant [m.s-1],1.00E-12, adjusted parameter in Yang paper,
SEI open-circuit potential [V],0.4, Safari paper,
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ Name [units],Value,Reference,Notes
,,,
Separator porosity,0.5,Ai 2020,
Separator Bruggeman coefficient (electrolyte),1.5,Ai 2020,theoretical
Separator Bruggeman coefficient (electrode),0,default,
Separator density [kg.m-3],2470,default,cell parameter
Separator specific heat capacity [J.kg-1.K-1],1080.2,default,cell parameter
Separator thermal conductivity [W.m-1.K-1],0.334,default,cell parameter
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ Name [units],Value,Reference,Notes
,,,
Separator porosity,0.47,Chen 2020,
Separator Bruggeman coefficient (electrolyte),1.5,Chen 2020,theoretical
Separator Bruggeman coefficient (electrode),1.5,default,
Separator density [kg.m-3],397,default,
Separator specific heat capacity [J.kg-1.K-1],700,default,
Separator thermal conductivity [W.m-1.K-1],0.16,default,
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ Name [units],Value,Reference,Notes
,,,
Separator porosity,0.508,,
Separator Bruggeman coefficient (electrolyte),1.9804586773134942, Solve for permeability factor B=0.304=eps^b,
Separator Bruggeman coefficient (electrode),0,No Bruggeman correction to solid conductivity,
Separator density [kg.m-3],397,default,
Separator specific heat capacity [J.kg-1.K-1],700,default,
Separator thermal conductivity [W.m-1.K-1],0.16,default,
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ Name [units],Value,Reference,Notes
,,,
Separator porosity,0.4,,
Separator Bruggeman coefficient (electrolyte),2,,
Separator Bruggeman coefficient (electrode),2,,
Separator density [kg.m-3],511.86798,397 * 1.28934,
Separator specific heat capacity [J.kg-1.K-1],700,,
Separator thermal conductivity [W.m-1.K-1],0.10672, 0.16 * 0.667,
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ Name [units],Value,Reference,Notes
,,,
Separator porosity,1,,
Separator Bruggeman coefficient (electrolyte),1.5,,
Separator Bruggeman coefficient (electrode),1.5,,
Separator density [kg.m-3],397,,
Separator specific heat capacity [J.kg-1.K-1],700,,
Separator thermal conductivity [W.m-1.K-1],0.16,,
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ Name [units],Value,Reference,Notes
# Empty rows and rows starting with ‘#’ will be ignored,,,
,,,
Separator porosity,0.4,Peyman MPM,
Separator Bruggeman coefficient (electrode),1.5,Peyman MPM,
Separator Bruggeman coefficient (electrolyte),1.5,Peyman MPM,
Separator density [kg.m-3],397,,no info from Peyman MPM
Separator specific heat capacity [J.kg-1.K-1],700,,no info from Peyman MPM
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Separator parameters

Parameters for the separator from the papers

> 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.
> 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.
> Yang, X., Leng, Y., Zhang, G., Ge, S., Wang, C. (2017). Modeling of lithium plating induced aging of lithium-ion batteries: Transition from linear to nonlinear aging. Journal of Power Sources, 360, 28-40.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Name [units],Value,Reference,Notes
# Empty rows and rows starting with ‘#’ will be ignored,,,
,,,
Separator porosity,0.4,,
Separator Bruggeman coefficient (electrolyte),1.5,,
Separator density [kg.m-3],397,default,
Separator specific heat capacity [J.kg-1.K-1],700,default,
Separator thermal conductivity [W.m-1.K-1],0.16,default,
34 changes: 13 additions & 21 deletions pybamm/models/submodels/interface/base_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -480,25 +480,15 @@ def _get_standard_overpotential_variables(self, eta_r):
elif eta_r.domain == ["current collector"]:
eta_r = pybamm.PrimaryBroadcast(eta_r, self.domain_for_broadcast)

domain_reaction = (
self.domain + " electrode" + self.reaction_name + " reaction overpotential"
)

variables = {
self.domain
+ " electrode"
+ self.reaction_name
+ " reaction overpotential": eta_r,
"X-averaged "
+ self.domain.lower()
+ " electrode"
+ self.reaction_name
+ " reaction overpotential": eta_r_av,
self.domain
+ " electrode"
+ self.reaction_name
+ " reaction overpotential [V]": eta_r * pot_scale,
"X-averaged "
+ self.domain.lower()
+ " electrode"
+ self.reaction_name
+ " reaction overpotential [V]": eta_r_av * pot_scale,
domain_reaction: eta_r,
"X-averaged " + domain_reaction.lower(): eta_r_av,
domain_reaction + " [V]": eta_r * pot_scale,
"X-averaged " + domain_reaction.lower() + " [V]": eta_r_av * pot_scale,
}

return variables
Expand All @@ -515,11 +505,13 @@ def _get_standard_sei_film_overpotential_variables(self, eta_sei):
elif eta_sei.domain == ["current collector"]:
eta_sei = pybamm.PrimaryBroadcast(eta_sei, self.domain_for_broadcast)

domain = self.domain.lower() + " electrode"
Domain = self.domain + " electrode"
domain = Domain.lower()

variables = {
self.domain + " electrode SEI film overpotential": eta_sei,
Domain + " SEI film overpotential": eta_sei,
"X-averaged " + domain + " SEI film overpotential": eta_sei_av,
self.domain + " electrode SEI film overpotential [V]": eta_sei * pot_scale,
Domain + " SEI film overpotential [V]": eta_sei * pot_scale,
"X-averaged "
+ domain
+ " SEI film overpotential [V]": eta_sei_av * pot_scale,
Expand Down
4 changes: 2 additions & 2 deletions pybamm/models/submodels/tortuosity/bruggeman_tortuosity.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ def get_coupled_variables(self, variables):
)
elif self.phase == "Electrode":
eps_n = variables["Negative electrode active material volume fraction"]
eps_s = pybamm.FullBroadcast(0, "separator", "current collector")
tor_s = pybamm.FullBroadcast(0, "separator", "current collector")
eps_p = variables["Positive electrode active material volume fraction"]
tor = pybamm.Concatenation(
eps_n ** param.b_s_n, eps_s ** param.b_s_s, eps_p ** param.b_s_p
eps_n ** param.b_s_n, tor_s, eps_p ** param.b_s_p
)

variables.update(
Expand Down
1 change: 0 additions & 1 deletion pybamm/parameters/geometric_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ def _set_dimensional_parameters(self):
self.b_s_n = pybamm.Parameter(
"Negative electrode Bruggeman coefficient (electrode)"
)
self.b_s_s = pybamm.Parameter("Separator Bruggeman coefficient (electrode)")
self.b_s_p = pybamm.Parameter(
"Positive electrode Bruggeman coefficient (electrode)"
)
Expand Down
1 change: 0 additions & 1 deletion pybamm/parameters/lead_acid_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ def _set_dimensional_parameters(self):
self.b_e_s = self.geo.b_e_s
self.b_e_p = self.geo.b_e_p
self.b_s_n = self.geo.b_s_n
self.b_s_s = self.geo.b_s_s
self.b_s_p = self.geo.b_s_p
self.xi_n = pybamm.Parameter("Negative electrode morphological parameter")
self.xi_p = pybamm.Parameter("Positive electrode morphological parameter")
Expand Down
9 changes: 7 additions & 2 deletions pybamm/parameters/lithium_ion_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,6 @@ def _set_dimensional_parameters(self):
self.b_e_s = self.geo.b_e_s
self.b_e_p = self.geo.b_e_p
self.b_s_n = self.geo.b_s_n
self.b_s_s = self.geo.b_s_s
self.b_s_p = self.geo.b_s_p

# Electrochemical reactions
Expand Down Expand Up @@ -209,7 +208,6 @@ def _set_dimensional_parameters(self):
self.U_sei_dim = pybamm.Parameter("SEI open-circuit potential [V]")

# Li plating parameters

self.V_bar_plated_Li = pybamm.Parameter(
"Lithium metal partial molar volume [m3.mol-1]"
)
Expand Down Expand Up @@ -713,6 +711,12 @@ def _set_dimensionless_parameters(self):
)

self.v_bar = self.V_bar_outer_dimensional / self.V_bar_inner_dimensional
self.c_sei_scale = (
self.L_sei_0_dim * self.a_n_typ / self.V_bar_inner_dimensional
)
self.c_sei_outer_scale = (
self.L_sei_0_dim * self.a_n_typ / self.V_bar_outer_dimensional
)

self.L_inner_0 = self.L_inner_0_dim / self.L_sei_0_dim
self.L_outer_0 = self.L_outer_0_dim / self.L_sei_0_dim
Expand Down Expand Up @@ -747,6 +751,7 @@ def _set_dimensionless_parameters(self):
)
)
self.beta_sei_n = self.a_n_typ * self.L_sei_0_dim * self.Gamma_SEI_n
self.c_sei_init = self.c_ec_0_dim / self.c_sei_outer_scale

# lithium plating parameters
self.c_Li_typ = self.c_e_typ
Expand Down
2 changes: 1 addition & 1 deletion pybamm/parameters/parameter_sets.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@
"chemistry": "lithium-ion",
"cell": "Yang2017",
"negative electrode": "graphite_Yang2017",
"separator": "separator_Ecker2015",
"separator": "separator_Yang2017",
"positive electrode": "nmc_Yang2017",
"electrolyte": "lipf6_Ecker2015",
"experiment": "1C_discharge_from_full_Ecker2015",
Expand Down
15 changes: 14 additions & 1 deletion pybamm/parameters/parameter_values.py
Original file line number Diff line number Diff line change
Expand Up @@ -847,6 +847,7 @@ def print_parameters(self, parameters, output_file=None):
"print_function",
"unicode_literals",
"pybamm",
"_options",
"constants",
"np",
"geo",
Expand All @@ -870,17 +871,29 @@ def print_parameters(self, parameters, output_file=None):
{"Current function [A]": Crate * capacity},
check_already_exists=False,
)

# Turn to regular dictionary for faster KeyErrors
self._dict_items = dict(self._dict_items)

for name, symbol in parameters.items():
if not callable(symbol):
proc_symbol = self.process_symbol(symbol)
try:
proc_symbol = self.process_symbol(symbol)
except KeyError:
# skip parameters that don't have a value in that parameter set
proc_symbol = None
if not (
callable(proc_symbol)
or proc_symbol is None
or proc_symbol.has_symbol_of_classes(
(pybamm.Concatenation, pybamm.Broadcast)
)
):
evaluated_parameters[name].append(proc_symbol.evaluate(t=0))

# Turn back to FuzzyDict
self._dict_items = pybamm.FuzzyDict(self._dict_items)

# Calculate C-dependence of the parameters based on the difference between the
# value at 1C and the value at C / 10
for name, values in evaluated_parameters.items():
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/test_parameters/test_lead_acid_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def test_scipy_constants(self):
self.assertAlmostEqual(param.R.evaluate(), 8.314, places=3)
self.assertAlmostEqual(param.F.evaluate(), 96485, places=0)

def test_all_defined(self):
def test_print_parameters(self):
parameters = pybamm.LeadAcidParameters()
parameter_values = pybamm.lead_acid.BaseModel().default_parameter_values
output_file = "lead_acid_parameters.txt"
Expand Down
Loading

0 comments on commit 42486f8

Please sign in to comment.