Methods

Method

MMRC — cathodic metal electrowinning

mmrc-electrowinning-v1 · selective_reduction · MMRC

What it predicts

Metal recovery, energy per gram deposited and a deposit-morphology score for Cu, Zn, Ni, Cd, Pb, Cr.

Governing relations

Each relation is transcribed from the implementation. Where the code cites no source, the source line says so.

  1. Diffusion-limited current
    jlim=nFDCδj_{lim} = \frac{n F D C}{\delta}

    Source: Textbook limiting-current relation; mmrc.ts cites no source for it.

    SymbolMeaningUnit
    jlimj_{lim}diffusion-limited current densityA/m²
    nnelectrons per metal ion (Cu 2, Cr 3)1
    DDaqueous diffusion coefficient (Cu 7.14×10⁻¹⁰)m²/s
    CCinfluent metal concentration (default 500 mg/L)mol/m³
    δ\deltadiffusion-layer thickness (default 30 µm)m
  2. Operating current and morphology
    jop=min⁡(jan (1+Vapp), 1.2 jlim),s=min⁡(1, max⁡(0, 1.2−jopjlim))j_{op} = \min\left(j_{an}\,(1 + V_{app}),\ 1.2\, j_{lim}\right), \qquad s = \min\left(1,\ \max\left(0,\ 1.2 - \frac{j_{op}}{j_{lim}}\right)\right)

    Source: Linear voltage bump and a linear morphology ramp; mmrc.ts cites no source for it.

    The voltage term is a linear approximation of a Tafel response, and the score is a ramp in j/j_lim; Sand's transition time is described in the header but not computed.

    SymbolMeaningUnit
    janj_{an}anode current density from predict.tsA/m²
    VappV_{app}applied voltage (default 0.6)V
    ssdeposit morphology score: 1 smooth, 0 dendritic1
  3. Current efficiency
    FE=max⁡(0.1, FEmax−0.3max⁡(0, pH−pKh)−0.1 ∣E∘∣ [E∘<0])FE = \max\left(0.1,\ FE_{max} - 0.3\max(0,\ \mathrm{pH} - pK_h) - 0.1\,\lvert E^\circ\rvert\,[E^\circ < 0]\right)

    Source: Per-metal values from Pourbaix data and Modin et al. 2012, J. Hazard. Mater. 235-236:291 (as stated in mmrc.ts).

    A linear penalty model of HER competition, not a kinetic branch ratio.

    SymbolMeaningUnit
    FEmaxFE_{max}intrinsic ceiling (Cu 0.95, Zn 0.70)1
    pKhpK_hhydrolysis pK_a; above pK_h + 1 the metal precipitates as hydroxide and FE = 01
    E∘E^\circstandard reduction potential vs SHEV
  4. Metal deposited (Faraday)
    m=jop A t FE MnF,recovery=min⁡(99, 100 mC V)m = \frac{j_{op}\, A\, t\, FE\, M}{n F}, \qquad \mathrm{recovery} = \min\left(99,\ 100\,\frac{m}{C\,V}\right)

    Source: Faraday's law of electrolysis.

    SymbolMeaningUnit
    mmmetal mass depositedg
    AAcathode area, fixed at 0.003m²
    ttrun duration (default 24 h)s
    MMmolar mass (Cu 63.55)g/mol
    C VC\,Vinfluent metal mass in the chamber (default 100 mL)g

    Worked example

    These inputs, passed to the predictor, return the output below. A test re-runs the example on every change, so this number is the one the code produces.

    inputvalueunit
    temperatureC25°C
    ph7pH
    electrodeSpacingCm2cm
    hrtHours24h
    codMgL1,000mg/L

    Output · mmrc.metalRecoveryPct = 38.92 %, within ±0.1 %

    By hand · j = 0.15 A/m² from predict.ts at 25 °C, pH 7, 1000 mg/L COD, no anode named (see the MFC worked example). Copper, V_app = 0.6 V: j_op = 0.15 × 1.6 = 0.24 A/m² (j_lim = 36.1 A/m² does not bind). FE = 0.95 at pH 4. m = 0.24 × 0.003 × 86 400 × 0.95 × 63.55 / (2 × 96 485) = 0.019 46 g of 0.050 g, so 38.92 %.

    Reproduce · Pinned by libs/shared/electrochemistry/src/predictors/worked-examples.test.ts. Run it from the repository root:

    pnpm exec jest -c libs/shared/electrochemistry/jest.config.js worked-examples.test.ts -t "mmrc.metalRecoveryPct"

