Skip to content

Commit 47b6db0

Browse files
committed
#492 merged from master
2 parents 2d6248d + 1c1adb2 commit 47b6db0

File tree

151 files changed

+3125
-762
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

151 files changed

+3125
-762
lines changed

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ script:
235235
- if [[ $PYBAMM_UNIT == true ]]; then python run-tests.py --unit --folder all; fi;
236236
- if [[ $PYBAMM_DOCS == true ]]; then python run-tests.py --doctest; fi;
237237
- if [[ $PYBAMM_STYLE == true ]]; then python -m flake8; fi;
238-
- if [[ $PYBAMM_COVER == true ]]; then coverage run run-tests.py --unit; fi;
238+
- if [[ $PYBAMM_COVER == true ]]; then coverage run run-tests.py --nosub; fi;
239239
- if [[ $PYBAMM_EXAMPLES == true ]]; then travis_wait 120 python run-tests.py --examples; fi;
240240

241241
after_success:

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ Python Battery Mathematical Modelling solves continuum models for batteries, usi
1313

1414
PyBaMM comes with a number of [detailed examples](examples/README.md), hosted here on
1515
github. In addition, there is a [full API documentation](http://pybamm.readthedocs.io/),
16-
hosted on [Read The Docs](readthedocs.io).
16+
hosted on [Read The Docs](readthedocs.io). A set of slides giving an overview of PyBaMM
17+
can be found
18+
[here](https://github.com/pybamm-team/pybamm_summary_slides/blob/master/pybamm.pdf).
1719

1820
## How can I obtain & install PyBaMM?
1921

docs/index.rst

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Contents
3232
source/spatial_methods/index
3333
source/solvers/index
3434
source/processed_variable
35+
source/util
3536

3637
Examples
3738
========

docs/source/models/submodels/convection/combined_convection.rst

-5
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Composite Model
2+
===============
3+
4+
.. autoclass:: pybamm.convection.Composite
5+
:members:

docs/source/models/submodels/convection/index.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ Convection
77
base_convection
88
no_convection
99
leading_convection
10-
combined_convection
10+
composite_convection
1111
full_convection
1212

docs/source/models/submodels/electrode/ohm/combined_ohm.rst

-5
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Composite Model
2+
===============
3+
4+
.. autoclass:: pybamm.electrode.ohm.Composite
5+
:members:

docs/source/models/submodels/electrode/ohm/index.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ Ohmic
55

66
base_ohm
77
leading_ohm
8-
combined_ohm
8+
composite_ohm
99
full_ohm
1010
surface_form_ohm
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
Combined Order Model
2-
====================
1+
Composite Model
2+
===============
33

4-
.. autoclass:: pybamm.electrolyte.stefan_maxwell.conductivity.CombinedOrder
4+
.. autoclass:: pybamm.electrolyte.stefan_maxwell.conductivity.Composite
55
:members:

docs/source/models/submodels/electrolyte/stefan_maxwell/conductivity/index.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ Conductivity
66

77
base_stefan_maxwell_conductivity
88
leading_stefan_maxwell_conductivity
9-
combined_stefan_maxwell_conductivity
9+
composite_stefan_maxwell_conductivity
1010
full_stefan_maxwell_conductivity
1111
surface_form/index
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Composite Model
2+
===============
3+
4+
.. autoclass:: pybamm.electrolyte.stefan_maxwell.diffusion.Composite
5+
:members:

docs/source/models/submodels/electrolyte/stefan_maxwell/diffusion/index.rst

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ Diffusion
55

66
base_stefan_maxwell_diffusion
77
constant_stefan_maxwell_diffusion
8-
leading_stefan_maxwell_diffusion
8+
composite_stefan_maxwell_diffusion
99
full_stefan_maxwell_diffusion
10+
leading_stefan_maxwell_diffusion
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Base Model
2+
==========
3+
4+
.. autoclass:: pybamm.interface.diffusion_limited.BaseModel
5+
:members:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Full Model
2+
==========
3+
4+
.. autoclass:: pybamm.interface.diffusion_limited.FullDiffusionLimited
5+
:members:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Diffusion-limited Kinetics
2+
==========================
3+
4+
.. toctree::
5+
:maxdepth: 1
6+
7+
base_diffusion_limited
8+
full_diffusion_limited
9+
leading_diffusion_limited
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Leading-order Model
2+
===================
3+
4+
.. autoclass:: pybamm.interface.diffusion_limited.LeadingOrderDiffusionLimited
5+
:members:

docs/source/models/submodels/interface/index.rst

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Interface
55
:maxdepth: 1
66

77
base_interface
8+
diffusion_limited/index
89
inverse_kinetics/index
910
kinetics/index
1011
lead_acid
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Base Inverse First-order Kinetics
2+
=================================
3+
4+
.. autoclass:: pybamm.interface.inverse_kinetics.BaseInverseFirstOrderKinetics
5+
:members:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Base Inverse Kinetics
2+
=====================
3+
4+
.. autoclass:: pybamm.interface.inverse_kinetics.BaseInverseKinetics
5+
:members:

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

+2
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ Inverse Interface Kinetics
44
.. toctree::
55
:maxdepth: 1
66

7+
base_inverse_first_order_kinetics
8+
base_inverse_kinetics
79
inverse_butler_volmer
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
Inverse Butler-Volmer
22
=====================
33

4-
.. autoclass:: pybamm.interface.inverse_kinetics.BaseInverseButlerVolmer
4+
.. autoclass:: pybamm.interface.inverse_kinetics.InverseButlerVolmer
5+
:members:
6+
7+
.. autoclass:: pybamm.interface.inverse_kinetics.InverseFirstOrderButlerVolmer
58
:members:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Base First-order Kinetics
2+
=========================
3+
4+
.. autoclass:: pybamm.interface.kinetics.BaseFirstOrderKinetics
5+
:members:
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
Butler-Volmer
22
=============
33

4-
.. autoclass:: pybamm.interface.kinetics.BaseButlerVolmer
4+
.. autoclass:: pybamm.interface.kinetics.ButlerVolmer
5+
:members:
6+
7+
.. autoclass:: pybamm.interface.kinetics.FirstOrderButlerVolmer
58
:members:

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

+2
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ Interface Kinetics
55
:maxdepth: 1
66

77
base_kinetics
8+
base_first_order_kinetics
89
butler_volmer
10+
no_reaction
911
tafel
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
No Reaction
2+
===========
3+
4+
.. autoclass:: pybamm.interface.kinetics.NoReaction
5+
:members:
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
Tafel
22
=====
33

4-
.. autoclass:: pybamm.interface.kinetics.BaseForwardTafel
4+
.. autoclass:: pybamm.interface.kinetics.ForwardTafel
55
:members:
66

7-
.. autoclass:: pybamm.interface.kinetics.BaseBackwardTafel
7+
.. autoclass:: pybamm.interface.kinetics.BackwardTafel
88
:members:

docs/source/util.rst

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Utility functions
2+
=================
3+
4+
.. autofunction:: pybamm.get_infinite_nested_dict
5+
6+
.. autofunction:: pybamm.load_function
7+
8+
.. autofunction:: pybamm.rmse
9+
10+
.. autofunction:: pybamm.root_dir
11+
12+
.. autoclass:: pybamm.Timer
13+
:members:

examples/notebooks/models/lead-acid.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@
321321
" t, y = solutions[model].t, solutions[model].y\n",
322322
" time = pybamm.ProcessedVariable(model.variables[\"Time [h]\"], t, y)(t)\n",
323323
" voltage = pybamm.ProcessedVariable(model.variables[\"Terminal voltage [V]\"], t, y)\n",
324-
" plt.plot(time, voltage(t) * 6, lw=2, label=model.name)\n",
324+
" plt.plot(time, voltage(t), lw=2, label=model.name)\n",
325325
"plt.xlabel(\"Time [h]\", fontsize=15)\n",
326326
"plt.ylabel(\"Terminal voltage [V]\", fontsize=15)\n",
327327
"plt.legend(fontsize=15)\n",

examples/scripts/compare_lead_acid.py

+12-7
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55

66
# load models
77
models = [
8-
pybamm.lead_acid.LOQS(),
8+
# pybamm.lead_acid.LOQS(),
9+
pybamm.lead_acid.FOQS(),
910
pybamm.lead_acid.Composite(),
11+
# pybamm.lead_acid.Composite({"surface form": "algebraic"}),
1012
pybamm.lead_acid.NewmanTiedemann(),
1113
]
1214

@@ -17,11 +19,14 @@
1719
param = models[0].default_parameter_values
1820
param.update(
1921
{
20-
"Typical current [A]": 20,
22+
# "Bruggeman coefficient": 0.001,
23+
# "Current function": pybamm.GetConstantCurrent(current=0),
24+
"Typical current [A]": -20,
2125
"Initial State of Charge": 1,
2226
"Typical electrolyte concentration [mol.m-3]": 5600,
2327
"Negative electrode reference exchange-current density [A.m-2]": 0.08,
2428
"Positive electrode reference exchange-current density [A.m-2]": 0.006,
29+
"Positive electrode reference exchange-current density (oxygen) [A.m-2]": 1e-22,
2530
}
2631
)
2732
for model in models:
@@ -40,7 +45,7 @@
4045

4146
# solve model
4247
solutions = [None] * len(models)
43-
t_eval = np.linspace(0, 1, 100)
48+
t_eval = np.linspace(0, 2, 100)
4449
for i, model in enumerate(models):
4550
solution = model.default_solver.solve(model, t_eval)
4651
solutions[i] = solution
@@ -51,10 +56,10 @@
5156
"Average negative electrode interfacial current density [A.m-2]",
5257
"Average positive electrode interfacial current density [A.m-2]",
5358
],
54-
"Electrolyte concentration [mol.m-3]",
55-
"Porosity",
56-
"Electrolyte current density [A.m-2]",
57-
"Electrolyte potential [V]",
59+
"Average negative electrode reaction overpotential [V]",
60+
"Average positive electrode reaction overpotential [V]",
61+
"State of Charge",
62+
"Oxygen concentration [mol.m-3]",
5863
"Terminal voltage [V]",
5964
]
6065
plot = pybamm.QuickPlot(models, mesh, solutions, output_variables)

