Source code for pybamm.geometry.battery_geometry

#
# Function to create battery geometries
#
import pybamm


[docs]def battery_geometry(include_particles=True, current_collector_dimension=0): """ A convenience function to create battery geometries. Parameters ---------- include_particles : bool Whether to include particle domains current_collector_dimensions : int, default The dimensions of the current collector. Should be 0 (default), 1 or 2 Returns ------- :class:`pybamm.Geometry` A geometry class for the battery """ var = pybamm.standard_spatial_vars geo = pybamm.geometric_parameters l_n = geo.l_n l_s = geo.l_s geometry = { "negative electrode": {var.x_n: {"min": 0, "max": l_n}}, "separator": {var.x_s: {"min": l_n, "max": l_n + l_s}}, "positive electrode": {var.x_p: {"min": l_n + l_s, "max": 1}}, } # Add particle domains if include_particles is True: geometry.update( { "negative particle": {var.r_n: {"min": 0, "max": 1}}, "positive particle": {var.r_p: {"min": 0, "max": 1}}, } ) if current_collector_dimension == 0: geometry["current collector"] = {var.z: {"position": 1}} elif current_collector_dimension == 1: geometry["current collector"] = { var.z: {"min": 0, "max": 1}, "tabs": { "negative": {"z_centre": geo.centre_z_tab_n}, "positive": {"z_centre": geo.centre_z_tab_p}, }, } elif current_collector_dimension == 2: geometry["current collector"] = { var.y: {"min": 0, "max": geo.l_y}, var.z: {"min": 0, "max": geo.l_z}, "tabs": { "negative": { "y_centre": geo.centre_y_tab_n, "z_centre": geo.centre_z_tab_n, "width": geo.l_tab_n, }, "positive": { "y_centre": geo.centre_y_tab_p, "z_centre": geo.centre_z_tab_p, "width": geo.l_tab_p, }, }, } else: raise pybamm.GeometryError( "Invalid current collector dimension '{}' (should be 0, 1 or 2)".format( current_collector_dimension ) ) return pybamm.Geometry(geometry)