From 0043bbf7bbfbe6d691c645849f148509ed9af3be Mon Sep 17 00:00:00 2001 From: Christopher Teubert Date: Mon, 28 Aug 2023 14:33:18 -0700 Subject: [PATCH] EOD battery example --- examples/03_IncludedModels.ipynb | 515 +++++++++++++++++++++++ examples/figs/equivcircuit.png | Bin 0 -> 47140 bytes src/progpy/models/battery_electrochem.py | 2 - 3 files changed, 515 insertions(+), 2 deletions(-) create mode 100644 examples/03_IncludedModels.ipynb create mode 100644 examples/figs/equivcircuit.png diff --git a/examples/03_IncludedModels.ipynb b/examples/03_IncludedModels.ipynb new file mode 100644 index 0000000..dea2193 --- /dev/null +++ b/examples/03_IncludedModels.ipynb @@ -0,0 +1,515 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. Models included in Progpy\n", + "ProgPy includes a subpackage with prognostic models developed by ProgPy contributors. These models can be configured, used, and modified by users for their purposes. All models are part of the models subpackage (`progpy.models`). Each model is different, and model documentation can be found [here](https://nasa.github.io/progpy/api_ref/prog_models/IncludedModels.html).\n", + "\n", + "In this section we will briefly go over the specifics of each model, and how it could be used in simulation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ThrownObject" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ThrownObject is typically the first model individuals are introduced to when learning to use progpy. This is because it's so simple. ThrownObject is a model of an object being thrown directly into the air and returning to the earth. The object is affected by gravity and air resistence in its path. The model includes two events: 1. `falling`- when the object is falling towards the ground, and 2. `impact`- when the object has impacted the ground.\n", + "\n", + "This model has been used extensively in the previous sections. Rather than repeating this here, I direct the user to the sections on Simulating to Threshold a Parameters in 1. Simulating with Prognostics Models." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Battery Models" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The battery models are the most mature and widely used models in the ProgPy package. And there are a lot of them, each serving a different purpose and simulating different phenomenon. We will introduce each of them in this example, describing how to select, configure, and use each.\n", + "\n", + "There are two ways to divide the models included in progpy, the first is by what they're simulating: *discharge* or *degredation*. \n", + "\n", + "*Discharge* is the process of using the batteries energy. When a battery is fully discharged, it no longer can be used for power. This point is typically called End of Discharge (EOD). \n", + "\n", + "*Degredation* is the gradual decrease of performance of a battery with use. This in easiest to see in the decrease in capacity, but it effects other parameters as well. \n", + "\n", + "The second dimension of classification is by model strategy: Equivalent Circuit or Electrochemistry. Equivalent circuit models represent the behavior of the model as an electrical circuit, while electrochemistry models model the chemical phenomenon at play internal to the battery. Electrochemistry models are typically more accurate, but they also are more complex, and therefore slower to run.\n", + "\n", + "The classification of the six models into those categories are illustrated below:\n", + "| | Equivalent Circuit | Electrochemistry | \n", + "| --- | --- | --- |\n", + "| Discharge | [BatteryCircuit](https://nasa.github.io/progpy/api_ref/prog_models/IncludedModels.html#prog_models.models.BatteryCircuit) | [BatteryElectroChemEOD](https://nasa.github.io/progpy/api_ref/prog_models/IncludedModels.html#prog_models.models.BatteryElectroChemEOD) |\n", + "| Degredation | | [BatteryElectroChemEOL](https://nasa.github.io/progpy/api_ref/prog_models/IncludedModels.html#prog_models.models.BatteryElectroChemEOL) | \n", + "| Both | | [BatteryElectroChemEODEOL](https://nasa.github.io/progpy/api_ref/prog_models/IncludedModels.html#prog_models.models.BatteryElectroChemEODEOL) |\n", + "\n", + "These models are described in more detail below:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BatteryCircuit" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`progpy.models.BatteryCircuit` is a vectorized prognostics model of a battery discharge, where it's behavior is represented by an equivalent circuit, below. The specifics of the model are described in the papaer [*Advanced Methods for Determining Prediction Uncertainty in Model-Based Prognostics with Application to Planetary Rovers*](https://papers.phmsociety.org/index.php/phmconf/article/view/2253).\n", + "\n", + "![Equivalent Circuit](figs/equivcircuit.png)\n", + "\n", + "This is the simplest of the battery models, and as a result, the least computationally expensive. This is also the least accurate or complete of the models. It is a simple approximation of the behavior of a battery during discharge. When deciding wether to use equivalent circuit or electrochemistry model, users should consider what accuracy they need, and what computational resources they have available.\n", + "\n", + "First, we will import and instantiate the `BatteryCircuit` model to describe it further. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from progpy.models import BatteryCircuit\n", + "m = BatteryCircuit()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Battery circuit predicts one [event](https://nasa.github.io/progpy/glossary.html#term-event): End of Discharge, denoted as `EOD`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(m.events)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`EOD` is the point at which the battery no longer has sufficient charge to be used.\n", + "\n", + "The battery [outputs](https://nasa.github.io/progpy/glossary.html#term-output) (i.e, measurable parameters) are voltage and temperature, denoted by `v` and `t`, respectively." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(m.outputs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Its one [input](https://nasa.github.io/progpy/glossary.html#term-input) (i.e., how it is loaded) is the current drawn from the battery, denoted by `i`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(m.inputs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `BatteryCircuit` model has four states: temperature (`tb`), and the charge stored in different capacitors in the model (`qb`, `qcp`, `qcs`). For more information on these states, see the paper at the top of this section." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(m.states)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The batteries parameters are listed below. Each of these describe different aspects of the circuit. For details on these parameters, see the paper above, or the model documentation [here](https://nasa.github.io/progpy/api_ref/prog_models/IncludedModels.html#prog_models.models.BatteryCircuit)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(m.parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Generally, for a complex model like this these parameters are not set directly, instead they are estimated using parameter estimation (see 2. Parameter Estimation). VEOD, however, must be set manually. VEOD is the voltage at which the battery no longer can perform its function.\n", + "\n", + "For this model it's also a good idea to re-estimate parameters regularly. The parameters shift as the battery ages, especially qMax (the battery capacity).\n", + "\n", + "To get to know this model better, let's use it in simulation. First we have to define a loading (i.e., current) profile for simulation. In this example we will start with a constant load. See the future load section in 01_Simulation for more details on future loading." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "load = m.InputContainer({'i': 2.5})\n", + "def future_load(t, x=None):\n", + " return load" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, let's use this loading profile to simulate until End of Discharge (EOD). EOD occurs when the voltage of the battery reaches the value of the parameter VEOD. We'll generate plots of the outputs (temperature and voltage)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "results = m.simulate_to_threshold(future_load, dt=('auto', 1), save_freq=1)\n", + "fig = results.outputs.plot(compact=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first thing to notice here is that voltage (bottom graph) decreases with time. At the beginning of the discharge, voltage drops suddenly, this is from the first application of current. Then voltage decreases fairly linerally with time, until it hits a knee point, just before EOD. In general, this is the voltage curve you would expect from a battery during discharge.\n", + "\n", + "The EOD event state decreases linerally with time, as seen below:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig = results.event_states.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember that this in this case a constant load (i.e., current) was applied to the battery. Let's repeat this with a more complex load profile. In this case we'll use a piecewise profile, defined below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from progpy.loading import Piecewise\n", + "future_load = Piecewise(\n", + " m.InputContainer,\n", + " [600, 900, 1800, 3600],\n", + " {'i': [2, 1, 4, 2, 3]})\n", + "\n", + "results = m.simulate_to_threshold(future_load, dt=('auto', 1), save_freq=1)\n", + "fig = results.inputs.plot()\n", + "fig = results.outputs.plot(compact=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we see voltage following a similar curve from before, but there are jumps as the current changes. Voltage is directly correlated with the current draw. When the current draw decreases, voltage will increase, and vice versa.\n", + "\n", + "There is some sensitivity to timestep in capturing behavior, and for a dt above about 2 seconds, it doesn't work at all." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "results = m.simulate_to_threshold(future_load, dt=('auto', 2), save_freq=2)\n", + "fig = results.outputs.plot(compact=False, title=\"dt = 2\")\n", + "\n", + "results = m.simulate_to_threshold(future_load, dt=('auto', 2.5), save_freq=2.5)\n", + "fig = results.outputs.plot(compact=False, title=\"dt = 2.5\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This instability is very dependent on model parameters, for a differntly configured model it might be stable for a different range of dts." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BatteryElectroChemEOD" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similar to BatteryCircuit, `progpy.models.BatteryElectroChemEOD` is a vectorized prognostics model of a battery discharge. Except the behavior is modeled not as a circuit, but instead by the electrochemical behavior of a battery.\n", + "\n", + "The specifics of the model are described in the papaer [*Electrochemistry-based Battery Modeling for Prognostics*](https://papers.phmsociety.org/index.php/phmconf/article/view/2252).\n", + "\n", + "First, we will import and instantiate the `BatteryElectroChemEOD` model to describe it further. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from progpy.models import BatteryElectroChemEOD\n", + "m = BatteryElectroChemEOD()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The events, outputs, and inputs are identical to `BatteryCircuit` above" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('events', m.events)\n", + "print('inputs', m.inputs)\n", + "print('outputs', m.outputs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `BatteryElectroChemEOD` model has eight states. For more information on these states, see the paper at the top of this section." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(m.states)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The batteries parameters are listed below. Each of these describe different aspects of the circuit. For details on these parameters, see the paper above, or the model documentation [here](https://nasa.github.io/progpy/api_ref/prog_models/IncludedModels.html#prog_models.models.BatteryElectroChemEOD)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(m.parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that there are significantly more parameters and twice as many states in `BatteryElectroChemEOD` when compared to `BatteryCircuit`. The increased complexity allows the model to better represent battery discharge behavior, especially thermal effects which are not very well represented in the `BatteryCircuit` model.\n", + "\n", + "Generally, for a complex model like this these parameters are not set directly, instead they are estimated using parameter estimation (see 2. Parameter Estimation). VEOD, however, must be set manually. VEOD is the voltage at which the battery no longer can perform its function.\n", + "\n", + "Like with `BatteryCircuit`, for this model it's also a good idea to re-estimate parameters regularly. The parameters shift as the battery ages, especially qMobile, Ro, and tDiffusion.\n", + "\n", + "To get to know this model better, let's use it in simulation. First we have to define a loading (i.e., current) profile for simulation. In this example we will start with a constant load. See the future load section in 01_Simulation for more details on future loading." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "load = m.InputContainer({'i': 2.5})\n", + "def future_load(t, x=None):\n", + " return load\n", + "\n", + "results = m.simulate_to_threshold(future_load, dt=('auto', 1), save_freq=1)\n", + "fig = results.outputs.plot(compact=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note here the same characteristic voltage profile shape (bottom). The crver are not exactly the same. Note the end of discharge occurs 300 seconds earlier in this model than in the batterycircuit. Also, the temperature graph has a different shape. This is where you can see the better performance in the `BatteryElectroChemEOD` model. \n", + "\n", + "Now let's repeat this with the piecewise load profile." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from progpy.loading import Piecewise\n", + "future_load = Piecewise(\n", + " m.InputContainer,\n", + " [600, 900, 1800, 3600],\n", + " {'i': [2, 1, 4, 2, 3]})\n", + "\n", + "results = m.simulate_to_threshold(future_load, dt=('auto', 1), save_freq=1)\n", + "fig = results.inputs.plot()\n", + "fig = results.outputs.plot(compact=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we see voltage following a similar curve from before, but there are jumps as the current changes. Voltage is directly correlated with the current draw. When the current draw decreases, voltage will increase, and vice versa.\n", + "\n", + "Like with `BatteryCircuit`, there is some sensitivity to timestep in capturing behavior, and higher dt's will result in unstable and inaccurate behavior." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "results = m.simulate_to_threshold(future_load, dt=('auto', 3), save_freq=3)\n", + "fig = results.outputs.plot(compact=False, title=\"dt = 3\")\n", + "\n", + "results = m.simulate_to_threshold(future_load, dt=('auto', 10), save_freq=10)\n", + "fig = results.outputs.plot(compact=False, title=\"dt = 10\")\n", + "\n", + "results = m.simulate_to_threshold(future_load, dt=('auto', 12), save_freq=12)\n", + "fig = results.outputs.plot(compact=False, title=\"dt = 12\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BatteryElectroChemEOL" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BatteryElectroChemEODEOL" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Centrifugal Pump" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pneumatic Valve" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Electric Powertrain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aircraft Flight Models" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusions" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.11.0 64-bit", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.0" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/figs/equivcircuit.png b/examples/figs/equivcircuit.png new file mode 100644 index 0000000000000000000000000000000000000000..cff416b1c7fdeed21836f4f612a16cd70a84ddbd GIT binary patch literal 47140 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