> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ionworks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Thermal Properties

> Configure Arrhenius temperature dependence and heat-capacity calculations with ionworks-schema.

Thermal calculations cover temperature dependence (Arrhenius fits) and heat-capacity bookkeeping. For the underlying physics, see the [Thermal Calculations Guide](/guide/calculations/thermal).

## Available calculations

| Schema                                                                     | Purpose                                                                                             |
| -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| `iws.calculations.ArrheniusLogLinear(data=..., reference_temperature=...)` | Fits $(k_{\text{ref}}, E_a)$ from a table of $(T, k)$ measurements                                  |
| `iws.calculations.SpecificHeatCapacity()`                                  | Converts between lumped cell heat capacity \[J/K] and specific heat \[J/(kg·K)] given the cell mass |
| `iws.calculations.LumpedHeatCapacityAndDensity()`                          | Sets per-component specific heat and density to the cell-level lumped values                        |

## Fitting Arrhenius parameters

```python theme={null}
import ionworks_schema as iws
from ionworks import Ionworks

arrhenius = iws.calculations.ArrheniusLogLinear(
    data={
        "Temperature [K]": [273, 298, 323, 348],
        "Negative particle diffusivity [m2.s-1]": [1e-14, 3e-14, 8e-14, 2e-13],
    },
    reference_temperature=298.15,
)

pipeline = iws.Pipeline({"D_neg arrhenius": arrhenius})

client = Ionworks()
submission = client.pipeline.create(pipeline)
client.pipeline.wait_for_completion(submission.id)
result = client.pipeline.result(submission.id)
```

Set `include_func=True` to additionally return an interpolant so the quantity can be evaluated at any temperature, not just the measured ones.

The `data` field accepts a column dict (as above), a bare pandas or polars `DataFrame`, or a string reference. Use `"db:<id>"` to reference an uploaded measurement; `"file:..."` and `"folder:..."` are read from your local machine and inlined into the config by the API client on submit, so they work both locally and when you submit a fit to Ionworks — subject to the same 1,000-row inline limit as a bare `DataFrame` (upload a measurement and use `"db:<id>"` for larger datasets). A bare `DataFrame` is auto-wrapped on serialization, so `data=df` and `data={"data": df}` behave the same.

## Specific heat capacity

```python theme={null}
import ionworks_schema as iws

known = iws.direct_entries.DirectEntry(
    parameters={
        "Cell heat capacity [J.K-1]": 50.0,
        "Cell mass [kg]": 0.05,
    },
)

cp = iws.calculations.SpecificHeatCapacity()

pipeline = iws.Pipeline({"known": known, "cp": cp})
```

The result adds `"Cell specific heat capacity [J.kg-1.K-1]"` to the parameter set.

## Lumped thermal model

For a single-temperature cell model, `LumpedHeatCapacityAndDensity` propagates the cell-level specific heat and density to each component. Use it after `SpecificHeatCapacity` in pipelines that target a lumped thermal solve:

```python theme={null}
pipeline = iws.Pipeline({
    "known": known,
    "cp": iws.calculations.SpecificHeatCapacity(),
    "lumped": iws.calculations.LumpedHeatCapacityAndDensity(),
})
```

<CardGroup cols={2}>
  <Card title="Thermal Calculations (theory)" icon="fire" href="/guide/calculations/thermal">
    Arrhenius theory, heat generation, lumped vs. distributed models.
  </Card>

  <Card title="Pipelines overview" icon="diagram-project" href="/pipelines/overview">
    How thermal calcs chain with direct entries and data fits.
  </Card>
</CardGroup>