Assumptions and constants

  • Anode current from the shared Butler-Volmer biofilm kinetics in predict.ts (Geobacter on acetate), with the same Arrhenius, substrate, pH and ohmic corrections as the MFC predictor.
  • Simplified Pourbaix speciation: cation below the hydrolysis pK_a, hydroxide above.
  • Diffusion-layer thickness δ = 30 µm (stirred cell) by default.
  • Catholyte pH 4 and a 500 mg/L copper feed by default — unsourced engineering defaults.
  • The applied voltage is read from the legacy `appliedVoltage` field only.

Corrections applied

  • Morphology score 0–1 from j / j_lim (0 = dendritic, 1 = smooth).

Not modelled

  • Multi-metal selectivity in a mixed feed — single-metal feed assumed.
  • Sulfide co-precipitation in acid-mine-drainage treatment.
  • Anode dissolution / membrane fouling over time.
  • Sand's transition time (described in the header, not computed).

Literature anchors in the source

  • Modin et al. 2012, J Hazard Mater 235-236:291
  • Gregory & Lovley 2005, ES&T 39:8943

Implementation

libs/shared/electrochemistry/src/predictors/mmrc.ts

Interval the predictor ships

heuristic_fixed_fraction — A fixed ±25 % placeholder band. It is NOT a calibrated interval; when served through /api/ml/predict it is replaced by the benchmark band below, or withheld. How served intervals are built

Calibration artifacts used when served

  • Benchmark out-of-fold residual quantiles: bes-benchmark-v1 · gkf5 · generated 2026-09-09
  • Split-conformal calibration: split-conformal · generated 2026-05-21
  • Hierarchical-priors v2 trust snapshot: populated · generated 2026-05-16

Benchmark cells for this predictor’s systems

Each row is a stratum with n ≥ 30 residuals at nominal level 90%. Coverage is the cross-validated share of held-out points inside the band.

targetstratumnpaperscoverageCV
No data (n = 0)

No benchmark cell reaches the minimum n for these systems — intervals are withheld.

Prior trust by served parameter

The state the lab badge shows for each served parameter and system, from the v2 priors fit.

parametersystemstatepapersprior
No data (n = 0)

No v2 prior row for these systems.

Scientific-rigor gates

pnpm verify:science runs these rules over the committed priors and validation artifacts in pre-commit. Known violations are baselined per rule and slug; a new one blocks the commit. Baseline from hierarchical-priors-v2.json@2026-10-26T00:10:47.721880+00:00.

rulebaselined
gate-honestyNo parameter may pass a rounded-threshold gate read while converged=false1
support-containmentBounded quantities must have ci95 inside physical support, width <= range3
magnitude-sanityNo ci95 bound may exceed the plausibility ceiling (1.0e+6)0
slug-uniquenessNo two slugs may share a spelling-independent identity; scale must agree2
secondary-source-purityNo fitted prior may carry a REVIEW (secondary-source) stratum0
artifact-pairingEach fit must have its own coverage evidence; the served fit must have some0
coverage-sharpnessAny coverage figure must ship its interval width alongside0
interval-calibrationHeld-out interval coverage per parameter may not newly degrade128
effects-gap-completenesseffects.json is schema 2.0; every non-high effect has a gap per archetype; no gap is "high"0