> ## 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.

# Direct Entries

> Drop coherent literature parameter sets into a pipeline with ionworks-schema direct entries.

A direct entry populates parameter values without doing any calculation or fitting. There are two shapes:

* **`iws.direct_entries.DirectEntry`** — a flat dict of values you supply yourself.
* **`iws.direct_entries.*`** function-schema subclasses (e.g. `LandesfeindElectrolyte`) — pre-built parameterisations from the literature.

For the physics behind the electrolyte parameterisations and when to pick each one, see the [Electrolyte direct entries Guide](/guide/pipelines/direct-entries/electrolyte) and [Electrolyte transport](/guide/modeling/electrolyte-transport).

## Custom DirectEntry

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

known = iws.direct_entries.DirectEntry(
    parameters={
        "Ambient temperature [K]": 298.15,
        "Nominal cell capacity [A.h]": 3.0,
        "Lower voltage cut-off [V]": 2.5,
        "Upper voltage cut-off [V]": 4.2,
    },
    source="manufacturer datasheet",
)

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

`parameters` accepts floats, arrays, and pybamm-serialisable symbols.

### Callable parameters via `pybamm.ParameterValues`

For parameters that are callables — for example, concentration- or temperature-dependent interpolants — wrap them in a `pybamm.ParameterValues` and pass that. Its serialisation converts each callable into the symbolic form the server reconstructs on the other side. A raw `dict` containing callables is **not** auto-serialised; you must wrap it explicitly.

```python theme={null}
import numpy as np
import pybamm
import ionworks_schema as iws

x = np.linspace(100.0, 3000.0, 6)

pv = pybamm.ParameterValues(
    {
        "Electrolyte conductivity [S.m-1]": lambda c_e, T: pybamm.Interpolant(
            x, 0.1 + 1e-3 * x, c_e, name="conductivity"
        ),
        "Electrode height [m]": 0.1,
    }
)

known = iws.direct_entries.DirectEntry(parameters=pv, source="custom fit")
```

The interpolant lambda's signature must be exactly `(c_e, T)` (or the relevant pybamm input variables) — capture any extra inputs (lookup arrays, names) via closure rather than default kwargs, since defaults are inferred as function inputs during serialisation and break reconstruction.

## Electrolyte direct entries

| Schema                                                           | What it sets                                                                   |
| ---------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| `iws.direct_entries.ConstantElectrolyte(c_e=...)`                | Initial salt concentration only                                                |
| `iws.direct_entries.NymanElectrolyte(c_e=...)`                   | $\kappa(c_e)$, $D_e(c_e)$, $\chi$, $t_+^0$ from Nyman et al. 2008 (isothermal) |
| `iws.direct_entries.LandesfeindElectrolyte(c_e=..., system=...)` | Full $T$- and $c_e$-dependent set from Landesfeind & Gasteiger 2019            |
| `iws.direct_entries.ArrheniusElectrolyteDiffusivity()`           | Wraps a reference $D_e(c_e)$ in an Arrhenius temperature factor                |
| `iws.direct_entries.ArrheniusElectrolyteConductivity()`          | Wraps a reference $\kappa(c_e)$ in an Arrhenius temperature factor             |

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

electrolyte = iws.direct_entries.LandesfeindElectrolyte(
    c_e=1000.0,
    system="EC:EMC (3:7)",
)

pipeline = iws.Pipeline({"electrolyte": electrolyte})

client = Ionworks()
submission = client.pipeline.create(pipeline)
```

`system` must be one of `"EC:DMC (1:1)"`, `"EC:EMC (3:7)"`, or `"EMC:FEC (19:1)"`.

## Building electrolyte transport from a material dataset

If you have measured electrolyte transport properties (conductivity, diffusivity, transference number, thermodynamic factor) versus concentration stored as a [material property dataset](/data/materials), `client.electrolyte.transport_from_dataset()` turns the dataset into a `pybamm.ParameterValues` of concentration-dependent functions that you can drop straight into a `DirectEntry`.

Each property is represented in one of two ways, chosen per-parameter:

* `"interpolant"` (default) — a tabulated `pybamm.Interpolant` of the measured points with linear extrapolation.
* `"landesfeind"` — the isothermal [Landesfeind & Gasteiger (2019)](https://doi.org/10.1149/2.0571912jes) functional form for that property, fitted to the measured points. Unlike a tabulated interpolant, the fitted conductivity and diffusivity forms stay positive and finite below the lowest measured concentration, which keeps high-rate DFN solves stable when the electrolyte depletes near an electrode.

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

client = Ionworks()

params = client.electrolyte.transport_from_dataset(
    "dataset-uuid",
    forms={
        "Electrolyte conductivity [S.m-1]": "landesfeind",
        "Electrolyte diffusivity [m2.s-1]": "landesfeind",
        "Cation transference number": "interpolant",
    },
)

electrolyte = iws.direct_entries.DirectEntry(parameters=params, source="in-house measurements")
pipeline = iws.Pipeline({"electrolyte": electrolyte})

submission = client.pipeline.create(pipeline)
```

### Arguments

| Argument               | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dataset_id`           | UUID of the [material property dataset](/data/materials) holding the transport properties versus electrolyte concentration.                                                                                                                                                                                                                                                                                                                                                                         |
| `forms`                | Optional mapping from pybamm parameter name to `"interpolant"` or `"landesfeind"`. Parameters not listed default to `"interpolant"`.                                                                                                                                                                                                                                                                                                                                                                |
| `columns`              | Optional mapping from pybamm parameter name to dataset column name. Defaults to `{"Electrolyte conductivity [S.m-1]": "Electrolyte conductivity", "Electrolyte diffusivity [m2.s-1]": "Electrolyte diffusivity", "Cation transference number": "Transference number"}`. Add a thermodynamic-factor entry here if your dataset includes it, e.g. `{"Thermodynamic factor": "My TDF column"}` (the key is the pybamm parameter name `Thermodynamic factor`, the value is your dataset's column name). |
| `concentration_column` | Name of the electrolyte-concentration column (in mol.m-3) in the dataset. Defaults to `Electrolyte concentration`.                                                                                                                                                                                                                                                                                                                                                                                  |

The `"landesfeind"` form is available for `Electrolyte conductivity [S.m-1]`, `Electrolyte diffusivity [m2.s-1]`, `Cation transference number`, and `Thermodynamic factor`. The dataset is treated as isothermal — each fitted form depends only on concentration.

## Piecewise interpolant direct entries

For SOC- or temperature-dependent parameters, use `iws.direct_entries.PiecewiseInterpolation1D` or `PiecewiseInterpolation2D`. See [Calculations → Piecewise](/pipelines/calculations/piecewise).

## Fitting coefficients from a direct entry

The transport-property coefficients inside `LandesfeindElectrolyte` are exposed as named parameters precisely so they can be overridden as fit unknowns. Put the entry into a pipeline and reference the same parameter names in a downstream [`DataFit`](/pipelines/data-fitting/overview) — the published values act as the base and the optimizer searches over the overridden ones.

<CardGroup cols={2}>
  <Card title="Electrolyte direct entries (theory)" icon="flask" href="/guide/pipelines/direct-entries/electrolyte">
    Physics behind the four transport properties.
  </Card>

  <Card title="Pipelines overview" icon="diagram-project" href="/pipelines/overview">
    How direct entries fit into the wider pipeline.
  </Card>
</CardGroup>
