Skip to content

Commit

Permalink
Merge pull request #2095 from pybamm-team/bound-ocv
Browse files Browse the repository at this point in the history
bound sto for better eSOH results
  • Loading branch information
valentinsulzer authored Jun 13, 2022
2 parents 754fc18 + 27f8cec commit 9d3b1c3
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 1 deletion.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@
## Features

- Added `__eq__` and `__hash__` methods for `Symbol` objects, using `.id` ([#1978](https://github.com/pybamm-team/PyBaMM/pull/1978))


## Optimizations

- Stoichiometry inputs to OCP functions are now bounded between 1e-10 and 1-1e-10, with singularities at 0 and 1 so that OCP goes to +- infinity ([#2095](https://github.com/pybamm-team/PyBaMM/pull/2095))

## Breaking changes

- Changed some dictionary keys to `Symbol` instead of `Symbol.id` (internal change only, should not affect external facing functions) ([#1978](https://github.com/pybamm-team/PyBaMM/pull/1978))
Expand Down
8 changes: 8 additions & 0 deletions pybamm/expression_tree/binary_operators.py
Original file line number Diff line number Diff line change
Expand Up @@ -623,6 +623,10 @@ def _binary_new_copy(self, left, right):
"""See :meth:`pybamm.BinaryOperator._binary_new_copy()`."""
return pybamm.minimum(left, right)

def _sympy_operator(self, left, right):
"""Override :meth:`pybamm.BinaryOperator._sympy_operator`"""
return sympy.Min(left, right)


class Maximum(BinaryOperator):
"""Returns the greater of two objects."""
Expand Down Expand Up @@ -655,6 +659,10 @@ def _binary_new_copy(self, left, right):
"""See :meth:`pybamm.BinaryOperator._binary_new_copy()`."""
return pybamm.maximum(left, right)

def _sympy_operator(self, left, right):
"""Override :meth:`pybamm.BinaryOperator._sympy_operator`"""
return sympy.Max(left, right)


def simplify_elementwise_binary_broadcasts(left, right):
left, right = preprocess_binary(left, right)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def __init__(self, working_electrode, name="Electrode-specific SOH model"):
x_100_init = 0.85
# Make sure x_0 = x_100 - C/C_w > 0
C_init = param.Q
C_init = pybamm.minimum(Cw * x_100_init - 0.1, C_init)
C_init = pybamm.minimum(Cw * x_100_init, C_init)
self.initial_conditions = {x_100: x_100_init, C: C_init}

self.variables = {
Expand Down
5 changes: 5 additions & 0 deletions pybamm/parameters/lithium_ion_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,11 @@ def j0_dimensional(self, c_e, c_s_surf, T):

def U_dimensional(self, sto, T):
"""Dimensional open-circuit potential [V]"""
# bound stoichiometry between tol and 1-tol. Adding 1/sto + 1/(sto-1) later
# will ensure that ocp goes to +- infinity if sto goes into that region
# anyway
tol = 1e-10
sto = pybamm.maximum(pybamm.minimum(sto, 1 - tol), tol)
inputs = {f"{self.domain} particle stoichiometry": sto}
u_ref = pybamm.FunctionParameter(f"{self.domain} electrode OCP [V]", inputs)
# add a term to ensure that the OCP goes to infinity at 0 and -infinity at 1
Expand Down

0 comments on commit 9d3b1c3

Please sign in to comment.