Redesign a battery¶
In this example we will redesign a battery. As before we import the module and access the baseline design parameters for the Molicel P45B battery. We then create a list of designs that we want to explore. Each design is represented as a dictionary with a design name and the corresponding equilibrium KPIs.
In [49]:
Copied!
from breathe_design import api_interface as api
from breathe_design import enable_notebook_plotly
enable_notebook_plotly()
from breathe_design import api_interface as api
from breathe_design import enable_notebook_plotly
enable_notebook_plotly()
In [50]:
Copied!
base_params = api.get_design_parameters("Molicel P45B")
base_params = api.get_design_parameters("Molicel P45B")
In [51]:
Copied!
base_params
base_params
Out[51]:
{'anode': 'Molicel P45B Anode',
'cathode': 'Molicel P45B Cathode',
'NPratio': 1.039106051327928,
'Vmin_V': 2.5,
'Vmax_V': 4.2,
'cathodePorosity': 0.14216134985845785,
'anodePorosity': 0.16663641853607114,
'cathodeThickness_um': 37.483333333333334,
'anodeThickness_um': 48.900000000000006,
'copperThickness_um': 11.2,
'aluminumThickness_um': 22.2,
'separatorThickness_um': 16.8,
'format': 'Molicel P45B',
'electrolyte': 'LP30',
'electrolyteBuffer_rel': 0.2,
'lampe': 0,
'lamne': 0,
'lli': 0}
Each of the design parameters can be adjusted to explore different designs. It is best not to make too large adjustments as this could lead to unrealistic results.
In [52]:
Copied!
designs = [
{"designName": "Lower NP", "NPratio": base_params["NPratio"] * 0.95},
{"designName": "Higher Vmax", "Vmax_V": base_params["Vmax_V"] + 0.05},
{
"designName": "Thicker Cathode",
"cathodeThickness_um": base_params["cathodeThickness_um"] * 1.05,
},
{
"designName": "Less Porous Anode",
"anodePorosity": base_params["anodePorosity"] * 0.95,
},
{
"designName": "Thinner Separator",
"separatorThickness_um": base_params["separatorThickness_um"] * 0.95,
},
]
designs = [
{"designName": "Lower NP", "NPratio": base_params["NPratio"] * 0.95},
{"designName": "Higher Vmax", "Vmax_V": base_params["Vmax_V"] + 0.05},
{
"designName": "Thicker Cathode",
"cathodeThickness_um": base_params["cathodeThickness_um"] * 1.05,
},
{
"designName": "Less Porous Anode",
"anodePorosity": base_params["anodePorosity"] * 0.95,
},
{
"designName": "Thinner Separator",
"separatorThickness_um": base_params["separatorThickness_um"] * 0.95,
},
]
Now we can calculate all the equilibrium KPIs for each design using the get_eqm_kpis function.
In [53]:
Copied!
results = api.get_eqm_kpis("Molicel P45B", designs)
results = api.get_eqm_kpis("Molicel P45B", designs)
In [54]:
Copied!
results.get_kpis()
results.get_kpis()
Out[54]:
| Baseline | Lower NP | Higher Vmax | Thicker Cathode | Less Porous Anode | Thinner Separator | |
|---|---|---|---|---|---|---|
| KPI | ||||||
| Capacity [Ah] | 4.500000 | 4.668083 | 4.546820 | 4.541323 | 4.520975 | 4.541918 |
| Nominal Voltage [V] | 3.656630 | 3.660280 | 3.662353 | 3.656630 | 3.656630 | 3.656630 |
| Energy [Wh] | 16.454837 | 17.086491 | 16.652063 | 16.605938 | 16.531535 | 16.608117 |
| Gravimetric Energy Density [Wh/kg] | 241.196608 | 248.788314 | 244.087566 | 244.134852 | 241.873341 | 242.447412 |
| Volumetric Energy Density [Wh/l] | 665.310409 | 690.849797 | 673.284752 | 671.419814 | 668.411531 | 671.507913 |
| Minimum Anode Voltage [mV] | 80.490746 | 75.325513 | 80.035853 | 80.490746 | 80.490746 | 80.490746 |
| Weight [g] | 68.221675 | 68.678834 | 68.221675 | 68.019531 | 68.347902 | 68.501935 |
| Volume [l] | 0.024733 | 0.024733 | 0.024733 | 0.024733 | 0.024733 | 0.024733 |
| Heat Capacity [kJ/K] | 0.052220 | 0.052576 | 0.052220 | 0.052093 | 0.052232 | 0.052303 |
These can be plotted using the compare_designs function in two different ways: one for a relative change in the KPIs and one for a delta change in the KPIs.
In [55]:
Copied!
results.compare_designs("relative")
results.compare_designs("relative")
In [56]:
Copied!
results.compare_designs("delta")
results.compare_designs("delta")