Skip to content

Commit

Permalink
#984 fix models for output tests
Browse files Browse the repository at this point in the history
  • Loading branch information
valentinsulzer committed May 14, 2020
1 parent e574b4f commit aaa61dd
Show file tree
Hide file tree
Showing 10 changed files with 194 additions and 119 deletions.
18 changes: 18 additions & 0 deletions pybamm/models/full_battery_models/base_battery_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -658,6 +658,22 @@ def set_voltage_variables(self):
eta_r_av = eta_r_p_av - eta_r_n_av
eta_r_av_dim = eta_r_p_av_dim - eta_r_n_av_dim

# SEI film overpotential
eta_sei_n_av = self.variables[
"X-averaged negative electrode sei film overpotential"
]
eta_sei_p_av = self.variables[
"X-averaged positive electrode sei film overpotential"
]
eta_sei_n_av_dim = self.variables[
"X-averaged negative electrode sei film overpotential [V]"
]
eta_sei_p_av_dim = self.variables[
"X-averaged positive electrode sei film overpotential [V]"
]
eta_sei_av = eta_sei_n_av + eta_sei_p_av
eta_sei_av_dim = eta_sei_n_av_dim + eta_sei_p_av_dim

# TODO: add current collector losses to the voltage in 3D

self.variables.update(
Expand All @@ -668,6 +684,8 @@ def set_voltage_variables(self):
"Measured open circuit voltage [V]": ocv_dim,
"X-averaged reaction overpotential": eta_r_av,
"X-averaged reaction overpotential [V]": eta_r_av_dim,
"X-averaged sei film overpotential": eta_sei_av,
"X-averaged sei film overpotential [V]": eta_sei_av_dim,
"X-averaged solid phase ohmic losses": delta_phi_s_av,
"X-averaged solid phase ohmic losses [V]": delta_phi_s_av_dim,
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@ def __init__(self, param, domain=None):
super().__init__(param, domain)

def get_coupled_variables(self, variables):
ocp_n_av = variables["X-averaged negative electrode open circuit potential"]
eta_r_n_av = variables["X-averaged negative electrode reaction overpotential"]
# delta_phi = phi_s - phi_e
delta_phi_n_av = variables[
"X-averaged negative electrode surface potential difference"
]
phi_s_n_av = variables["X-averaged negative electrode potential"]
phi_e_av = phi_s_n_av - eta_r_n_av - ocp_n_av
phi_e_av = phi_s_n_av - delta_phi_n_av
return self._get_coupled_variables_from_potential(variables, phi_e_av)

def _get_coupled_variables_from_potential(self, variables, phi_e_av):
Expand Down
24 changes: 24 additions & 0 deletions pybamm/models/submodels/interface/base_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,30 @@ def _get_standard_overpotential_variables(self, eta_r):

return variables

def _get_standard_sei_film_overpotential_variables(self, eta_sei):

pot_scale = self.param.potential_scale
# Average, and broadcast if necessary
eta_sei_av = pybamm.x_average(eta_sei)
if eta_sei.domain == []:
eta_sei = pybamm.FullBroadcast(
eta_sei, self.domain_for_broadcast, "current collector"
)
elif eta_sei.domain == ["current collector"]:
eta_sei = pybamm.PrimaryBroadcast(eta_sei, self.domain_for_broadcast)

domain = self.domain.lower() + " electrode"
variables = {
self.domain + " electrode 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,
"X-averaged "
+ domain
+ " sei film overpotential [V]": eta_sei_av * pot_scale,
}

return variables

def _get_standard_surface_potential_difference_variables(self, delta_phi):

if self.domain == "Negative":
Expand Down
4 changes: 4 additions & 0 deletions pybamm/models/submodels/interface/diffusion_limited.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ def get_coupled_variables(self, variables):
variables.update(self._get_standard_overpotential_variables(eta_r))
variables.update(self._get_standard_ocp_variables(ocp, dUdT))

# No SEI film resistance in this model
eta_sei = pybamm.Scalar(0)
variables.update(self._get_standard_sei_film_overpotential_variables(eta_sei))

if (
"Negative electrode" + self.reaction_name + " interfacial current density"
in variables
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ def get_coupled_variables(self, variables):
variables.update(self._get_standard_overpotential_variables(eta_r))
variables.update(self._get_standard_ocp_variables(ocp, dUdT))

# SEI film resistance not implemented in this model
eta_sei = pybamm.Scalar(0)
variables.update(self._get_standard_sei_film_overpotential_variables(eta_sei))

# Add first-order averages
j_1_bar = dj_dc_0 * pybamm.x_average(c_e_1) + dj_ddeltaphi_0 * pybamm.x_average(
delta_phi_1
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#
# First-order Butler-Volmer kinetics
#
import pybamm
from ..base_interface import BaseInterface


Expand Down Expand Up @@ -75,4 +76,8 @@ def get_coupled_variables(self, variables):
self._get_standard_surface_potential_difference_variables(delta_phi)
)

# SEI film resistance not implemented in this model
eta_sei = pybamm.Scalar(0)
variables.update(self._get_standard_sei_film_overpotential_variables(eta_sei))

return variables
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,12 @@ def get_coupled_variables(self, variables):
L_sei = variables[
"Total " + self.domain.lower() + " electrode sei thickness"
]
delta_phi = eta_r + ocp + j_tot * L_sei * pybamm.sei_parameters.R_sei
eta_sei = -j_tot * L_sei * pybamm.sei_parameters.R_sei
# Without SEI resistance
else:
delta_phi = eta_r + ocp
eta_sei = pybamm.Scalar(0)

delta_phi = eta_r + ocp - eta_sei

variables.update(
self._get_standard_total_interfacial_current_variables(j_tot_av)
Expand All @@ -79,6 +81,7 @@ def get_coupled_variables(self, variables):
variables.update(
self._get_standard_surface_potential_difference_variables(delta_phi)
)
variables.update(self._get_standard_sei_film_overpotential_variables(eta_sei))
variables.update(self._get_standard_ocp_variables(ocp, dUdT))

return variables
Expand Down
12 changes: 10 additions & 2 deletions pybamm/models/submodels/interface/kinetics/base_kinetics.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,15 @@ def get_coupled_variables(self, variables):
j = variables[
self.domain + " electrode interfacial current density variable"
]
eta_r -= j * L_sei * pybamm.sei_parameters.R_sei
eta_sei = -j * L_sei * pybamm.sei_parameters.R_sei
elif self.options["sei film resistance"] == "average":
L_sei = variables[
"Total " + self.domain.lower() + " electrode sei thickness"
]
eta_r -= j_tot_av * L_sei * pybamm.sei_parameters.R_sei
eta_sei = -j_tot_av * L_sei * pybamm.sei_parameters.R_sei
else:
eta_sei = pybamm.Scalar(0)
eta_r += eta_sei

# Get number of electrons in reaction
ne = self._get_number_of_electrons_in_reaction()
Expand All @@ -107,6 +110,11 @@ def get_coupled_variables(self, variables):
variables.update(self._get_standard_overpotential_variables(eta_r))
variables.update(self._get_standard_ocp_variables(ocp, dUdT))

if "main" in self.reaction:
variables.update(
self._get_standard_sei_film_overpotential_variables(eta_sei)
)

if (
"Negative electrode" + self.reaction_name + " interfacial current density"
in variables
Expand Down
17 changes: 12 additions & 5 deletions tests/integration/test_models/standard_output_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@ def __init__(self, model, param, disc, solution, operating_condition):
]
self.eta_r_av = solution["X-averaged reaction overpotential [V]"]

self.eta_sei_av = solution["X-averaged sei film overpotential [V]"]

self.eta_e_av = solution["X-averaged electrolyte overpotential [V]"]
self.delta_phi_s_av = solution["X-averaged solid phase ohmic losses [V]"]

Expand Down Expand Up @@ -229,7 +231,8 @@ def test_consistent(self):
self.ocv_av(self.t)
+ self.eta_r_av(self.t)
+ self.eta_e_av(self.t)
+ self.delta_phi_s_av(self.t),
+ self.delta_phi_s_av(self.t)
+ self.eta_sei_av(self.t),
decimal=2,
)

Expand Down Expand Up @@ -530,13 +533,17 @@ def __init__(self, model, param, disc, solution, operating_condition):
self.j_p_av = solution[
"X-averaged positive electrode interfacial current density"
]
self.j_n_sei = solution["Negative electrode sei interfacial current density"]
self.j_p_sei = solution["Positive electrode sei interfacial current density"]
self.j_n_sei = solution[
"Negative electrode scaled sei interfacial current density"
]
self.j_p_sei = solution[
"Positive electrode scaled sei interfacial current density"
]
self.j_n_sei_av = solution[
"X-averaged negative electrode sei interfacial current density"
"X-averaged negative electrode scaled sei interfacial current density"
]
self.j_p_sei_av = solution[
"X-averaged positive electrode sei interfacial current density"
"X-averaged positive electrode scaled sei interfacial current density"
]

self.j0_n = solution["Negative electrode exchange current density"]
Expand Down
Loading

0 comments on commit aaa61dd

Please sign in to comment.