Skip to content

Commit a0b2614

Browse files
rtimmsagriyakhetarpalswastim01valentinsulzercnaples79
authored
pybamm-team#5299 add inverse linear kinetics (pybamm-team#5303)
* Don't be too strict with func_args longer than symbol.children * Add a test * Add support for uniform grid sizing across subdomains (pybamm-team#720) (pybamm-team#5253) Co-authored-by: Valentin Sulzer <valentinsulzer@hotmail.com> * Fix typo in Butler-Volmer equation docstring (pybamm-team#5279) * fix bug with bulk ocp lithiation (pybamm-team#5280) * doc: fix typo in concentration description in notebook (pybamm-team#5284) * Fix typo in concentration description in notebook * Add CHANGELOG.md entry for typo fix * Remove unneccesary changelog entry Co-authored-by: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> --------- Co-authored-by: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> * fix: instruct uv to install into system for CI (pybamm-team#5288) * Fix `InputParameter` serialisation (pybamm-team#5289) * fix `InputParameter` serialisation * Update CHANGELOG.md * Bugfix: inputs for `initial_conditions_from` scale evaluation (pybamm-team#5285) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Add `silence_sundials_errors` solver option (pybamm-team#5290) * feat: add`silence_sundial_warnings` solver option * refactor: `silence_sundials_warnings` -> `silence_sundials_errors` * Update C-Rate current for changing nominal capacity (pybamm-team#5286) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Update `IDAKLUSolver` error handling (pybamm-team#5291) * raise `SolverError` at failure to init sundials * Update simulation.py * Update idaklu_solver.py * reuse `pybammsolvers` error messages * Update test_idaklu_solver.py * bump `pybammsolvers` * Update CHANGELOG.md * Update CHANGELOG.md Update CHANGELOG.md * pybamm-team#5299 add inverse linear kinetics * pybamm-team#5299 check domain options for inverse kinetics * update notebook * pybamm-team#5299 brady comments * pybamm-team#5299 fix composite total kinetics --------- Co-authored-by: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Co-authored-by: Swasti Mishra <140950062+swastim01@users.noreply.github.com> Co-authored-by: Valentin Sulzer <valentinsulzer@hotmail.com> Co-authored-by: Chase Naples <cnaples79@gmail.com> Co-authored-by: Gregor Decristoforo <gregor.decristoforo@gmail.com> Co-authored-by: Pip Liggins <philippa.liggins@dtc.ox.ac.uk> Co-authored-by: Marc Berliner <34451391+MarcBerliner@users.noreply.github.com> Co-authored-by: Brady Planden <55357039+BradyPlanden@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent aed75f7 commit a0b2614

24 files changed

Lines changed: 369 additions & 297 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## Features
44