examples/scripts/compare_lithium_ion.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@
1313

1414
# load parameter values and process models and geometry
1515
param = models[0].default_parameter_values
16-
param.update({"Typical current [A]": 0.3})
17-
pybamm.set_logging_level("INFO")
18-
param.update({"Typical current [A]": 1})
16+
param["Typical current [A]"] = 1.0
1917
for model in models:
2018
param.process_model(model)
2119

@@ -36,8 +34,7 @@
3634
solutions = [None] * len(models)
3735
t_eval = np.linspace(0, 0.17, 100)
3836
for i, model in enumerate(models):
39-
solution = model.default_solver.solve(model, t_eval)
40-
solutions[i] = solution
37+
solutions[i] = model.default_solver.solve(model, t_eval)
4138

4239
# plot
4340
plot = pybamm.QuickPlot(models, mesh, solutions)

input/parameters/lead-acid/default.csv

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ Positive tab centre z-coordinate [m],0.114,Tab at top,
1717
Cell capacity [A.h],17,Manufacturer,
1818
Number of electrodes connected in parallel to make a cell,8,Manufacturer,
1919
Number of cells connected in series to make a battery,6,Manufacturer,
20-
Lower voltage cut-off [V],1.75,,10.5V across 6-cell battery
21-
Upper voltage cut-off [V],2.42,,14.5V across 6-cell battery
20+
Lower voltage cut-off [V],1.73,,(just under) 10.5V across 6-cell battery
21+
Upper voltage cut-off [V],2.44,,(just over) 14.5V across 6-cell battery
2222
Initial State of Charge,1,-,
2323
,,,
2424
# Electrolyte properties,,,

