Source code for pybamm.models.submodels.interface.open_circuit_potential.current_sigmoid_ocp
#
# Different OCPs for charge and discharge, based on current
#
import pybamm
from . import BaseHysteresisOpenCircuitPotential
[docs]
class CurrentSigmoidOpenCircuitPotential(BaseHysteresisOpenCircuitPotential):
def __init__(
self, param, domain, reaction, options, phase="primary", x_average=False
):
super().__init__(
param, domain, reaction, options=options, phase=phase, x_average=x_average
)
pybamm.citations.register("Ai2022")
[docs]
def get_coupled_variables(self, variables):
domain, Domain = self.domain_Domain
domain_options = getattr(self.options, domain)
phase_name = self.phase_name
# Set hysteresis state
current = variables["Total current density [A.m-2]"]
k = 100
if Domain == "Positive":
lithiation_current = current
elif Domain == "Negative":
lithiation_current = -current
h_x_av = 1 - 2 * pybamm.sigmoid(0, lithiation_current, k)
h = pybamm.FullBroadcast(
h_x_av,
[f"{domain} electrode"],
auxiliary_domains={"secondary": "current collector"},
)
variables.update(
{
f"{Domain} electrode {phase_name}hysteresis state": h,
f"X-averaged {domain} electrode {phase_name}hysteresis state": h_x_av,
}
)
if domain_options["particle size"] == "distribution":
h_dist = pybamm.PrimaryBroadcast(h, [f"{domain} {phase_name}particle size"])
h_dist_x_av = pybamm.x_average(h_dist)
variables.update(
{
f"{Domain} electrode {phase_name}hysteresis state distribution": h_dist,
f"X-averaged {domain} electrode {phase_name}hysteresis state distribution": h_dist_x_av,
}
)
# Get single-state hysteresis variables
variables.update(self._get_coupled_variables(variables))
return variables
[docs]
def set_initial_conditions(self, variables):
pass