5+
- Added inverse kinetics for linear kinetics. ([#5303](https://github.com/pybamm-team/PyBaMM/pull/5303))
56
- Adds `silence_sundials_errors` IDAKLU solver option with `default=False` to match historical output. ([#5290](https://github.com/pybamm-team/PyBaMM/pull/5290))
67

78
## Bug fixes
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Base Inverse Kinetics
2+
=====================
3+
4+
.. autoclass:: pybamm.kinetics.BaseInverseKinetics
5+
:members:

docs/source/api/models/submodels/interface/kinetics/inverse_kinetics/index.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ Inverse Kinetics
33

44
.. toctree::
55

6+
base_inverse
67
inverse_butler_volmer
8+
inverse_linear
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Inverse Linear
2+
==============
3+
4+
.. autoclass:: pybamm.kinetics.InverseLinear
5+
:members:

docs/source/examples/notebooks/models/using-submodels.ipynb

Lines changed: 108 additions & 95 deletions
Large diffs are not rendered by default.

examples/scripts/custom_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
pybamm.interface_utilisation.Full(model.param, domain, model.options)
6262
)
6363
model.submodels[f"{domain} interface current"] = (
64-
pybamm.kinetics.CurrentForInverseButlerVolmer(
64+
pybamm.kinetics.CurrentForInverseKinetics(
6565
model.param, domain, "lithium-ion main"
6666
)
6767
)

src/pybamm/models/full_battery_models/base_battery_model.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,9 +1228,12 @@ def get_intercalation_kinetics(self, domain):
12281228
elif options["intercalation kinetics"] == "MSMR":
12291229
return pybamm.kinetics.MSMRButlerVolmer
12301230

1231-
def get_inverse_intercalation_kinetics(self):
1232-
if self.options["intercalation kinetics"] == "symmetric Butler-Volmer":
1231+
def get_inverse_intercalation_kinetics(self, domain):
1232+
options = getattr(self.options, domain)
1233+
if options["intercalation kinetics"] == "symmetric Butler-Volmer":
12331234
return pybamm.kinetics.InverseButlerVolmer
1235+
elif options["intercalation kinetics"] == "linear":
1236+
return pybamm.kinetics.InverseLinear
12341237
else:
12351238
raise pybamm.OptionError(
12361239
"Inverse kinetics are only implemented for symmetric Butler-Volmer. "

src/pybamm/models/full_battery_models/lead_acid/loqs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,12 @@ def set_intercalation_kinetics_submodel(self):
123123
)
124124
)
125125
self.submodels["negative interface current"] = (
126-
pybamm.kinetics.CurrentForInverseButlerVolmer(
126+
pybamm.kinetics.CurrentForInverseKinetics(
127127
self.param, "negative", "lead-acid main"
128128
)
129129
)
130130
self.submodels["positive interface current"] = (
131-
pybamm.kinetics.CurrentForInverseButlerVolmer(
131+
pybamm.kinetics.CurrentForInverseKinetics(
132132
self.param, "positive", "lead-acid main"
133133
)
134134
)

src/pybamm/models/full_battery_models/lithium_ion/base_lithium_ion_model.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -460,22 +460,30 @@ def set_li_metal_counter_electrode_submodels(self):
460460
continue
461461
if (
462462
self.options["SEI"] in ["none", "constant"]
463-
and self.options["intercalation kinetics"] == "symmetric Butler-Volmer"
463+
and self.options["intercalation kinetics"]
464+
in ["linear", "symmetric Butler-Volmer"]
464465
and self.options["surface form"] == "false"
465466
):
466-
# only symmetric Butler-Volmer can be inverted
467+
# only symmetric Butler-Volmer or linear kinetics can be inverted
467468
self.submodels[f"{domain} electrode potential"] = (
468469
pybamm.electrode.ohm.LithiumMetalExplicit(
469470
self.param, domain, self.options
470471
)
471472
)
472-
self.submodels[f"{domain} electrode interface"] = (
473-
pybamm.kinetics.InverseButlerVolmer(
474-
self.param, domain, "lithium metal plating", self.options
473+
if self.options["intercalation kinetics"] == "symmetric Butler-Volmer":
474+
self.submodels[f"{domain} electrode interface"] = (
475+
pybamm.kinetics.InverseButlerVolmer(
476+
self.param, domain, "lithium metal plating", self.options
477+
)
478+
)
479+
else:
480+
self.submodels[f"{domain} electrode interface"] = (
481+
pybamm.kinetics.InverseLinear(
482+
self.param, domain, "lithium metal plating", self.options
483+
)
475484
)
476-
) # assuming symmetric reaction for now so we can take the inverse
477485
self.submodels[f"{domain} electrode interface current"] = (
478-
pybamm.kinetics.CurrentForInverseButlerVolmerLithiumMetal(
486+
pybamm.kinetics.CurrentForInverseKineticsLithiumMetal(
479487
self.param, domain, "lithium metal plating", self.options
480488
)
481489
)

src/pybamm/models/full_battery_models/lithium_ion/spm.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,16 @@ def set_intercalation_kinetics_submodel(self):
5959
if electrode_type == "planar":
6060
continue
6161

62-
if self.options["surface form"] == "false":
62+
options = getattr(self.options, domain)
63+
if options["surface form"] == "false":
6364
inverse_intercalation_kinetics = (
64-
self.get_inverse_intercalation_kinetics()
65+
self.get_inverse_intercalation_kinetics(domain)
6566
)
6667
self.submodels[f"{domain} interface"] = inverse_intercalation_kinetics(
6768
self.param, domain, "lithium-ion main", self.options
6869
)
6970
self.submodels[f"{domain} interface current"] = (
70-
pybamm.kinetics.CurrentForInverseButlerVolmer(
71+
pybamm.kinetics.CurrentForInverseKinetics(
7172
self.param, domain, "lithium-ion main", self.options
7273
)
7374
)

0 commit comments

Comments
 (0)