SPMeT Dynamic Load Model Try Protos
← Models Library · SPMeT Dynamic Load
Simulates a cell under an arbitrary power or C-rate drive cycle, returning full timeseries and energy analysis.
Physics-based drive cycle simulation using the Single Particle Model with
Electrolyte (SPMe) and lumped thermal model. Supports arbitrary power or
C-rate drive cycles with custom safety terminations.
Overview
Simulates a single drive cycle on a cell, returning voltage, current, power,
temperature, SOC, and energy timeseries with summary statistics and energy
analysis.
Protocol
1. Capacity calibration (iterative electrode width adjustment)
2. Build drive cycle step (power_W or c_rate array)
3. Apply custom terminations (anode potential, temperature)
4. Solve SPMe with IDAKLUSolver
5. Extract timeseries, summary, energy analysis
Structured nested input that mirrors the cell_performance.py schema.
Nested under cell_parameters in the top-level input.
Electrode Configuration (required)
| Field |
Type |
Description |
positive_electrode_mass_loading_mg_cm2 |
float |
Positive mass loading [mg/cm²] |
negative_electrode_mass_loading_mg_cm2 |
float |
Negative mass loading [mg/cm²] |
positive_electrode_sheet_count |
float |
Positive sheet count (can be fractional) |
negative_electrode_sheet_count |
float |
Negative sheet count (can be fractional) |
jelly_roll_count |
float |
Number of jelly rolls (default: 1.0) |
electrode_coating_side_count |
int |
Number of coating sides (default: 2) |
Dimensions
| Field |
Type |
Description |
form_factor |
Literal |
"Pouch", "Prismatic", "Cylindrical", or "Coin" (default: "Pouch") |
cell_width_mm |
float or None |
Cell width or diameter for cylindrical [mm] |
cell_height_mm |
float or None |
Cell height [mm] |
cell_thickness_mm |
float or None |
Cell thickness [mm] (for pouch/prismatic) |
cell_diameter_mm |
float or None |
Cell diameter [mm] (for cylindrical/coin) |
Coating Thickness (required)
| Field |
Type |
Description |
positive_coating_thickness_um |
float |
Positive electrode coating thickness [μm] |
negative_coating_thickness_um |
float |
Negative electrode coating thickness [μm] |
Thermal & Electronic Properties (required)
| Field |
Type |
Description |
positive_electrode_specific_heat_capacity_J_kg_K |
float |
Positive electrode specific heat capacity [J/kg/K] |
negative_electrode_specific_heat_capacity_J_kg_K |
float |
Negative electrode specific heat capacity [J/kg/K] |
positive_electrode_thermal_conductivity_W_m_K |
float |
Positive electrode thermal conductivity [W/m/K] |
negative_electrode_thermal_conductivity_W_m_K |
float |
Negative electrode thermal conductivity [W/m/K] |
positive_electrode_electronic_conductivity_S_m |
float |
Positive electrode electronic conductivity [S/m] |
negative_electrode_electronic_conductivity_S_m |
float |
Negative electrode electronic conductivity [S/m] |
Each formulation is a list of structured objects with properties:
Active Material (required field: positive_electrode_active_materials, negative_electrode_active_materials)
- name -- Material name (e.g. "NMC811_Generic_v1", "Graphite_Generic_v1")
- mass_fraction -- Mass fraction in electrode (0-1)
- density_g_cm3 -- True density [g/cm³]
- specific_capacity_mAh_g -- Reversible specific capacity [mAh/g]
- nominal_voltage_V -- Midpoint voltage vs Li/Li⁺ [V]
- soc_pct -- State of charge points [%] (optional, for OCV override)
- ch_ocv_V -- Charge OCV [V] (optional, paired with soc_pct)
- dch_ocv_V -- Discharge OCV [V] (optional, paired with soc_pct)
Binder (required field: positive_electrode_binders, negative_electrode_binders)
- name -- Binder name (e.g. "PVDF")
- mass_fraction -- Mass fraction in electrode (0-1)
- density_g_cm3 -- Density [g/cm³]
Conductive Agent (required for positive, optional for negative)
- name -- Conductive agent name (e.g. "Carbon_Black")
- mass_fraction -- Mass fraction in electrode (0-1)
- density_g_cm3 -- Density [g/cm³]
Separators & Foils (optional, have defaults)
| Field |
Type |
Default |
Description |
separator_thickness_um |
float |
12.0 |
Separator thickness [μm] |
separator_porosity |
float |
0.42 |
Separator porosity |
separator_density_g_cm3 |
float |
0.5 |
Separator density [g/cm³] |
positive_electrode_foil_thickness_um |
float |
14.0 |
Positive foil thickness [μm] |
negative_electrode_foil_thickness_um |
float |
6.0 |
Negative foil thickness [μm] |
positive_electrode_foil_density_g_cm3 |
float |
2.7 |
Positive foil density [g/cm³] |
negative_electrode_foil_density_g_cm3 |
float |
8.96 |
Negative foil density [g/cm³] |
positive_electrode_foil_electronic_conductivity_S_m |
float |
3.5e7 |
Positive foil electronic conductivity [S/m] |
negative_electrode_foil_electronic_conductivity_S_m |
float |
3.5e7 |
Negative foil electronic conductivity [S/m] |
positive_electrode_foil_specific_heat_capacity_J_kg_K |
float |
900.0 |
Positive foil specific heat capacity [J/kg/K] |
negative_electrode_foil_specific_heat_capacity_J_kg_K |
float |
385.0 |
Negative foil specific heat capacity [J/kg/K] |
positive_electrode_foil_thermal_conductivity_W_m_K |
float |
237.0 |
Positive foil thermal conductivity [W/m/K] |
negative_electrode_foil_thermal_conductivity_W_m_K |
float |
401.0 |
Negative foil thermal conductivity [W/m/K] |
separator_specific_heat_capacity_J_kg_K |
float |
1000.0 |
Separator specific heat capacity [J/kg/K] |
separator_thermal_conductivity_W_m_K |
float |
0.334 |
Separator thermal conductivity [W/m/K] |
volume_packing_ratio |
float |
0.95 |
Volume packing ratio |
electrode_overhang_mm |
float |
1.0 |
Electrode overhang [mm] |
jelly_roll_inner_diameter_mm |
float |
4.0 |
Inner JR diameter [mm] |
Optional (cell_parameters)
| Field |
Type |
Description |
electrolyte |
Electrolyte or None |
Electrolyte composition (optional) |
positive_electrode_pore_tortuosity |
float or None |
Pore tortuosity (optional) |
negative_electrode_pore_tortuosity |
float or None |
Pore tortuosity (optional) |
separator_tortuosity |
float or None |
Separator tortuosity (optional) |
Note: nominal_capacity_Ah is computed internally from electrode design parameters (mass loading, sheet count, active material specific capacity) and is not required as input.
Note: CellParametersInput also accepts upper_voltage_cutoff_V (default 4.2) and lower_voltage_cutoff_V (default 3.0), mirroring the fields on SimulationParameters. Only the copies nested under simulation_parameters are read by the solver (calibration, drive-cycle termination events, and voltage bounds all reference sim_params.upper_voltage_cutoff_V / sim_params.lower_voltage_cutoff_V); the cell_parameters copies are accepted but currently unused at runtime. Set the cutoffs under simulation_parameters to affect the simulation.
| Field |
Type |
Description |
time_s |
list[float] |
Time points [s] |
power_W |
list[float] or None |
Power values [W] (positive = discharge) |
c_rate |
list[float] or None |
C-rate values (positive = discharge) |
label |
str |
Load cycle label (default: "load_cycle") |
Must specify either power_W or c_rate, not both. The load cycle is nested
inside simulation_parameters as load_cycle.
Simulation Parameters (SimulationParameters)
Nested under simulation_parameters in the top-level input.
Load Cycle (nested)
| Field |
Type |
Description |
load_cycle |
LoadCycleInput |
Load cycle profile (power or C-rate) |
Operating Conditions
| Parameter |
Default |
Description |
ambient_temperature_K |
298.15 |
Ambient temperature [K] |
initial_cell_temperature_K |
None |
Initial cell temperature [K]; if None, uses ambient_temperature_K |
reference_cell_temperature_K |
298.15 |
Reference temperature for performance test [K] |
start_soc_pct |
100.0 |
Initial state of charge [%] (0–100); seeded model uses 50% |
upper_voltage_cutoff_V |
4.2 |
Upper voltage limit [V] |
lower_voltage_cutoff_V |
3.0 |
Lower voltage limit [V] |
cell_contact_resistance_Ohm |
1e-4 |
Cell contact resistance [Ohm] |
Thermal
| Parameter |
Default |
Description |
cell_heat_transfer_coefficient_W_m2_K |
10.0 |
Cell heat transfer coefficient [W/(m²·K)] |
cell_cooling_surface_area_m2 |
0.02 |
Cell cooling surface area [m²] |
Solver
| Parameter |
Default |
Description |
solver_atol |
1e-3 |
Solver absolute tolerance |
solver_rtol |
1e-3 |
Solver relative tolerance |
data_sampling_period_s |
0.1 |
Output data sampling period [s] |
use_pybamm_params |
"" |
PyBaMM parameter set name (e.g. "Chen2020", "Prada2013", "ORegan2022"); empty string uses Chen2020 as base with custom overrides |
Safety Terminations
| Parameter |
Default |
Description |
anode_potential_safety_threshold_V |
0.01 |
Anode potential safety limit [V]; terminates if anode potential drops below this; set to null to disable |
temperature_safety_threshold_K |
363.15 |
Temperature safety limit [K]; terminates if cell temperature exceeds this; set to null to disable |
OCV Model
| Parameter |
Default |
Description |
positive_electrode_ocv_model |
"polynomial" |
OCV model for positive electrode in PyBaMM; one of "msmr", "polynomial", "constant", "table" |
negative_electrode_ocv_model |
"polynomial" |
OCV model for negative electrode in PyBaMM; one of "msmr", "polynomial", "interpolant", "table" |
Timeseries Subsampling
| Parameter |
Default |
Description |
timeseries_rdp_epsilon |
1e-3 |
Ramer-Douglas-Peucker tolerance used to subsample the returned timeseries; higher values return fewer points |
Optional sub-protocol that layers a DCIR pulse and a sustained power pulse on
top of the drive cycle simulation.
| Parameter |
Default |
Description |
perform_rpt |
false |
Whether to perform the reference performance test (DCIR + power pulse) |
rpt_dcir.dcir_c_rate |
2.0 |
DCIR pulse C-rate |
rpt_dcir.dcir_direction |
"discharge" |
DCIR pulse direction ("charge" or "discharge") |
rpt_dcir.dcir_soc_pct |
50.0 |
DCIR pulse SOC [%] |
rpt_dcir.dcir_temperature_K |
298.15 |
DCIR pulse temperature [K] |
rpt_dcir.dcir_pulse_duration_s |
10.0 |
DCIR pulse duration [s] |
rpt_dcir.dcir_rest_s |
1.0 |
Rest time after the DCIR pulse [s] |
rpt_power.power_level_W |
2000.0 |
Power pulse level [W] |
rpt_power.power_duration_s |
300.0 |
Power pulse duration [s] |
rpt_power.power_direction |
"discharge" |
Power pulse direction ("charge" or "discharge") |
rpt_power.power_soc_pct |
50.0 |
Power pulse SOC [%] |
| Field |
Type |
Description |
time_s |
list[float] |
Time points [s] |
power_W |
list[float] or None |
Power profile [W] (positive = discharge) |
c_rate |
list[float] or None |
C-rate profile (positive = discharge) |
label |
str |
Metadata label |
Output Schema
Timeseries (TimeseriesOutput)
All arrays have the same length (one value per data_sampling_period_s):
time_s -- simulation time [s]
voltage_V -- terminal voltage [V]
current_A -- current [A] (positive = discharge)
power_W -- terminal power [W]
temperature_K -- cell temperature [K]
capacity_Ah -- discharge capacity [A.h]
soc -- state of charge (0-1)
energy_Wh -- discharge energy [W.h]
anode_potential_V -- anode potential [V]
Summary (SummaryOutput)
| Field |
Description |
duration_s |
Total simulation time |
data_points |
Number of timeseries points |
voltage_min/max_V |
Voltage range |
current_min/max_A |
Current range |
power_min/max_W |
Power range |
temperature_min/max_K |
Temperature range |
soc_start/end |
SOC at start and end |
soc_used_pct |
SOC consumed [%] |
Energy Analysis (EnergyAnalysisOutput)
| Field |
Description |
energy_discharged_Wh |
Total energy discharged |
energy_regenerated_Wh |
Total energy regenerated (regen braking) |
energy_net_Wh |
Net energy (discharged - regenerated) |
capacity_used_Ah |
Total capacity consumed |
soc_change_pct |
SOC change [%] |
regeneration_ratio_pct |
Regeneration / discharge ratio [%] |
Top-level (SpmetDynamicLoadOutput)
success -- boolean
termination_reason -- "final time", "Lower voltage cut-off", etc.
timeseries -- TimeseriesOutput
summary -- SummaryOutput
energy_analysis -- EnergyAnalysisOutput
config -- echo of simulation parameters
error -- error message on failure (there is no traceback field in the output)
Default Configuration
Cell Parameters: VW ID3 Pouch 80Ah
The default cell configuration uses standalone Pouch 80Ah-style parameters.
Example structure:
{
"cell_parameters": {
"positive_electrode_mass_loading_mg_cm2": 25.126,
"negative_electrode_mass_loading_mg_cm2": 18.0,
"positive_electrode_sheet_count": 18.0,
"negative_electrode_sheet_count": 19.0,
"form_factor": "Pouch",
"cell_width_mm": 503.546,
"cell_height_mm": 88.971,
"cell_thickness_mm": 9.012,
"positive_coating_thickness_um": 87.3,
"negative_coating_thickness_um": 115.3,
"positive_electrode_specific_heat_capacity_J_kg_K": 900.0,
"negative_electrode_specific_heat_capacity_J_kg_K": 1100.0,
"positive_electrode_thermal_conductivity_W_m_K": 1.58,
"negative_electrode_thermal_conductivity_W_m_K": 1.04,
"positive_electrode_electronic_conductivity_S_m": 0.18,
"negative_electrode_electronic_conductivity_S_m": 215.0,
"positive_electrode_active_materials": [
{
"name": "NMC811_Generic_v1",
"mass_fraction": 0.89,
"density_g_cm3": 4.8,
"specific_capacity_mAh_g": 200.0,
"nominal_voltage_V": 3.77
}
],
"negative_electrode_active_materials": [
{
"name": "Graphite_Generic_v1",
"mass_fraction": 0.91,
"density_g_cm3": 2.26,
"specific_capacity_mAh_g": 365.0,
"nominal_voltage_V": 0.1
}
],
"positive_electrode_binders": [
{"name": "PVDF_Generic_v1", "mass_fraction": 0.055, "density_g_cm3": 1.78}
],
"negative_electrode_binders": [
{"name": "CMC_Generic_v1", "mass_fraction": 0.045, "density_g_cm3": 1.6},
{"name": "SBR_Generic_v1", "mass_fraction": 0.045, "density_g_cm3": 0.94}
],
"positive_electrode_conductive_agents": [
{"name": "CarbonBlack_Generic_v1", "mass_fraction": 0.055, "density_g_cm3": 1.9}
],
"separator_thickness_um": 18.0,
"separator_porosity": 0.4,
"separator_density_g_cm3": 0.95
},
"simulation_parameters": {
"start_soc_pct": 80.0,
"ambient_temperature_K": 298.15,
"load_cycle": {
"label": "aero_quad_drone",
"time_s": [0, 150, 300, 450, 599],
"power_W": [24.0, 84.0, 60.0, 84.0, 24.0]
}
}
}
Chemistry: NMC811 / Graphite
Nominal Capacity: ~80.5 Ah (computed from electrode design)
Voltage Range: 2.8V - 4.2V
Form Factor: Pouch (88.97mm x 503.5mm electrodes)
Parameter Set: ORegan2022
Drive Cycle: Aero Quad Drone
- Duration: 599 seconds (~10 minutes)
- Data points: 600 (1 Hz)
- Power range: 24 - 84 W (discharge only, no regen)
- Input type: power_W (positive = discharge)
Example Results
VW ID3 80Ah NMC, Aero Quad Drone, SOC 80%, 25C
Duration: 599s, Points: 600
Voltage: 3.917 - 3.974 V
Temperature: 298.1 - 298.2 K
SOC: 80.0% -> 77.5% (2.52% used)
Energy: discharged=7.99 Wh, net=7.99 Wh
Capacity: 2.025 Ah
Runtime: ~6 seconds (3.5s calibration + 2.5s simulation)
← Back to Models Library