Skip to content

Commit df8bcea

Browse files
#1100 merge develop
2 parents 1872abf + dd37a7f commit df8bcea

File tree

141 files changed

+2617
-1919
lines changed

Some content is hidden

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

141 files changed

+2617
-1919
lines changed

CHANGELOG.md

+5-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
## Features
44

5-
- Added "R-averaged particle concentration" variables` ([#1118](https://github.com/pybamm-team/PyBaMM/pull/1118))
5+
- Automatically compute surface area per unit volume based on particle shape for li-ion models ([#1120])(https://github.com/pybamm-team/PyBaMM/pull/1120)
6+
- Added "R-averaged particle concentration" variables ([#1118](https://github.com/pybamm-team/PyBaMM/pull/1118))
67
- Added support for sensitivity calculations to the casadi solver ([#1109](https://github.com/pybamm-team/PyBaMM/pull/1109))
78
- Added support for index 1 semi-explicit dae equations and sensitivity calculations to JAX BDF solver ([#1107](https://github.com/pybamm-team/PyBaMM/pull/1107))
89
- Allowed keyword arguments to be passed to `Simulation.plot()` ([#1099](https://github.com/pybamm-team/PyBaMM/pull/1099))
@@ -19,8 +20,9 @@
1920
## Breaking changes
2021

2122
- Changed sensitivity API. Removed `ProcessedSymbolicVariable`, all sensitivity now handled within the solvers and `ProcessedVariable` ()
22-
- Renamed `quick_plot_vars` to `output_variables` in `Simulation` to be consistent with `QuickPlot`. Passing `quick_plot_vars` to `Simulation.plot()` has been deprecated and `output_variables` should be passed instead ([#1099](https://github.com/pybamm-team/PyBaMM/pull/1099))
23-
23+
- The modules containing standard parameters are now classes so they can take options
24+
(e.g. `standard_parameters_lithium_ion` is now `LithiumIonParameters`) ([#1120])(https://github.com/pybamm-team/PyBaMM/pull/1120)
25+
- Renamed `quick_plot_vars` to `output_variables` in `Simulation` to be consistent with `QuickPlot`. Passing `quick_plot_vars` to `Simulation.plot()` has been deprecated and `output_variables` should be passed instead ([#1099](https://github.com/pybamm-team/PyBaMM/pull/1099))
2426

2527
# [v0.2.3](https://github.com/pybamm-team/PyBaMM/tree/v0.2.3) - 2020-07-01
2628

Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
Electrical Parameters
22
=====================
33

4-
.. automodule:: pybamm.parameters.electrical_parameters
4+
.. autoclass:: pybamm.ElectricalParameters
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
Geometric Parameters
22
====================
33

4-
.. automodule:: pybamm.parameters.geometric_parameters
5-
4+
.. autoclass:: pybamm.GeometricParameters

docs/source/parameters/index.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ Parameters
77
geometric_parameters
88
electrical_parameters
99
thermal_parameters
10-
standard_parameters_lithium_ion
11-
standard_parameters_lead_acid
12-
parameter_sets
10+
lithium_ion_parameters
11+
lead_acid_parameters
12+
parameter_sets
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Lead-Acid Parameters
2+
====================
3+
4+
.. autoclass:: pybamm.LeadAcidParameters
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Lithium-ion Parameters
2+
======================
3+
4+
.. autoclass:: pybamm.LithiumIonParameters
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
Base Parameter Values
2-
=====================
1+
Parameter Values
2+
================
33

44
.. autoclass:: pybamm.ParameterValues
55
:members:

docs/source/parameters/standard_parameters_lead_acid.rst

-4
This file was deleted.

docs/source/parameters/standard_parameters_lithium_ion.rst

-4
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
Thermal Parameters
2-
=====================
2+
==================
33

4-
.. automodule:: pybamm.parameters.thermal_parameters
4+
.. autoclass:: pybamm.ThermalParameters

docs/tutorials/add-model.rst

+3-2
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,11 @@ The inbuilt models in PyBaMM do not add all the model attributes within their ow
142142
In addition to calling submodels, common sets of variables and parameters found in
143143
lithium-ion and lead acid batteries are provided in
144144
`standard_variables.py`,
145-
`standard_parameters_lithium_ion.py`,
146-
`standard_parameters_lead_acid.py`,
145+
`lithium_ion_parameters.py`,
146+
`lead_acid_parameters.py`,
147147
`electrical_parameters.py`,
148148
`geometric_parameters.py`,
149+
`thermal_parameters.py`,
149150
and `standard_spatial_vars.py`
150151
which we encourage use of to save redefining the same parameters and variables in
151152
every model and submodel.

examples/notebooks/change-input-current.ipynb

+8-17
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@
3434
"name": "stdout",
3535
"output_type": "stream",
3636
"text": [
37-
"\u001b[33mWARNING: You are using pip version 20.1.1; however, version 20.2 is available.\n",
38-
"You should consider upgrading via the '/home/ferranbrosa/PyBaMM/env/bin/python -m pip install --upgrade pip' command.\u001b[0m\n",
3937
"Note: you may need to restart the kernel to use updated packages.\n"
4038
]
4139
}
@@ -77,7 +75,7 @@
7775
{
7876
"data": {
7977
"application/vnd.jupyter.widget-view+json": {
80-
"model_id": "55b83465a9ea4937bfd3444fa7198460",
78+
"model_id": "0b6d24762adc49bb95efa892bed183da",
8179
"version_major": 2,
8280
"version_minor": 0
8381
},
@@ -126,7 +124,7 @@
126124
{
127125
"data": {
128126
"application/vnd.jupyter.widget-view+json": {
129-
"model_id": "b827d913896b418caf161f6d8ee9df92",
127+
"model_id": "9cdb5f149490457796917576b3d5eb13",
130128
"version_major": 2,
131129
"version_minor": 0
132130
},
@@ -164,7 +162,7 @@
164162
{
165163
"data": {
166164
"application/vnd.jupyter.widget-view+json": {
167-
"model_id": "64e6f94728be4ef5bfec800bc26f0768",
165+
"model_id": "a43ac5cc2f204becbb8263f606f7fe94",
168166
"version_major": 2,
169167
"version_minor": 0
170168
},
@@ -270,7 +268,7 @@
270268
"param = model.default_parameter_values\n",
271269
"\n",
272270
"# set user defined current function\n",
273-
"A = pybamm.electrical_parameters.I_typ\n",
271+
"A = model.param.I_typ\n",
274272
"omega = 0.1\n",
275273
"param[\"Current function [A]\"] = my_fun(A,omega)\n",
276274
"\n",
@@ -294,7 +292,7 @@
294292
{
295293
"data": {
296294
"application/vnd.jupyter.widget-view+json": {
297-
"model_id": "c2a1fdc7aa5246aaa9543650d96894ca",
295+
"model_id": "373a98b202d54b958d2a1bc8c5653aba",
298296
"version_major": 2,
299297
"version_minor": 0
300298
},
@@ -326,20 +324,13 @@
326324
"quick_plot = pybamm.QuickPlot(solution, output_variables, label)\n",
327325
"quick_plot.dynamic_plot();"
328326
]
329-
},
330-
{
331-
"cell_type": "code",
332-
"execution_count": null,
333-
"metadata": {},
334-
"outputs": [],
335-
"source": []
336327
}
337328
],
338329
"metadata": {
339330
"kernelspec": {
340-
"display_name": "PyBaMM development (env)",
331+
"display_name": "Python 3",
341332
"language": "python",
342-
"name": "pybamm-dev"
333+
"name": "python3"
343334
},
344335
"language_info": {
345336
"codemirror_mode": {
@@ -351,7 +342,7 @@
351342
"name": "python",
352343
"nbconvert_exporter": "python",
353344
"pygments_lexer": "ipython3",
354-
"version": "3.6.8"
345+
"version": "3.6.9"
355346
}
356347
},
357348
"nbformat": 4,

examples/notebooks/compare-comsol-discharge-curve.ipynb

+22-8
Large diffs are not rendered by default.

examples/notebooks/compare-ecker-data.ipynb

+16-8
Large diffs are not rendered by default.

examples/notebooks/models/pouch-cell-model.ipynb

+22-20
Large diffs are not rendered by default.

examples/scripts/SPMe_SOC.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@
1212
import numpy as np
1313
import matplotlib.pyplot as plt
1414

15-
plt.close("all")
16-
pybamm.set_logging_level(30)
17-
1815
factor = 6.38
1916
capacities = []
2017
specific_capacities = []
@@ -56,8 +53,6 @@
5653
"Maximum concentration in positive electrode [mol.m-3]": 50000,
5754
"Initial concentration in negative electrode [mol.m-3]": 12500,
5855
"Initial concentration in positive electrode [mol.m-3]": 25000,
59-
"Negative electrode surface area to volume ratio [m-1]": 180000.0,
60-
"Positive electrode surface area to volume ratio [m-1]": 150000.0,
6156
"Current function [A]": I_app,
6257
}
6358
)
@@ -133,3 +128,4 @@
133128
ax1.set_ylabel("Capacity [mAh]")
134129
ax2.set_ylabel("Specific Capacity [mAh.cm-3]")
135130
ax2.set_xlabel("Anode : Cathode thickness")
131+
plt.show()

examples/scripts/compare_comsol/compare_comsol_DFN.py

+11-4
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,16 @@
3232

3333
# load parameters and process model and geometry
3434
param = pybamm_model.default_parameter_values
35-
param["Electrode width [m]"] = 1
36-
param["Electrode height [m]"] = 1
37-
param["Current function [A]"] = 24 * C_rates[C_rate]
35+
param.update(
36+
{
37+
"Electrode width [m]": 1,
38+
"Electrode height [m]": 1,
39+
"Negative electrode conductivity [S.m-1]": 126,
40+
"Positive electrode conductivity [S.m-1]": 16.6,
41+
"Current function [A]": 24 * C_rates[C_rate],
42+
}
43+
)
44+
3845
param.process_model(pybamm_model)
3946
param.process_geometry(geometry)
4047

@@ -55,7 +62,7 @@
5562
# Make Comsol 'model' for comparison
5663
whole_cell = ["negative electrode", "separator", "positive electrode"]
5764
comsol_t = comsol_variables["time"]
58-
L_x = param.evaluate(pybamm.standard_parameters_lithium_ion.L_x)
65+
L_x = param.evaluate(pybamm_model.param.L_x)
5966

6067

6168
def get_interp_fun(variable_name, domain):

examples/scripts/compare_comsol/discharge_curve.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,15 @@
1717

1818
# load parameters and process model and geometry
1919
param = model.default_parameter_values
20-
param["Electrode width [m]"] = 1
21-
param["Electrode height [m]"] = 1
22-
param["Current function [A]"] = "[input]"
20+
param.update(
21+
{
22+
"Electrode width [m]": 1,
23+
"Electrode height [m]": 1,
24+
"Negative electrode conductivity [S.m-1]": 126,
25+
"Positive electrode conductivity [S.m-1]": 16.6,
26+
"Current function [A]": "[input]",
27+
}
28+
)
2329
param.process_model(model)
2430
param.process_geometry(geometry)
2531

Original file line numberDiff line numberDiff line change
@@ -1,68 +1,40 @@
11
#
2-
# Compare lithium-ion battery models
2+
# Compare lithium-ion battery models with and without particle size distibution
33
#
4-
import argparse
54
import numpy as np
65
import pybamm
76

8-
parser = argparse.ArgumentParser()
9-
parser.add_argument(
10-
"--debug", action="store_true", help="Set logging level to 'DEBUG'."
11-
)
12-
args = parser.parse_args()
13-
if args.debug:
14-
pybamm.set_logging_level("DEBUG")
15-
else:
16-
pybamm.set_logging_level("INFO")
7+
pybamm.set_logging_level("INFO")
178

189
# load models
19-
options = {"thermal": "isothermal"}
2010
models = [
21-
pybamm.lithium_ion.DFN(options, name="standard DFN"),
22-
pybamm.lithium_ion.DFN(options, name="particle DFN"),
11+
pybamm.lithium_ion.DFN(name="standard DFN"),
12+
pybamm.lithium_ion.DFN(name="particle DFN"),
2313
]
2414

25-
26-
# load parameter values and process models and geometry
15+
# load parameter values
2716
params = [models[0].default_parameter_values, models[1].default_parameter_values]
28-
params[0]["Typical current [A]"] = 1.0
29-
params[0].process_model(models[0])
30-
31-
32-
params[1]["Typical current [A]"] = 1.0
3317

3418

3519
def negative_distribution(x):
36-
return 1 + x
20+
return 1 + 2 * x / models[1].param.l_n
3721

3822

3923
def positive_distribution(x):
40-
return 1 + (x - (1 - models[1].param.l_p))
24+
return 1 + 2 * (1 - x) / models[1].param.l_p
4125

4226

4327
params[1]["Negative particle distribution in x"] = negative_distribution
4428
params[1]["Positive particle distribution in x"] = positive_distribution
45-
params[1].process_model(models[1])
4629

47-
# set mesh
48-
var = pybamm.standard_spatial_vars
49-
var_pts = {var.x_n: 10, var.x_s: 10, var.x_p: 10, var.r_n: 5, var.r_p: 5}
5030

51-
# discretise models
52-
for param, model in zip(params, models):
53-
# create geometry
54-
geometry = model.default_geometry
55-
param.process_geometry(geometry)
56-
mesh = pybamm.Mesh(geometry, models[-1].default_submesh_types, var_pts)
57-
disc = pybamm.Discretisation(mesh, model.default_spatial_methods)
58-
disc.process_model(model)
59-
60-
# solve model
61-
solutions = [None] * len(models)
31+
# set up and solve simulations
6232
t_eval = np.linspace(0, 3600, 100)
63-
for i, model in enumerate(models):
64-
solutions[i] = pybamm.CasadiSolver().solve(model, t_eval)
65-
33+
sols = []
34+
for model, param in zip(models, params):
35+
sim = pybamm.Simulation(model, parameter_values=param)
36+
sol = sim.solve(t_eval)
37+
sols.append(sol)
6638

6739
output_variables = [
6840
"Negative particle surface concentration",
@@ -78,5 +50,5 @@ def positive_distribution(x):
7850
]
7951

8052
# plot
81-
plot = pybamm.QuickPlot(solutions, output_variables=output_variables)
53+
plot = pybamm.QuickPlot(sols, output_variables=output_variables)
8254
plot.dynamic_plot()
+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#
2+
# Example showing how to prescribe the surface area per unit volume independent of
3+
# the assumed particle shape. Setting the "particle shape" option to "user" returns
4+
# a model which solves a spherical diffusion problem in the particles, but passes
5+
# a user supplied surface area per unit volume
6+
#
7+
8+
import pybamm
9+
import numpy as np
10+
11+
pybamm.set_logging_level("INFO")
12+
13+
models = [
14+
pybamm.lithium_ion.DFN({"particle shape": "spherical"}, name="spherical"),
15+
pybamm.lithium_ion.DFN({"particle shape": "user"}, name="user"),
16+
]
17+
params = [models[0].default_parameter_values, models[0].default_parameter_values]
18+
19+
# set up and solve simulations
20+
solutions = []
21+
t_eval = np.linspace(0, 3600, 100)
22+
23+
for model, param in zip(models, params):
24+
if model.name == "user":
25+
# add the user supplied parameters
26+
param.update(
27+
{
28+
"Negative electrode surface area to volume ratio [m-1]": 170000,
29+
"Positive electrode surface area to volume ratio [m-1]": 200000,
30+
"Negative surface area per unit volume distribution in x": 1,
31+
"Positive surface area per unit volume distribution in x": 1,
32+
},
33+
check_already_exists=False,
34+
)
35+
36+
sim = pybamm.Simulation(model, parameter_values=param)
37+
solution = sim.solve(t_eval)
38+
solutions.append(solution)
39+
40+
# plot solutions
41+
pybamm.dynamic_plot(
42+
solutions,
43+
[
44+
"Negative particle surface concentration [mol.m-3]",
45+
"Positive particle surface concentration [mol.m-3]",
46+
"Negative electrode interfacial current density [A.m-2]",
47+
"Positive electrode interfacial current density [A.m-2]",
48+
"Negative electrode potential [V]",
49+
"Electrolyte potential [V]",
50+
"Positive electrode potential [V]",
51+
"Terminal voltage [V]",
52+
],
53+
)

0 commit comments

Comments
 (0)