Skip to content

Commit

Permalink
Tried moving LLI variables into sei_thickness.py, didn't work
Browse files Browse the repository at this point in the history
  • Loading branch information
DrSOKane committed Aug 10, 2023
1 parent c9a32f9 commit 60eb5da
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 50 deletions.
50 changes: 0 additions & 50 deletions pybamm/models/submodels/interface/sei/base_sei.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,68 +109,18 @@ def _get_standard_concentration_variables(self, c_inner, c_outer):
def _get_standard_total_concentration_variables(self, c_sei):
"""Update variables related to total SEI concentration."""
if self.reaction_loc == "interface": # c is an interfacial quantity [mol.m-2]
c_sei_av = pybamm.yz_average(c_sei)
c_sei_0 = (
self.phase_param.L_inner_0 / self.phase_param.V_bar_inner
+ self.phase_param.L_outer_0 / self.phase_param.V_bar_outer
)
L_n = 1
variables = {
f"{self.reaction_name}concentration [mol.m-2]": c_sei,
f"Total {self.reaction_name}concentration [mol.m-2]": c_sei,
}
else: # c is a bulk quantity [mol.m-3]
c_xav = pybamm.x_average(c_sei)
c_sei_av = pybamm.yz_average(c_xav)
if isinstance(self, pybamm.sei.NoSEI):
c_sei_0 = 0 * c_sei_av # Set initial SEI to zero, copying domains
else:
c_sei_0 = self.phase_param.a_typ * (
self.phase_param.L_inner_0 / self.phase_param.V_bar_inner
+ self.phase_param.L_outer_0 / self.phase_param.V_bar_outer
)
L_n = self.param.n.L
variables = {
f"{self.reaction_name}concentration [mol.m-3]": c_sei,
f"Total {self.reaction_name}concentration [mol.m-3]": c_sei,
f"X-averaged {self.reaction_name}concentration [mol.m-3]": c_xav,
f"X-averaged total {self.reaction_name}concentration [mol.m-3]": c_xav,
}
# Calculate change in SEI concentration with respect to initial state
# If there is no SEI, skip this step because parameters may be undefined
if isinstance(self, pybamm.sei.NoSEI):
z_sei = 1
delta_c_SEI = c_sei_av
else:
z_sei = self.phase_param.z_sei
if self.reaction == "SEI":
delta_c_SEI = c_sei_av - c_sei_0
elif self.reaction == "SEI on cracks":
roughness_init = 1 + 2 * (
self.param.n.l_cr_0 * self.param.n.rho_cr * self.param.n.w_cr
)
c_sei_cracks_0 = (
(roughness_init - 1)
* self.phase_param.a_typ
* (
self.phase_param.L_inner_crack_0 / self.phase_param.V_bar_inner
+ self.phase_param.L_outer_crack_0
/ self.phase_param.V_bar_outer
)
)
delta_c_SEI = c_sei_av - c_sei_cracks_0
# Multiply delta_n_SEI by V_n to get total moles of SEI formed
# Multiply by z_sei to get total lithium moles consumed by SEI
V_n = L_n * self.param.L_y * self.param.L_z
Q_sei = delta_c_SEI * V_n * z_sei
variables.update(
{
f"Loss of lithium to {self.reaction_name}[mol]": Q_sei,
f"Loss of capacity to {self.reaction_name}[A.h]": Q_sei
* self.param.F
/ 3600,
}
)
return variables

def _get_standard_reaction_variables(self, j_inner, j_outer):
Expand Down
60 changes: 60 additions & 0 deletions pybamm/models/submodels/interface/sei/sei_thickness.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,64 @@ def get_coupled_variables(self, variables):
f"X-averaged total {reaction_name}thickness [m]": L_SEI_av,
}
)

# Calculate change in total SEI moles with respect to initial state
# If there is no SEI, skip and return 0 because parameters may be undefined
crack_opt = self.options["SEI on cracks"]
if self.reaction == "SEI" and self.options["SEI"] == "none":
Q_sei = pybamm.Scalar(0)
elif self.reaction == "SEI on cracks" and crack_opt == "false":
Q_sei = pybamm.Scalar(0)
else:
if self.reaction_loc == "interface":
# c is an interfacial quantity [mol.m-2]
c_sei = variables[f"Total {self.reaction_name}concentration [mol.m-2]"]
c_sei_av = pybamm.yz_average(c_sei)
c_sei_0 = (
self.phase_param.L_inner_0 / self.phase_param.V_bar_inner
+ self.phase_param.L_outer_0 / self.phase_param.V_bar_outer
)
L_n = 1
else:
# c is a bulk quantity [mol.m-3]
c_sei = variables[
f"X-averaged total {self.reaction_name}concentration [mol.m-3]"
]
c_sei_av = pybamm.yz_average(c_sei)
c_sei_0 = self.phase_param.a_typ * (
self.phase_param.L_inner_0 / self.phase_param.V_bar_inner
+ self.phase_param.L_outer_0 / self.phase_param.V_bar_outer
)
L_n = self.param.n.L
z_sei = self.phase_param.z_sei
if self.reaction == "SEI":
delta_c_SEI = c_sei_av - c_sei_0
elif self.reaction == "SEI on cracks":
roughness_init = 1 + 2 * (
self.param.n.l_cr_0 * self.param.n.rho_cr * self.param.n.w_cr
)
c_sei_cracks_0 = (
(roughness_init - 1)
* self.phase_param.a_typ
* (
self.phase_param.L_inner_crack_0 / self.phase_param.V_bar_inner
+ self.phase_param.L_outer_crack_0
/ self.phase_param.V_bar_outer
)
)
delta_c_SEI = c_sei_av - c_sei_cracks_0
# Multiply delta_n_SEI by V_n to get total moles of SEI formed
# Multiply by z_sei to get total lithium moles consumed by SEI
V_n = L_n * self.param.L_y * self.param.L_z
Q_sei = delta_c_SEI * V_n * z_sei

variables.update(
{
f"Loss of lithium to {self.reaction_name}[mol]": Q_sei,
f"Loss of capacity to {self.reaction_name}[A.h]": Q_sei
* self.param.F
/ 3600,
}
)

return variables

0 comments on commit 60eb5da

Please sign in to comment.