Arrhenius Calculations¶
- class ionworkspipeline.calculations.ArrheniusLogLinear(data: DataFrame | DataFrame | DataLoader, reference_temperature: float | None = None, include_func: bool = False)¶
Fit Arrhenius parameters from temperature-dependent data using log-linear regression.
The Arrhenius equation describes how a parameter \(k\) varies with temperature:
\[k(T) = A \exp\left(-\frac{E_a}{RT}\right)\]where:
\(A\) is the pre-exponential factor (the value at infinite temperature)
\(E_a\) is the activation energy [J/mol] - higher values mean stronger temperature dependence
\(R\) is the gas constant (8.314 J/(mol K))
\(T\) is the absolute temperature [K]
The activation energy \(E_a\) represents the energy barrier that must be overcome for the process to occur. For example:
Diffusion: \(E_a\) is the energy barrier for lithium ions to hop between sites
Reaction kinetics: \(E_a\) is the energy barrier for the electrochemical reaction
Ionic conductivity: \(E_a\) reflects the energy for ion transport through the material
Higher activation energies mean the parameter is more sensitive to temperature changes.
When fitting, we take the natural logarithm of the Arrhenius equation:
\[\ln k = \ln A - \frac{E_a}{R} \cdot \frac{1}{T}\]This is a linear relationship between \(\ln k\) and \(1/T\), where the slope is \(-E_a/R\) and the intercept is \(\ln A\).
When using a reference temperature, the equation becomes:
\[k(T) = k_{ref} \exp\left[-\frac{E_a}{R}\left(\frac{1}{T} - \frac{1}{T_{ref}}\right)\right]\]where \(k_{ref} = k(T_{ref})\) is the value at the reference temperature.
Parameters¶
- datapd.DataFrame
Temperature-dependent measurement data. Must contain “Temperature [K]” column and one value column. The value column name determines output parameter names.
- reference_temperaturefloat | None, default=None
Temperature (K) at which to evaluate the pre-exponential factor. If None, uses the raw fitted value without temperature scaling.
- include_funcbool, default=False
Whether to output a temperature-dependent function. Set to False when using with studio deployments.
Notes¶
Using a reference temperature of 298.15 K (25 C) is common practice. This makes the pre-exponential factor a more intuitive value - it’s the parameter value at room temperature.
Typical activation energy ranges for lithium-ion battery materials:
Solid-state diffusion in graphite: 20-40 kJ/mol
Solid-state diffusion in NMC: 30-60 kJ/mol
Electrolyte conductivity: 10-20 kJ/mol
Exchange current density: 20-50 kJ/mol
Warnings¶
The Arrhenius relationship assumes a single activation energy across all temperatures. This may not hold when:
Phase transitions occur (the mechanism changes at certain temperatures)
Multiple processes compete (different mechanisms dominate at different temperatures)
Non-thermal effects are present (concentration or mechanical effects also play a role)
For these cases, consider using piecewise interpolation to model temperature dependence empirically.
Examples¶
Fit diffusivity activation energy from multi-temperature data:
>>> import pandas as pd >>> data = pd.DataFrame({ ... "Temperature [K]": [273, 298, 323], ... "Diffusivity [m2.s-1]": [1e-14, 3e-14, 8e-14] ... }) >>> calc = iwp.calculations.ArrheniusLogLinear(data, reference_temperature=298.15) >>> result = calc.run(None) >>> f"{result['Activation energy for diffusivity [J.mol-1]']:.0f}" '30468'
Extends:
ionworkspipeline.calculations.calculation.Calculation- plot_arrhenius()¶
Plot the arrhenius fit.
- run(parameter_values: ParameterValues | None = None) ParameterValues¶
Execute Arrhenius parameter fitting from temperature-dependent data.
Performs log-linear regression on the input data to extract activation energy and pre-exponential factor.
Parameters¶
- parameter_valuesiwp.ParameterValues | None
Unused (present for interface consistency with other Calculations).
Returns¶
- iwp.ParameterValues
Fitted Arrhenius parameters:
"Activation energy for <param> [J.mol-1]": The fitted activation energy"Pre-exponential factor for <param>": The pre-exponential factor (scaled to reference temperature if specified)"Reference temperature for <param> [K]": The reference temperature (only if reference_temperature was provided)The original parameter as a function of T (only if include_func=True)