Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
c51269f
Add JOSS template and compilation action
NicolaCourtier Apr 19, 2024
cdc1ffa
Increment the upload action
NicolaCourtier Apr 19, 2024
c3a4ee3
Add workflow dispatch trigger
NicolaCourtier Apr 19, 2024
4935309
Fix typo
NicolaCourtier Apr 19, 2024
e36375a
Update ref format
NicolaCourtier Apr 19, 2024
8e0f209
Add sketch
NicolaCourtier Apr 26, 2024
958fd8b
Add architecture figure
NicolaCourtier Apr 26, 2024
1768d2a
Add refs
NicolaCourtier Apr 26, 2024
47027fd
Add table
NicolaCourtier May 1, 2024
34bc428
Update tables
NicolaCourtier May 1, 2024
2371bdc
Add review refs
NicolaCourtier May 1, 2024
23d8c9d
Add some equations
NicolaCourtier May 1, 2024
61836d2
Add ref
NicolaCourtier May 1, 2024
b0d0373
Update Omega and table refs
NicolaCourtier May 1, 2024
3f47f8d
Minor formatting
NicolaCourtier May 1, 2024
a894e62
Merge branch 'develop' into joss
NicolaCourtier Jun 18, 2024
7205dde
updt summary, tables, statement of need
BradyPlanden Jul 1, 2024
9b0e65d
fix: feedback from initial internal review
BradyPlanden Jul 8, 2024
cf1f18a
add pdf asset for JOSS inclusion
BradyPlanden Jul 8, 2024
6359582
Merge branch 'develop' into joss
BradyPlanden Jul 8, 2024
e6858d8
small additions, test JOSS CI on pdf figure rendering
BradyPlanden Jul 8, 2024
8bb8ce0
updates to statement of need, architecture
BradyPlanden Jul 8, 2024
ea81678
update tables, monte carlo additions
BradyPlanden Jul 8, 2024
6a49a5f
Merge branch 'develop' into joss
NicolaCourtier Aug 19, 2024
5204562
Minor updates and formatting
NicolaCourtier Aug 21, 2024
37574b5
Pre-commit
NicolaCourtier Aug 21, 2024
1ec3697
Add joss plotting scripts
NicolaCourtier Aug 21, 2024
313fe0d
Merge branch 'develop' into joss
NicolaCourtier Aug 22, 2024
63e0b9f
Merge branch 'develop' into joss
NicolaCourtier Aug 23, 2024
4962c43
Add example plotting scripts and plots
NicolaCourtier Aug 24, 2024
4372e72
Add example design plots
NicolaCourtier Aug 25, 2024
2d7bb5e
Add example plots to paper
NicolaCourtier Aug 25, 2024
7773db5
Merge branch 'refs/heads/develop' into joss
BradyPlanden Sep 10, 2024
64224a9
Merge branch 'refs/heads/develop' into joss
BradyPlanden Sep 16, 2024
fd67871
Merge branch 'develop' into joss
BradyPlanden Sep 18, 2024
cd7043e
Update figures and text.
BradyPlanden Sep 23, 2024
c34cccf
Merge branch 'develop' into joss
BradyPlanden Nov 26, 2024
15a461a
feat: adds multi-dimensional learning rate gradient descent implement…
BradyPlanden Nov 25, 2024
183bda1
Update plots, article, adds shell script for plot combination
BradyPlanden Nov 26, 2024
1b7c54c
adds contour figure, shell updates, clean-up
BradyPlanden Nov 26, 2024
6fafbeb
feat: adds kwargs to plots, effective sample size has option combined…
BradyPlanden Nov 27, 2024
4e16ba2
feat: improve contour and surface plots, add x0 entry to optimiser log
BradyPlanden Nov 27, 2024
eb870e9
plots: update final position legend entry
BradyPlanden Nov 27, 2024
f4f9fe0
Updates contour plots, adds MCMC sampling to param_plots, fixes typos
BradyPlanden Nov 27, 2024
3813244
Updates and typo to article, adds posterior plot, updates design plot…
BradyPlanden Nov 28, 2024
b1390e0
proofreading, update parameterisation example for RMSE cost, align fi…
BradyPlanden Nov 28, 2024
d60e763
update heuristic parameter convergence plot, add tex preprint format.
BradyPlanden Nov 28, 2024
5f24ac5
adds numerical impedance predictions, figs, citation. updts nyquist g…
BradyPlanden Nov 29, 2024
befecf9
Adds Agriya w/ correct affiliation, updts tex pre-print
BradyPlanden Nov 29, 2024
8488a9b
Fix typos, update table format
BradyPlanden Nov 29, 2024
272667f
Update paper.md
davidhowey Nov 29, 2024
497da1c
fixes: internal review feedback, minus figures
BradyPlanden Dec 4, 2024
4b0e6e5
Edits to paper (#578)
NicolaCourtier Dec 5, 2024
8a9b6d0
Merge branch 'develop' into joss
BradyPlanden Dec 9, 2024
53b905b
feat: updates figures, contour plot into plotly subplots.
BradyPlanden Dec 9, 2024
fce069b
feat: align object name method, adds plotly express to PlotlyManager,
BradyPlanden Dec 9, 2024
42a8be4
Update paper.md
davidhowey Dec 12, 2024
7349f83
Update paper.md
davidhowey Dec 12, 2024
38d4b87
Update paper.md
davidhowey Dec 12, 2024
c0cefbb
Update paper.md
davidhowey Dec 12, 2024
e2072b2
Update paper.md
davidhowey Dec 12, 2024
d69ee80
adds percentile to posterior figure, rebuilds pdf.
BradyPlanden Dec 12, 2024
dff81e0
Update paper.md
davidhowey Dec 12, 2024
267ba1a
Update paper.md
davidhowey Dec 12, 2024
c0fa070
Updates from review, adds bib entries, improves design plot
BradyPlanden Dec 16, 2024
5a1d625
update and vectorise figures.
BradyPlanden Dec 18, 2024
2e9b015
Minor clarifications
NicolaCourtier Dec 19, 2024
135bf58
Updates figures, /joss directory -> /papers
BradyPlanden Dec 20, 2024
62caf40
Restores workflow, MCMC table
BradyPlanden Dec 20, 2024
be32bf6
Update Agriya's affiliation (#748)
agriyakhetarpal Jun 23, 2025
e0c3208
feat: remove redudant sections post restructure
BradyPlanden Aug 29, 2025
8c9dd55
feat: updates for restructured arch
BradyPlanden Sep 20, 2025
e9444eb
feat: grammar, typos, etc.
BradyPlanden Sep 20, 2025
42f05c5
refactor: updates to architecture section, update architecture figure
BradyPlanden Sep 20, 2025
4ef2f72
fix: paper build workflow
BradyPlanden Sep 20, 2025
f02aa0e
feat: rewrites for conciseness, update architecture figure
BradyPlanden Sep 20, 2025
27e5477
Merge branch 'develop' into joss
NicolaCourtier Nov 13, 2025
7fbb9b4
Clean up bib
NicolaCourtier Nov 13, 2025
fcce923
Update text
NicolaCourtier Nov 19, 2025
cc4becc
Update diagram
NicolaCourtier Nov 20, 2025
f379f86
Update contributors link
NicolaCourtier Nov 20, 2025
2792ae8
Remove table 1
NicolaCourtier Nov 20, 2025
649dd3b
Update figures
NicolaCourtier Nov 20, 2025
5e10852
Update table 2
NicolaCourtier Nov 20, 2025
187328c
Align figures
NicolaCourtier Nov 20, 2025
d9df830
Update paper.pdf
NicolaCourtier Nov 20, 2025
2954349
Refine text in paper.md for clarity and consistency
davidhowey Nov 21, 2025
62e4100
Fix formatting and improve clarity in paper.md
davidhowey Nov 21, 2025
f860704
Refine terminology and descriptions in paper.md
davidhowey Nov 21, 2025
f450cb1
Larger figure labels
NicolaCourtier Nov 21, 2025
b3a7cd2
Negative sign
NicolaCourtier Nov 21, 2025
23326dc
Update paper.pdf
NicolaCourtier Nov 21, 2025
a27d74e
Merge branch 'develop' into joss
NicolaCourtier Nov 21, 2025
8cc96a0
Add equal-contrib field for authors
davidhowey Nov 24, 2025
ed816c3
Merge branch 'develop' into joss
NicolaCourtier Nov 24, 2025
1b05165
Rename Quansight PBC to Quansight (#841)
agriyakhetarpal Nov 24, 2025
02dce36
Re-run for consistency with release
NicolaCourtier Nov 24, 2025
3f19515
Merge branch 'develop' into joss
NicolaCourtier Nov 25, 2025
2cbb6b3
Update UK to United Kingdom in affiliations
davidhowey Dec 1, 2025
b70812c
Merge branch 'develop' into joss
NicolaCourtier Dec 8, 2025
8d7c59b
Update CITATION.cff
NicolaCourtier Dec 8, 2025
9fad94a
Add JOSS badge
NicolaCourtier Dec 8, 2025
b2493b2
Remove old versions
NicolaCourtier Dec 8, 2025
09b65bd
Delete PyBOP-high-level.pdf
NicolaCourtier Dec 8, 2025
a3a81e3
Remove Plotly express
NicolaCourtier Dec 8, 2025
9b588eb
Update for new PyProBE release
NicolaCourtier Dec 8, 2025
ce84256
Merge branch 'update-pyprobe-version' into joss
NicolaCourtier Dec 8, 2025
86b18b8
Merge branch 'develop' into joss
NicolaCourtier Dec 8, 2025
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
31 changes: 31 additions & 0 deletions .github/workflows/draft-pdf.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: JossPaperCompilation

on:
push:
paths:
- papers/joss/**
pull_request:
paths:
- 'papers/joss/**'
workflow_dispatch:
jobs:
paper:
runs-on: ubuntu-latest
name: Paper Draft
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build draft PDF
uses: openjournals/openjournals-draft-action@master
with:
journal: joss
# This should be the path to the paper within your repo.
paper-path: papers/joss/paper.md
- name: Upload
uses: actions/upload-artifact@v4
with:
name: paper
# This is the output path where Pandoc will write the compiled
# PDF. Note, this should be the same directory as the input
# paper.md
path: papers/joss/paper.pdf
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -323,3 +323,6 @@ results/

# Pycharm
*.idea/

# JOSS
jats/
83 changes: 55 additions & 28 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -1,35 +1,62 @@
cff-version: 1.2.0
title: 'PyBOP: A Python package for battery model optimisation and parameterisation'
message: >-
If you use this software, please cite the article below.
cff-version: "1.2.0"
authors:
- given-names: Brady
family-names: Planden
- family-names: Planden
given-names: Brady
orcid: "https://orcid.org/0000-0002-1082-9125"
- family-names: Courtier
given-names: Nicola E.
orcid: "https://orcid.org/0000-0002-5714-1096"
- family-names: Robinson
given-names: Martin
orcid: "https://orcid.org/0000-0002-1572-6782"
- family-names: Khetarpal
given-names: Agriya
orcid: "https://orcid.org/0000-0002-1112-1786"
- family-names: Planella
given-names: Ferran Brosa
orcid: "https://orcid.org/0000-0001-6363-2812"
- family-names: Howey
given-names: David A.
orcid: "https://orcid.org/0000-0002-0620-3955"
contact:
- family-names: Howey
given-names: David A.
orcid: "https://orcid.org/0000-0002-0620-3955"
doi: 10.5281/zenodo.17711656
message: If you use this software, please cite our article in the
Journal of Open Source Software.
preferred-citation:
authors:
- family-names: Planden
given-names: Brady
orcid: "https://orcid.org/0000-0002-1082-9125"
- given-names: Nicola E.
family-names: Courtier
- family-names: Courtier
given-names: Nicola E.
orcid: "https://orcid.org/0000-0002-5714-1096"
- given-names: Martin
family-names: Robinson
- family-names: Robinson
given-names: Martin
orcid: "https://orcid.org/0000-0002-1572-6782"
- given-names: Agriya
family-names: Khetarpal
- family-names: Khetarpal
given-names: Agriya
orcid: "https://orcid.org/0000-0002-1112-1786"
- given-names: Ferran
family-names: Brosa Planella
- family-names: Planella
given-names: Ferran Brosa
orcid: "https://orcid.org/0000-0001-6363-2812"
- given-names: David A.
family-names: Howey
- family-names: Howey
given-names: David A.
orcid: "https://orcid.org/0000-0002-0620-3955"

keywords:
- "python"
- "battery models"
- "parameter inference"
- "optimization"

journal: "arXiv"
date-released: 2024-12-20
doi: 10.48550/arXiv.2412.15859
version: "25.11" # Update this alongside new releases
repository-code: 'https://www.github.com/pybop-team/pybop'
date-published: 2025-12-03
doi: 10.21105/joss.07874
issn: 2475-9066
issue: 116
journal: Journal of Open Source Software
publisher:
name: Open Journals
start: 7874
title: "PyBOP: A Python package for battery model optimisation and
parameterisation"
type: article
url: "https://joss.theoj.org/papers/10.21105/joss.07874"
volume: 10
title: "PyBOP: A Python package for battery model optimisation and
parameterisation"
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
[![nbviewer](https://raw.githubusercontent.com/jupyter/design/master/logos/Badges/nbviewer_badge.svg)](https://nbviewer.org/github/pybop-team/PyBOP/tree/develop/examples/notebooks/)
[![Static Badge](https://img.shields.io/badge/https%3A%2F%2Fpybop-team.github.io%2Fpybop-bench%2F?label=Benchmarks)](https://pybop-team.github.io/pybop-bench/)
[![Releases](https://img.shields.io/github/v/release/pybop-team/PyBOP?color=gold)](https://github.com/pybop-team/PyBOP/releases)
[![DOI](https://joss.theoj.org/papers/10.21105/joss.07874/status.svg)](https://doi.org/10.21105/joss.07874)

[<ins>Main Branch Examples</ins>](https://github.com/pybop-team/PyBOP/tree/main/examples) [<ins>Develop Branch Examples</ins>](https://github.com/pybop-team/PyBOP/tree/develop/examples)

Expand Down
164 changes: 164 additions & 0 deletions papers/joss/design_plots.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
# A script to generate design optimisation plots for the JOSS paper.


import numpy as np
import pybamm
from pybamm import Parameter

import pybop
from pybop.plot import PlotlyManager

go = PlotlyManager().go
np.random.seed(8)
axis_font_size = 24
tick_font_size = 20

# Choose which plots to show and save
create_plot = {}
create_plot["gravimetric"] = True # takes longer
create_plot["prediction"] = True

# Define model and parameter values
model = pybamm.lithium_ion.SPMe()
pybop.pybamm.add_variable_to_model(model, "Gravimetric energy density [W.h.kg-1]")
parameter_values = pybamm.ParameterValues("Chen2020")
pybop.pybamm.set_formation_concentrations(parameter_values)
parameter_values.update(
{
"Electrolyte density [kg.m-3]": Parameter("Separator density [kg.m-3]"),
"Negative electrode active material density [kg.m-3]": Parameter(
"Negative electrode density [kg.m-3]"
),
"Negative electrode carbon-binder density [kg.m-3]": Parameter(
"Negative electrode density [kg.m-3]"
),
"Positive electrode active material density [kg.m-3]": Parameter(
"Positive electrode density [kg.m-3]"
),
"Positive electrode carbon-binder density [kg.m-3]": Parameter(
"Positive electrode density [kg.m-3]"
),
"Positive electrode porosity": 1.0
- Parameter("Positive electrode active material volume fraction"),
"Cell mass [kg]": pybop.pybamm.cell_mass(),
},
check_already_exists=False,
)

# Fitting parameters
parameter_values.update(
{
"Positive electrode thickness [m]": pybop.Parameter(
initial_value=8.88e-05,
prior=pybop.Gaussian(7.56e-05, 3e-05),
bounds=[50e-06, 120e-06],
transformation=pybop.UnitHyperCube(lower=50e-6, upper=120e-6),
),
"Positive electrode active material volume fraction": pybop.Parameter(
initial_value=0.42,
prior=pybop.Gaussian(0.58, 0.1),
bounds=[0.3, 0.825],
transformation=pybop.UnitHyperCube(lower=0.3, upper=0.825),
),
}
)

# Define test protocol
experiment = pybamm.Experiment(["Discharge at 1C until 2.5 V (10 second period)"])
Q = parameter_values["Nominal cell capacity [A.h]"]
print(f"The 1C rate is {Q} A.")

# Generate problem
simulator = pybop.pybamm.Simulator(
model,
parameter_values=parameter_values,
protocol=experiment,
solver=pybamm.IDAKLUSolver(atol=1e-6, rtol=1e-6),
)
cost = pybop.DesignCost(target="Gravimetric energy density [W.h.kg-1]")
problem = pybop.Problem(simulator, cost)

# Set up the optimiser
options = pybop.PintsOptions(max_iterations=250, max_unchanged_iterations=45)
optim = pybop.NelderMead(problem, options=options)

# Run optimisation
result = optim.run()
print(result)
print("Estimated parameters:", result.x)
print(f"Initial gravimetric energy density: {problem(result.x0):.1f} W.h.kg-1")
print(f"Optimised gravimetric energy density: {problem(result.x):.1f} W.h.kg-1")

if create_plot["gravimetric"]:
# Plot the cost landscape with optimisation path
gravimetric_fig = pybop.plot.contour(
result,
steps=25,
show=False,
xaxis=dict(
title=dict(
text="Positive electrode thickness / m", font_size=axis_font_size
),
tickfont_size=tick_font_size,
exponentformat="power",
),
yaxis=dict(title_font_size=axis_font_size, tickfont_size=tick_font_size),
legend=dict(
orientation="h",
yanchor="bottom",
y=1.02,
xanchor="right",
x=1,
font_size=tick_font_size,
),
coloraxis_colorbar=dict(tickfont_size=tick_font_size),
margin=dict(t=50),
title=None,
)
gravimetric_fig.write_image("figures/individual/design_gravimetric.pdf")

if create_plot["prediction"]:
# Plot the timeseries output
problem.target = "Voltage [V]"
figs = pybop.plot.problem(
problem,
inputs=result.best_inputs,
title=None,
legend=dict(
orientation="h",
yanchor="bottom",
y=1.02,
xanchor="right",
x=1,
font_size=tick_font_size - 2,
),
xaxis=dict(
showline=True,
linewidth=1,
linecolor="black",
mirror=True,
title_font_size=axis_font_size,
tickfont_size=tick_font_size,
),
yaxis=dict(
showline=True,
linewidth=1,
linecolor="black",
mirror=True,
title_font_size=axis_font_size,
tickfont_size=tick_font_size,
),
margin=dict(t=60, b=84, r=50, l=15),
show=False,
)

prediction_fig = figs[0]
prediction_fig.data[1].update(line=dict(color="#00CC97"))
prediction_fig.data[
0
].name = f"Initial: {problem(result.x0):.1f} W&#8239;h&#8239;kg<sup>-1</sup>"
prediction_fig.data[
1
].name = f"Optimised: {problem(result.x):.1f} W&#8239;h&#8239;kg<sup>-1</sup>"
prediction_fig.show()
prediction_fig.write_image("figures/individual/design_prediction.pdf")
Binary file added papers/joss/figures/PyBOP_components.drawio.pdf
Binary file not shown.
Binary file added papers/joss/figures/combined/contour_subplot.pdf
Binary file not shown.
Binary file added papers/joss/figures/combined/converge.pdf
Binary file not shown.
Binary file added papers/joss/figures/combined/design.pdf
Binary file not shown.
Binary file added papers/joss/figures/combined/impedance.pdf
Binary file not shown.
Binary file not shown.
Binary file added papers/joss/figures/combined/posteriors.pdf
Binary file not shown.
Binary file added papers/joss/figures/combined/sim-landscape.pdf
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added papers/joss/figures/individual/landscape.pdf
Binary file not shown.
Binary file added papers/joss/figures/individual/simulation.pdf
Binary file not shown.
9 changes: 9 additions & 0 deletions papers/joss/image_combine.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
pdfjam --nup 2x1 figures/individual/design_prediction.pdf figures/individual/design_gravimetric.pdf --landscape --outfile figures/combined/design.pdf --papersize '{420px,900px}'

pdfjam --nup 3x1 figures/individual/gradient_parameters.pdf figures/individual/evolution_parameters.pdf figures/individual/heuristic_parameters.pdf --landscape --outfile figures/combined/optimisers_parameters.pdf --papersize '{900px,1440px}'

pdfjam --nup 2x1 figures/individual/convergence_minimising.pdf figures/individual/convergence_maximising.pdf --landscape --outfile figures/combined/converge.pdf --papersize '{400px,900px}' --trim '0cm 0cm 0cm 1.5cm' --clip true

pdfjam --nup 2x1 figures/individual/simulation.pdf figures/individual/landscape.pdf --landscape --outfile figures/combined/sim-landscape.pdf --papersize '{420px,900px}'

pdfjam --nup 2x1 figures/individual/impedance_spectrum.pdf figures/individual/impedance_contour.pdf --landscape --outfile figures/combined/impedance.pdf --papersize '{420px,900px}'
Loading