Compare chemistry¶
In this example, we will apply different chemistries when redesigning a cell. We will then compare the equilibrium KPIs.
from breathe_design import api_interface as api
from breathe_design import enable_notebook_plotly
enable_notebook_plotly()
base_params = api.get_design_parameters("Molicel P45B")
🔐 No active session. Please sign in to continue. 🚀 Open this URL in a browser and verify the code shown is BWJH-JMVV 🔗 https://breathe-platform.uk.auth0.com/activate?user_code=BWJH-JMVV ⏳ Waiting for user authorization... ✅ Authentication successful!
base_params
{'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}
Let's explore the active materials available in standard material library.
api.get_active_materials()
| name | side | specificCapacity_mAhg | trueDensity_gcm3 | |
|---|---|---|---|---|
| 0 | Graphite | anode | 371.068808 | 2.20 |
| 1 | Group14 | anode | 1618.685374 | 2.26 |
| 2 | Silicon_nano | anode | 3592.146052 | 2.33 |
| 3 | LFP | cathode | 154.674394 | 3.60 |
| 4 | NCM111 | cathode | 166.135551 | 4.68 |
| 5 | NCM622 | cathode | 184.845912 | 4.68 |
| 6 | NCM811 | cathode | 200.500445 | 4.68 |
| 7 | NCM955 | cathode | 222.052063 | 4.68 |
We can explore the effect of changing the active materials on the battery performance.
designs = [
{"designName": "Group14 Anode", "anode": "Group14"},
{"designName": "NCM111 Cathode", "cathode": "NCM111"},
{"designName": "NCM955 Cathode", "cathode": "NCM955"},
{"designName": "LFP Cathode ", "cathode": "LFP"},
]
Now we can calculate all the equilibrium key performance indicators (KPIs) for each design using the get_eqm_kpis function.
results = api.get_eqm_kpis("Molicel P45B", designs)
results.get_kpis()
| Baseline | Group14 Anode | NCM111 Cathode | NCM955 Cathode | LFP Cathode | |
|---|---|---|---|---|---|
| KPI | |||||
| Capacity [Ah] | 4.500000 | 7.125602 | 3.325415 | 4.328095 | 3.336657 |
| Nominal Voltage [V] | 3.656630 | 3.363872 | 3.649592 | 3.736356 | 3.275997 |
| Energy [Wh] | 16.454837 | 23.969612 | 12.136409 | 16.171302 | 10.930879 |
| Gravimetric Energy Density [Wh/kg] | 241.196608 | 312.139231 | 167.670080 | 230.708811 | 146.690931 |
| Volumetric Energy Density [Wh/l] | 665.310409 | 969.151645 | 490.705519 | 653.846394 | 441.962901 |
| Minimum Anode Voltage [mV] | 80.490746 | 36.693380 | 80.566125 | 72.555628 | 80.819703 |
| Weight [g] | 68.221675 | 76.791410 | 72.382675 | 70.093995 | 74.516391 |
| Volume [l] | 0.024733 | 0.024733 | 0.024733 | 0.024733 | 0.024733 |
| Heat Capacity [kJ/K] | 0.052220 | 0.058865 | 0.055453 | 0.053677 | 0.062563 |
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.
results.compare_designs("relative")
results.compare_designs("delta")
We can also explore the effect of changing the composition of the materials on the battery performance by using blends of materials. A typical blend is Graphite and Silicon for the anode
designs = [
{"designName": "5% Si", "anode": {"Graphite": 0.95, "Silicon_nano": 0.05}},
{"designName": "10% Si", "anode": {"Graphite": 0.9, "Silicon_nano": 0.1}},
{"designName": "15% Si", "anode": {"Graphite": 0.85, "Silicon_nano": 0.15}},
{"designName": "20% Si", "anode": {"Graphite": 0.8, "Silicon_nano": 0.2}},
]
results = api.get_eqm_kpis("Molicel P45B", designs)
We can also normalize the results based on the baseline cell for an even more digestible comparison.
results.get_normalized_kpis()
| Baseline | 5% Si | 10% Si | 15% Si | 20% Si | |
|---|---|---|---|---|---|
| KPI | |||||
| Capacity [Ah] | 1.0 | 1.127918 | 1.272624 | 1.373875 | 1.448175 |
| Nominal Voltage [V] | 1.0 | 0.969409 | 0.950582 | 0.938571 | 0.930199 |
| Energy [Wh] | 1.0 | 1.093414 | 1.209734 | 1.289479 | 1.347091 |
| Gravimetric Energy Density [Wh/kg] | 1.0 | 1.080399 | 1.158076 | 1.207416 | 1.240898 |
| Volumetric Energy Density [Wh/l] | 1.0 | 1.093414 | 1.209734 | 1.289479 | 1.347091 |
| Minimum Anode Voltage [mV] | 1.0 | 0.724081 | 0.630519 | 0.495257 | 0.371651 |
| Weight [g] | 1.0 | 1.012046 | 1.044607 | 1.067966 | 1.085578 |
| Volume [l] | 1.0 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| Heat Capacity [kJ/K] | 1.0 | 1.013945 | 1.046634 | 1.070031 | 1.087646 |
results.plot_radar()
Dynamic simulations is currently disabled for designs with modified chemistries. Reliable prediction of these changes will become available once further experimental data on the materials is incorporated.
from breathe_design import Cycler
cycler_dict = Cycler("C", 1.5).cc_chg(I_chg=0.5, V_max=4.0)
designs = [{"designName": "5% Si", "anode": {"Graphite": 0.95, "Silicon_nano": 0.05}}]
output = api.run_sim("Molicel P45B", cycler_dict, designs)
output.get_dynamic_data("5% Si")
{'5% Si': None}
output.plot_voltage_response()