Skip to main content
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 and Electrolyte transport.

Custom DirectEntry

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

SchemaWhat it sets
iws.direct_entries.ConstantElectrolyte(c_e=...)Initial salt concentration only
iws.direct_entries.NymanElectrolyte(c_e=...)κ(ce)\kappa(c_e), De(ce)D_e(c_e), χ\chi, t+0t_+^0 from Nyman et al. 2008 (isothermal)
iws.direct_entries.LandesfeindElectrolyte(c_e=..., system=...)Full TT- and cec_e-dependent set from Landesfeind & Gasteiger 2019
iws.direct_entries.ArrheniusElectrolyteDiffusivity()Wraps a reference De(ce)D_e(c_e) in an Arrhenius temperature factor
iws.direct_entries.ArrheniusElectrolyteConductivity()Wraps a reference κ(ce)\kappa(c_e) in an Arrhenius temperature factor
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)".

Piecewise interpolant direct entries

For SOC- or temperature-dependent parameters, use iws.direct_entries.PiecewiseInterpolation1D or PiecewiseInterpolation2D. See 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 — the published values act as the base and the optimizer searches over the overridden ones.

Electrolyte direct entries (theory)

Physics behind the four transport properties.

Pipelines overview

How direct entries fit into the wider pipeline.