input/parameters/lithium-ion/electrolyte_conductivity_Capiglia1999.py

+25-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
def electrolyte_conductivity_Capiglia1999(c_e):
1+
import autograd.numpy as np
2+
3+
4+
def electrolyte_conductivity_Capiglia1999(c_e, T, T_inf, E_k_e, R_g):
25
"""
36
Conductivity of LiPF6 in EC:DMC as a function of ion concentration. The original
47
data is from [1]. The fit is from Dualfoil [2].
@@ -9,6 +12,23 @@ def electrolyte_conductivity_Capiglia1999(c_e):
912
properties of non-aqueous electrolyte solutions for rechargeable lithium batteries.
1013
Journal of power sources 81 (1999): 859-862.
1114
.. [2] http://www.cchem.berkeley.edu/jsngrp/fortran.html
15+
Parameters
16+
----------
17+
c_e: :class: `numpy.Array`
18+
Dimensional electrolyte concentration
19+
T: :class: `numpy.Array`
20+
Dimensional temperature
21+
T_inf: double
22+
Reference temperature
23+
E_k_e: double
24+
Electrolyte conductivity activation energy
25+
R_g: double
26+
The ideal gas constant
27+
28+
Returns
29+
-------
30+
:`numpy.Array`
31+
Solid diffusivity
1232
"""
1333

