Cobalt/nickel solvent extraction (D2EHPA) — a BRINE process flowsheet
A laterite leach liquor (Co/Ni/Mg in dilute sulfate solution) meets a D2EHPA-in-kerosene organic phase across a 20-stage countercurrent extraction circuit run at pH 5.2 — the real industrial operating window (e.g. Bulong, Murrin Murrin, Western Australia) that exploits the ~1 pH-unit gap between Co and Ni's D2EHPA extraction isotherms: Co extracts into the organic while Ni (and Mg gangue) are rejected to the raffinate. The loaded organic then meets fresh dilute-acid strip liquor across a 10-stage strip circuit at pH 1.0 (well below Co's isotherm), reversing the equilibrium to recover a concentrated cobalt strip liquor and regenerate barren organic. Real pH-isotherm chemistry throughout, not a fitted shortcut K_D.
Modeling assumptions & limitations
- 1The regenerated organic and strip liquor aren't recycled back upstream (an open-loop v1, same posture as this session's other new cycle examples) — a real plant recycles both; strip_stage's distribution_coefficients is the numeric inverse of the same isotherm (1/D_Co at pH 1.0 = 1e8, i.e. strongly favors the aqueous phase) since the ph= mode always assumes the aqueous-feed/organic-solvent extraction direction, not reverse stripping.
188 views 0 forks
- Rigorous BRINE thermodynamics, solved by the same engine every simulation runs on.
- 1 unit operations modeled: 2× Strip Stage.
- Focus areas: Solvent extraction, Hydrometallurgy, Cobalt, Nickel, Battery metals, D2EHPA.
- Thermodynamics
- BRINE
- Components
- water, co, ni, mg, kerosene
- Unit operations
- 2× Strip Stage
Opens in a new tab, loaded straight into the app — no setup.
Read the step-by-step guideReproduce this exact result from Python — the real client.get_example() → run_and_wait() path, not a mockup.
from flowsim.sdk import FlowSimClient
client = FlowSimClient()
example = client.get_example("co-ni-solvent-extraction")
sim = client.create_simulation(example["title"], example["flowsheet"])
result = client.run_and_wait(sim["id"])
print(result["status"]) # "converged"
streams = client.streams(sim["id"])Related models
Battery black-mass recycling: leach -> SX -> BPED -> LiOH crystallization
Spent-battery black mass (an NMC111-like LiNi1/3Mn1/3Co1/3O2 lump, sulfuric acid-leached at a screening-level yield/stoichiometry — see the stated scope) dissolves into a pregnant leach solution carrying Li/Co/Ni/Mn. A 15-stage D2EHPA solvent-extraction circuit (the same real pH-isotherm chemistry the co-ni-solvent-extraction example uses, operated at pH 7.5 — above every curated Co/Ni/Mn pH50 — so all three transition metals extract into the kerosene organic phase while Li, which has no curated D2EHPA isotherm, stays in the aqueous raffinate untouched) purifies the liquor before it ever reaches the lithium-recovery chemistry. A Faraday's-law bipolar-membrane electrodialysis (BPED) cell (the same real electrochemistry as the direct-lithium-extraction example, sized up for this liquor's larger Li flow) converts Li+ to LiOH, which an MSMPR crystallizer takes to battery-grade LiOH solid. Every step reuses an already-real, independently-tested unit op (,,,) chained into the one train none of them had been assembled into before.
Direct lithium extraction + LiOH crystallization
A Salar-brine DLE train: an Al-based sorbent column selectively loads Li+ (rejecting the brine's much larger Mg2+ background — real DLE sorbents cut a ~290:1 Mg/Li mass ratio down to under 1:1), the loaded sorbent is eluted with fresh water into an aqueous strip liquor (bridging the sorption column's own documented single-pass-loading scope), RO concentrates it, a real bipolar-membrane electrodialysis (BPED) cell converts LiCl to LiOH — Faraday's law links the applied current/membrane area/current efficiency to the actual Li+ transport rate (replacing an earlier placeholder fixed-conversion reactor), reporting real cell voltage and electrical power draw — and a forward-feed two-effect evaporator train (vapor from effect 1 heats effect 2) concentrates it to battery-grade LiOH·H₂O crystals. Real boiling-point elevation throughout via the Pitzer-electrolyte brine thermo package. Isotherm parameters per the sorption column's own citation (2024 Desalination study, Al-based DLE sorbent).
Acid-mine-drainage neutralization: staged lime precipitation
Acidic, metal-laden mine water (dissolved ferric iron, aluminium, nickel and zinc over a sulfate background) is cleaned in a two-stage lime-neutralization circuit — the classic hydrometallurgy / water-treatment precipitation train. Stage 1 doses to pH 4.5, where ferric iron (Fe(OH)3, pKsp 38.6) and aluminium (Al(OH)3, pKsp 33.0) drop out as a sludge while the base metals stay dissolved; stage 2 raises the liquor to pH 9.5, where nickel (Ni(OH)2) and zinc (Zn(OH)2) precipitate, leaving a clarified effluent. Both stages are the new precipitator unit op wrapping the codebase's CRC-cited metal-hydroxide solubility-product chemistry (thermo/electrolytes.hydroxide_precipitation) — dose to a pH setpoint, read off what drops out — the same selective-precipitation workflow a real neutralization plant runs.
Copper recovery from a leach residue: CCD washing + hydroxide precipitation
A leach residue leaves a heap/tank-leach circuit as a slurry — insoluble gangue solids carrying entrained copper-sulfate pregnant liquor that would be lost to tailings if simply thickened. A counter-current-decantation (CCD) wash train recovers it: the residue is washed with clean water flowing counter-current to the solids across a chain of thickeners, so the dissolved copper is displaced into a pregnant-liquor overflow while the washed solids go to tailings. The new ccd_washer unit op models the whole train in one block via the classic counter-current washing equation f = (R-1)/(R^(N+1)-1) (Perry's §18; Coulson & Richardson Vol. 2): five stages at a wash ratio near 4 recover ~99.9% of the dissolved copper, leaving only ~0.08% with the tailings. The pregnant liquor is then dosed to pH 8, where the copper drops as Cu(OH)2 sludge (the precipitator op on the CRC-cited solubility-product chemistry), leaving a barren raffinate for recycle.
Solids train (crystallize → filter → dry)
An MSMPR crystallizer feeds a cake filter and dryer — the crystal size and cake moisture propagate on the stream's solids payload (pharma / minerals workflow).
Crystallization with agglomeration (distributed CSD)
An MSMPR crystallizer solved with the rigorous distributed population balance (not just moments): the full crystal-size distribution is computed on a size grid, and an agglomeration (aggregation) kernel combines fine crystals into larger ones — coarsening the mass-weighted mean size (d43) and broadening the distribution (CV rises above the growth-only MSMPR value of ~1.0) while conserving mass exactly. The distribution, its coefficient of variation, and d43 propagate on the solid stream into the filter and dryer — the gPROMS/gCRYSTAL capability the moment model structurally cannot provide.