MaximaLabs
Back to gallery
Chemical production site, Port of Antwerp

Site water reuse: RO + EDI polish + MD to near-ZLD — a PENG-ROBINSON process flowsheet

The full hybrid a large chemical site builds when it is reusing its own effluent rather than buying river water: reverse osmosis does the bulk desalting, electrodeionisation polishes the permeate to boiler-feed quality, and the RO concentrate is warmed by waste heat and pushed to salt by membrane distillation and a crystalliser. It is the companion to industrial-water-reuse-ro-md-zld, which stops at reuse-grade water; the delta here is the polishing leg, and it is a genuinely different technology rather than a tighter membrane.

Why EDI and not more RO. RO is pressure-driven and pushes water, so its energy scales with the volume produced. Electrodialysis drags ions out under a field and the water never crosses, so its energy scales with the salt removed — which is why it is hopeless on seawater and excellent on an RO permeate that is already 99% desalted. This model shows that rather than asserting it: at the same stack and current the moles removed are fixed by Faraday's law regardless of how salty the feed is.

The reason the polisher is resin-filled is the interesting part. Plain electrodialysis has a limiting current density proportional to the diluate concentration, so as the water approaches pure the boundary layer runs out of ions to deliver and the salt flux plateaus — ED cannot reach ultrapure at any voltage, and the voltage runs away as the water stops conducting. Packing the diluate compartment with ion-exchange resin fixes both: the resin carries the current, and the water splitting that occurs above the classical limiting current — a fault in a solution-filled stack, causing a pH excursion and scale — is exactly what regenerates the resin in place. That is why an EDI polisher needs no chemical regeneration, and why the same operating point means opposite things in the two stacks.

Modeling assumptions & limitations

  1. 1The stack's mass-transfer coefficient, membrane area resistance and current efficiency are measured properties of a specific stack at a specific velocity, supplied here as inputs — no ED-stack databank ships, for the same reason no membrane or dust databank does. The same applies to the water-splitting overpotential, and it matters more than it sounds: the ohmic terms alone give a fraction of a volt per cell pair while a real EDI stack runs at 1-2 V, so with that input left at its zero default the model reports an energy *floor* rather than a prediction. It is set explicitly here (1.2 V/cell pair) so the number below is worth quoting. One lumped 1:1 salt, so no per-ion selectivity and no monovalent-selective membrane. Pretreatment (filtration and pH adjustment) sits upstream of this boundary because the thermo carries no particulate phase, and the concentrate side has no scaling model — screen it with the silica and cooling-water tools, which is what actually decides how far the brine loop can be pushed. The fouling that sets the CIP interval on the RO stage is likewise a separate calculation (the fouling and CIP tool), not part of this steady-state balance.

10 views 0 forks

Effluent
RO
EDI
Ultrapure
Brine MIX
Waste HEAT
MD
MD Distillate
feed
solid
liq
Cryst
SALT
Brine
What this showcases
  • Rigorous PENG-ROBINSON thermodynamics, solved by the same engine every simulation runs on.
  • 6 unit operations modeled: RO, EDI, Brine MIX, Waste HEAT, MD, Cryst.
  • Focus areas: Water reuse, Electrodialysis, EDI, Ultrapure water, ZLD.
Specification
Thermodynamics
PENG-ROBINSON
Components
water, nacl
Unit operations
ROEDIBrine MIXWaste HEATMDCryst
Open in workspace

Opens in a new tab, loaded straight into the app — no setup.

Read the step-by-step guide
Python SDK

Reproduce 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("site-water-reuse-edi-polish")
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

Chemical production site, Port of Antwerp

Industrial water reuse: RO + membrane distillation to near-ZLD

A chemical-site water-reuse train of the kind large industrial water users build when the intake is salinising and freshwater is getting scarce: reverse osmosis makes reuse-grade water, the RO concentrate is warmed by low-grade waste heat and pushed further by membrane distillation, and the MD concentrate is crystallised to salt. Overall water recovery comes out at 94.9%. The point of the flowsheet is why MD is there at all. RO is pressure-driven, so its ceiling is osmotic pressure — and this feed hits that wall hard: at 25 bar the same 75% recovery is infeasible, and the model says so with a number rather than a shrug (osmotic pressure 27.2 bar against a 25 bar feed, a structured SPEC_THERMODYNAMICALLY_IMPOSSIBLE error, which is why the feed here runs at 45 bar). Membrane distillation is driven by a vapour-pressure difference instead, so only vapour crosses and there is no osmotic ceiling at all: it takes the RO concentrate from 2.0 mol% to 9.7 mol% salt, recovering 81% of the water RO had to leave behind, and its distillate is solvent-only. The waste-heat coupling is not decoration. At the RO concentrate's own 25 C the MD flux is about 1 kg/m2/h and the module is pointless; warmed to 60 C it runs at 21.5 kg/m2/h, inside the 10-50 kg/m2/h band real DCMD modules achieve. That is the entire commercial case for MD — it is a heat-driven process, so it is only cheap where low-grade heat is already being vented.

MEG/EG complex, Jubail, Saudi Arabia

Ethylene glycol plant: closed water loop + multi-effect evaporator dehydration