1434
sigma_e = (
@@ -17,4 +37,7 @@ def electrolyte_conductivity_Capiglia1999(c_e):
1737
- 1.052 * (c_e / 1000) ** 2
1838
+ 0.1554 * (c_e / 1000) ** 3
1939
)
20-
return sigma_e
40+
41+
arrhenius = np.exp(E_k_e / R_g * (1 / T_inf - 1 / T))
42+
43+
return sigma_e * arrhenius

input/parameters/lithium-ion/electrolyte_diffusivity_Capiglia1999.py

+23-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import autograd.numpy as np
22

33

4-
def electrolyte_diffusivity_Capiglia1999(c_e):
4+
def electrolyte_diffusivity_Capiglia1999(c_e, T, T_inf, E_D_e, R_g):
55
"""
66
Diffusivity of LiPF6 in EC:DMC as a function of ion concentration. The original data
77
is from [1]. The fit from Dualfoil [2].
@@ -12,6 +12,27 @@ def electrolyte_diffusivity_Capiglia1999(c_e):
1212
properties of non-aqueous electrolyte solutions for rechargeable lithium batteries.
1313
Journal of power sources 81 (1999): 859-862.
1414
.. [2] http://www.cchem.berkeley.edu/jsngrp/fortran.html
15+
16+
Parameters
17+
----------
18+
c_e: :class: `numpy.Array`
19+
Dimensional electrolyte concentration
20+
T: :class: `numpy.Array`
21+
Dimensional temperature
22+
T_inf: double
23+
Reference temperature
24+
E_D_e: double
25+
Electrolyte diffusion activation energy
26+
R_g: double
27+
The ideal gas constant
28+
29+
Returns
30+
-------
31+
:`numpy.Array`
32+
Solid diffusivity
1533
"""
1634

17-
return 5.34e-10 * np.exp(-0.65 * c_e / 1000)
35+
D_c_e = 5.34e-10 * np.exp(-0.65 * c_e / 1000)
36+
arrhenius = np.exp(E_D_e / R_g * (1 / T_inf - 1 / T))
37+
38+
return D_c_e * arrhenius

0 commit comments

Comments
 (0)