Ionworks

Battery simulation consulting from the team behind PyBaMM.

We build parameterized models, custom physics, and degradation studies for battery R&D teams. PyBaMM consulting from the maintainers. Every parameterized model we deliver is yours to keep and run forever.

500+battery papers authored by our team
8 yearsaverage battery modeling experience
60%PhDs on staff
29k+citations on our battery research

When to bring in outside help

Most teams that reach out already know what they need. They have data, a deadline, and a model they need built or fixed. This page is for the moment after that: when an internal build doesn't make sense, when an open-source project doesn't ship support, or when the next step requires expertise your team has not yet built.

  1. 01

    You have the data, not the modeling team.

    Your hardware group runs careful parameterization experiments (GITT, EIS, pulse, slow-rate discharge) but the cycler files have been sitting in a shared drive because nobody on the team writes Python. We take the data, fit the model, and hand back a validated parameter set with the cell specification, the fitting provenance, and a short note on what it can and cannot predict.

  2. 02

    You need a degradation model and you've never built one.

    Empirical capacity-fade fits, mode-level models that separate LLI from LAM, mechanism-level models for SEI growth or lithium plating. Each one wants a different experimental design and a different fitting workflow. Most teams need one degradation model once, not a permanent in-house degradation function. Hire us for the deliverable.

  3. 03

    Your team uses PyBaMM and has hit a wall.

    You already model in PyBaMM. The blocker is specific: an identifiability problem the optimizer keeps ducking, a new chemistry that needs custom physics, a fitting pipeline that converges nicely but disagrees with the validation set. We unblock it without rebuilding the capability you already have. And because we maintain PyBaMM, the fix usually flows back into the framework your team is already using.

Project catalog

What we build

Seven project types across parameterization, degradation, and applied studies. Every engagement is fixed-scope and every deliverable is yours to keep. Pick the row that matches your engineering question — or tell us about it and we will tell you which one does.

01 / 03

Battery parameterization services

Most engagements start here. A standard model fit against your cell, or a custom model when the standard ones don't cover your chemistry. Both end the same way: a validated parameter set, the cell specification it belongs to, and the Python code we used to get there.

  1. ~1 month

    Standard performance model fit (SPM, SPMe, DFN)

    We fit a physics-based model (single-particle, single-particle with electrolyte, or full Doyle-Fuller-Newman) against your cycling, pulse, OCP, and EIS data using the ionworkspipeline package. Combine multiple objective types in one fitting run so each parameter is constrained by the experiment designed to reveal it. Deliverable: a validated parameter set bundled with its cell specification, the fitting provenance, and a voltage-vs-data comparison report.

  2. 3–6 months

    Custom and non-standard models

    New chemistry or new physics. We extend the PyBaMM framework to cover sodium-ion cells, solid-state systems, silicon-anode formulations, or multi-site multi-reaction (MSMR) electrodes, then parameterize the new model against your data. Suitable when the question is "how do I model a cell PyBaMM does not yet ship a model for."

02 / 03

Battery degradation modeling services

Three levels of degradation modeling, ordered by how much physics you want and how far outside the training data you need to predict. Pick the one that matches the engineering question, not the most sophisticated one available.

  1. ~1 month

    Empirical degradation model

    A data-driven capacity-fade and resistance-growth fit against long-cycling datasets. Suitable when you need lifetime predictions for conditions close to the training data and a mechanistic model would be overkill. We deliver the fit, the validation against held-out cycles, and an honest note on extrapolation limits.

  2. ~2 months

    Degradation mode model (LLI, LAM)

    Attribute capacity loss to loss of lithium inventory and loss of active material on each electrode. More interpretable than an empirical fit. You can say "this cell is losing inventory faster than it is losing active material." Substantially less expensive than a full mechanism model. The right choice when the conversation needs to be about why, not just how much.

  3. ~6 months

    Degradation mechanism model (SEI, lithium plating)

    Full physics-based degradation. SEI layer growth, lithium plating onset, or both, calibrated against targeted experiments designed to expose each mechanism. The longest engagement type we offer, and the only one that gives you confidence in predictions for conditions outside the training data: fast charge profiles you have not yet tested, temperature ranges you have not yet swept, calendar conditions that take longer to measure than to simulate.

03 / 03

Applied studies

