Dynamic Analysis Controls¶
In this notebook we demonstrate the optional dynamic-analysis controls available through breathe_simulate. The first example is an anode potential controlled charge example, while the other examples include a charge sequence followed by a 2C discharge so the charge and discharge behaviour can be reviewed in the same simulation.
In [1]:
Copied!
from breathe_simulate import api_interface as api
from breathe_simulate import enable_notebook_plotly
enable_notebook_plotly()
from breathe_simulate import api_interface as api
from breathe_simulate import enable_notebook_plotly
enable_notebook_plotly()
We start from the baseline Molicel P45B cell and define one shared set of operating conditions so every example can be compared directly.
In [2]:
Copied!
base_battery = "Molicel P45B"
eqm_results = api.get_eqm_kpis(base_battery)
capacity_ah = eqm_results.capacity
initial_soc = 0.2
initial_temperature_degC = 25.0
ambient_temperature_degC = 25.0
charge_2c_A = 2.0 * capacity_ah
charge_1p2c_A = 1.2 * capacity_ah
charge_0p6c_A = 0.6 * capacity_ah
discharge_2c_A = 2.0 * capacity_ah
plot_variables = [
"Charge current [A]",
"Voltage [V]",
"Cell temperature [°C]",
"SoC",
"Anode voltage [V]",
]
capacity_ah
base_battery = "Molicel P45B"
eqm_results = api.get_eqm_kpis(base_battery)
capacity_ah = eqm_results.capacity
initial_soc = 0.2
initial_temperature_degC = 25.0
ambient_temperature_degC = 25.0
charge_2c_A = 2.0 * capacity_ah
charge_1p2c_A = 1.2 * capacity_ah
charge_0p6c_A = 0.6 * capacity_ah
discharge_2c_A = 2.0 * capacity_ah
plot_variables = [
"Charge current [A]",
"Voltage [V]",
"Cell temperature [°C]",
"SoC",
"Anode voltage [V]",
]
capacity_ah
Out[2]:
np.float64(4.4999999999999964)
Anode potential limited CC_CHG charge¶
The charge phase uses an anode-potential threshold, causing the current to automatically derate if the anode potential reaches the specified limit.
In [3]:
Copied!
anode_limited_cycle = {
"cycle_type": "CC_CHG",
"selected_unit": "C",
"control_parameters": {
"I_chg": 2,
"V_max": 4.2,
"anode_potential_threshold_mV": 50.0,
},
}
anode_limited_output = api.run_sim(
base_battery=base_battery,
cycler=anode_limited_cycle,
designs=[],
initialSoC=initial_soc,
initialTemperature_degC=initial_temperature_degC,
ambientTemperature_degC=ambient_temperature_degC,
)
anode_limited_output.plot_dynamic_response(plot_variables)
anode_limited_cycle = {
"cycle_type": "CC_CHG",
"selected_unit": "C",
"control_parameters": {
"I_chg": 2,
"V_max": 4.2,
"anode_potential_threshold_mV": 50.0,
},
}
anode_limited_output = api.run_sim(
base_battery=base_battery,
cycler=anode_limited_cycle,
designs=[],
initialSoC=initial_soc,
initialTemperature_degC=initial_temperature_degC,
ambientTemperature_degC=ambient_temperature_degC,
)
anode_limited_output.plot_dynamic_response(plot_variables)