Skip to content

Commit

Permalink
#836 coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
valentinsulzer committed Jun 24, 2020
1 parent cc041dd commit 9aeae8b
Show file tree
Hide file tree
Showing 11 changed files with 106 additions and 76 deletions.
1 change: 1 addition & 0 deletions examples/scripts/cycling_ageing_yang.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
"Electrolyte concentration [mol.m-3]",
"Total negative electrode sei thickness",
"Negative electrode porosity",
"X-averaged negative electrode porosity",
"Negative electrode sei interfacial current density [A.m-2]",
"X-averaged total negative electrode sei thickness [m]",
]
Expand Down
84 changes: 59 additions & 25 deletions pybamm/models/submodels/interface/sei/base_sei.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,6 @@ def _get_standard_thickness_variables(self, L_inner, L_outer):
L_inner_av = pybamm.x_average(L_inner)
L_outer_av = pybamm.x_average(L_outer)

L_sei = L_inner + L_outer
L_sei_av = pybamm.x_average(L_sei)

n_inner = L_inner # inner SEI concentration
n_outer = L_outer # outer SEI concentration
n_inner_av = pybamm.x_average(L_inner)
Expand All @@ -87,10 +84,6 @@ def _get_standard_thickness_variables(self, L_inner, L_outer):
"Outer " + domain + " sei thickness [m]": L_outer * L_scale,
"X-averaged outer " + domain + " sei thickness": L_outer_av,
"X-averaged outer " + domain + " sei thickness [m]": L_outer_av * L_scale,
"Total " + domain + " sei thickness": L_sei,
"Total " + domain + " sei thickness [m]": L_sei * L_scale,
"X-averaged total " + domain + " sei thickness": L_sei_av,
"X-averaged total " + domain + " sei thickness [m]": L_sei_av * L_scale,
"Inner " + domain + " sei concentration [mol.m-3]": n_inner * n_scale,
"X-averaged inner "
+ domain
Expand All @@ -104,24 +97,49 @@ def _get_standard_thickness_variables(self, L_inner, L_outer):
"Loss of lithium to " + domain + " sei [mol]": Q_sei * n_scale,
}

L_sei = L_inner + L_outer

variables.update(self._get_standard_total_thickness_variables(L_sei))

return variables

def _get_standard_total_thickness_variables(self, L_sei):
"Update variables related to total SEI thickness"
domain = self.domain.lower() + " electrode"
if isinstance(self, pybamm.sei.NoSEI):
L_scale = 1
else:
L_scale = self.param.L_sei_0_dim
R_sei_dim = self.param.R_sei_dimensional
L_sei_av = pybamm.x_average(L_sei)

variables = {
"Total " + domain + " sei thickness": L_sei,
"Total " + domain + " sei thickness [m]": L_sei * L_scale,
"X-averaged total " + domain + " sei thickness": L_sei_av,
"X-averaged total " + domain + " sei thickness [m]": L_sei_av * L_scale,
"X-averaged "
+ self.domain.lower()
+ " electrode resistance [Ohm.m2]": L_sei_av * L_scale * R_sei_dim,
}
return variables

def _get_standard_reaction_variables(self, j_inner, j_outer):
"""
A private function to obtain the standard variables which
can be derived from the SEI interfacial reaction current
Parameters
----------
j_inner : :class:`pybamm.Symbol`
The inner SEI interfacial reaction current.
j_outer : :class:`pybamm.Symbol`
The outer SEI interfacial reaction current.
Returns
-------
variables : dict
The variables which can be derived from the SEI thicknesses.
A private function to obtain the standard variables which
can be derived from the SEI interfacial reaction current
Parameters
----------
j_inner : :class:`pybamm.Symbol`
The inner SEI interfacial reaction current.
j_outer : :class:`pybamm.Symbol`
The outer SEI interfacial reaction current.
Returns
-------
variables : dict
The variables which can be derived from the SEI thicknesses.
"""
if self.domain == "Negative":
j_scale = self.param.j_scale_n
Expand All @@ -130,11 +148,7 @@ def _get_standard_reaction_variables(self, j_inner, j_outer):
j_i_av = pybamm.x_average(j_inner)
j_o_av = pybamm.x_average(j_outer)

j_sei = j_inner + j_outer
j_sei_av = pybamm.x_average(j_sei)

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

variables = {
"Inner " + domain + " sei interfacial current density": j_inner,
Expand All @@ -153,6 +167,26 @@ def _get_standard_reaction_variables(self, j_inner, j_outer):
"X-averaged outer "
+ domain
+ " sei interfacial current density [A.m-2]": j_o_av * j_scale,
}

j_sei = j_inner + j_outer
variables.update(self._get_standard_total_reaction_variables(j_sei))

return variables

def _get_standard_total_reaction_variables(self, j_sei):
"Update variables related to total SEI interfacial current density"
if self.domain == "Negative":
j_scale = self.param.j_scale_n
elif self.domain == "Positive":
j_scale = self.param.j_scale_p

j_sei_av = pybamm.x_average(j_sei)

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

variables = {
Domain + " sei interfacial current density": j_sei,
Domain + " sei interfacial current density [A.m-2]": j_sei * j_scale,
"X-averaged " + domain + " sei interfacial current density": j_sei_av,
Expand Down
61 changes: 16 additions & 45 deletions pybamm/models/submodels/interface/sei/ec_reaction_limited.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,40 +33,9 @@ def get_fundamental_variables(self):
domain=self.domain.lower() + " electrode",
auxiliary_domains={"secondary": "current collector"},
)
L_sei_av = pybamm.x_average(L_sei)
j_sei_av = pybamm.x_average(j_sei)

