Method
MMRC — cathodic metal electrowinning
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.
Diffusion-limited current Source: Textbook limiting-current relation; mmrc.ts cites no source for it.
Symbol Meaning Unit diffusion-limited current density A/m² electrons per metal ion (Cu 2, Cr 3) 1 aqueous diffusion coefficient (Cu 7.14×10⁻¹⁰) m²/s influent metal concentration (default 500 mg/L) mol/m³ diffusion-layer thickness (default 30 µm) m Operating current and morphology 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.
Symbol Meaning Unit anode current density from predict.ts A/m² applied voltage (default 0.6) V deposit morphology score: 1 smooth, 0 dendritic 1 Current efficiency 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.
Symbol Meaning Unit intrinsic ceiling (Cu 0.95, Zn 0.70) 1 hydrolysis pK_a; above pK_h + 1 the metal precipitates as hydroxide and FE = 0 1 standard reduction potential vs SHE V Metal deposited (Faraday) Source: Faraday's law of electrolysis.
Symbol Meaning Unit metal mass deposited g cathode area, fixed at 0.003 m² run duration (default 24 h) s molar mass (Cu 63.55) g/mol influent 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.
input value unit temperatureC 25 °C ph 7 pH electrodeSpacingCm 2 cm hrtHours 24 h codMgL 1,000 mg/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.
| target | stratum | n | papers | coverageCV |
|---|---|---|---|---|
| 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.
| parameter | system | state | papers | prior |
|---|---|---|---|---|
| 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.
| rule | baselined |
|---|---|
| gate-honestyNo parameter may pass a rounded-threshold gate read while converged=false | 1 |
| support-containmentBounded quantities must have ci95 inside physical support, width <= range | 3 |
| 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 agree | 2 |
| secondary-source-purityNo fitted prior may carry a REVIEW (secondary-source) stratum | 0 |
| artifact-pairingEach fit must have its own coverage evidence; the served fit must have some | 0 |
| coverage-sharpnessAny coverage figure must ship its interval width alongside | 0 |
| interval-calibrationHeld-out interval coverage per parameter may not newly degrade | 128 |
| effects-gap-completenesseffects.json is schema 2.0; every non-high effect has a gap per archetype; no gap is "high" | 0 |