Skip to main content
Battery parameterization is built around a simple abstraction: pipeline elements that transform input parameters into output parameters, chained together into a pipeline. This design provides flexibility to handle any parameterization workflow—from simple calculations to complex data fitting.

Pipeline Elements

The basic building block is a pipeline element. Any pipeline element accepts a set of parameter values (possibly empty) and returns another set of parameter values. The full pipeline is built by calling each element in series to yield the complete parameter set. There are five types of pipeline element:
The pipeline element types and built-in calculations listed here are not exhaustive. See the API reference for full details.
Each element:
  1. Takes input parameters from the parameter dictionary
  2. Performs computation
  3. Returns output parameters that become available to subsequent elements
To assemble and submit a pipeline programmatically, see Pipelines → Overview in the Documentation tab.

Naming conventions

Clear Naming

Use descriptive parameter names with units: "Electrode capacity [A.h]" not "cap"

Unit Consistency

Be explicit about unit conversions; use SI units internally

Built-in Calculations

Geometry & Capacity

Electrode geometry, mass, capacity, cyclable lithium, and microstructure

Thermal Properties

Heat capacity, Arrhenius temperature dependence, and thermal modeling

Piecewise Interpolants

Smooth piecewise functions for SOC and temperature-dependent parameters

Handling pipeline failures

Pipeline elements run sequentially. When an element fails, the pipeline reports an error and any downstream elements stop. The cause is recorded on the element as an error_code:

Resubmitting a failed pipeline

If the first failed element has error_code = SUBMISSION_FAILED, you can resubmit the pipeline. Resubmission resets that element and continues execution from where the pipeline stopped — completed elements are not re-run.
Open the pipeline detail page. When the lead failure is a submission error, a Resubmit button appears on the failed-element alert at the top of the page. Click it to retry the pipeline in place.
For failures with other error codes (timeouts, internal errors, or configuration issues), create a new pipeline with the corrected configuration instead of resubmitting.

Data Fitting

The pipeline abstraction also powers data fitting—estimating unknown parameters by comparing model predictions to experimental data. A DataFit element wraps a pipeline with an optimization loop:
  • The optimizer proposes parameter values
  • The pipeline runs the model with those values
  • The objective computes how well predictions match data
  • This repeats until the best-fit parameters are found

Data Fitting (theory)

Cost functions, identifiability, regularization, and other theory.

Data Fitting (how-to)

Configure and submit data fits with ionworks-schema + ionworks-api.

Pipeline errors

When a pipeline element fails, Studio shows the element in a Failed state with an error message and a machine-readable error code. Hover the status chip in any pipeline list to see the code, and expand the failed element to read the full message. The same fields are returned by the API on failed jobs and pipeline elements:

Error codes

Use the error_code field to branch on failure type without parsing error strings:

Catching configuration errors in Python

The ionworkspipeline package exposes ParameterNotFoundError so you can catch missing-parameter failures without inspecting tracebacks or message strings. It subclasses KeyError, so existing except KeyError handlers continue to work.
ParameterNotFoundError subclasses KeyError and carries no custom attributes. The message — available via str(err) or err.args[0] — is the full text produced by pybamm’s parameter lookup, e.g. "'Negative electrode loading [A.h.cm-2]' not found. Best matches are [...]". It names the missing key and suggests close matches, which is useful when building diagnostic UIs or auto-correcting parameter sets. The other configuration error raised by pipeline/data-fit parsing, UserConfigurationError, is not re-exported at the package root — only ParameterNotFoundError is. Import it from the submodule when you need to catch it directly: from ionworkspipeline.exceptions import UserConfigurationError. It subclasses ValueError, so an except ValueError handler also catches it. When a UCP protocol can’t be simulated as written — for example, a drive cycle referenced by name that wasn’t supplied, a goto target that doesn’t resolve, an end-condition string that doesn’t parse, an initial SOC outside [0, 100], or an expression that references an uninitialised variable — the failed pipeline element is tagged with the CONFIGURATION_ERROR code and its message is surfaced verbatim through the API. This distinguishes a user-correctable protocol issue (fix the protocol, drive cycles, or inputs and retry) from an unexpected internal failure, which is reported as INTERNAL_ERROR.