ExperimentalData
classExperimentalData
class#While PyBaMM is a modeling package, the majority of battery research is performed through experiments, whose data (cell voltage, current, temperature, …) can be generated in a wide variety of formats.
The goal of this project is to develop functionality to better interface PyBaMM with this experimental data.
In particular, the proposed ExperimentalData
class should import real data and behave like the existing Solution
class (generated by solving a model), so experimental data can be easily plotted and compared with simulations.
ExperimentalData
class fully integrated with the PyBaMM structureA common type of experiment in battery science is Electrochemical Impedance Spectroscopy (EIS), which is used to generate a plot known as the “Nyquist plot”. While this is typically modeled using simple “equivalent-circuit” models, the physical models implemented in PyBaMM could also be used to explain such experiments. In this project, we will
a) Develop functionality to solve a PyBaMM model in the frequency domain to generate Nyquist plots
b) Integrate with existing EIS modeling packages, such as impedance.py
or pyEIS
, to fit experimental data
impedance.py
or pyEIS
, to fit experimental dataPyBaMM has plotting functionality that enables you to compare different variables and different models both as a snap-shot in time and dynamically with sliders but the single plots can quickly become very crowded and complicated. Knowing the details of the models is not so important for this project but the key thing to know is there are many variables that could be plotted and they could have different dimensions. For our most basic 1+1D model which solves 1D transport between electrodes (x-direction) coupled with 1D transport inside particles (r-direction), the spatial dimensionality of a variable can be 0d for a volume-averaged variable or an x-averaged variable that does not depend on r, 1d for an x-dependent or r-averaged variable and 2d for variables that depend on both x and r such as particle concentration. All variables also vary with time and/or by cycle number. PyBaMM also allows for simulations with higher spatial dimensions where the plane of the current collector is 2D and this adds an extra y-dimension to all the above-mentioned variables. It is also possible to run ensembles of models which could number in the 100s or even thousands and so finding ways of presenting this large amount of information in a clear, concise and configurable way presents a difficult challenge. With 10s-100s of variables, 100s of time points per cycle and, 1000s of instances in an ensemble, the amount of data generated by a single simple model can grow very large very quickly and post-processing this data requires big-data analytical skills. In this project, we will:
a) Develop functionality to enhance visualisation of large simulation datasets. This could be in the form of a streamlit or dash app or perhaps a more configurable matplotlib window.
b) Presentation of informative statistics for ensemble simulations
c) Your work could even form the basis for an additional package in its own right with enhanced capability to analyse not only simulation data but also upload and compare experimental data for example.
d) If time allows the project could extend to include visualization for PyBaMM extensions that cover pack simulations and highly resolved 3D battery models.
Improve documentation infrastructure by borrowing ideas from successful Python packages. Some ideas are:
Note that the focus of this project is not on writing documentation but on improving the infrastructure around it.
The aim of this project is to reorganize the parameter set structure in PyBaMM and add functionality to read parameter sets directly from LiionDB. PyBaMM has a few parameter sets from the literature, but these were added piece-meal with no overarching logic. We would like to reorganize this so that there are only a few representative parameter sets, for getting started, but the full parameter library is separate in LiionDB. Users will be encouraged to define their own parameter sets locally from LiionDB, rather than relying on the inbuilt PyBaMM libraries.
PyBaMM currently has a very basic benchmark framework. The aim of this project is to improve the benchmark suite, the website displaying the results and the analysis tools.
Currently, the spatial domains are defined to have arbitrary endpoints, and for the battery models it means that the electrode thicknesses are hard-coded in the domain and cannot be defined as an input parameter. The goal of this project is to reformat the discretisations (and models) so all the domains are defined between 0 and 1.