Once a parameterized model exists, we use it. Optimization studies sweep design parameters against an engineering objective. Custom interfaces let the rest of your team run the model without writing Python.

  1. ~1 month

    Custom optimization study

    Starting from an existing parameterized model (yours, ours from a prior project, or one from the literature), we run design-parameter sweeps against an engineering objective. Energy density versus coating thickness. Fast-charge window versus particle size. Cycle life versus electrolyte loading. Deliverable: the study, the code that ran it, and a written interpretation of the trade-off surface.

  2. ~1 month

    Custom Dash or Streamlit GUI

    A browser interface around a one-off modeling workflow so the non-modelers on your team (cell engineers, program managers, customers of your customers) can run scenarios and read results without touching Python. Useful when the model needs to be used by more people than the person who built it.

Looking for training instead of a built deliverable? See PyBaMM training for R&D teams →

What we can model

Chemistries, model types, data formats, and fitting objectives we work with most often. Other combinations on request. We have not exhausted what the framework supports.

Chemistries

NMC·NCA·LFP·silicon-anode·sodium-ion·solid-state·others on request

Model types

SPM·SPMe·DFN·ECM (0–5 RC pairs)·LumpedSPMR·LumpedSPMeR

Data formats

Maccor·Neware·BioLogic·Arbin·BPX·generic CSV

Fitting objectives

current-driven cycling·cycle aging·EIS·pulse resistance·OCP half-cell·electrode balancing·MSMR

How we work

Engagements are fixed-scope projects, not retainers. We agree the deliverable, the timeline, and the data we need before any work begins.

01

Duration

1–6 months

Scoped per project. No open-ended retainers.

02

Deliverables

parameter sets · designs · run-only Python script

Concrete artifacts your team uses, not slide decks.

03

Ownership

your IP

Every deliverable is wholly owned by you. No licensing terms on consulting output, no carve-outs, no derivative restrictions.

What you take away

Every engagement ends with a parameterized model your team can run forever, plus the documentation and validation evidence that backs it up. Refitting the model against new data, version-controlling it, and sharing it across studies happens in Ionworks Studio.

01

A parameterized model you can run forever

The model class, the validated parameter set, and the cell specification, packaged so your team can load it and run simulations from a Python script. Run-only and yours to keep. No license, no expiry.

02

Validation evidence and a model report

Every parameter linked to the measurement that constrained it. The protocols we used. The fitting metrics, the residuals, the validation runs against held-out data. Enough provenance that six months from now, anyone on your team can trace any number back to its source. And defend it in a design review.

03

For refitting and team workflows: Ionworks Studio

The fitting pipeline itself, model versioning, studies, and the browser interface for non-Python users live in Ionworks Studio. If you want to refit the model against new data later, run sweeps without writing code, or share results across the team, that's what Studio is for. The run-only model from your engagement keeps working without it.

Frequently asked questions

You do. Every parameter set, every cell specification, every parameterized model, every design from an optimization study. The Python script needed to load and run that model is yours too. No licensing terms on consulting output, no carve-outs. The only thing we keep is the right to learn from the work. Note: the fitting pipeline that produces those parameter sets is part of Ionworks Studio. Refitting against new data after the engagement requires a Studio license, but the model we delivered keeps running indefinitely without one.
Yes, routinely. We sign mutual NDAs before any technical conversation involving your data, your cell design, or your test results. Send your standard form to the contact on the demo call and we will return it signed within a few days.
Yes. PyBaMM consulting is one of the most common reasons teams reach out. Send us the model definition (custom Python, serialized JSON, or a fork of the framework) and the data you have been fitting against. We can pick up an existing project, audit a fit you suspect is wrong, or extend a model your team built into territory it was not originally designed for.
For a standard parameterization: cycling data covering a few C-rates, a slow-rate discharge for the open-circuit voltage, and ideally a pulse resistance test or EIS sweep. For degradation work: long-cycling data over the conditions you care about. We send a short data checklist after the first call so nothing important is missing.
Two steps. A discovery call to understand the engineering question: what cell, what data, what decision the model needs to inform. Then a written scope with the deliverable, the timeline, and the data we need from you. No work starts until both sides have signed the scope. Most scoping conversations take a week, sometimes less.
Yes. Parameter sets ship as standard formats (BPX where applicable, Python dictionaries otherwise) so they can be loaded by PyBaMM or by any tool that reads the format. Model code is plain Python with documented entry points. For non-Python consumers we can wrap the workflow in a Dash or Streamlit interface (see project type C2).

Have a battery modeling problem you can't solve in-house?

Tell us what you're trying to build and we'll tell you which project type fits, or whether we're the wrong call.