Source code for pybamm.models.full_battery_models.lithium_ion.spme

#
# Single Particle Model with Electrolyte (SPMe)
#
import pybamm

from .spm import SPM


[docs] class SPMe(SPM): """ Single Particle Model with Electrolyte (SPMe) of a lithium-ion battery, from :footcite:t:`Marquis2019`. Inherits most submodels from SPM, only modifies potentials and electrolyte. See :class:`pybamm.lithium_ion.BaseModel` for more details. Examples -------- >>> model = pybamm.lithium_ion.SPMe() >>> model.name 'Single Particle Model with electrolyte' """ def __init__( self, options=None, name="Single Particle Model with electrolyte", build=True ): # For degradation models we use the "x-average", note that for side reactions # this is overwritten by "x-average side reactions" self.x_average = True # Initialize with the SPM super().__init__(options, name, build) def set_solid_submodel(self): for domain in ["negative", "positive"]: if self.options.electrode_types[domain] == "porous": solid_submodel = pybamm.electrode.ohm.Composite elif self.options.electrode_types[domain] == "planar": if self.options["surface form"] == "false": solid_submodel = pybamm.electrode.ohm.LithiumMetalExplicit else: solid_submodel = pybamm.electrode.ohm.LithiumMetalSurfaceForm self.submodels[f"{domain} electrode potential"] = solid_submodel( self.param, domain, self.options ) def set_electrolyte_concentration_submodel(self): self.submodels["electrolyte diffusion"] = pybamm.electrolyte_diffusion.Full( self.param, self.options ) def set_electrolyte_potential_submodel(self): surf_form = pybamm.electrolyte_conductivity.surface_potential_form if ( self.options["surface form"] == "false" or self.options.electrode_types["negative"] == "planar" ): if self.options["electrolyte conductivity"] in ["default", "composite"]: self.submodels["electrolyte conductivity"] = ( pybamm.electrolyte_conductivity.Composite( self.param, options=self.options ) ) elif self.options["electrolyte conductivity"] == "integrated": self.submodels["electrolyte conductivity"] = ( pybamm.electrolyte_conductivity.Integrated( self.param, options=self.options ) ) if self.options["surface form"] == "false": surf_model = surf_form.Explicit elif self.options["surface form"] == "differential": surf_model = surf_form.CompositeDifferential elif self.options["surface form"] == "algebraic": surf_model = surf_form.CompositeAlgebraic for domain in ["negative", "positive"]: if self.options.electrode_types[domain] == "porous": self.submodels[f"{domain} surface potential difference [V]"] = ( surf_model(self.param, domain, self.options) )