BatterySimulatorBLAST/python/simulation_with_custom_prof...

313 lines
164 KiB
Plaintext
Raw Permalink Normal View History

{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"### Battery life model library\n",
"Example notebook demonstrating how to use the battery life models in Python.\n",
"\n",
"First examples use the Kokam NMC111|Gr 75Ah battery life model. The battery modeled here is a high-power cell with long cycle life. Because nominal cell resistance is low, the relative change of resistance at end-of-life is quite high compared to other cell designs (~300% increase in cell resistance at 80% capacity if not more). Fade rates can be changed in the code to accomodate other cell models. Documentation is provided in the life model class. See https://ieeexplore.ieee.org/abstract/document/7963578 for the aging test details and results used to parameterize this model."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from nmc111_gr_Kokam75Ah_2017 import Nmc111_Gr_Kokam75Ah_Battery\n",
"from battery_profile import BatProfile"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We instantiate a BatProfile and apply the methods in the specific order to process the intervals for both soc and temperature"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"profile = BatProfile()\n",
"profile.init_intervals()\n",
"profile.preprocess_soc_intervals()\n",
"profile.temp_sequence_generation()\n",
"profile.process_soc_time()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After the pre-processing done earlier, we can execute `generate_day_values(number_of_discharges)` to generate curves"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"soc_day_sequence, temp_day_sequence, time_day_sequence = profile.generate_day_values(4)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fb0bbb44820>]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(time_day_sequence, soc_day_sequence)\n",
"plt.plot(time_day_sequence, temp_day_sequence)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To run, the life model needs timeseries data: the time in seconds since beginning-of-life of the battery, the state-of-charge of the battery (0 to 1), and the ambient temperature (or battery temperature, if you have a thermal model)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Set the `expected_rate` (expected number of discharges per day) and the `number_of_years` (number of years to simulate).\n",
"\n",
"The code below will simulate one day at a time for the given time. \n",
"\n",
"It should not take more than 20s.\n",
"\n",
"There might be occasional runtime warnings"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# expected_rate parameter is the expected number of discharges per day\n",
"expected_rate = 42 / 236.0\n",
"number_of_years = 30\n",
"# 1 year simulation\n",
"cell = Nmc111_Gr_Kokam75Ah_Battery()\n",
"total_day_time = 60 * 60 * 24\n",
"t_days = np.arange(365 * number_of_years)\n",
"for day in t_days:\n",
" num_discharges = np.random.poisson(expected_rate, 1)\n",
" soc_day_sequence, temp_day_sequence, time_day_sequence = profile.generate_day_values(num_discharges)\n",
" cell.update_battery_state(\n",
" t_secs=np.array([total_day_time * day + time for time in time_day_sequence]),\n",
" soc = (soc_day_sequence)/100, # from 0 to 1\n",
" T_celsius=temp_day_sequence\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(cell.stressors['t_days']/365, cell.outputs['q'])\n",
"plt.xlabel('Time (years)')\n",
"plt.ylabel('Relative discharge capacity')\n",
"plt.ylim((0.7, 1.02))\n",
"plt.show()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"The battery model should be run in timesteps relavent to battery degradation, such as once per day. Larger or smaller timesteps could be used if desired, but timesteps should avoid splitting up cycles, or at least be long enough that miscounting cycles due to splitting them up does not introduce much error.\n",
"\n",
"Each battery model tracks the history of it's inputs (`stressors`), calculated degradation rates (`rates`), internal states (`states`), and outputs (`outputs`) each time `update_battery_state` is called. Debugging models is easier because the values of all inputs, internal calculations, and outputs are tracked."
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"The cell resistance and capacity trajectories are wiggily because the temperature of the battery is varying throughout each year, varying the degradation rate. Dispatch is the same each day, so that is constant.\n",
"\n",
"The model keeps track of how much charge-throughput has occured throughout life, as well, based on the input state-of-charge timeseries. Conversion from charge-throughput, in Amp-hours, to changes of cell state-of-charge, which is dependent on battery performance (health, temperature and SOC dependent resistances), is assumed to happen externally to the model. This simple simulation is essentially assuming that the current magnitude is continuously being adjusted based on the the state-of-health of the battery."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAGwCAYAAAC0HlECAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABfFklEQVR4nO3deVxUVf8H8M+wDiCgiLKDuIMIIiqbS5rilo9LT6ImitriUz0uZJmZaxZZT6aWYuaW5VappaUm5h6urIqKKCiIIKKyKLLN3N8f/Lw5gjqjA3cYPu/Xa14v5twzl+/Bko/nnnuuTBAEAURERET0RAZSF0BERERUFzA0EREREamBoYmIiIhIDQxNRERERGpgaCIiIiJSA0MTERERkRoYmoiIiIjUYCR1AbpIqVTi+vXrsLS0hEwmk7ocIiIiUoMgCCgqKoKjoyMMDLQ/L8TQVI3r16/DxcVF6jKIiIjoGWRmZsLZ2Vnr52VoqoalpSWAyh+6lZWVxNUQERGROgoLC+Hi4iL+Htc2hqZqPLgkZ2VlxdBERERUx9TU0houBCciIiJSA0MTERERkRoYmoiIiIjUwNBEREREpAaGJiIiIiI1MDQRERERqYGhiYiIiEgNDE1EREREamBoIiIiIlIDQxMRERGRGhiaiIiIiNTA0ERERESkBoYmIiIiIjUwNBERERGpgaGJiIiISA0MTURERERqYGgiIiIiUoOkoenw4cMYNGgQHB0dIZPJ8Ouvvz71M4cOHYKfnx/kcjmaN2+OFStWVOmzdetWeHp6wtTUFJ6enti+fXsNVE9ERET1iaSh6d69e/Dx8cE333yjVv/09HQMGDAA3bp1Q3x8PD788ENMmjQJW7duFfscO3YMoaGhCAsLQ2JiIsLCwjB8+HCcOHGipoZBRERE9YBMEARB6iIAQCaTYfv27RgyZMhj+0yfPh07duzA+fPnxbaJEyciMTERx44dAwCEhoaisLAQu3fvFvv069cPjRo1wqZNm6o9b2lpKUpLS8X3hYWFcHFxQUFBAaysrJ5zZP84n12IqVsSYG8tx7pxXbR2XiIiIqr8/W1tba31398P1Kk1TceOHUNISIhKW9++fXH69GmUl5c/sU9MTMxjzxsZGQlra2vx5eLiov3iAdwvV+BCThHSbt6rkfMTERFRzalToSknJwd2dnYqbXZ2dqioqEBeXt4T++Tk5Dz2vDNmzEBBQYH4yszM1H7xREREVKcZSV2ApmQymcr7B1cXH26vrs+jbQ8zNTWFqampFqskIiIifVOnZprs7e2rzBjl5ubCyMgIjRs3fmKfR2efiIiIiDRRp0JTYGAgoqOjVdr27t2LTp06wdjY+Il9goKCaq1OIiIi0j+SXp67e/cuLl26JL5PT09HQkICbGxs4OrqihkzZiArKwvr168HUHmn3DfffIOIiAi8/vrrOHbsGFavXq1yV9zkyZPRvXt3LFy4EIMHD8Zvv/2Gffv24ejRo7U+PiIiItIfks40nT59Gr6+vvD19QUAREREwNfXF7NnzwYAZGdnIyMjQ+zv7u6OXbt24eDBg+jQoQM+/vhjLF26FC+//LLYJygoCJs3b8batWvh7e2NdevWYcuWLfD396/dwREREZFe0Zl9mnRJTe3zEJdxB8OWx8DVxhyH3++ptfMSERER92kiIiIi0gkMTURERERqYGgiIiIiUgNDExEREZEaGJqIiIiI1MDQRERERKQGhiYiIiIiNTA0EREREamBoYmIiIhIDQxNRERERGpgaCIiIiJSA0MTERERkRoYmoiIiIjUwNBEREREpAaGJiIiIiI1MDQRERERqYGhiYiIiEgNDE1EREREamBoIiIiIlIDQxMRERGRGhiaiIiIiNTA0ERERESkBoYmIiIiIjUwNBERERGpgaGJiIiISA0MTURERERqYGgiIiIiUgNDUy0ykMkAAIUl5VAqBYmrISIiIk0wNNWi1nYNAAD5xeW4ebdU4mqIiIhIEwxNtcjcxAhy48ofeVmFUuJqiIiISBMMTbXM2KDyR17By3NERER1CkNTLTMyrFzXVKHgTBMREVFdwtBUywz/f6apXMGZJiIiorqEoamWNTA1BABcvFEkcSVERESkCYamWubv3hgAsD0+S+JKiIiISBMMTbVsaEcnAMChizeRx20HiIiI6gyGplrm724Deys5ACAhI1/aYoiIiEhtDE21TCaTwd5aLnUZREREpCGGJgmYGFX+2NPz7klcCREREamLoUkCndwaAQB+P5MtcSVERESkLoYmCfTxtAMApN+8K3ElREREpC6GJglYmxlLXQIRERFpiKGJiIiISA0MTRLig1SIiIjqDoYmCZiZVD5KpaikAvfLFBJXQ0REROpgaJKAg7WZ+HVOYYmElRAREZG6JA9Ny5cvh7u7O+RyOfz8/HDkyJEn9l+2bBk8PDxgZmaGNm3aYP369SrH161bB5lMVuVVUqJb4cSpYWVwOpiSK3ElREREpA5JQ9OWLVswZcoUzJw5E/Hx8ejWrRv69++PjIyMavtHRUVhxowZmDt3LpKTkzFv3jy8/fbb2Llzp0o/KysrZGdnq7zkct3ahTugeeWDe/edvyFxJURERKQOSUPTokWLMGHCBLz22mvw8PDA4sWL4eLigqioqGr7//DDD3jzzTcRGhqK5s2bY8SIEZgwYQIWLlyo0k8mk8He3l7lpWt6tW0KALiSVyxxJURERKQOyUJTWVkZYmNjERISotIeEhKCmJiYaj9TWlpaZcbIzMwMJ0+eRHl5udh29+5duLm5wdnZGS+99BLi4+OfWEtpaSkKCwtVXjXN3dYCAJCVfx8l5VwMTkREpOskC015eXlQKBSws7NTabezs0NOTk61n+nbty9WrVqF2NhYCIKA06dPY82aNSgvL0deXh4AoG3btli3bh127NiBTZs2QS6XIzg4GKmpqY+tJTIyEtbW1uLLxcVFewN9DA8HS/Hr/OLyJ/QkIiIiXSD5QnCZTKbyXhCEKm0PzJo1C/3790dAQACMjY0xePBghIeHAwAMDStv4w8ICMDo0aPh4+ODbt264aeffkLr1q3x9ddfP7aGGTNmoKCgQHxlZmZqZ3BPIJPJ0MDUCACQfL2gxr8fERERPR/JQpOtrS0MDQ2rzCrl5uZWmX16wMzMDGvWrEFxcTGuXLmCjIwMNGvWDJaWlrC1ta32MwYGBujcufMTZ5pMTU1hZWWl8qoNbe0rZ5vWH7taK9+PiIiInp1kocnExAR+fn6Ijo5WaY+OjkZQUNATP2tsbAxnZ2cYGhpi8+bNeOmll2BgUP1QBEFAQkICHBwctFa7tnRv3QQAcOzyLSiV3B+ciIhIlxlJ+c0jIiIQFhaGTp06ITAwECtXrkRGRgYmTpwIoPKyWVZWlrgX08WLF3Hy5En4+/vjzp07WLRoEc6ePYvvv/9ePOe8efMQEBCAVq1aobCwEEuXLkVCQgKWLVsmyRifZGKPFlgUfRFlCiWu3LqH5k0aSF0SERERPYakoSk0NBS3bt3C/PnzkZ2dDS8vL+zatQtubm4AgOzsbJU9mxQKBb788kukpKTA2NgYPXv2RExMDJo1ayb2yc/PxxtvvIGcnBxYW1vD19cXhw8fRpcuXWp7eE9lYmQAAxmgFICEzHyGJiIiIh0mEwSB14UeUVhYCGtraxQUFNT4+qaRK4/jWNot/O8VH/zbz7lGvxcREZE+q+nf35LfPVffyY0r/wgu3iiSuBIiIiJ6EoYmiXVqZgMAWHk4DeUKpcTVEBER0eMwNEnslYcuyV3Pvy9hJURERPQkGoem9PT0mqij3mpqJRc3ubx8867E1RAREdHjaByaWrZsiZ49e+LHH39ESUlJTdRU78iNK3czv5TL0ERERKSrNA5NiYmJ8PX1xbvvvgt7e3u8+eabOHnyZE3UVm8M6eAIAFi8L5UP7yUiItJRGocmLy8vLFq0CFlZWVi7di1ycnLQtWtXtGvXDosWLcLNmzdrok69NqGbOwCguEyB1Ud5+ZOIiEgXPfNCcCMjIwwdOhQ//fQTFi5ciMuXL2PatGlwdnbGmDFjkJ2drc069ZqDtRl
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(cell.stressors['efc'], cell.outputs['q'])\n",
"plt.xlabel('Equivalent full cycles')\n",
"plt.ylabel('Relative discharge capacity')\n",
"plt.ylim((0.7, 1.02))\n",
"plt.show()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"This dispatch has a little more than 1 EFC per day.\n",
"\n",
"We can plot the separate contributions to capacity or resistance fade, as well."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.5, 1.02)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(cell.stressors['t_days']/365, cell.outputs['q_LLI'])\n",
"plt.plot(cell.stressors['t_days']/365, cell.outputs['q_LAM'])\n",
"plt.plot(cell.stressors['t_days']/365, cell.outputs['q'], '--k')\n",
"plt.xlabel('Time (years)')\n",
"plt.ylabel('Relative discharge capacity')\n",
"plt.legend([r'q$_{LLI}$', r'q$_{LAM}$', 'q'])\n",
"plt.ylim((0.5, 1.02))"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"From the result, the cell will experience sudden failure very shortly; considering this is near 70% remaining capacity, this is physically reasonable."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(cell.stressors['t_days']/365, cell.outputs['r_LLI'])\n",
"plt.plot(cell.stressors['t_days']/365, cell.outputs['r_LAM'])\n",
"plt.plot(cell.stressors['t_days']/365, cell.outputs['r'], '--k')\n",
"plt.xlabel('Time (years)')\n",
"plt.ylabel('Relative DC resistance')\n",
"plt.legend([r'r$_{LLI}$', r'r$_{LAM}$', 'r'])\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"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.10.12"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "e4cce46d6be9934fbd27f9ca0432556941ea5bdf741d4f4d64c6cd7f8dfa8fba"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}