Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 1115 surface area #1120

Merged
merged 11 commits into from
Aug 4, 2020
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

## Features

- Added "R-averaged particle concentration" variables` ([#1118](https://github.com/pybamm-team/PyBaMM/pull/1118))

- Automatically compute surface area per unit volume based on particle shape for li-ion models ([#1120])(https://github.com/pybamm-team/PyBaMM/pull/1120)
- Added "R-averaged particle concentration" variables ([#1118](https://github.com/pybamm-team/PyBaMM/pull/1118))
- Added support for sensitivity calculations to the casadi solver ([#1109](https://github.com/pybamm-team/PyBaMM/pull/1109))
- 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))
- Allowed keyword arguments to be passed to `Simulation.plot()` ([#1099](https://github.com/pybamm-team/PyBaMM/pull/1099))
Expand All @@ -18,6 +20,8 @@

## Breaking changes

- The modules containing standard parameters are now classes so they can take options
(e.g. `standard_parameters_lithium_ion` is now `LithiumIonParameters`) ([#1120])(https://github.com/pybamm-team/PyBaMM/pull/1120)
- 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))


Expand Down
2 changes: 1 addition & 1 deletion docs/source/parameters/electrical_parameters.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Electrical Parameters
=====================

.. automodule:: pybamm.parameters.electrical_parameters
.. autoclass:: pybamm.ElectricalParameters
3 changes: 1 addition & 2 deletions docs/source/parameters/geometric_parameters.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
Geometric Parameters
====================

.. automodule:: pybamm.parameters.geometric_parameters

.. autoclass:: pybamm.GeometricParameters
6 changes: 3 additions & 3 deletions docs/source/parameters/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ Parameters
geometric_parameters
electrical_parameters
thermal_parameters
standard_parameters_lithium_ion
standard_parameters_lead_acid
parameter_sets
lithium_ion_parameters
lead_acid_parameters
parameter_sets
4 changes: 4 additions & 0 deletions docs/source/parameters/lead_acid_parameters.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Lead-Acid Parameters
====================

.. autoclass:: pybamm.LeadAcidParameters
4 changes: 4 additions & 0 deletions docs/source/parameters/lithium_ion_parameters.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Lithium-ion Parameters
======================

.. autoclass:: pybamm.LithiumIonParameters
4 changes: 2 additions & 2 deletions docs/source/parameters/parameter_values.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Base Parameter Values
=====================
Parameter Values
================

.. autoclass:: pybamm.ParameterValues
:members:
4 changes: 0 additions & 4 deletions docs/source/parameters/standard_parameters_lead_acid.rst

This file was deleted.

4 changes: 0 additions & 4 deletions docs/source/parameters/standard_parameters_lithium_ion.rst

This file was deleted.

4 changes: 2 additions & 2 deletions docs/source/parameters/thermal_parameters.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Thermal Parameters
=====================
==================

.. automodule:: pybamm.parameters.thermal_parameters
.. autoclass:: pybamm.ThermalParameters
5 changes: 3 additions & 2 deletions docs/tutorials/add-model.rst
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,11 @@ The inbuilt models in PyBaMM do not add all the model attributes within their ow
In addition to calling submodels, common sets of variables and parameters found in
lithium-ion and lead acid batteries are provided in
`standard_variables.py`,
`standard_parameters_lithium_ion.py`,
`standard_parameters_lead_acid.py`,
`lithium_ion_parameters.py`,
`lead_acid_parameters.py`,
`electrical_parameters.py`,
`geometric_parameters.py`,
`thermal_parameters.py`,
and `standard_spatial_vars.py`
which we encourage use of to save redefining the same parameters and variables in
every model and submodel.
Expand Down
25 changes: 8 additions & 17 deletions examples/notebooks/change-input-current.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[33mWARNING: You are using pip version 20.1.1; however, version 20.2 is available.\n",
"You should consider upgrading via the '/home/ferranbrosa/PyBaMM/env/bin/python -m pip install --upgrade pip' command.\u001b[0m\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
Expand Down Expand Up @@ -77,7 +75,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "55b83465a9ea4937bfd3444fa7198460",
"model_id": "0b6d24762adc49bb95efa892bed183da",
"version_major": 2,
"version_minor": 0
},
Expand Down Expand Up @@ -126,7 +124,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "b827d913896b418caf161f6d8ee9df92",
"model_id": "9cdb5f149490457796917576b3d5eb13",
"version_major": 2,
"version_minor": 0
},
Expand Down Expand Up @@ -164,7 +162,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "64e6f94728be4ef5bfec800bc26f0768",
"model_id": "a43ac5cc2f204becbb8263f606f7fe94",
"version_major": 2,
"version_minor": 0
},
Expand Down Expand Up @@ -270,7 +268,7 @@
"param = model.default_parameter_values\n",
"\n",
"# set user defined current function\n",
"A = pybamm.electrical_parameters.I_typ\n",
"A = model.param.I_typ\n",
"omega = 0.1\n",
"param[\"Current function [A]\"] = my_fun(A,omega)\n",
"\n",
Expand All @@ -294,7 +292,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c2a1fdc7aa5246aaa9543650d96894ca",
"model_id": "373a98b202d54b958d2a1bc8c5653aba",
"version_major": 2,
"version_minor": 0
},
Expand Down Expand Up @@ -326,20 +324,13 @@
"quick_plot = pybamm.QuickPlot(solution, output_variables, label)\n",
"quick_plot.dynamic_plot();"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "PyBaMM development (env)",
"display_name": "Python 3",
"language": "python",
"name": "pybamm-dev"
"name": "python3"
},
"language_info": {
"codemirror_mode": {
Expand All @@ -351,7 +342,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
"version": "3.6.9"
}
},
"nbformat": 4,
Expand Down
30 changes: 22 additions & 8 deletions examples/notebooks/compare-comsol-discharge-curve.ipynb

Large diffs are not rendered by default.

24 changes: 16 additions & 8 deletions examples/notebooks/compare-ecker-data.ipynb

Large diffs are not rendered by default.

42 changes: 22 additions & 20 deletions examples/notebooks/models/pouch-cell-model.ipynb

Large diffs are not rendered by default.

6 changes: 1 addition & 5 deletions examples/scripts/SPMe_SOC.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
import numpy as np
import matplotlib.pyplot as plt

plt.close("all")
pybamm.set_logging_level(30)

factor = 6.38
capacities = []
specific_capacities = []
Expand Down Expand Up @@ -56,8 +53,6 @@
"Maximum concentration in positive electrode [mol.m-3]": 50000,
"Initial concentration in negative electrode [mol.m-3]": 12500,
"Initial concentration in positive electrode [mol.m-3]": 25000,
"Negative electrode surface area to volume ratio [m-1]": 180000.0,
"Positive electrode surface area to volume ratio [m-1]": 150000.0,
"Current function [A]": I_app,
}
)
Expand Down Expand Up @@ -133,3 +128,4 @@
ax1.set_ylabel("Capacity [mAh]")
ax2.set_ylabel("Specific Capacity [mAh.cm-3]")
ax2.set_xlabel("Anode : Cathode thickness")
plt.show()
15 changes: 11 additions & 4 deletions examples/scripts/compare_comsol/compare_comsol_DFN.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,16 @@

# load parameters and process model and geometry
param = pybamm_model.default_parameter_values
param["Electrode width [m]"] = 1
param["Electrode height [m]"] = 1
param["Current function [A]"] = 24 * C_rates[C_rate]
param.update(
{
"Electrode width [m]": 1,
"Electrode height [m]": 1,
"Negative electrode conductivity [S.m-1]": 126,
"Positive electrode conductivity [S.m-1]": 16.6,
"Current function [A]": 24 * C_rates[C_rate],
}
)

param.process_model(pybamm_model)
param.process_geometry(geometry)

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


def get_interp_fun(variable_name, domain):
Expand Down
12 changes: 9 additions & 3 deletions examples/scripts/compare_comsol/discharge_curve.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,15 @@

# load parameters and process model and geometry
param = model.default_parameter_values
param["Electrode width [m]"] = 1
param["Electrode height [m]"] = 1
param["Current function [A]"] = "[input]"
param.update(
{
"Electrode width [m]": 1,
"Electrode height [m]": 1,
"Negative electrode conductivity [S.m-1]": 126,
"Positive electrode conductivity [S.m-1]": 16.6,
"Current function [A]": "[input]",
}
)
param.process_model(model)
param.process_geometry(geometry)

Expand Down
56 changes: 14 additions & 42 deletions examples/scripts/compare_lithium_ion_particle_distribution.py
Original file line number Diff line number Diff line change
@@ -1,68 +1,40 @@
#
# Compare lithium-ion battery models
# Compare lithium-ion battery models with and without particle size distibution
#
import argparse
import numpy as np
import pybamm

parser = argparse.ArgumentParser()
parser.add_argument(
"--debug", action="store_true", help="Set logging level to 'DEBUG'."
)
args = parser.parse_args()
if args.debug:
pybamm.set_logging_level("DEBUG")
else:
pybamm.set_logging_level("INFO")
pybamm.set_logging_level("INFO")

# load models
options = {"thermal": "isothermal"}
models = [
pybamm.lithium_ion.DFN(options, name="standard DFN"),
pybamm.lithium_ion.DFN(options, name="particle DFN"),
pybamm.lithium_ion.DFN(name="standard DFN"),
pybamm.lithium_ion.DFN(name="particle DFN"),
]


# load parameter values and process models and geometry
# load parameter values
params = [models[0].default_parameter_values, models[1].default_parameter_values]
params[0]["Typical current [A]"] = 1.0
params[0].process_model(models[0])


params[1]["Typical current [A]"] = 1.0


def negative_distribution(x):
return 1 + x
return 1 + 2 * x / models[1].param.l_n


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


params[1]["Negative particle distribution in x"] = negative_distribution
params[1]["Positive particle distribution in x"] = positive_distribution
params[1].process_model(models[1])

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

# discretise models
for param, model in zip(params, models):
# create geometry
geometry = model.default_geometry
param.process_geometry(geometry)
mesh = pybamm.Mesh(geometry, models[-1].default_submesh_types, var_pts)
disc = pybamm.Discretisation(mesh, model.default_spatial_methods)
disc.process_model(model)

# solve model
solutions = [None] * len(models)
# set up and solve simulations
t_eval = np.linspace(0, 3600, 100)
for i, model in enumerate(models):
solutions[i] = pybamm.CasadiSolver().solve(model, t_eval)

sols = []
for model, param in zip(models, params):
sim = pybamm.Simulation(model, parameter_values=param)
sol = sim.solve(t_eval)
sols.append(sol)

output_variables = [
"Negative particle surface concentration",
Expand All @@ -78,5 +50,5 @@ def positive_distribution(x):
]

# plot
plot = pybamm.QuickPlot(solutions, output_variables=output_variables)
plot = pybamm.QuickPlot(sols, output_variables=output_variables)
plot.dynamic_plot()
12 changes: 7 additions & 5 deletions pybamm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ def version(formatted=False):
to_python,
EvaluatorPython,
)

if system() != "Windows":
from .expression_tree.operations.evaluate import EvaluatorJax

Expand Down Expand Up @@ -159,14 +160,15 @@ def version(formatted=False):
from .geometry import standard_spatial_vars

#
# Parameters class and methods
# Parameter classes and methods
#
from .parameters.parameter_values import ParameterValues
from .parameters import constants
from .parameters import geometric_parameters
from .parameters import electrical_parameters
from .parameters import thermal_parameters
from .parameters import standard_parameters_lithium_ion, standard_parameters_lead_acid
from .parameters.geometric_parameters import GeometricParameters
from .parameters.electrical_parameters import ElectricalParameters
from .parameters.thermal_parameters import ThermalParameters
from .parameters.lithium_ion_parameters import LithiumIonParameters
from .parameters.lead_acid_parameters import LeadAcidParameters
from .parameters import parameter_sets


Expand Down
Loading