0041. Measured electrochemical performance from a processed series, and a membrane block¶
- Status: Proposed
- Date: 2026-11-04
Context¶
ADR 0023 made process/cells.yaml a contract with
specified performance: the cell voltage and the Faradaic efficiencies are inputs, and the
Faraday balance does exact bookkeeping on them. The CO2 electrolysis demonstrator (core#136,
process-library#329) starts from a measured series instead: a bench cell run at several
current densities, with replicates, whose raw data are cell voltages (chronopotentiometry),
outlet gas flows (mass-flow meter, sccm), gas chromatograph mole fractions and the titration of
the anolyte. A design case then needs the cell's voltage and efficiencies at its own operating
current density, with the measured spread, and the dynamic and sizing work that follows
(core#138, #139) needs the same lookup.
Two questions were open. Where the processing lives: a script in each plant or reproduction (what process-library#329 did first), a step of the cell model, or a domain function of its own. And how a bipolar-membrane cell states that part of its current is carried by co-ions rather than by water dissociation, without mixing that efficiency into the Faradaic one.
Decision¶
- A new optional plant file kind
experiments/electrochemistry/<id>.yaml, schemacheme/electrochemical-measurements/v1(kind: electrochemical_measurements, catalogue keyelectrochemical-measurements), owned bydomains/experiments/electrochemistry.py: the bench cell (area, temperature, electrolyte, membrane), thevoltage_basis(cell,cell_ir_corrected,electrode_vs_reference, required), the products (electrons, electrode, reaction, thermoneutral voltage), the gas measurement (flow unit, standard conditions, flow position and correction, inlet), the titration method, points with replicates and the validity range. Standard conditions of a volumetric flow are required, never assumed. - The processing is a deterministic domain function (
evaluate,measurement_report, modelelectrochemical-measurementsv1): Faradaic efficiency per product from the flow and mole fraction, partial current densities, the charge balance, the water dissociation efficiency from the Warder double end-point titration (the paper's equations), power, the heat at an isothermal boundary, the carbon balance; mean, sample sd and n per point. Findings arecheme.electrochem-*;cheme validatereports them.cheme experiments electrochem FILE [--json] [--plot DIR]prints the result and writes hand-written SVG plots only for the inputs that support them. MeasuredPerformance.at(j)is the one interface to measured performance: piecewise-linear interpolation of the point means (and sds) in the current density; outside the validity range or beyond the measured points it returns no value, with the bounds and the reason. Nothing in core extrapolates a measured series.process/cells.yamlstayscheme/electrochemical-cells/v1and gains optional fields:performance: measuredwithmeasurements: {file, product, side_products}looks the voltage and efficiencies up atI / active_area; a measured cell outside the measurement's range is refused (cheme.cell-operating-range, error), a stated value that disagrees beyond the sd ischeme.cell-measured-conflict; for maturity it is specified and sourced (never predictive). An optionalmembrane:block (kind, bias, water dissociation efficiency, co-ion split) reports the co-ion fluxes and the anolyte hydroxide deficit(1 - WDE) N I / Fbeside the Faraday balance, which it never changes. This extends ADR 0023, which stays accepted.- One existing field is loosened:
side_reactions[].current_fractionwas required and becomes optional incheme/electrochemical-cells/v1(a tool validatingcells.yamlagainst the published schema no longer requires it). A specified cell whose side reaction has none is no longer acheme.cell-schemaerror but is refused at evaluation withcheme.cell-input-missing; a measured cell takes it from the measurement's side product that names the reaction. Files that give it read as before. - The charge balance of a measured series is per electrode: each product names its
electrode, the full current passes both, so the Faradaic efficiencies of the cathode's and of the anode's products are summed and checked (fe-sum-highabovemax(1 + 3 sd, 1.05),fe-sum-lowbelow 0.9) apart. A product's thermoneutral voltage is that of its overall reaction, so only one electrode's products may give one, and the heat sums over those. A measured cell takes its efficiencies from one electrode (the product's reaction must be the cell's), and scales measured efficiencies that add up to more than 1, within the measurement's tolerance, to add up to 1 rather than refusing them. - The Faradaic efficiency (current to products at the electrodes) and the water dissociation efficiency (current the bipolar membrane carries by dissociating water) are separate quantities in every file, result and plot.
Consequences¶
- Positive: a plant or a reproduction states its raw series once, in a file with provenance and a fingerprint; the design case, the reproduction and later dynamic and sizing tools read the same numbers through one function, with the spread and the validity range attached.
- Positive: a cell can say that it is measured and where its numbers come from, and the refusal outside the measured range is explicit rather than a warning.
- Negative: the measured series is interpolated linearly; there is no polarisation model, so a design point between widely spaced points carries the interpolation error, and the interpolated sd is an approximation. Instrument uncertainty is not propagated.
- Negative: the heat counts only the products' reaction enthalpies; pH gradients, the neutralisation of crossed-over ions and heats of dilution are left out. The titration method counts one charge per crossing ion, as the source paper does.
- Follow-ups: dynamic duties and reservoir dosing from the hydroxide deficit (core#138), stack
sizing from
MeasuredPerformance(core#139); a temperature or electrolyte dimension of the lookup when a series measures more than one.
Evidence¶
- core#137; tracker core#136; first user process-library#329.
src/chemeascode/domains/experiments/electrochemistry.py,src/chemeascode/domains/process/electrochemical_cell.py,src/chemeascode/interfaces/cli/experiments.py(electrochem).tests/test_electrochemical_measurements.py,tests/test_electrochemical_cell.py,tests/data/electrochemical/co2-bpm/.docs/framework/electrochemical-measurements.md,docs/framework/electrochemical-cells.md.