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)