The water-integrated evolution of the fiber-grade MEG plant. Two changes turn the once-through EO/glycol chain into a real, water-economical process: (1) the recovered process water is RECYCLED back to the hydration reactors through a purge splitter. A pure recycle is inventory-singular (reactors are keyed on the shrinking EO pool, so water consumption is fixed regardless of how much water circulates), so an 8% purge pins the loop and makes it well-posed, cutting fresh water makeup from 10 to ~1.75 mol/s (a >80% reduction). (2) The bulk dehydration is done by a genuine TWO-EFFECT EVAPORATOR TRAIN (forward-feed, real steam economy: effect 1's low-temperature vapor is the heating steam for effect 2) doing rigorous (P,H)-flash water removal, rather than a single spec-based split. The recycle converges through the solver's Wegstein tearing (~15 outer passes) and MEG still comes out fiber-grade (>=99.9%). HONEST SCOPE: the reaction chemistry is rigorous stoichiometry (real atom balances, ~90/9/1 selectivity) and the evaporators are real energy-balanced flash effects — but flash evaporation CANNOT reach glycol dryness without slipping glycol into the overhead vapor (MEG has a real vapor pressure at 90 C), so the evaporators run cool and only pre-concentrate. An overhead knockout returns the ~1-2% slipped glycol to the product (no yield loss), and a final vacuum-refining polish (still a spec-based split, representing the refluxed dehydration column a flash cannot replicate) removes the last water. This mirrors a real MEG plant's multi-effect-evaporator + vacuum-refining dehydration section. The product columns remain spec-based (a converged 99.9% fiber-grade MEG column is not tractable under Peng-Robinson here — the MEG/DEG relative volatility is too narrow for the wide-boiling MESH path).

Fuel-ethanol dehydration, Pekin, Illinois, USA

Pressure-swing ethanol dehydration (Gᴱ mixing rule)

Ethanol–water is the classic azeotrope, and pressure-swing distillation breaks it without an entrainer: the azeotrope moves with pressure, so a low-pressure column and a high-pressure column pass each other's azeotropic distillate and each recovers a pure product. The whole process only works if the property package tracks that shift — which is exactly where a conventional package choice falls between two chairs. This flowsheet runs the high-pressure column at 15 bar on pr-mhv1: Peng-Robinson with an MHV1 excess-Gibbs mixing rule, so the cubic equation of state gets its attraction parameter from NRTL's excess Gibbs energy instead of from a single binary interaction constant. Switch the thermo package (Solver menu) and compare the predicted azeotrope: | package | 1 atm | 15 bar | valid at 15 bar? | |---|---|---|---| | NRTL | 0.891 | 0.802 | no — γ-φ is a low-pressure formulation (~10 bar) | | Peng-Robinson (kij) | 0.586 | 0.613 | yes, but a kij cannot represent this azeotrope | | pr-mhv1 | 0.949 | 0.798 | yes | (mole fraction ethanol; the repo's DECHEMA-validated 1 atm anchor is 0.894.) At 15 bar pr-mhv1 lands within 0.005 of NRTL while remaining a genuine equation of state, whereas plain Peng-Robinson is off by ~0.19 and puts the azeotrope in the wrong place entirely. Selecting nrtl here also trips the applicability guard, which warns that the activity model is past its pressure ceiling and names the fix. The flowsheet demonstrates the mechanism on itself. Drop the column pressure to 1 atm and re-run, changing nothing else: the solve fails with SPEC_THERMODYNAMICALLY_IMPOSSIBLE, because at atmospheric pressure the requested bottoms purity sits beyond the azeotrope and no column can reach it. At 15 bar the same specification converges and the bottoms leaves at x_EtOH ≈ 0.924 — past the atmospheric azeotrope of 0.894, which is precisely the composition an atmospheric column cannot cross.

Acetic acid plant, Texas City, Texas, USA

Acetic acid via methanol carbonylation (Cativa process)

Methanol carbonylated with CO to acetic acid over the iridium-based Cativa catalyst (BP Chemicals), which runs at higher selectivity and lower water content than the older Monsanto rhodium process. The homogeneous catalyst itself isn't a flowing component in this model — only the carbonylation stoichiometry and downstream light-ends recovery are represented. Unreacted CO is flashed off and a column strips residual methanol from the acetic acid product.

Terephthalic acid plant, Map Ta Phut, Thailand

Dilute acetic acid recovery by extractive distillation

Recovering acetic acid from a dilute aqueous stream (e.g. cellulose acetate or terephthalic acid plant wastewater) using diisobutyl ketone (DIBK) as an extractive entrainer. Because acetic acid and water form no azeotrope but have a relative volatility that flattens toward 1 as the mixture concentrates, straight distillation needs an impractically tall column and heavy reboil duty; the entrainer raises water's relative volatility so the extractive column takes water overhead in far fewer stages, and a second column then strips the entrainer from the acid bottoms for recycle.

Akola, India

DME synthesis (methanol dehydration)

Catalytic methanol dehydration (2 CH₃OH → (CH₃)2O + H₂O, 82% conversion) followed by two atmospheric-pressure columns: DMECOL rejects dimethyl ether overhead (~88% pure — the ternary's relative volatility at this pressure caps a single column's overhead purity there) via the inside-out method (a genuinely wide-boiling ternary — DME boils at -24 C, water at 100 C), then MEOHCOL recovers unconverted methanol (99.9% pure) from the water byproduct (99.3% pure). From the ChemSep casebook (DME_ie101583j).

Stop fighting legacy software. Build your first flowsheet in 60 seconds.