L_scale = self.param.L_sei_0_dim
# in this model the scale is identical to the intercalation current
j_scale = self.param.j_scale_n
R_sei_dim = self.param.R_sei_dimensional

variables = {
"Total " + self.domain.lower() + " electrode sei thickness": L_sei,
"Total " + self.domain.lower() + " sei thickness [m]": L_sei * L_scale,
"X-averaged total "
+ self.domain.lower()
+ " electrode sei thickness": L_sei_av,
"X-averaged total "
+ self.domain.lower()
+ " electrode sei thickness [m]": L_sei_av * L_scale,
self.domain + " electrode sei interfacial current density": j_sei,
self.domain + " electrode scaled sei interfacial current density": j_sei,
self.domain
+ " electrode sei interfacial current density [A.m-2]": j_sei * j_scale,
"X-averaged "
+ self.domain.lower()
+ " electrode sei interfacial current density": j_sei_av,
"X-averaged "
+ self.domain.lower()
+ " electrode sei interfacial current density [A.m-2]": j_sei_av * j_scale,
"X-averaged "
+ self.domain.lower()
+ " electrode scaled sei interfacial current density": j_sei_av,
"X-averaged "
+ self.domain.lower()
+ " electrode resistance [Ohm.m2]": L_sei_av * L_scale * R_sei_dim,
}

variables = self._get_standard_total_thickness_variables(L_sei)
variables.update(self._get_standard_total_reaction_variables(j_sei))

return variables

Expand All @@ -81,17 +50,19 @@ def get_coupled_variables(self, variables):

c_ec = pybamm.Scalar(1) + j_sei * L_sei * C_ec
c_ec_av = pybamm.x_average(c_ec)
variables = {
self.domain + " electrode EC surface concentration": c_ec,
self.domain
+ " electrode EC surface concentration [mol.m-3]": c_ec * c_scale,
"X-averaged "
+ self.domain.lower()
+ " electrode EC surface concentration": c_ec_av,
"X-averaged "
+ self.domain.lower()
+ " electrode EC surface concentration": c_ec_av * c_scale,
}
variables.update(
{
self.domain + " electrode EC surface concentration": c_ec,
self.domain
+ " electrode EC surface concentration [mol.m-3]": c_ec * c_scale,
"X-averaged "
+ self.domain.lower()
+ " electrode EC surface concentration": c_ec_av,
"X-averaged "
+ self.domain.lower()
+ " electrode EC surface concentration": c_ec_av * c_scale,
}
)
# Update whole cell variables, which also updates the "sum of" variables
if (
"Negative electrode sei interfacial current density" in variables
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ def test_well_posed_interstitial_diffusion_limited(self):
modeltest.test_all()

def test_well_posed_ec_reaction_limited(self):
options = {"sei": "ec reaction limited"}
options = {"sei": "ec reaction limited", "sei porosity change": True}
model = pybamm.lithium_ion.DFN(options)
modeltest = tests.StandardModelTest(model)
modeltest.test_all()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ def test_well_posed_interstitial_diffusion_limited(self):
modeltest.test_all()

def test_well_posed_ec_reaction_limited(self):
options = {"sei": "ec reaction limited"}
options = {"sei": "ec reaction limited", "sei porosity change": True}
model = pybamm.lithium_ion.SPM(options)
modeltest = tests.StandardModelTest(model)
modeltest.test_all()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def test_well_posed_interstitial_diffusion_limited(self):
modeltest.test_all()

def test_well_posed_ec_reaction_limited(self):
options = {"sei": "ec reaction limited"}
options = {"sei": "ec reaction limited", "sei porosity change": True}
model = pybamm.lithium_ion.SPMe(options)
modeltest = tests.StandardModelTest(model)
modeltest.test_all()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ def test_well_posed_interstitial_diffusion_limited(self):
model.check_well_posedness()

def test_well_posed_ec_reaction_limited(self):
options = {"sei": "ec reaction limited"}
options = {"sei": "ec reaction limited", "sei porosity change": True}
model = pybamm.lithium_ion.DFN(options)
model.check_well_posedness()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ def test_well_posed_interstitial_diffusion_limited(self):
model.check_well_posedness()

def test_well_posed_ec_reaction_limited(self):
options = {"sei": "ec reaction limited"}
options = {"sei": "ec reaction limited", "sei porosity change": True}
model = pybamm.lithium_ion.SPM(options)
model.check_well_posedness()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def test_well_posed_interstitial_diffusion_limited(self):
model.check_well_posedness()

def test_well_posed_ec_reaction_limited(self):
options = {"sei": "ec reaction limited"}
options = {"sei": "ec reaction limited", "sei porosity change": True}
model = pybamm.lithium_ion.SPMe(options)
model.check_well_posedness()

Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#
# Test base SEI submodel
#
import pybamm
import unittest


class TestBaseSEI(unittest.TestCase):
def test_not_implemented(self):
with self.assertRaisesRegex(
NotImplementedError,
"SEI models are not implemented for the positive electrode",
):
pybamm.sei.ReactionLimited(None, "Positive")


if __name__ == "__main__":
print("Add -v for more debug output")
import sys

if "-v" in sys.argv:
debug = True
pybamm.settings.debug_mode = True
unittest.main()

0 comments on commit 9aeae8b

Please sign in to comment.