Source code for pybamm.parameters.geometric_parameters
#
# Geometric Parameters
#
import pybamm
from .base_parameters import BaseParameters
[docs]class GeometricParameters(BaseParameters):
"""
Standard geometric parameters
Layout:
1. Dimensional Parameters
2. Dimensional Functions
3. Scalings
4. Dimensionless Parameters
5. Dimensionless Functions
"""
def __init__(self):
# Set parameters and scales
self._set_dimensional_parameters()
self._set_scales()
self._set_dimensionless_parameters()
def _set_dimensional_parameters(self):
"""Defines the dimensional parameters."""
# Macroscale geometry
self.L_cn = pybamm.Parameter("Negative current collector thickness [m]")
self.L_n = pybamm.Parameter("Negative electrode thickness [m]")
self.L_s = pybamm.Parameter("Separator thickness [m]")
self.L_p = pybamm.Parameter("Positive electrode thickness [m]")
self.L_cp = pybamm.Parameter("Positive current collector thickness [m]")
self.L_x = (
self.L_n + self.L_s + self.L_p
) # Total distance between current collectors
self.L = self.L_cn + self.L_x + self.L_cp # Total cell thickness
self.L_y = pybamm.Parameter("Electrode width [m]")
self.L_z = pybamm.Parameter("Electrode height [m]")
self.L_Li = pybamm.Parameter("Lithium counter electrode thickness [m]")
self.A_cc = self.L_y * self.L_z # Area of current collector
self.A_cooling = pybamm.Parameter("Cell cooling surface area [m2]")
self.V_cell = pybamm.Parameter("Cell volume [m3]")
# Tab geometry
self.L_tab_n = pybamm.Parameter("Negative tab width [m]")
self.Centre_y_tab_n = pybamm.Parameter("Negative tab centre y-coordinate [m]")
self.Centre_z_tab_n = pybamm.Parameter("Negative tab centre z-coordinate [m]")
self.L_tab_p = pybamm.Parameter("Positive tab width [m]")
self.Centre_y_tab_p = pybamm.Parameter("Positive tab centre y-coordinate [m]")
self.Centre_z_tab_p = pybamm.Parameter("Positive tab centre z-coordinate [m]")
self.A_tab_n = self.L_tab_n * self.L_cn # Area of negative tab
self.A_tab_p = self.L_tab_p * self.L_cp # Area of negative tab
# Microscale geometry
# Note: for li-ion cells, the definition of the surface area to
# volume ratio is overwritten in lithium_ion_parameters.py to be computed
# based on the assumed particle shape
self.a_n_dim = pybamm.Parameter(
"Negative electrode surface area to volume ratio [m-1]"
)
self.a_p_dim = pybamm.Parameter(
"Positive electrode surface area to volume ratio [m-1]"
)
self.b_e_n = pybamm.Parameter(
"Negative electrode Bruggeman coefficient (electrolyte)"
)
self.b_e_s = pybamm.Parameter("Separator Bruggeman coefficient (electrolyte)")
self.b_e_p = pybamm.Parameter(
"Positive electrode Bruggeman coefficient (electrolyte)"
)
self.b_s_n = pybamm.Parameter(
"Negative electrode Bruggeman coefficient (electrode)"
)
self.b_s_p = pybamm.Parameter(
"Positive electrode Bruggeman coefficient (electrode)"
)
# Particle-size distribution geometry
self.R_min_n_dim = pybamm.Parameter("Negative minimum particle radius [m]")
self.R_min_p_dim = pybamm.Parameter("Positive minimum particle radius [m]")
self.R_max_n_dim = pybamm.Parameter("Negative maximum particle radius [m]")
self.R_max_p_dim = pybamm.Parameter("Positive maximum particle radius [m]")
self.sd_a_n_dim = pybamm.Parameter(
"Negative area-weighted particle-size standard deviation [m]"
)
self.sd_a_p_dim = pybamm.Parameter(
"Positive area-weighted particle-size standard deviation [m]"
)
def R_n_dimensional(self, x):
"""Negative particle radius as a function of through-cell distance"""
inputs = {"Through-cell distance (x_n) [m]": x}
return pybamm.FunctionParameter("Negative particle radius [m]", inputs)
def R_p_dimensional(self, x):
"""Positive particle radius as a function of through-cell distance"""
inputs = {"Through-cell distance (x_p) [m]": x}
return pybamm.FunctionParameter("Positive particle radius [m]", inputs)
def f_a_dist_n_dimensional(self, R):
"""
Dimensional negative electrode area-weighted particle-size distribution
"""
inputs = {
"Negative particle-size variable [m]": R,
}
return pybamm.FunctionParameter(
"Negative area-weighted particle-size distribution [m-1]", inputs,
)
def f_a_dist_p_dimensional(self, R):
"""
Dimensional positive electrode area-weighted particle-size distribution
"""
inputs = {
"Positive particle-size variable [m]": R,
}
return pybamm.FunctionParameter(
"Positive area-weighted particle-size distribution [m-1]", inputs,
)
def _set_scales(self):
"""Define the scales used in the non-dimensionalisation scheme"""
# Microscale geometry
# Note: these scales are necessary here to non-dimensionalise the
# particle size distributions.
# Use typical values at electrode/current collector interface.
self.R_n_typ = self.R_n_dimensional(0)
self.R_p_typ = self.R_p_dimensional(self.L_x)
def _set_dimensionless_parameters(self):
"""Defines the dimensionless parameters."""
# Macroscale Geometry
self.l_cn = self.L_cn / self.L_x
self.l_n = self.L_n / self.L_x
self.l_s = self.L_s / self.L_x
self.l_p = self.L_p / self.L_x
self.l_cp = self.L_cp / self.L_x
self.l_x = self.L_x / self.L_x
self.l_y = self.L_y / self.L_z
self.l_z = self.L_z / self.L_z
self.l_Li = self.L_Li / self.L_x
self.a_cc = self.l_y * self.l_z
self.a_cooling = self.A_cooling / (self.L_z ** 2)
self.v_cell = self.V_cell / (self.L_x * self.L_z ** 2)
self.l = self.L / self.L_x
self.delta = self.L_x / self.L_z # Aspect ratio
# Tab geometry
self.l_tab_n = self.L_tab_n / self.L_z
self.centre_y_tab_n = self.Centre_y_tab_n / self.L_z
self.centre_z_tab_n = self.Centre_z_tab_n / self.L_z
self.l_tab_p = self.L_tab_p / self.L_z
self.centre_y_tab_p = self.Centre_y_tab_p / self.L_z
self.centre_z_tab_p = self.Centre_z_tab_p / self.L_z
# Particle-size distribution geometry
self.R_min_n = self.R_min_n_dim / self.R_n_typ
self.R_min_p = self.R_min_p_dim / self.R_p_typ
self.R_max_n = self.R_max_n_dim / self.R_n_typ
self.R_max_p = self.R_max_p_dim / self.R_p_typ
self.sd_a_n = self.sd_a_n_dim / self.R_n_typ
self.sd_a_p = self.sd_a_p_dim / self.R_p_typ
def R_n(self, x):
"""
Dimensionless negative particle radius as a function of dimensionless
position x
"""
x_dim = x * self.L_x
return self.R_n_dimensional(x_dim) / self.R_n_typ
def R_p(self, x):
"""
Dimensionless positive particle radius as a function of dimensionless
position x
"""
x_dim = x * self.L_x
return self.R_p_dimensional(x_dim) / self.R_p_typ
def f_a_dist_n(self, R):
"""
Dimensionless negative electrode area-weighted particle-size distribution
"""
R_dim = R * self.R_n_typ
return self.f_a_dist_n_dimensional(R_dim) * self.R_n_typ
def f_a_dist_p(self, R):
"""
Dimensionless positive electrode area-weighted particle-size distribution
"""
R_dim = R * self.R_p_typ
return self.f_a_dist_p_dimensional(R_dim) * self.R_p_typ
geometric_parameters = GeometricParameters()