MaximaLabs
Simulation gallery

Real, converged flowsheets

Every screenshot below is a genuine solve — real stream tables, real convergence badges, no mockups. Pick one to see the details.

FEED
feed
dist
btms
Qc
Qr
COL
DIST
BOT

Ethanol–water distillation

An 8-stage column concentrating ethanol overhead toward the azeotrope (the headline demo).

DistillationNRTL VLEAzeotrope
WELL
Separator
Brine
extr
exh
Q out
Turbine
Condenser
Hotwell
Reinjection

Geothermal flash-steam power plant (~90 MW)

A single-flash geothermal power plant on the IAPWS steam tables. A liquid-dominated geothermal well arrives at 240 °C / 35 bar and flashes across a separator down to 8 bar: about 15% of the brine becomes saturated steam and the rest is reinjected. The steam drives a condensing turbine to a 10 kPa vacuum (82% isentropic, exhaust quality ~0.9 — a real wet-steam expansion), a water-cooled condenser drops it to ~46 °C condensate, and a hotwell pump lifts it for reinjection alongside the brine. It converges to 89.9 MW of turbine shaft power. The separator (flash) pressure is the plant's key design knob: the `defaultSensitivity` sweeps it, trading a larger steam fraction at low pressure against higher steam enthalpy at high pressure — the flash-pressure optimization every single-flash geothermal plant makes. It runs on the rigorous IAPWS-95 water properties (`steam` package), and the turbine tracks steam quality into the two-phase dome rather than assuming a dry expansion.

GeothermalFlash steamSteam turbine
Slurry
Sacchar
ISOM
Desorb
feed
eluent
extract
raff
SMB
feed
steam
conc
vapor
cond
Evap1
feed
steam
conc
vapor
cond
Evap2
Cond1
Syrup
Vapor
Condensate
Steam
Raffinate

Corn wet milling: starch to high-fructose corn syrup

The sweetener train of a corn wet mill, end to end on the new `sugar` thermo package. A 35 wt% starch slurry off the mill is saccharified to glucose (glucoamylase, Michaelis-Menten), part-isomerised to fructose, enriched by simulated moving-bed chromatography, and concentrated to syrup in a two-effect evaporator. Three results are worth reading rather than assumed. The isomerase lands at **42% fructose** — the real equilibrium of glucose isomerase, which is precisely *why* an SMB exists downstream: the reaction cannot reach HFCS-55 on its own. The SMB then splits on the cited Ca²⁺-resin affinities (fructose H=0.69 vs glucose H=0.26), sending fructose to the extract and recycling glucose in the raffinate. The evaporator finishes at **77 wt% solids**, commercial HFCS syrup spec. That last number is only reachable because of boiling-point elevation. Modelled as inert solids the sugars give no BPE feedback and the evaporator is bimodal — it either does not boil or boils to dry sugar, with nothing in between. The `sugar` package (Norrish) supplies the real elevation, and syrup concentration becomes a smooth, controllable function of steam (42 → 77 wt% over the sweep range). Starch itself is carried as an involatile pseudo-component: it has no boiling point to characterise, so none is invented.

Corn wet millingHFCSSMB chromatography
FEED
feed
dist
btms
Qc
Qr
COL
DIST
BOT

Tray efficiency — real trays vs ideal stages

The same ethanol–water column solved with a **Murphree vapor tray efficiency** of 0.7 instead of ideal equilibrium stages. A real sieve/valve tray never reaches full vapor-liquid equilibrium — the vapor leaving it only partly approaches the equilibrium composition with the tray liquid, mixing in un-equilibrated vapor from the tray below: `y = E·K·x + (1−E)·y_below` (Murphree 1925). At E = 0.7 each of these 12 trays does 70% of an ideal stage's work, so the overhead ethanol is **lower** than an equilibrium column of the same tray count would predict — which is exactly why a real column needs *more* trays than a shortcut (ideal-stage) calculation says. Both HYSYS and Aspen RadFrac expose this per-tray efficiency; set `murphree_efficiency` back to 1.0 to recover the ideal-stage column. The efficiency auto-selects the component-flow Naphtali-Sandholm solver (the reduced-form solvers carry no explicit per-tray VLE row to apply an efficiency to).

DistillationTray efficiencyMurphree
AZEO FEED
PUMP
feed
dist
btms
Qc
Qr
Hpcol
Recycle TO LP
Ethanol

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. Honesty notes. (1) `pr-mhv1` is *less* accurate than NRTL at 1 atm (0.949 vs 0.891) — MHV1 is the right tool for the pressurized column, not a replacement for a fitted activity model at ambient pressure; multi-package flowsheets (`thermo_overrides`) let a real pressure-swing pair use each where it belongs. (2) Only the high-pressure column is drawn here — the low-pressure column and the recycle that close the loop are left out to keep the thermodynamic point legible.

AzeotropePressure swingGᴱ mixing rule
FEED
ƒ(x)
PIPE
OUT

Distributed pipeline cool-down (indexed equation model)

A hot gas cools along a buried pipeline — modeled as a custom unit op whose internals are a distributed 1-D indexed equation system, the gPROMS-style array + indexed-equation modeling capability solved by the sandboxed equation engine. Twenty axial segments compute the full temperature profile T[0..20] (the inlet drives the boundary T[0]; each segment loses heat toward the ground temperature); the outlet temperature is the end of that profile. Demonstrates writing a distributed model as one indexed template rather than 20 hand-written equations.

Custom equationsDistributed modelIndexed arrays
FEED
ƒ(x)
RX
OUT

Methanol synthesis reactor duty (Python Script Mode, LHHW kinetics)

A CO/H2 syngas feed enters a custom block written in real, sandboxed Python (flowsim/sandbox/) rather than the AST-restricted equation grammar — the case equation mode structurally can't express: a Langmuir-Hinshelwood-Hougen-Watson rate law (a forward kinetic term over a competitive-adsorption denominator, each term Arrhenius/ van't-Hoff temperature-dependent) evaluated inside a real Python loop over the adsorbing species, driving the exothermic reactor's temperature rise. Partial pressures are computed from the real inlet pressure (pinned via `inputs`) and representative mole fractions (`script_params` — composition itself can't be pinned into a script, only flow/T/P, so the fractions are illustrative constants, not read from the flowsheet's actual feed). The kinetic/adsorption/heat-of-reaction constants are likewise illustrative (chosen for a physically plausible rate and duty, not fit to a specific published dataset) — the point is the execution model, not a validated methanol-synthesis kinetic scheme.

Python Script ModeLHHW kineticsSandboxed Python
FEED
PH
TT
TT FEED
PID
CTRL FEED
feed
dist
btms
Qc
Qr
COL
TT
TT BOT
PID
CTRL BOT
DIST
BOT

Closed-loop LPG splitter — dual zero-offset PI control

Two independent, genuinely converged integral (PI) control loops in one train, wired on the canvas (transmitter -> controller -> manipulated unit, not just reported): a feed preheater's duty holds the column feed at its temperature setpoint, and the column's distillate-to-feed split ratio holds the bottoms temperature at its setpoint — a classic temperature-inferred composition control scheme (this solver has no composition transmitter, so temperature is the composition proxy, exactly as most real columns are actually controlled). Both loops reach a genuine zero-offset steady-state operating point via the flowsheet's outer fixed-point iteration (`result.control_iterations > 0`), each report's `measured` equal to its `setpoint`. This is honestly **decentralized SISO PI control**, not simultaneous MIMO DMC (no predictive horizon, no MV/CV interaction matrix, no constraint handling) — that capability lives in the separate live APC/MPC runtime (see the Control Room), not a static flowsheet example.

Closed-loop controlPI controlTemperature-inferred composition control
FEED
BIO
OUT

Substrate-inhibited fermenter (Haldane kinetics)

A continuous chemostat where growth is genuinely **inhibited** at high substrate concentration — the real Haldane mechanism (mu = mu_max*S/(Ks+S+S^2/Ki)), a native solver kinetics option (params['ki']), not a decorative custom block (custom_block structurally can't change stream composition, so faking this through one would misrepresent the reactor's actual material balance). At the same dilution rate a plain Monod fermenter would consume nearly all the feed substrate; here more substrate survives unconverted and less biomass forms, because growth is suppressed in this concentration range — the whole point of modeling inhibition at all. A strongly inhibitory Ki can also make a nominally achievable dilution rate (D < mu_max) physically unreachable and the reactor washes out, since the Haldane mu(S) curve peaks at a finite S and falls again at higher S.

Haldane kineticsSubstrate inhibitionFermentation
FEED
feed
solid
liq
CR
solid
liquor
cake
filt
FIL
wet
dry
vap
DRY
FILT
Solid
VAP

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).

MSMPRCrystallizationCake filtration
FEED
feed
solid
liq
CR
solid
liquor
cake
filt
FIL
wet
dry
vap
DRY
FILT
Solid
VAP

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. Honesty note: the aggregation kernel is a caller-supplied screening value (no fabricated kinetics), and the first-order upwind size grid reproduces the analytic MSMPR mean to within ~3%.

Population balanceAgglomerationCrystal size distribution
Solids
Water
solid
liquor
cake
filt
Dewater
wet
dry
vap
SSD
MVR
Superheat
Drysolid
Filtrate
Recirc Steam

Superheated-steam drying loop with MVR heat recovery

A wet cake is dried in a superheated-steam dryer (steam as the drying medium instead of hot air), and the evaporated moisture — pure steam — is recovered by mechanical vapor recompression (MVR) plus a trim superheater into high-grade superheated steam that reheats the recirculating drying medium. Superheated-steam drying is the energy-efficient route for biofuel and food solids (distillers' grains, beet pulp, lignite): because the drying atmosphere is steam, the evaporated water leaves as *more steam* whose latent heat is recompressed and reused, instead of being lost in a humid exhaust. Honesty note (same posture as bioethanol-mvr-stillage): the dryer is FlowSim's screening solid-in / vapor-out convective model (computes its own latent+sensible duty; the dried-solid identity is a generic surrogate, here 'ethanol' crystals as in the solids train), and the steam recirculation is modeled OPEN — the recompressed+superheated steam is reported as the recovered drying medium rather than piped back into the bed as a closed material recycle (the dryer op has no steam inlet to close the loop into). The MVR recompression + trim superheat of the evaporated steam — the defining SSD efficiency win — is modeled with the real compressor and heater ops.

Superheated steam dryingVapor recompressionEnergy integration
FEED
feed
solid
liq
CR
solid
liquor
cake
filt
FIL
wet
dry
vap
DRY
GRAN
FILT
VAP
Granules

Crystallization + granulation finishing

A continuous MSMPR crystallizer, cake filter, and dryer feed a granulator that grows the dried crystals into free-flowing granules — the finished-product train after the mother liquor and dryer vapor leave.

CrystallizationGranulationSolids mass balance
FEED
DRUM
VAP
LIQ

Flash separation

An isothermal flash drum at 358 K splitting an ethanol–water feed into ethanol-rich vapor and water-rich liquid products.

FlashVLEVapor–liquid split
FEED
TK
LT
LT
PROD
PID
LC

Feed-tank level control (live loop)

A feed surge tank holding water at a target level: a level transmitter reads the tank's live inventory and a PID controller trims the upstream feed rate to hold it. Solves steady-state normally (the level loop is a no-op there); open the pid_controller's Live tab ("From canvas") to run the closed loop in real time and watch a setpoint change drain or fill the tank against a live PID.

DynamicsLevel controlPID
FEED
RX
PROD

CSTR thermal runaway (Arrhenius exotherm)

Adiabatic ethylene oxide hydrolysis to ethylene glycol in a CSTR — the classic reactor-safety teaching case (Fogler). Solves to a safe steady conversion at the design feed temperature; switch to the Dynamic solve mode and step the feed temperature up a few degrees to watch the exotherm and the Arrhenius rate feed back on each other (thermal runaway), self-limited as the reactant depletes.

DynamicsCSTRArrhenius
HOT FEED
COLD FEED
hot
cold
hot
cold
Q out
HX1
HOT OUT
COLD OUT

Heat exchanger startup thermal lag

A hot ethanol-water process stream cooled against cold cooling water in a single counter-current exchanger. Solves the design steady state; switch to the Dynamic solve mode and step the hot feed temperature to see the classic HX thermal-lag response — the exchanger's metal wall smooths and delays the outlet-temperature change instead of tracking the feed step instantly.

DynamicsHeat exchangerThermal lag
Process HOT
CW Supply
hot
cold
hot
cold
Q out
HX
Tower
Process OUT
CW Return

Cooling-water tower (Merkel sizing)

A process cooling-water utility: a hot ethanol-water process stream is cooled against cooling water in a counter-current exchanger, and the warmed cooling water is then sent to an evaporative cooling tower that rejects the picked-up heat to ambient air and returns it cold. The tower reports the evaporation + blowdown makeup water and — because the wet-bulb temperature and the water-to-air ratio L/G are given — the **Merkel tower characteristic KaV/L** a designer sizes the fill to, plus the range (hot→cold water drop, 10 K here) and the approach to the wet-bulb (5 K). Rate a fill against that demand with the standalone **Cooling tower (Merkel)** analysis tool. Honest scope: the cooling-water side is shown open (supply → exchanger → tower → return); a real plant recycles the return with makeup, and the Merkel model carries Le=1 assumptions.

UtilitiesCooling towerHeat rejection
HOT Supply
Store Charge
Charge Return
Network Return
Store Discharge
DH Supply

District-heating stratified thermal store (charge and discharge)

A **stratified hot-water thermal energy store** on a district-heating loop, shown at one operating point in both directions. The charge leg sends 90 °C supply water through the store, which is standing at four layers of 350 / 335 / 320 / 305 K (hottest on top): the water exhausts in contact with the **coldest** layer and leaves at 305 K, so the whole 85 K drop goes into the store. The discharge leg draws 30 °C network return through the same store and takes it from the **hottest** layer, leaving at 350 K. That asymmetry is the entire reason to stratify — a fully mixed store holding the same energy would deliver its 328 K average. The blocks report the stored energy above the 300 K floor, the state of charge over the 300-360 K window, the standing loss through an 80 W/K vessel, and the time to full or empty at the current net rate. Honest scope: this is a steady-state picture — the store's layers do not move within a solve, and the two legs are drawn as separate blocks on one store. The transient (how far the thermocline travels over a six-hour charge, and what outlet temperature the morning discharge actually delivers as the hot layers are consumed) is the **Thermal energy storage** analysis tool.

Thermal storageDistrict heatingStratified tank
CHW Supply
IT LOAD
CT Supply
hot
cold
hot
cold
Q out
Plate HX
Tower
CHW Return
CT Return

Data center cooling: 1 MW IT load on warm-water free cooling

A **1 MW data hall** cooled the way modern halls are: a warm-water loop — chilled-water supply at 27 °C rather than the legacy 7 °C — picks up the IT heat (10 K rise at 24 kg/s), hands it across a plate exchanger to a condenser-water loop, and an evaporative cooling tower rejects all of it to an 18 °C wet bulb with a 6 K approach. No chiller runs: that is **free cooling**, and it is only possible because the supply is warm — a 7 °C loop cannot be served by a tower whose water cannot get below the wet bulb plus its approach, which is the whole reason the industry moved to warm-water and ASHRAE's wider allowable envelopes. The tower reports the numbers a data-center operator is judged on: **24.6 mol/s (0.44 kg/s) of evaporation and 32.8 mol/s of makeup water** at four cycles of concentration — the water-usage effectiveness (WUE) story. Sweep the IT load and watch the makeup water scale with it. Honest scope: the IT load is a specified duty (no per-rack or airflow model); both loops are drawn open, supply to return, where a plant recirculates with makeup; the tower is a heat and water balance with a Merkel characteristic, not a fill-vendor rating; and a **thermal_storage** block on the chilled loop would give the ride-through buffer a real hall carries for a chiller or tower trip.

Data centerFree coolingCooling tower
ACID 29
LP Steam
hot
cold
hot
cold
Q out
HX
Flash
Condensate
Water Vapour
ACID 54

Phosphoric acid concentration: steam evaporator baseline (29 → 54% P2O5)

The conventional wet-process step, at the scale of one Jorf Lasfar concentration line: 138 t/h of 29% P2O5 acid, heated by 3.5 bar LP steam in a graphite exchanger and flashed under vacuum (0.12 bar) to 54% P2O5, evaporating **64.0 t/h of water**. The steam feed is tuned so the concentrate lands on 54.0 wt% P2O5 (the user variable `p2o5_wt_product`), which takes **71.7 t/h of steam — 1.79 t steam per tonne of P2O5**, 43.4 MW of condensing duty. That is the single-effect ideal; the published plant benchmark of ~2.8 t/t carries exchanger approach, losses and off-design operation on top. The point of the number here is what it costs the site: at Jorf Lasfar this steam is a co-product of the exothermic sulfuric-acid plants, which is the fact any electric alternative has to beat. Compare the two sibling examples, `phosphoric-acid-concentration-microwave` and `-hybrid`. **Model scope, stated up front.** The acid runs on the `brine` package, which carries phosphoric acid as a non-volatile molecular solute with its CRC liquid heat capacity (145 J/mol/K) — the streams show the real H3PO4/water compositions and the acid's sensible heat is in the balance. What that package does NOT yet carry is the acid's non-ideal water activity: it runs Raoult's law, so the boiling-point elevation is the colligative one, right in sign but about a third of the real value (+9 K at 54% P2O5 here; the real acid runs 20-30 K hotter, and 85 wt% acid boils at 158 °C at atmospheric pressure). The Pitzer fit that closes it is published (Bakher & Kaddami 2018, Braz. J. Chem. Eng. 35(3) 1153, open access) and named in the package as the parameters to transcribe. No heat of dilution is carried. Both omissions move the acid temperatures, not the water removed nor the energy-carrier comparison, which is what the study turns on. The 320 K feed stands in for a hotter plant feed for the same reason. The acid heated at 1 atm here partly boils in the exchanger (the model's colligative boiling point at 1 atm); the real acid is kept liquid under static head and flashes in the chamber.

Phosphoric acidEvaporationSteam
ACID 29
MW
Flash
Water Vapour
ACID 54

Phosphoric acid concentration: microwave heating (29 → 54% P2O5)

The same duty with the steam exchanger replaced by volumetric microwave heating: 43.4 MW absorbed in the acid, then the same vacuum flash to 54.0 wt% P2O5 and the same 64.0 t/h of water removed — the microwave does not remove water, it supplies the latent heat. At a 65% wall-plug magnetron efficiency (915 MHz industrial units reach ~85%) that is **66.7 MW of electricity, 1,670 kWh per tonne of P2O5** (1,280 at 85%). The comparison that decides it is the energy carrier, not the heating mechanism: at Jorf Lasfar the baseline's 1.79 t/t of steam is a co-product of the sulfuric-acid plants, and the site turns that steam into electricity at roughly 30%. Sending it through a turbine, a magnetron and back into the acid delivers about a fifth of the heat the exchanger delivers directly (0.30 × 0.65 ≈ 0.2), so on this site the microwave route needs roughly five times the primary steam energy of the baseline. Where microwaves do earn their place is not here but at the superphosphoric end (>70% P2O5, viscous, fouling, where the recent literature targets them), and an electric route for the 29-54 step should be compared against mechanical vapour recompression, which reuses the latent heat at a coefficient of performance of 10-30. Sweep the absorbed duty to see the product concentration and the electricity follow it. **Model scope, stated up front.** The acid runs on the `brine` package, which carries phosphoric acid as a non-volatile molecular solute with its CRC liquid heat capacity (145 J/mol/K) — the streams show the real H3PO4/water compositions and the acid's sensible heat is in the balance. What that package does NOT yet carry is the acid's non-ideal water activity: it runs Raoult's law, so the boiling-point elevation is the colligative one, right in sign but about a third of the real value (+9 K at 54% P2O5 here; the real acid runs 20-30 K hotter, and 85 wt% acid boils at 158 °C at atmospheric pressure). The Pitzer fit that closes it is published (Bakher & Kaddami 2018, Braz. J. Chem. Eng. 35(3) 1153, open access) and named in the package as the parameters to transcribe. No heat of dilution is carried. Both omissions move the acid temperatures, not the water removed nor the energy-carrier comparison, which is what the study turns on. The 320 K feed stands in for a hotter plant feed for the same reason. Microwave penetration depth (about a centimetre in a conductive acid at 2.45 GHz) and the HF attack on quartz windows are equipment questions this model does not carry.

Phosphoric acidMicrowaveElectrification
ACID 29
MW
Flash1
PUMP
LP Steam
hot
cold
hot
cold
Q out
HX
Flash2
VAP1
VAP2
Condensate
ACID 54

Phosphoric acid concentration: microwave-then-steam hybrid (29 → 42 → 54% P2O5)

The transition path the concept proposes: microwaves take the acid from 29 to 42% P2O5 in a first vacuum flash (29.1 MW absorbed), a pump returns the 42% acid to atmospheric pressure, and the existing steam exchanger and second flash finish it to 54.0 wt% — **23.4 t/h of steam (0.59 t/t) plus 1,120 kWh of electricity per tonne of P2O5** at 65% magnetron efficiency, the same 64.0 t/h of water removed in total. The split is not free: two-thirds of the latent duty moved from a co-product steam to purchased electricity, and nothing about the second stage got easier. What a hybrid does buy is a pilot that can be run beside the existing evaporator without betting the line on it, and the freedom to put the microwave stage where it has a case — the viscous, fouling end — rather than on the dilute feed. Compare `phosphoric-acid-concentration-steam` and `-microwave`. **Model scope, stated up front.** The acid runs on the `brine` package, which carries phosphoric acid as a non-volatile molecular solute with its CRC liquid heat capacity (145 J/mol/K) — the streams show the real H3PO4/water compositions and the acid's sensible heat is in the balance. What that package does NOT yet carry is the acid's non-ideal water activity: it runs Raoult's law, so the boiling-point elevation is the colligative one, right in sign but about a third of the real value (+9 K at 54% P2O5 here; the real acid runs 20-30 K hotter, and 85 wt% acid boils at 158 °C at atmospheric pressure). The Pitzer fit that closes it is published (Bakher & Kaddami 2018, Braz. J. Chem. Eng. 35(3) 1153, open access) and named in the package as the parameters to transcribe. No heat of dilution is carried. Both omissions move the acid temperatures, not the water removed nor the energy-carrier comparison, which is what the study turns on. The 320 K feed stands in for a hotter plant feed for the same reason.

Phosphoric acidMicrowaveSteam
GAS
COMP
AC
Cooled GAS

Gas compressor air-cooled aftercooler (fin-fan)

A natural-gas booster compressor followed by an **air-cooled (fin-fan) aftercooler** — the standard way to reject compression heat where no cooling water is available. The compressor raises the gas from 8 to 24 atm (hot discharge ~150 °C); the air cooler then rejects that heat to ambient air, cooling the gas back to 49 °C. Unlike a plain cooler, the `air_cooler` op closes the **air side**: from the process duty and the 35 °C design ambient it solves the air mass flow (a 15 °C air rise) and reports the fan power from the given fan static pressure. Honest scope: screening air-side model (fixed cp_air, ideal-gas air density, no fin/row geometry rating); an air cooler cannot cool below ambient, so the 49 °C target sits safely above the 35 °C air inlet.

Gas processingCompressorAir cooler
Slurry Solids
Slurry Water
slurry
fine
coarse
HC
Underflow
Overflow

Grinding-circuit hydrocyclone classifier

A hydrocyclone classifies a mineral slurry by particle size — the unit that closes every closed-circuit grinding loop (mill → cyclone, coarse underflow recycled to the mill). A quartz slurry (200 µm mean, spread by a log-normal PSD) is split about a 100 µm corrected cut size (Plitt 1976): the coarse solids report to the thick **underflow** and the fines to the dilute **overflow**, split by the short-circuit recovery. The underflow comes out much coarser (~300 µm mean) than the overflow (~80 µm), and the solids mass balance closes exactly. Honest scope: the d50c is the real Plitt correlation, but the partition sharpness and water recovery are screening params.

MineralsComminutionHydrocyclone
Motive Steam
Suction Vapor
motive
suction
discharge
EJ
Discharge

Steam-jet vacuum ejector (thermocompressor)

A steam-jet ejector holds vacuum on a vacuum-distillation overhead with no moving parts: high-pressure motive steam (16 bar) expands through a nozzle to a supersonic jet (~1100 m/s) that entrains the low-pressure suction vapor (0.1 bar), and the combined flow is recompressed in a diffuser to the 0.25 bar discharge. It reports the **mass entrainment ratio** ω = suction/motive (the ejector's defining performance number), the maximum ω it can sustain at this discharge pressure, and whether the duty is feasible (ω below ω_max, with margin here). Honest scope: geometry-free 1-D thermocompressor model (ideal-gas γ, lumped nozzle/mixing/diffuser efficiencies, no normal-shock/area detail).

VacuumEjectorThermocompressor
FEED
feed
dist
btms
Qc
Qr
COL
DIST
BOT

Distillation column startup dynamics (feed-rate step)

An 8-stage ethanol-water column at a reduced startup feed rate. Solves the steady state normally; switch to the Dynamic solve mode with **weir/level-controlled hydraulics** enabled and step the feed rate up (e.g. 6 → 9 mol/s) to watch the bottoms draw genuinely rebalance to the new throughput as the tray inventories fill — a feed-*rate* disturbance no fixed-hydraulics dynamic model (incl. this same column's own default rigorous mode) can show at all. Honest bound: the vapor traffic is held at its steady-state value in this mode, so the distillate draw (condenser-level-controlled off vapor inflow) does not move for a feed-rate-only step — only the liquid/bottoms side responds.

DynamicsDistillationColumn hydraulics
FEED
HC
SEP
Recycle GAS
Liquid Product

Hydrocracking reaction section

A refinery hydrocracker: heavy VGO (modeled as n-dodecane) plus excess H2 is cracked over catalyst into lighter products via a discrete lumped first-order kinetic network, then flashed to knock out recycle H2/light gas from the liquid product (Peng-Robinson). Conversion is set by reactor temperature and LHSV.

RefiningHydrocrackingLumped kinetics
FEED
HC
Hpsep
Recycle H2
Letdown
Lpsep
LPG Offgas
crude
dist
cuts
btms
Qc
Qr
FRAC
Light Naphtha
Kerosene Diesel
Unconverted OIL

Hydrocracking fractionation train

The standard downstream train a hydrocracker reaction section feeds into: a high-pressure separator knocks the H2-rich recycle gas off the reactor effluent, a letdown valve drops the liquid to low pressure for a second flash (LPG-range off-gas), then a fractionator (crude_distillation, one side draw) splits what remains into light naphtha, a kerosene/diesel cut, and unconverted oil bottoms. A textbook train topology (Gary & Handwerk-style HP-sep -> letdown -> LP-sep -> fractionator), not a replication of any specific published paper's numbers — the reaction lumps/kinetics are the same illustrative n-paraffin network as the 'hydrocracker-unit' example, not a real assay.

RefiningHydrocrackingFractionation
GAS FEED
LEAN OIL
liq
gas
gas
rich
ABS
Treated GAS
RICH OIL

Perry Ch.13 Example 2: lean-oil absorber

Simple absorber recovering butane and pentane from a process gas into a lean-oil (n-dodecane) absorbent, from Chapter 13 of Perry's Chemical Engineers' Handbook.

AbsorptionLPG recoveryTextbook
FEED
feed
dist
btms
Qc
Qr
COL
Butane
Pentane

Perry Ch.13 Example 3: butane/pentane splitter

A simple two-cut distillation splitting butane overhead from pentane bottoms, from Chapter 13 of Perry's Chemical Engineers' Handbook.

DistillationLPG fractionationTextbook
FEED
crude
dist
cuts
btms
Qc
Qr
COL
Propane
Sloppy Butane
Pentane PLUS

Perry Ch.13 Example 4: sloppy-butane three-cut splitter

A three-cut column with a side draw producing a deliberately 'sloppy' (off-spec, cheaper-to-make) butane cut between a propane overhead and a pentane-plus bottoms, from Chapter 13 of Perry's Chemical Engineers' Handbook.

DistillationSide drawTextbook
GAS FEED
OIL A
liq
gas
gas
rich
ABS A
Intercooler
OIL B
liq
gas
gas
rich
ABS B
Treated GAS
RICH OIL A
RICH OIL B

Perry Ch.13 Example 5: two-step absorber with intercooling

Two absorption stages in series with intercooling between them (removing the heat of absorption, which otherwise raises K-values and hurts recovery) to maximize LPG recovery, from Chapter 13 of Perry's Chemical Engineers' Handbook.

AbsorptionIntercoolingTextbook
FEED
Reboil Vapor
liq
gas
gas
rich
Strip
Overhead GAS
Stripped Liquid

Perry Ch.13 Example 6: reboiled light-ends stripper

A reboiled stripper removing dissolved light gases (nitrogen, methane through propane) from a heavier liquid, using reboil vapor as the stripping gas, from Chapter 13 of Perry's Chemical Engineers' Handbook.

StrippingLight-ends removalTextbook
GAS
COMP
COOL
DRUM
Salesgas
NGL

Associated gas conditioning

Field gas is compressed, chilled below its dew point, and flashed to knock out NGL/condensate — the sales-gas vs. liquids split every midstream gathering plant runs (Peng-Robinson).

MidstreamGas processingNGL recovery
Water
EL
H2

Green hydrogen (electrolysis)

A 1 MW PEM electrolyzer splitting water into hydrogen — a new-energy workflow (carbon footprint + cost track the electricity).

PEM electrolysisHydrogenNew energy
FEED
MIX
HEAT
Split
PROD

Recycle loop

A mixer/heater/splitter loop with a tear stream — exercises Wegstein recycle convergence.

RecycleWegstein convergenceTear stream
FEED
MIX
COMP
COND
Valve
EVAP
Split
Purge

Propane refrigeration cycle

A single-stage vapor-compression refrigeration loop: propane vapor is compressed, condensed to subcooled liquid, throttled through a valve, and superheated back to vapor in the evaporator before recycling — a small makeup feed and purge close the mass balance (inspired by ChemSep's Refrigeration_* reference cases).

RefrigerationVapor-compression cycleRecycle
Makeup
MIX
COMP
Heating Water
hot
cold
hot
cold
Q out
COND
Valve
EVAP
Split
Purge
HOT Water

Propane (R-290) heat pump heating a hydronic loop

A single-stage **vapor-compression heat pump** delivering heat to a space-heating water loop — the same cycle as a refrigerator, read from the hot end. Propane evaporates at 4.7 atm (273 K, an air- or ground-source evaporator at 0 °C), is compressed to 21 atm (condensing at 333 K, 60 °C) and condenses against the heating water in a real two-sided exchanger, so the delivered heat is a water stream you can read: 40 °C return warmed to 59 °C. A small makeup feed and purge close the refrigerant mass balance around the recycle, as in the refrigeration examples. Two numbers define the machine: **80 kW delivered for 28 kW of compressor work, a heating COP of 2.9** — 52% of the Carnot limit for this 60 K lift, which is where a real R-290 unit sits. Read COP on the flowsheet as the user variable `cop_heating`, or sweep the condensing pressure: from 18 to 27 atm the COP falls 3.2 → 2.6 as the lift grows, the trade every heat pump makes between water temperature and electricity. Honest scope: the compressor is a fixed isentropic efficiency, the condenser outlet is a specified subcooling, and there is no defrost, part-load or refrigerant-charge model. Below ~18 atm the specified 326 K condenser outlet sits above saturation and the cycle stops condensing — the sweep starts where the physics does.

Heat pumpVapor-compression cycleRecycle
FEED
MIX
COMP
COND
Valve
EVAP
Split
Purge

Ammonia refrigeration cycle

A single-stage vapor-compression refrigeration loop using ammonia — the classic industrial (rather than HFC) refrigerant — condensed to subcooled liquid, throttled through a valve, and superheated back to vapor in the evaporator before recycling (inspired by ChemSep's Refrigeration_Ammonia-30C reference case).

RefrigerationVapor-compression cycleAmmonia
FEED
feed
dist
side
btms
Qc
Qr
DWC
Light
MID
Heavy

BTX separation via dividing-wall column

Benzene/toluene/ethylbenzene split into three purified products by a single rigorous dividing-wall column (prefractionator + two coupled main columns) instead of two ordinary columns in series — the thermally-coupled route real DWC retrofits use.

Dividing-wall columnBTXPeng-Robinson
FEED
feed
dist
btms
RD
DME
BOT

DME synthesis via reactive distillation

Methanol dehydrates to dimethyl ether over the reactive stages of a column — reaction and separation in one shell, pulling DME overhead while unconverted methanol and water leave the bottoms (Peng-Robinson EoS avoids the missing UNIFAC group-decomposition for ethers that blocks this under an activity-coefficient package).

Reactive distillationEtherificationPeng-Robinson
FEED
feed
dist
btms
Qc
Qr
COL
Acetone
Water

Acetone–water distillation

A 12-stage column recovers acetone overhead from a dilute aqueous solvent-recovery feed — a common industrial acetone/solvent-recycling duty.

DistillationSolvent recoveryNRTL VLE
Benzene
Hydrogen
MIX
RXN
SEP
Split
Cyclohexane
Purge

Benzene hydrogenation → cyclohexane

Benzene + 3 H₂ → cyclohexane in a conversion reactor, then a high-pressure flash recovers liquid cyclohexane and recycles the excess hydrogen (with a purge). The classic ChemSep recycle example — exercises reaction + recycle convergence.

HydrogenationReactorGas recycle
FEED
PV
Ethanol
Water

Ethanol dehydration (pervaporation)

A hydrophilic pervaporation membrane pulls water out of near-azeotropic ethanol — crossing the 89 mol% ethanol-water azeotrope that ordinary distillation cannot. Permeate is ~95% water; the retentate is dried past the azeotrope.

PervaporationMembraneAzeotrope
FEED
feed
dist
btms
Qc
Qr
COL
vap
liq1
liq2
COND
Ethanol
Organic
Aqueous
VENT

Heterogeneous azeotropic distillation

An n-hexane entrainer carries water overhead as a ternary heteroazeotrope; the condensed overhead splits in a three-phase flash into an organic layer and an aqueous layer, while dry ethanol leaves in the bottoms — the three-phase separation ordinary distillation cannot do.

AzeotropicThree-phaseDecanter
FEED
feed
dist
btms
Qc
Qr
COL
Benzene
Toluene Xylene

Aromatics column (Strigle)

A simple aromatics splitter recovering benzene overhead from a toluene/xylene-heavy feed, as described by R. Strigle (Gulf Publishing, 1987) — a classic packed-column textbook design case.

AromaticsDistillationTextbook
FEED
feed
dist
btms
Qc
Qr
COL
C3 Overhead
C4 PLUS Bottoms

Depropanizer (Strigle)

A depropanizer recovering propylene and propane overhead from a C4-and-heavier hydrocarbon feed, as described by R. Strigle (Gulf Publishing, 1987).

LPG fractionationDistillationTextbook
FEED
feed
dist
btms
Qc
Qr
COL
Isobutane
Nbutane

Industrial i-butane/n-butane splitter

A close-boiling isobutane/n-butane splitter as reported by Klemola and Ilme (Ind. Eng. Chem. Res. 1996, 35, 4579) — the relative volatility between the two isomers is small (~1.3), so the column needs many stages and a high reflux ratio for a sharp split, unlike the wider-boiling LPG splits elsewhere in this library.

Isomer separationDistillationTextbook
FEED
feed
dist
btms
Qc
Qr
COL
vap
liq1
liq2
COND
Ethanol
Organic
Aqueous
VENT

Ethanol-water-benzene column (multiplicity study)

The ethanol/water/benzene heteroazeotropic column — one of the most-studied systems in distillation modeling for exhibiting multiple steady states at the same specifications (Magnussen et al. 1979; Prokopakis & Seider, AIChE J. 29, 49, 1983; Venkataraman & Lucia, Comput. Chem. Eng. 12, 55, 1988). Benzene entrains water overhead as a heteroazeotrope, decanted into organic/aqueous layers, leaving dry ethanol in the bottoms. This flowsheet reports the single steady state the MaximaLabs solver converges to from its initial guess — it does not sweep initial guesses to map the full multiplicity map the cited studies performed.

AzeotropicThree-phaseDecanter
FEED
feed
dist
btms
Qc
Qr
COL
COMP
COND
Propylene
Propane

Vapor re-compression propane/propylene splitter

Propylene/propane splitters have a notoriously low relative volatility (~1.1-1.15), so they run at high reflux and benefit from heat pumping: the overhead vapor is compressed and used to reboil the same column at a lower operating pressure (here 12 bar vs. a conventional ~20 bar), cutting the compressor shell cost (Christopher et al., Ind. Eng. Chem. Res. 56, 14557, 2017). The reboiler heat-integration loop itself is not modeled here (that would need a recycle-coupled duty match) — this shows the column plus the overhead compression/condensing train, a bounded simplification.

Heat pumpVapor recompressionPolymer-grade propylene
FEED
feed
dist
btms
Qc
Qr
Demeth
Sales GAS
feed
dist
btms
Qc
Qr
Deeth
Ethane
feed
dist
btms
Qc
Qr
Deprop
Propane Product
feed
dist
btms
Qc
Qr
Debut
Butane Product
Pentane PLUS

Natural gas fractionation train

A four-column NGL fractionation train — demethanizer, deethanizer, depropanizer, debutanizer — recovering pipeline-spec sales gas plus ethane, propane, and butane products from wellhead-pressure raw natural gas, after Luyben (Ind. Eng. Chem. Res. 2013, 52, 10741).

NGL fractionationGas processingDistillation train
FEED
PDH
Coolbox
Flash
Propylene Product
H2 Offgas

Propane dehydrogenation cold box

Propane dehydrogenation (PDH) to propylene over a Pt/Cr catalyst, followed by a cold-box separation recovering liquid propylene from the H2-rich reactor off-gas, after US Patent 6,333,445 (Chart Inc., 2002). The refrigeration loop itself is not modeled — the cold box is represented here as a net cooling duty to condense the propylene, a bounded simplification. Unreacted propane recycle is not modeled either (reported as its own product stream).

DehydrogenationPropyleneCold box
FEED
Dehydro
COOL
Flash
H2 Offgas
feed
dist
btms
Qc
Qr
COL
MEK Product
Butanol Bottoms

Methyl ethyl ketone from 2-butanol dehydrogenation

Catalytic dehydrogenation of 2-butanol to methyl ethyl ketone (MEK) over an In/MgO catalyst, per DE2831465A1 (1978), followed by a flash to remove the H2 co-product and a distillation splitting MEK from unreacted 2-butanol.

DehydrogenationKetoneSolvent production
FEED
Dehydro
Scrub Water
liq
gas
gas
rich
ABS
H2 VENT
feed
dist
btms
Qc
Qr
COL
Acetone Product
Water Bottoms

Acetone from isopropanol dehydrogenation

Endothermic gas-phase dehydrogenation of isopropanol (IPA) to acetone, after Luyben (Ind. Eng. Chem. Res. 2011, 50, 1206). The H2-rich reactor off-gas is scrubbed with water to recover the acetone before venting, then a column splits acetone from the water/unreacted-IPA absorbent.

DehydrogenationKetoneAbsorption
Phenol FEED
NH3 FEED
MIX
Reactor
COOL
Flash
NH3 Water VENT
feed
dist
btms
Qc
Qr
COL
WET Light ENDS
Aniline Product

Ammonolysis of phenol to aniline

Vapor-phase ammonolysis of phenol with excess ammonia to aniline plus water, per Figure 20.2 (p. 366) of Synthetic Nitrogen Products by Gary R. Maxwell (Kluwer, 2004). Unreacted ammonia and product water are let down to atmospheric and knocked out, then a column recovers the aniline. Phenol (bp 455 K) is very slightly MORE volatile than aniline (bp 457 K), so the aniline leaves as the bottoms and the residual water/ammonia plus the unreacted phenol go overhead. Honesty note: 2 K apart is a genuinely hard split — the aniline product comes out ~86 mol%, carrying ~14 mol% phenol, at ~91% recovery. A sharper cut is a much taller column, not a tuning change, and Peng-Robinson carries no aniline/phenol association to sharpen it.

AmmonolysisAminesNitrogen chemistry
Phenol FEED
Methanol FEED
MIX
Meth1
Meth2
crude
dist
cuts
btms
Qc
Qr
COL
Methanol Water
O Cresol Product
Xylenol Product

2,6-Xylenol from phenol methylation

Liquid-phase methylation of phenol with methanol at 250°C/150 bar over a selective ortho-methylation catalyst, per US Patent 3,707,569. At 50% single-pass phenol conversion the reported selectivity is 70% to o-cresol and 25% to 2,6-xylenol (the further-methylated product) — modeled here as two sequential fixed-conversion reactors (phenol -> o-cresol, then o-cresol -> 2,6-xylenol) approximating that split, followed by a distillation separating the light methanol/water from the phenolics, with an o-cresol side draw. The column is solved with the side draw as a real MESH withdrawal (rigorous_draws) on Soave-Redlich-Kwong: every other combination plateaued — the default carve (side draw cut from a distillate/bottoms profile) on PR, SRK or a Ge-mixing-rule package sat at a 2e-3 temperature residual, the rigorous draw on PR at 7e-5; on SRK it closes to 1e-8 with the component balance at 1e-7. Read the phenolic split for what it is: 20 stages at R=2 between three ortho-substituted phenols nine kelvin apart is a screening cut, and a cubic with van der Waals mixing carries no hydrogen-bonding non-ideality for the methanol/water/phenol top section (PSRK now has the phenolic UNIFAC groups, but a genuine PSRK evaluation of this column takes minutes per solve).

MethylationPhenolicsAlkylation
FEED
Solvent
feed
dist
btms
Qc
Qr
ED
MCH Product
feed
dist
btms
Qc
Qr
SR
Toluene Product
Phenol Recovered

MCHT extractive distillation with phenol

Extractive distillation of methylcyclohexane (MCH) and toluene using phenol as the selective solvent, adapted from Tiverios and Van Brunt (Ind. Eng. Chem. Res. 2000, 39, 1614). Phenol raises toluene's relative volatility away from MCH enough to split an otherwise close-boiling pair; a solvent-recovery column then splits toluene from the phenol (reported as its own product rather than recycled).

Extractive distillationSolventAromatics
FEED
Solvent
feed
dist
btms
Qc
Qr
ED
Nonaromatics
feed
dist
btms
Qc
Qr
SR
Aromatics Product
Sulfolane Recovered

Sulfolane extractive distillation of aromatics

Extractive distillation recovering benzene and toluene from a stabilized reformate's C6-C7 non-aromatics (represented by methylcyclohexane) using sulfolane, after Figure 10.2/10.6 of T. Brouwer (PhD thesis, TU Twente, 2021). A vacuum solvent-recovery column then splits the aromatics from the sulfolane (reported as its own product rather than recycled). Both columns converge (ED 44 iterations, SR 98, residuals ~1e-5): methylcyclohexane leaves overhead at 91.3 mol%, the aromatics product carries **no** sulfolane at all (0.00000 mole fraction) at 95.2% recovery of the feed's benzene and toluene, and the recovery column returns sulfolane 99.96% pure at 490 K. Both columns were originally mis-specified in the same way, and it is worth seeing once because the symptom looks like a thermodynamic failure rather than an arithmetic one. `distillate_to_feed` is a fraction of a column's TOTAL feed, and both were set above the amount of light key actually present, so each column was forced to drag its heavy key overhead to make up the flow. The ED asked for 0.15 of 140 mol/s = 21 mol/s of overhead when only 17.5 mol/s of non-aromatics exists, so 3.5 mol/s of aromatics had to come over — that was the 19.4% benzene lost to the raffinate. The recovery column asked for 0.42 of its bottoms against roughly a quarter of it being aromatics, so ~20 mol/s of solvent had to come over — that was the 42 mol% sulfolane in the product. Setting each to the light key's real share (0.125 and 0.265) removes both. The property method is the whole story here, and it is why this example ran unconverged for a long time. Extractive distillation exists *because* of solvent selectivity, so a cubic with van der Waals mixing rules — Peng-Robinson as this was originally written — cannot represent the one effect the column depends on; it was being asked to converge on a model that did not contain the physics. A plain activity model cannot be used either: sulfolane boils at 558 K, so a reboiler hot enough to strip it drives benzene past its 562 K critical point, where a gamma-phi formulation has no answer at all. What the system needs is both at once, which is exactly what a Ge mixing rule provides — PSRK is a cubic (no supercritical ceiling) whose mixing is driven by UNIFAC (real selectivity). `pr-mhv1` converges here too, in 47 iterations. Honesty note, and these are trades rather than defects. Sending exactly the non-aromatic flow overhead means the ED's imperfect split leaves ~9% of the methylcyclohexane in the bottoms, where it reports to the aromatics product at 4.7 mol% — off-spec for a benzene product, and the lever that would clear it is a sharper ED (more reflux, or the higher solvent-to-feed ratio a real sulfolane unit runs). The solvent is still reported as its own product rather than recycled, so the loop is open and the makeup/purge balance a real unit turns on is not modelled. Reflux, not stages, is what the recovery column responds to here: 24 stages at reflux 2.0 still hits the iteration cap where 16 stages at 2.5 converges.

Extractive distillationSulfolaneAromatics
FEED
Solvent
feed
solv
ext
raff
Extractor
Extract
Raffinate

Sulfolane liquid-liquid extraction of aromatics

Liquid-liquid extraction of aromatics from a refinery catalytic-reformer stream with sulfolane, after Figure 10.1 of T. Brouwer (PhD thesis, TU Twente, 2021). A countercurrent extraction cascade pulls benzene and toluene preferentially into the sulfolane-rich extract, leaving a methylcyclohexane-rich raffinate.

Liquid-liquid extractionSulfolaneAromatics
Reactor FEED
RX1
RX2
MEOH Flash
MEOH Recovered
WASH
Crude Glycerin
Biodiesel

Biodiesel: alkali-catalysed transesterification with methanol recovery

Continuous base-catalysed (NaOH/methoxide) transesterification of a refined vegetable oil to fatty acid methyl esters -- the classic FAME biodiesel process. The oil is modeled as a 70/30 triolein/tripalmitin blend (the C18:1 and C16:0 triglycerides that dominate soy, canola and rendered-fat feedstocks); each is transesterified with methanol at a 6:1 molar ratio and 60 C in a two-reactor cascade at 97% conversion per stage, the standard industrial staging that drives the equilibrium toward the esters. Excess methanol is then vacuum-flashed overhead for recycle, and the wash/settling step splits the heavy glycerol phase from the ester product. The FAME product comes out at 96.9 wt% ester content -- just over the EN 14214 minimum of 96.5 wt% -- and the crude glycerin at ~85 wt% glycerol, typical of the crude co-product that goes on to a glycerin refining column. Honesty note: the deliverable here is the material balance (conversion, ester yield, product specifications, methanol recovery), which is exact. The energy balance is NOT: the triglyceride and methyl-ester records in the databank carry no ideal-gas heat-capacity correlation, so they are injected as pseudocomponents whose Cp comes from the Kesler-Lee petroleum correlation, and their acentric factors (omega ~2.2-2.3) sit far outside the range Peng-Robinson's alpha function was fitted to. Reported duties and any adiabatic mixing temperature are therefore indicative only, which is why every unit here is temperature-specified rather than solved adiabatically, and why the reactor feed is given as one combined specified stream. Two further simplifications: the NaOH catalyst and the soap (sodium palmitate) that free fatty acids would form with it are not carried, so this is a refined, low-FFA feedstock; and the glycerol/ester split is a specified wash-section recovery rather than a rigorous liquid-liquid flash. That is now a modelling choice and no longer a data limit: every species reaching that step -- the methyl esters, glycerol, the unconverted triglyceride and the free fatty acid -- carries a predictive-UNIFAC group decomposition, and a liquid-liquid flash on this stream does split into an ester phase and a glycerol phase with the excess methanol partitioning into the glycerol, as it does industrially. Solving it here rather than specifying it would still inherit the pseudocomponent-Cp caveat above for the phase enthalpies.

BiodieselTransesterificationFAME
UCO FEED
Lipase TE
Lipase ES
MEOH Flash
MEOH Water
Settler
Crude Glycerin
Biodiesel

Enzymatic biodiesel from high-FFA waste oil (lipase)

Immobilised-lipase (e.g. Novozym 435) production of FAME from a waste feedstock -- used cooking oil / rendered fat carrying ~17 mol% free fatty acid. This is the feed slate a renewable-fuels producer actually buys, and it is exactly where the conventional alkali route breaks down: NaOH or methoxide saponifies free fatty acid into soap (the databank even carries sodium palmitate), which destroys yield and emulsifies the glycerol settling step, so a high-FFA feed needs an acid-esterification pretrain before it can be base-catalysed at all. A lipase does both reactions at once and at 40 C: it transesterifies the triglyceride to esters plus glycerol, and it *esterifies* the free fatty acid into more product rather than losing it to soap. Both reactions are carried explicitly here, so the FFA ends up as methyl palmitate instead of as a loss. The result: 97.9 wt% ester content (EN 14214 requires >= 96.5 wt%) with the free fatty acid taken down to under 0.1 mol% of the product, i.e. a low acid value, from a feed the alkali route could not process directly. Esterification also makes one mole of water per mole of FFA converted, which is why the vacuum flash takes methanol and water overhead together -- water inhibits the enzyme and has to leave the loop. Honesty note: as with the alkali example, the deliverable is the material balance; the energy balance is not, for the same reason (no ideal-gas Cp correlation for the triglyceride/ester records, and acentric factors far outside Peng-Robinson's fitted range), so every unit is temperature-specified. Two things this deliberately does not claim: the reactors are **specified-conversion** models standing in for an immobilised-lipase packed bed -- no enzyme kinetics are solved, because lipase methanolysis follows ping-pong bi-bi kinetics with methanol inhibition, which the in-tree `enzymatic_reactor` (a single-substrate, pH-branching Michaelis-Menten CSTR) cannot express; and the recovered methanol/water overhead would need a methanol recovery column before recycle, which is out of scope here. The glycerol/ester split is a specified settling recovery rather than a rigorous liquid-liquid flash -- now a modelling choice, not a data limit, since the unconverted triglyceride and the residual free fatty acid gained predictive-UNIFAC group decompositions alongside the methyl esters and glycerol.

BiodieselEnzymaticLipase
RO FEED
RO
Reuse Water
Waste HEAT
MD
MD Distillate
feed
solid
liq
Cryst
SALT
Brine

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. Honesty note: the membrane coefficient and the film heat-transfer coefficients are measured module properties supplied as inputs, not correlations -- they depend on the membrane's porosity, tortuosity and thickness and on the module hydrodynamics, so the flux is only as good as those numbers. The reported temperature-polarisation coefficient (0.72 here) is the fraction of the measured driving force that actually reaches the membrane, and it is the thing a bulk-temperature model gets wrong. No membrane-wetting model: pore wetting by surfactants is what ends a real MD module's life and is not predicted here. The salt is NaCl only -- a real industrial reuse stream carries silica, which is usually what actually caps recovery; screen that separately with the silica saturation tool, since this flowsheet's thermo does not carry it.

Water reuseReverse osmosisMembrane distillation
Effluent
RO
EDI
Ultrapure
Brine MIX
Waste HEAT
MD
MD Distillate
feed
solid
liq
Cryst
SALT
Brine

Site water reuse: RO + EDI polish + MD to near-ZLD

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. Honesty note: the 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.

Water reuseElectrodialysisEDI
OIL FEED
Water FEED
MIX
RX1
RX2
Splitter Product

Fat splitting: fatty acids from palm kernel oil

Continuous high-pressure countercurrent fat splitting (Colgate-Emery process): triglyceride oil hydrolyzed with excess water at ~260 C / 55 bar to free fatty acids plus glycerol. The databank has no lauric/myristic acid or their triglycerides (palm kernel oil's actual dominant fatty acids), so the feed is modeled as tripalmitin/triolein hydrolyzing to palmitic/oleic acid instead -- the same reaction chemistry and process conditions, a different (available) fatty-acid slate. The real unit gravity-settles the fatty-acid and glycerol-water phases downstream; that decanting step is not modeled here (scope note), so the product stream is the full reactor effluent.

Fat splittingHydrolysisOleochemicals
Ester FEED
H2 FEED
MIX
RX
Flash
H2 Recycle VENT
feed
dist
btms
Qc
Qr
COL
Methanol Product
Alcohol Product

Fatty alcohols from methyl ester hydrogenolysis

High-pressure hydrogenolysis of a fatty acid methyl ester over a copper-chromite catalyst to the corresponding fatty alcohol plus methanol byproduct, the route used by natural-fatty-alcohol producers such as Oxiteno. Modeled with methyl palmitate as the ester feed (the C16 member of the coconut/palm-kernel-derived ester slate these plants actually run); a flash removes unreacted hydrogen for recycle and a partial-condenser column recovers methanol overhead from the crude fatty alcohol. The column runs a vapor distillate because the flash liquid still carries dissolved hydrogen, and its distillate rate is set to the feed's light-component fraction -- ask for more overhead than there is light material and the column can only meet the spec by dragging fatty alcohol up with it.

HydrogenolysisOleochemicalsFatty alcohols
MEOH FEED
CO FEED
MIX
RX
Flash
CO VENT
feed
dist
btms
Qc
Qr
COL
Methanol Recycle
Acetic ACID Product

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.

CarbonylationAcetic acidCativa
FEED
Solvent
feed
dist
btms
Qc
Qr
ED
Water Product
feed
dist
btms
Qc
Qr
SR
Acetic ACID Product
Solvent Recovered

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. Modeled with **NRTL**, and the property method is the whole point here rather than a detail: an entrainer works by changing liquid non-ideality, and a cubic equation of state with van der Waals mixing has no term for it — no binary interaction parameter ships for acetic-acid/water or DIBK/water, so Peng-Robinson runs this flowsheet at kij = 0 and represents none of the effect the column depends on. It does not converge either. NRTL carries the DECHEMA-fitted acetic-acid/water binary and reaches the DIBK pairs through UNIFAC. Honesty note: the extractive column does its job — the water distillate comes off essentially acid-free — and the recovery column returns the entrainer at >99.9% DIBK for recycle, but the acid product is a **concentrate, not glacial acid**: it leaves at ~64 mol% acetic acid, up from 20 mol% in the feed, carrying the water the extractive column did not take overhead. Acetic acid and water are close-boiling with no azeotrope, so a finishing column (or the vapor-association model the `acetic-acid-recovery-nrtl` example uses) is what takes it the rest of the way. The water distillate is a real DIBK/water heteroazeotrope at ~12 mol% DIBK; a plant decants that overhead and returns the organic layer, which this screening flowsheet does not model.

Extractive distillationAcetic acidEntrainer
FLUE
ABS
CO2
Clean

Post-combustion CO₂ capture

A separator recovers 90% of the CO₂ from a flue-gas stream — the sustainability layer then tracks the captured tonnes.

Post-combustionCO₂ captureFlue gas
Rawgas
Fuelgas
process
fuel
proc
flue
Regen
FLUE
Sweeten
Ventgas
Vocko
Ventvoc
COMP
Sales

Sour-gas sweetening — six-category footprint

A fuel-fired feed-gas heater, acid-gas removal, and a VOC purge — vented to atmosphere — so the Sustainability panel shows all six impact categories at once: carbon, water, acidification (vented H₂S/NH₃ + combustion NOx), eutrophication (NH₃ + NOx), photochemical ozone (vented benzene) and cumulative energy demand. Illustrative screening vent compositions — a real plant Claus/incinerates the H₂S and controls the VOC rather than venting; the point is to exercise the multi-category footprint on a process that genuinely carries these species. Spec-based separators, so it converges fast and conserves mass.

SustainabilityEmissionsSour gas
SYN
RX
NH3

Green ammonia synthesis

An equilibrium reactor runs N₂ + 3H₂ ⇌ 2NH₃ on green-hydrogen syngas (Keq illustrative) — the new-energy leapfrog workflow.

Green ammoniaHaber–BoschEquilibrium reactor
FEED
CSTR
OUT

Kinetic CSTR

A continuous stirred-tank reactor with an Arrhenius first-order rate — outlet conversion comes from the kinetics, not a specified value.

KineticsArrheniusCSTR
FEED
FERM
Broth

Bioreactor (Monod fermenter)

A steady-state chemostat: substrate is consumed by Monod growth (μ = μmax·S/(Ks+S)) to produce biomass — a modern reactor model legacy tools lack.

FermentationMonod kineticsChemostat
FEED
Preheat
FERM
Broth

Media-prep + Monod fermenter

A production bioprocess step: the growth medium is preheated to fermentation temperature, then a Monod chemostat consumes the substrate to build biomass — the media conditioning + fermentation train around the reactor.

FermentationMedia conditioningMonod kinetics
Crude
crude
dist
cuts
btms
Qc
Qr
CDU
Naphtha
Kerosene
Diesel
Residue

Crude distillation (preset cuts)

An atmospheric crude column fractionating a petroleum feed (naphtha → kerosene → diesel → residue) into ordered side cuts — refinery support via pseudos.

CrudeCDUPetroleum cuts
Water
PUMP
CELL
H2

10 MW PEM electrolyzer loop

A pilot-scale green-H₂ plant: water is pressurized and split in a rigorous PEM cell (Butler-Volmer + Nernst), drawing ~10 MW at a realistic ~1.9 V cell voltage.

PEM HydrogenButler–VolmerElectrolysis
FLUE
ABS
Clean
COMP
COOL
CO2

CO₂ capture + compression

Post-combustion capture recovers 90% of the flue CO₂, then a compressor and after-cooler condition it to pipeline pressure for storage/EOR — the real energy cost after capture.

CO₂ captureCompressionPipeline/EOR
FEED
feed
solid
liq
CR
solid
liquor
over
under
TH
Underflow
Overflow

Crystallize → thicken (dewatering)

An MSMPR crystallizer precipitates the salt, then a gravity thickener dewaters the crystal slurry into a dense underflow while a clarified overflow leaves the top — the solid-liquid separation a hydrometallurgy plant runs before filtration.

CrystallizationThickener / clarifierSolids mass balance
Sourwater
Stripsteam
liq
gas
gas
rich
SWS
Sourgas
Strippedwater

Refinery sour water stripper (NH₃ + H₂S)

The standard refinery sour water stripper: sour water carrying ammonia and hydrogen sulfide is steam-stripped in a 10-stage column, sending both overhead as sour gas and returning stripped water fit for reuse. Runs on the new `sour-water` weak-electrolyte package, which is what makes the result meaningful — ammonia and H₂S suppress each other's volatility (ammonia raises pH and holds sulfide down as HS⁻; H₂S lowers pH and holds ammonia down as NH₄⁺), and heat reverses both, which is precisely why a stripper works. The two removals come out asymmetric for the real reason: H₂S strips essentially completely while ammonia, five orders of magnitude more soluble, is the duty that sets the steam rate. Honesty note: this is the NH₃/H₂S system — real sour water often also carries CO₂, which competes for the ammonia and is out of scope for this package.

Sour waterSteam strippingWeak electrolyte
Brine
Steam
feed
steam
conc
vapor
cond
Effect1
Cond1
feed
steam
conc
vapor
cond
Effect2
Cond2
feed
steam
conc
vapor
cond
Effect3
Cond3
Concentrate
Vapor3

Triple-effect brine evaporator (forward feed)

The classic multiple-effect evaporator, as a standalone drop-in template: a 6 wt% NaCl brine concentrated in three forward-feed effects down a pressure cascade (1.0 -> 0.70 -> 0.45 bar), where each effect's vapour boil-off is the heating steam for the next. Live 350 kPa steam drives only the first effect; the model reports the resulting steam economy, the per-effect boiling temperatures, and the concentrated liquor. Runs on the `brine` electrolyte package, so the boiling-point elevation is a real function of the salt as the liquor concentrates rather than an assumed offset.

Multi-effect evaporationSteam economyBrine
Seawater
PUMP
RO
Fresh
Steam
feed
steam
conc
vapor
cond
CONC
CONC Condensate
CONC Vapor
feed
solid
liq
ZLD
SALT
Brine

RO desalination + ZLD

Seawater (real NaCl brine, Pitzer-electrolyte thermo) is pressurized and split in a reverse-osmosis membrane into fresh permeate and concentrate; a thermal brine concentrator (an evaporator effect) drives the concentrate the rest of the way to saturation — RO alone can't reach it, since retentate osmotic pressure would exceed any practical feed pressure — before a crystallizer closes the zero-liquid-discharge loop on solid NaCl. The membrane's recovery is bounded by the retentate's real osmotic pressure.

Reverse osmosisDesalinationZero-liquid discharge
Monomer
POLY
Product

Free-radical polymerization (CSTR)

A continuous free-radical polymerization: an Arrhenius CSTR converts monomer and reports the number/weight-average molecular weight (Mn, Mw) and polydispersity from a method-of-moments closure — the numbers a specialty-polymer plant tracks.

PolymerizationMn / Mw / PDIFree-radical kinetics
FEED
Split
Cstr1
Cstr2
Cstr3
Cascade Product
PFR
PFR Product

Polymerization reactor comparison: CSTR cascade vs. tubular (PFR)

The same monomer feed, split 50/50 into two trains at equal total reactor volume: a 3-stage CSTR cascade (each stage blending its own new polymer with the MWD already carried by the stream from the stage before it) versus a single tubular (PFR) reactor. Both converge to a real, different Mn/Mw/PDI — the PFR reaches higher conversion at the same total volume, but its cumulative polydispersity is measurably broader than the cascade's, because chain length drifts continuously with conversion along the tube while each CSTR stage makes its own local production under one fixed monomer concentration. See the 'Polymerization Reactors' docs page for the full reasoning.

PolymerizationCSTR cascadePFR / tubular reactor
Ngfeed
1
2
3
4
5
6
1
2
3
4
5
6
E1
K1
Cond1
JT1
1
2
3
4
5
6
1
2
3
4
5
6
MCHE
K2
AC
JT2
JTN
DRUM
LNG
BOG

C3MR LNG liquefaction

A simplified APCI C3MR train: natural gas and the mixed refrigerant are precooled by a closed propane loop, liquefied to 120 K in a multi-stream main cryogenic exchanger against a closed N2/C1/C2/C3 refrigerant cycle, then let down to storage — LNG at ~115 K. Single-level precool and a single MCHE bundle (a real train uses three propane levels and two bundles); refrigerant charges are set via tear_specs.

LNGMixed refrigerantCryogenics
Sweet GAS
MRU
DEHY
Precool
Liquefy
JT
DRUM
END Flash
TANK
Sendout PUMP
BOG COMP
BOG
LNG
liquid
surplus
Recon
SEND OUT
Surplus BOG
FUEL
GT
GT Exhaust

LNG front end and storage: guard beds, tank boil-off, driver limit

The parts of a **5.2 Mtpa LNG train** that are not the cold box, and the four questions they answer that no bulk unit can — at real capacity, so the vessel sizes and duties are ones an engineer can check against their own plant. **Guard beds:** a sulfur-carbon bed takes mercury from 200 to 0.01 µg/Nm³ — the brazed-aluminium limit, because mercury attacks the plate-fin cold box by liquid-metal embrittlement — on a 4.8 m x 6.6 m bed with **4.2 years** of life from a capacity balance — inside the 3-5 year window these non-regenerable beds are actually replaced on, which is what a turnaround plan needs. A 4A molecular sieve then dries the gas to 0.1 ppmv, the only route to a cryogenic water spec (a glycol contactor tops out near a −30 °C dew point), on a 4.9 m x 5.1 m bed running a **13.8 h cycle** for 1.3 MW of regeneration duty. **Storage:** the LNG goes to a tank whose boil-off rate comes from a 0.05%/day guarantee but whose boil-off *composition* comes from a real equilibrium flash — and that is the interesting part, because the vapour leaves at ~11 mol% nitrogen against 1.1% in the feed. Nitrogen and methane are far more volatile at 113 K, so the boil-off is light and the stored liquid weathers heavier: nobody specified that, the flash found it. **Recondensing:** the boil-off goes back into the send-out LNG rather than to a flare, and the unit reports the LNG:BOG ratio (1999) against the minimum the energy balance demands (3.8), which is the constraint a terminal is actually operated against. **The driver:** a gas turbine burning plant fuel gas, rated **97.5 MW** at ISO conditions, delivers only **84.5 MW at 35 °C** — 5.5 MW short of its 90 MW refrigeration load, and flagged as such. That derate is computed from two physical effects (a fixed-geometry compressor swallows a fixed volume so mass flow follows air density, and hotter air costs more to compress), not from a vendor curve, and it comes out at 0.66%/K — mid-band for industrial machines. It is why a tropical LNG train makes less product in summer. Honesty notes: (1) liquefaction here is a plain cooler standing in for a refrigeration train — the real C3MR cold box is 'c3mr-lng-liquefaction', and this showcase is about what surrounds it; (2) mercury is a unit-op PARAMETER in µg/Nm³, not a thermo component, because at 1e-9 mole fraction it is meaningless to an equation of state; (3) the guard bed is a capacity model, not a breakthrough model, and the sieve is an equilibrium design model, not a dynamic one; (4) the tank is well-mixed and steady-state — for what happens when that assumption fails, see the LNG-rollover analysis tool.

LNGMercury removalDehydration
Arrival
Slugcatch
COND Letdown
COND Flash
Flash GAS
feed
dist
btms
Qc
Qr
STAB
STAB GAS
Condensate
AGRU
CO2 VENT
DEHY
Prechill
Scrub
NGL Letdown
Demeth
FUEL GAS
feed
dist
btms
Qc
Qr
Deeth
Deeth GAS
feed
dist
btms
Qc
Qr
Deprop
LPG Propane
feed
dist
btms
Qc
Qr
Debut
LPG Butane
NAT Gasoline
1
2
3
4
5
6
1
2
3
4
5
6
E1
K1
Cond1
JT1
1
2
3
4
5
6
1
2
3
4
5
6
MCHE
K2
AC
JT2
JTN
DRUM
LNG
BOG

Gas-condensate LNG train: condensate, LPG and LNG

The LNG plant that is also a liquids plant, at real capacity: this is **one 4.4 Mtpa train** (a two-train plant is two of these), not a scaled-down sketch. A condensate-rich field arrives by trunkline as a two-phase stream: the slug catcher drops ~20 mol% of it out as raw condensate before a single molecule reaches the cold end, and the plant then runs two trains side by side off one feed. **Liquids:** the raw condensate is let down to an MP flash that strips the dissolved methane (without it the stabilizer's shortcut total condenser tries to condense methane at 8 bar, which is not a real stabilizer overhead), then stabilized to a C5/C6 product. **Gas:** sweetened and dried, chilled to 245 K to knock out an NGL cut, and the NGL demethanized and split by a deethanizer / depropanizer / debutanizer sequence into commercial propane (~98 mol%) and butane (~98 mol%) LPG plus a natural-gasoline bottoms. **LNG:** the lean gas goes to the same APCI C3MR cold end as the 'c3mr-lng-liquefaction' showcase — propane precool, mixed-refrigerant MCHE to 120 K, JT letdown to a 1.5 bar end-flash drum. Five sold products come out of one flowsheet, each a stream the solver computed. Watch the end-flash boil-off: it leaves at ~13 mol% nitrogen against 1 mol% in the feed, because the flash drum is where an LNG train actually rejects its nitrogen — nobody specified that, the flash found it. **Dehydration is the real molecular-sieve bed**, not a stand-in: a 4A sieve sized by length-of-unused-bed, which is what actually takes the gas to the <=0.1 ppmv the cold box needs — 95 t of sieve on a 5.5 x 5.5 m bed, a 17.5 h cycle and 1.4 MW of regeneration duty, with 0.47 bar of Ergun pressure drop. **The AGRU spec is checked against the physics rather than assumed**: 99.9% CO2 removal leaves 33 ppmv, and at the coldest point in the train (115.9 K) the solid-CO2 solubility limit is 232 ppmv on the measured-data basis — a 7x margin, so the sweetening spec demonstrably clears freeze-out instead of merely looking tight. Honesty notes: (1) the four fractionation columns are `distillation` nodes solved at `fidelity: shortcut` — Fenske-Underwood-Gilliland, not rigorous MESH. The dial is real and one param away: set `fidelity` to `rigorous` on any of them (with `n_stages`, `feed_stage` and `reflux_ratio`) and that column solves the full stage profile. It is **expensive** — flipping the deethanizer alone takes the flowsheet from 1.3 s to ~240 s, because a 9-component C1-to-C6 wide-boiling MESH column is the hard case for this solver — so the library ships at shortcut fidelity and leaves the choice to you. (2) Acid-gas removal is a fixed-recovery component separator, which is how a front-end study specifies an AGRU — you set the outlet spec and size the amine unit against it. That is deliberate here rather than a gap: the rigorous Kremser contactor drives the treated gas to *exactly* zero CO2 at every solvent rate, an equilibrium artifact that would replace a defensible 33 ppmv with a number no gas-treating engineer would accept. For the real solvent chemistry — circulation, loadings, reboiler duty — see 'mixed-amine-acid-gas-treating' and 'barrow-island-lng-co2-injection'; for a contactor that resolves genuine slip, 'rate-based-amine-absorber'. (3) The reservoir fluid is a representative condensate-rich composition, not a published field assay. (4) Single-level propane precool and one MCHE bundle (a real train uses three levels and two bundles); refrigerant charges are set via tear_specs.

LNGGas condensateLPG recovery
Field GAS
LEAN
liq
gas
gas
rich
ABS
Richhx
Letdown
Stripvap
liq
gas
gas
rich
Strip
LEAN Regen
ACID KO
KO Water
CO2 K1
CO2 IC1
CO2 DRY
CO2 DRY Water
CO2 K2
CO2 IC2
CO2 PUMP
CO2 Injection
Amine WASH
WASH LIQ
1
2
3
4
5
6
1
2
3
4
5
6
E1
K1
Cond1
JT1
1
2
3
4
5
6
1
2
3
4
5
6
MCHE
K2
AC
JT2
JTN
DRUM
LNG
BOG

High-CO2 LNG with amine capture and CO2 reinjection

One **5.3 Mtpa LNG train** on a reservoir whose gas is 14 mol% CO2, where the CO2 is not vented but compressed to dense phase and injected — **2.8 Mtpa of it**, at 200 bar, which is the scale that makes this a storage project rather than a gesture. Two things make this different from every other LNG example here. **First, the acid-gas removal is real chemistry, in the same flowsheet as the cryogenics**: per-node `thermo_overrides` run the absorber, the rich/lean loop and the stripper on the 'enrtl-mdea-pz' electrolyte package (MDEA protonation + piperazine carbamate/dicarbamate speciation) while the gas train and the cold end run Peng-Robinson — the amine unit and the MCHE are not two models bolted together, they are one solve. **Second, the CO2 goes somewhere**: the stripper overhead is knocked back, two-stage compressed with interstage cooling and drying, and pumped to 200 bar as a ~96 mol% dense-phase stream ready for a reinjection well, rather than leaving as a vent. The sweet gas is water-washed, dried and liquefied in the C3MR cold end to LNG at ~116 K. Honesty notes: (1) **the absorber drives CO2 to exactly zero in the treated gas, and that is a model artifact, not a design result** — an equilibrium Kremser absorber against a reactive solvent has no mass-transfer resistance to leave a slip behind, so this flowsheet cannot tell you what the AGRU outlet spec should be. That number has to come from the freeze-out limit instead: `analysis/co2_freezeout.py` (and the 'CO2 freeze-out' analysis tab) puts it at a few hundred ppm at 116 K, which is why the real spec is <=50 ppmv with margin, and why this field's gas would plug the MCHE with dry ice ~1000x over if it were fed raw. Use the rate-based 'rate-based-amine-absorber' showcase for a contactor that does resolve a slip. (2) The lean-amine loop is left OPEN (the regenerated solvent is a product, not recycled onto the absorber) with makeup steam as the reboiler surrogate — the same simplification 'mixed-amine-acid-gas-treating' discloses. (3) Streams crossing the PR<->eNRTL boundary are rebased onto the shared 298.15 K ideal-gas datum, so the material balance and the datum are consistent, but the Kremser absorber attempts no rigorous energy balance of its own. (4) The reservoir CO2 content is representative of a high-CO2 field; the injection well itself is out of scope — this train delivers CO2 at wellhead conditions, it does not model the reservoir. (5) Single-level precool and one MCHE bundle; refrigerant charges are set via tear_specs.

LNGCCSCO2 injection
K0
JT0
Cond0
Evap0

Ammonia refrigeration (−30 °C)

A closed single-stage ammonia vapor-compression cycle serving a −30 °C load: compressor → ambient condenser → JT valve → evaporator. The charge is set via tear_specs; metrics give duty and work (COP ≈ 2). From the ChemSep casebook (Refrigeration_Ammonia-30C).

RefrigerationClosed loopAmmonia
K0
JT0
Cond0
Evap0

Propylene refrigeration (−30 °C)

Closed propylene cycle for −30 °C process cooling — the workhorse olefin-plant refrigerant. From the ChemSep casebook (Refrigeration_Propylene-30C).

RefrigerationClosed loopPropylene
K0
JT0
Cond0
Evap0

Propylene refrigeration (−50 °C)

The same propylene loop pulled to −50 °C by sub-atmospheric evaporation (0.8 bar) — COP drops as the lift grows. From the ChemSep casebook (Refrigeration_Propylene-50C).

RefrigerationClosed loopPropylene
K0
JT0
Cond0
K1
JT1
hot
cold
hot
cold
Q out
CX1
Evap1

Two-stage cascade (−100 °C)

Propylene + ethylene cascade: the ethylene loop condenses inside a heat exchanger against the evaporating propylene loop and serves a −100 °C load. Two coupled closed cycles. From the ChemSep casebook (Refrigeration_2-Stage-100C).

Cascade refrigerationClosed loopsCryogenics
K0
JT0
Cond0
K1
JT1
hot
cold
hot
cold
Q out
CX1
K2
JT2
hot
cold
hot
cold
Q out
CX2
Evap2

Three-stage cascade (−150 °C)

Propylene → ethylene → methane cascade to −150 °C: each colder loop condenses against the next-warmer loop’s evaporator. From the ChemSep casebook (Refrigeration_3-Stage-150C).

Cascade refrigerationClosed loopsCryogenics
K0
JT0
Cond0
K1
JT1
hot
cold
hot
cold
Q out
CX1
K2
JT2
hot
cold
hot
cold
Q out
CX2
K3
JT3
hot
cold
hot
cold
Q out
CX3
Evap3

Four-stage cascade (≈−190 °C)

Propylene → ethylene → methane → nitrogen cascade reaching ≈81 K — four coupled closed loops, the full ChemSep cascade ladder (Refrigeration_4-Stage-190C). Air-separation-grade cold from stacked vapor-compression cycles.

Cascade refrigerationClosed loopsCryogenics
Exhaust
Stack
PUMP
hot
cold
hot
cold
Q out
Boiler
Turbine
Condenser

Organic Rankine Cycle — marine diesel exhaust waste-heat recovery

A closed R245fa Rankine loop recovers waste heat from a heavy marine diesel engine's exhaust: a two-stream boiler vaporizes the working fluid against the hot exhaust gas, a real isentropic-efficiency turbine expands it to shaft power, an ambient-cooled condenser returns it to saturated liquid, and a pump restores boiler pressure. The exhaust-gas composition is a representative combustion-product mix (N2/CO2/O2/H2O), not a specific engine's measured flue analysis. Honesty note: the boiler's cold-outlet temperature is a fixed spec (not an approach-temperature/pinch rating against the real exhaust flow), so this demonstrates cycle convergence and net power, not a bounded heat-recovery-area design.

ORCWaste heat recoveryMarine
CO2 Makeup
Compressor
Compressed CO2
TRIM
FUEL
process
fuel
proc
flue
Combustor
Turbine
TRIM Cooler
CO2 Export
TRIM OUT

sCO2 Allam-Fetvedt oxy-combustion power cycle

Natural gas burns in near-pure oxygen, diluted by a large recycled supercritical-CO2 flow instead of air's nitrogen — the oxy-combustion, near-critical-CO2 cycle that yields pipeline-ready CO2 with no separate capture step. Main compressor takes CO2 from just above its critical point (310 K, 8 MPa vs. Tc=304 K/Pc=7.38 MPa) to 30 MPa; the combined CO2+combustion-product stream expands through a real isentropic-efficiency turbine, still supercritical throughout. Honesty notes: (1) this is an **open-cycle v1**, not the fully closed recuperated loop — the compressor's CO2 feed and the turbine's exhaust aren't tied together via a recuperator/recompression recycle yet (a stated follow-up), so read this as 'does the near-critical compression + oxy-combustion + supercritical expansion chain converge and deliver net power', not a bounded plant design. (2) The combustor's `ambient_temperature` param is reused as the recycled-CO2 inlet temperature (a naming artifact of fired_heater.py's air-furnace origins), not true ambient. (3) Turbine-inlet temperature here (~760 K) is lower than a commercial Allam design's ~1150 degC — that gap is exactly what the missing recuperator would close by preheating the recycle CO2 before combustion.

sCO2Allam cycleOxy-combustion
H2 FEED
AIR FEED
AIR Compressor
FUEL CELL
Cooler
Knockout
VENT GAS
Recovered Water
Stack Water

PEM fuel-cell CHP with cathode water management

A PEM fuel-cell stack (real Butler-Volmer + Nernst polarization model, not an efficiency shortcut) runs on H2 with a compressed cathode air supply — the reaction water genuinely splits between vapor (carried out in the exhaust air) and condensed liquid via a real (T,P) VLE flash, not a fixed assumption. A downstream cooler + knockout drum recovers additional water from the exhaust before venting. Honesty note: this models the electrochemistry and water management rigorously, but stack thermal management (active cooling to remove waste heat) isn't modeled as a duty here — electrolyzer_rigorous.py reports electrical power only, not a separate thermal-loss term, so there's no literal 'coolant loop' node; the downstream cooler condenses the exhaust, which is the real, honest analog available today.

PEM fuel cellHydrogenCHP
Leach Liquor
Organic FEED
feed
solv
ext
raff
Extract Stage
NI Raffinate
Strip Liquor
feed
solv
ext
raff
Strip Stage
Cobalt Strip Liquor
Regenerated Organic

Cobalt/nickel solvent extraction (D2EHPA)

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 (thermo/organophosphorus_extraction.py), not a fitted shortcut K_D. Honesty note: the 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 extraction_column.py's ph= mode always assumes the aqueous-feed/organic-solvent extraction direction, not reverse stripping.

Solvent extractionHydrometallurgyCobalt
FEED
PSA
Product
TAIL GAS

Pressure Swing Adsorption — H2 purification

A 5 bar shift-gas feed (H2/CO2, the dominant impurity leaving a steam-methane-reforming shift reactor) is purified across a real cyclic 2-bed PSA unit: while one bed adsorbs CO2 at high pressure (delivering H2-rich product), the other regenerates at low pressure, swept **countercurrently** by a slipstream of that product to desorb CO2 out the feed end as tail gas — the genuine Skarstrom-cycle mechanism, not a fixed-recovery shortcut. The solver runs the real cyclic transient (tanks-in-series bed discretization + linear-driving-force adsorption kinetics toward the same competitive-Langmuir isotherm unitops/adsorption.py uses) to a periodic steady state. Honesty notes: (1) this is a bounded 2-bed, 2-step v1 — a real industrial H2-PSA train uses 4+ beds and separate depressurization/purge/repressurization steps (interbed pressure equalization in particular recovers a lot of the efficiency this v1 doesn't capture); (2) the CO2 Langmuir isotherm is screening-order (a defensible physical magnitude for CO2 on activated carbon/zeolite near ambient T), not fitted to one cited adsorbent's published isotherm; (3) other real shift-gas impurities (CH4, CO, N2) aren't modeled, only the dominant CO2 — see flowsim/dynamics/psa.py's module docstring for the complete scope.

PSAPressure swing adsorptionHydrogen purification
Ngfeed
1
2
3
4
5
6
1
2
3
4
5
6
Mshx1
1
2
3
4
5
6
1
2
3
4
5
6
Mshx2
K1
AC1
JT1
K2
AC2
JT2
JTN
DRUM
LNG
BOG

TEALARC LNG liquefaction

A simplified Technip TEALARC train: two closed mixed-refrigerant loops — a heavy C1/C2/C3 precool MR that also cools itself in a 4-stream exchanger, and a light N2/C1/C2/C3 liquefaction MR — bring natural gas to 120 K before letdown to storage (LNG at ~115 K). Both circulations are set via tear_specs; the precool MR runs rich for pinch feasibility (screening fidelity). From the ChemSep casebook (TEALARC).

LNGMixed refrigerantCryogenics
FEED
feed
top
side
bot
DWC
C3
IC4
NC4

LPG dividing-wall splitter

Propane / isobutane / n-butane separated in one thermally-coupled dividing-wall column (shortcut splits): three on-spec products from a single shell. From the ChemSep casebook (LPG_DWC, Gas Processing Dec 2018).

Dividing wallLPGDistillation
FEED
feed
dist
btms
Qc
Qr
BENZ
feed
dist
btms
Qc
Qr
TOLU
B
T
X

BTX aromatics train

Benzene / toluene / p-xylene split in a two-column train — 99+% purity on all three products. From the ChemSep casebook (CScasebook_BTX).

AromaticsDistillation trainBTX
FEED
feed
dist
btms
Qc
Qr
Split
Light
Heavy

Reformate splitter

A single column cutting catalytic reformate into a light benzene/hexane overhead and a toluene/xylene bottoms — the IECR 50, 5680 configuration from the ChemSep casebook.

ReformateDistillationAromatics
FEED
RX
COOL
feed
dist
btms
Qc
Qr
Bzcol
Light
EB

Ethylbenzene synthesis

Benzene alkylation with ethylene (exothermic, 98% ethylene conversion) followed by a recovery column — 100% EB bottoms. From the ChemSep casebook (AIChE J 57, 655).

AlkylationReactor + columnEthylbenzene
FEED
feed
dist
btms
Qc
Qr
Vaccol
C16
C18

Fatty-ester vacuum fractionation

Biodiesel methyl esters (C16 / C18) split at 0.05 bar — vacuum keeps the bottoms under 515 K; near-total C16 recovery overhead and ~98% C18 in the bottoms (the two components' relative volatility caps bottoms purity there — more stages/reflux do not push it further). From the ChemSep casebook (Fatty_Acids, as methyl esters).

Vacuum distillationBiodieselOleochemicals
FEED
RX
COOL
feed
dist
btms
Qc
Qr
Dmecol
feed
dist
btms
Qc
Qr
Meohcol
DME
Meohr
Water

DME synthesis (methanol dehydration)

Catalytic methanol dehydration (2 CH3OH -> (CH3)2O + H2O, 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).

Reaction + distillationWide-boiling columnMethanol dehydration
FEED
Pipe1
Boost
Pipe2
Delivered

Dense-phase CO₂ pipeline transport

Supercritical/dense-phase CO₂ loses pressure to pipe friction over a 150 km trunk-line run, gets restored by an intermediate pump station (the fluid stays liquid-like above its critical pressure, so this is a pump — not a compressor), then runs a second 150 km segment — the CCUS transport leg between capture and injection.

CO2 pipelineDense-phase CO2CCUS
FEED
RX
COOL
SEP
SNG
Reaction Water

CO₂ methanation (e-fuels / power-to-gas)

The Sabatier reaction (CO₂ + 4H₂ ⇌ CH₄ + 2H₂O) converts captured CO₂ and green H₂ into synthetic natural gas at a 97% single-pass-equivalent conversion (real plants stage several adiabatic beds with intercooling to reach this; lumped into one reactor here), then a cooler and knockout drum condense the reaction water from the SNG — the e-fuels loop that closes the loop on captured carbon instead of just storing it.

MethanationE-fuelsSabatier reaction
Solar
WIND
fx
CALC Power
Water
Electrolyzer
CO2 FEED
MIX
Preheat
RX
COOL
SEP
SNG
Reaction Water

Solar + wind green H₂ → CO₂ methanation

A solar PV array and a wind turbine each compute their own electrical output from a cited irradiance/power-curve model — not typed-in numbers — and a calculator block sums the two and writes it into a PEM electrolyzer's power draw, re-converging until the electrolyzer's hydrogen output is self-consistent with the array's own physics. That green H₂ is mixed with a CO₂-rich feed (representing the rich overhead of an amine-capture loop, e.g. basf-amdea-closed-solvent-loop or mixed-amine-acid-gas-treating — captured CO₂ standing in as a feed rather than re-solving the whole capture train here) and reacted to synthetic natural gas by the Sabatier reaction, same as co2-methanation. This is the full post-combustion-capture-plus-renewable-hydrogen loop: capture the carbon, split water with sun and wind, recombine them into pipeline-ready gas. CO₂ is deliberately fed in stoichiometric deficit so the electrolyzer's own H₂ output — not an assumed ratio — sets how much gas is made; the solar/wind design point (750 W/m² POA irradiance at 45°C cell temperature; a 9 m/s wind on a 100 m rotor) is a representative midday operating point, not a time series — this is a design-point simulation, not an 8760-hour production model.

Solar PVWind turbinePower-to-gas
FEED
FERM
Broth

Precision fermentation (alternative protein)

A continuous chemostat runs Monod growth kinetics with a nonzero product yield — biomass growth *and* a secreted target protein, the reactor model precision-fermentation/cellular-agriculture scale-up runs on, not just the biomass-only chemostat the other bioreactor examples show.

Precision fermentationAlternative proteinCellular agriculture
FEED
RX
UREA MELT

Green urea synthesis

Green ammonia and captured CO₂ react over a single-pass stoichiometric reactor (2NH₃ + CO₂ ⇌ CO(NH₂)₂ + H₂O) at synthesis-loop conditions — the fertilizer step downstream of green ammonia. Screening fidelity: a real plant recycles the unconverted carbamate/excess ammonia to push per-pass yield well above this single-pass conversion; that recycle isn't modeled here.

UreaFertilizerGreen ammonia downstream
FEED
COMP
COOL
feed
dist
btms
Qc
Qr
Hpcol
JT1
JT2
crude
dist
cuts
btms
Qc
Qr
Lpcol
feed
dist
btms
Qc
Qr
Arcol
N2 Product
LOX
Crude Argon
AR Column Bottoms

Cryogenic air separation (N₂/O₂/Ar)

The real Linde double-column split: air is compressed, cooled toward cryogenic temperatures, and fed to a high-pressure column; its N2-rich overhead and O2-enriched bottoms are each let down through a JT valve into a low-pressure column as two separate feeds (the HP overhead entering near the top stands in for reflux from the shared condenser-reboiler a real double column uses — this solver's column MESH doesn't expose an external reboil-duty seam, so the two columns close their own reflux independently rather than literally sharing one condenser/reboiler; everything else — two pressure-cascaded columns, real multi-feed MESH, an actual argon side column — is real). A liquid side draw near the LP column's argon pinch feeds a crude argon column that rejects oxygen (the side draw's whole point — 'crude' because a real plant needs a further deoxo + purification train for pipeline-grade argon, out of scope here).

Cryogenic ASUAir separationLiquid nitrogen
FEED
MIX
COMP
COOL
Precool
JT
Flash
LHE

Helium liquefaction (Linde-Hampson cycle)

A Joule-Thomson liquefaction loop: helium is compressed, aftercooled, precooled well below its ~40-51 K JT-inversion temperature, then throttled through a valve into a flash drum that draws off liquid helium while the cold vapor recycles back to the compressor suction — the same JT-cycle physics as the platform's LNG/refrigeration loops, run on a fluid whose inversion curve makes precooling mandatory before the throttle can cool it at all.

Helium liquefactionCryogenicsJoule-Thomson
FEED
Devol
Vapor
Polymer

Polystyrene devolatilization (Flory-Huggins)

A molten polystyrene/toluene melt is flashed above its Flory-Huggins bubble point to strip residual solvent — the polymer thermo package's headline use case: the vapor leaves essentially pure solvent while the melt concentrates toward pure polymer, exactly the physics a cubic EoS or an ordinary activity model (sized for components of comparable molecular size) can't represent.

PolymerFlory-HugginsDevolatilization
Monomer
POLY
Devol
Recovered Monomer
MELT PIPE
Pellet Product

Continuous polymerization -> inline devolatilization -> melt transfer

A continuous free-radical CSTR (Mn/Mw/PDI via method-of-moments) converts 10% of its monomer feed to polymer per pass; the effluent flashes above its real Flory-Huggins bubble point to strip most of the residual monomer for recycle (the same physics as the polystyrene-devolatilization example, chained directly onto a reactor for the first time). The still-solvent-carrying melt then transfers through a pipe whose pressure drop is driven by a real non-Newtonian melt viscosity — the 3.4-power Mw scaling law plus Carreau shear-thinning (thermo/polymer_rheology.py), not a flat user-guessed constant — closing the 'viscosity-driven hydraulic pressure drop' gap a competitive pitch this session flagged as unbuilt. Honesty notes: 'ethanol'/'polymer' are the Flory-Huggins-package's actual solvent/polymer ids (the same stand-in-carrier convention the free-radical-polymerization example already uses, with monomer_mw overridden to styrene's real 104 g/mol) — a real bulk process pushes further toward a solids-rich melt, but the Flory-Huggins flash's own bubble-point search becomes numerically unreliable very close to the solvent's critical point at high polymer loading (found while building this example), so the reactor conversion here is tuned to a regime that flashes cleanly and monotonically rather than chasing an unverified near-critical number.

PolymerDevolatilizationMelt viscosity
FEED
RX
COOL
SEP
Letdown
SEP2
feed
dist
btms
Qc
Qr
COL
Purge
Purge2
MEOH
Water

Methanol synthesis (syngas loop)

Low-pressure syngas-to-methanol loop (CO + 2 H2 <-> CH3OH, equilibrium reactor at 80 bar/510 K). The high-pressure separator's crude liquid still carries several mol% dissolved CO2/H2/CO from the reactor loop, so a letdown valve plus a second flash (mirroring the HDA casebook's own SEP-LETDOWN-SEP2 degassing pattern) strips the bulk of it before the atmospheric column — dissolved permanent gas at that scale can otherwise mislead a bubble-point search onto a spurious low-temperature root nowhere near methanol/water's real ~340 K bubble point, so keeping the column's own feed genuinely light on non-condensables is the honest fix, not a thermo-solver workaround. From the ChemSep casebook (Methanol_iecr49p6150).

Reaction + distillationSyngas loopTwo-stage degassing
FEED
feed
dist
btms
Qc
Qr
DEC2
feed
dist
btms
Qc
Qr
DEC3
feed
dist
btms
Qc
Qr
DEC4
E C2
E C3
E C4
E C5

Light-ends fractionation train

A classic three-column light-ends train splitting an ethane/propane/ n-butane/n-pentane feed into four near-pure products: DEC2 (deethanizer, 5 bar) rejects ethane overhead, DEC3 (depropanizer, 5 bar) takes the propane cut, and DEC4 (debutanizer, 2 bar) splits n-butane from n-pentane. A genuinely wide-boiling train — DEC2 and DEC4 both land in the documented successive-substitution residual plateau (converge to a physically correct, sharp separation just above the strict 1e-5 tolerance) rather than a clean `converged` status, the same class of behavior already accepted for the DME casebook entry. From the ChemSep casebook (light-ends fractionation).

Distillation trainNGL fractionationWide-boiling column
Gasfeed
Solvent
liq
gas
gas
rich
ABS
Salesgas
Letdown
Regen
Co2offgas
Leansolvent

CO2 removal from syngas (Rectisol-style physical solvent)

A CO2-laden syngas stream from gasification/reforming (H2/CO with 25% CO2, the actual Rectisol duty — scrubbing raw syngas ahead of methanol/ammonia synthesis, not treating pipeline natural gas) is sweetened by a cold-methanol physical-solvent absorber (chosen because chemical amine reactions aren't modeled here) down toward synthesis-loop spec, then the rich solvent is regenerated by a pressure letdown into a second flash that flashes the bulk of the absorbed CO2 back off — the same letdown-valve-plus-flash regeneration pattern used for HDA's and methanol synthesis's own dissolved-gas trains. No solvent recycle loop (an honest simplification: the regenerated solvent is reported as a product stream rather than closed back onto the absorber feed). From the ChemSep casebook (CO2 removal from natural gas), adapted to Rectisol's real syngas duty.

Acid-gas removalPhysical solventAbsorption
Ngfeed
1
2
3
4
5
6
1
2
3
4
5
6
Mshx1
KA
ACA
JTA
1
2
3
4
5
6
1
2
3
4
5
6
Mshx2
KB
ACB
JTB
1
2
3
4
5
6
1
2
3
4
5
6
Mshx3
KC
ACC
JTC
JTN
DRUM
LNG
BOG

Snohvit mixed-fluid-cascade LNG liquefaction

A simplified Statoil/Linde MFC train: three independent, cascaded closed refrigerant loops (propane precool, an N2/methane/ethane liquefaction MR, and an N2/methane subcooling MR) each condense/precool through the *previous* stage's cold box before their own JT expansion -- the same cross-stage coupling TEALARC uses, one level deeper. Natural gas is cooled 300 K -> 255 K -> 175 K -> 112 K across the three multi-stream exchangers before letdown to LNG storage (~114 K). All three circulations are set via tear_specs. From the ChemSep casebook (Snohvit MFC).

LNGMixed-fluid cascadeCryogenics
FEED
Crack
Quench
COMP
Cool2
SEP
H2tail
feed
dist
btms
Qc
Qr
COL
Ethylene
Ethane

Ethane steam cracker

A simplified thermal-cracking train: an equilibrium reactor converts ethane to ethylene + H2 at furnace conditions (1100 K), then a quench, compression, and a cold flash strip the H2 tail gas before a C2 splitter separates ethylene product from unconverted ethane. An equilibrium reactor is used here rather than the kinetic reactor because the latter's concentration term always uses a *liquid*-phase density (a real gap for a vapor-phase reaction at 1100 K) -- noted, not fixed, out of scope for this example. The C2 splitter needs many stages and high reflux since ethylene/ethane relative volatility is modest. From the ChemSep casebook (ethane cracker).

Steam crackingEthyleneEquilibrium reactor
FEED
RX
Quench
SEP
Recycle GAS
Letdown
SEP2
STAB GAS
COL
Benzene
Toluene OUT

Toluene hydrodealkylation (HDA)

Toluene + H2 react to benzene + methane over an equilibrium reactor (900 K), then a quench, a high-pressure separator, and a letdown-valve-plus-flash stabilizer strip dissolved H2/methane before the aromatics split -- the same SEP-LETDOWN-SEP2 degassing pattern used for methanol synthesis and CO2-from-natural-gas elsewhere in this gallery. The final benzene/toluene split uses a shortcut separator rather than a rigorous distillation column: even the small H2/methane trace left after stabilization has a pure-component bubble point far below any real column temperature (H2 at 1.5 bar: ~22 K), which corrupts the column's initial T-profile guess and the inside-out/Newton MESH solvers land on a physically nonsensical low-temperature root for this feed. A fix narrowed to just that seed was tried and reverted: it also changes the wide-boiling classification and the seed fed into the (otherwise-fine) inside-out solver for other columns, and broke the already-shipped methanol-synthesis example -- the same cross-example fragility already hit twice this session trying to patch the shared thermo core, so it's noted honestly here rather than chased further. From the ChemSep casebook (toluene HDA).

HydrodealkylationBenzeneEquilibrium reactor
FEED
MIX
FUEL GAS
process
fuel
proc
flue
Furnace
FLUE Stack
RX
Quench
SEP
Recycle Split
Recycle COMP
Purge
Letdown
SEP2
STAB GAS
COL
Benzene
Heavies OUT

Thermal (non-catalytic) HDA — broad aromatics feedstock

A real thermal-HDA licensor's process (non-catalytic, tolerant of a mixed aromatics feedstock and inert impurities) modeled as a genuine **competing-and-sequential reaction network** in a real plug-flow reactor, not a fixed-Keq equilibrium reactor like the simpler hda-toluene-dealkylation example. The main toluene dealkylation (toluene + H2 -> benzene + methane) uses **real published kinetics**: (-r_toluene) = k0*exp(-Ea/RT)*C_toluene*C_H2^0.5 (order 1 in toluene, order 0.5 in H2, the classic 1.5-order thermal-HDA rate law), k0 = 5.67e9 (m3/mol)^0.5/s, Ea = 228,200 J/mol, heat of reaction -49,000 J/mol -- transcribed from Shull & Hixon (Ind. Eng. Chem. Process Des. Develop. 5, 147, 1966) as tabulated in Rase, H.F., 'Chemical Reactor Design for Process Plants, Vol. 2: Case Studies and Design Data' (Wiley-Interscience, 1977), Case Study 104 'Toluene Dealkylation', pp. 36-42 (unit-converted from the source's imperial (ft, lb-mol, degR) basis to SI). That same source explicitly states 'rate equations for the side reactions have not been reported' -- so the coking/heavies side reaction (2 toluene -> biphenyl + H2, the real reaction that caps aromatic yield below 100% and drives decoking intervals) and the xylene demethylation feeding the shared toluene pool (o-xylene + H2 -> toluene + methane -- the real single-methyl-loss pathway, not a lumped double-dealkylation straight to benzene, so this is a genuine reactions-in-series-and-parallel network, not three independent reactions) both stay illustrative order-of-magnitude Arrhenius parameters, tuned only to land in the source's cited ~98% main-reaction selectivity at 2:1 H2:toluene -- honestly labeled as such, not fabricated citations. H2S/CO2/ammonia ride through the flowsheet as inert impurities -- exactly what 'impurity tolerance' means in a mass balance, not a special chemistry path. A real fired heater (rigorous combustion stoichiometry + stack energy balance, the same unit op used in the naphtha-steam-cracker example) brings the mixed fresh-plus-recycle feed up to reaction temperature -- not a feed specified as already at 950 K. The H2-rich high-pressure separator vapor is a real recycle loop: fresh feed joins recycled gas at a mixer ahead of the furnace, and past the separator the vapor splits into a recompressed recycle (85%) and a genuine purge (15%) that bleeds off the methane a single pass could never consume -- the same role a purge plays in the ammonia-synthesis-loop example. Quench, the high-pressure separator, and a letdown-valve-plus-flash stabilizer strip dissolved H2/methane before the aromatics split. The reactor is genuinely **adiabatic**, not isothermal: temperature is a real energy-balance-coupled ODE state (kinetic_reactor.py's adiabatic PFR mode) that rises along the reactor length as the exothermic reactions release heat -- starting from the furnace's real ~900 K outlet (in the source's cited 894-922 K inlet range) and climbing as the reaction proceeds, self-consistent to within ~0.01% of the reactor's own required external duty (which should be ~0 for a truly adiabatic reactor -- verified, not assumed). One honest simplification remains: the final benzene/toluene/xylene-derived-benzene split still uses a shortcut separator rather than a rigorous column, for the same documented reason as hda-toluene-dealkylation: trace H2/methane corrupts the column's wide-boiling initial-guess classification, and a fix narrowed to just that seed broke the shipped methanol-synthesis example when tried previously.

HydrodealkylationThermal crackingMulti-reaction kinetics
Crude
Washwater
hot
cold
hot
cold
Q out
HX1
Desalt MIX
Desalter
Brine
HX2
Fired Heater
crude
dist
cuts
btms
Qc
Qr
CDU
COND
vap
liq1
liq2
Reflux DRUM
GAS
Naphtha
SOUR Water
Steam1
Steam2
Steam3
liq
gas
gas
rich
Strip KERO
liq
gas
gas
rich
Strip LGO
liq
gas
gas
rich
Strip HGO
KERO
LGO
HGO
Strip Vent1
Strip Vent2
Strip Vent3
Residue

Crude distillation unit (full train)

A fuller atmospheric CDU: a crude/residue preheat exchanger, a desalter (wash water mixed in, then split off as brine), a fired heater, the multi-draw column, three steam side-strippers recovering kerosene / light gas oil / heavy gas oil, and an overhead condenser + three-phase reflux drum (fuel gas / naphtha / sour water). A pumparound heat-integration loop (drawing liquid off an interior stage, cooling it externally against crude, and returning it colder to preheat the column's own upper trays) was attempted -- both a 2-loop and a 1-loop version -- but proved too numerically expensive to converge in reasonable time and was dropped rather than shipped half-tuned; everything else in the reference PFD is real. From the ChemSep casebook (crude distillation).

CrudeCDUDesalter
Crude
Preflash
Light ENDS
Fired Heater
crude
dist
cuts
btms
Qc
Qr
CDU
Naphtha
Kerosene
Diesel
Residue

Brent Blend CDU (characterized from a real assay)

An atmospheric crude unit fed by a *named, cited* crude rather than invented pseudocomponents: Brent Blend (NOAA ADIOS oil EX00009, API 40.1, SG 0.8246, 0.35 wt% sulfur; the underlying assay is ExxonMobil's published Brent distillation curve). The bundled assay library (561 crudes, `flowsim.backend.crude_assays`) supplies the true-boiling-point curve; `assay_to_pseudocomponents` cuts it into 8 equal-volume pseudocomponents and characterizes each by Riazi-Daubert (Tc/Pc/MW from NBP+SG) and Edmister (acentric factor) — the eight `cut_N` entries below are that output verbatim, not hand-tuned numbers. The train is preflash drum → fired heater (660 K) → 20-stage atmospheric column with two side draws, yielding naphtha overhead, kerosene and diesel side cuts, and atmospheric residue. Three things worth knowing: (1) an assay reports one whole-crude gravity, but density rises steeply with boiling point, so the cuts are characterized at *constant Watson K* — Kw is fitted by requiring the cuts' volume-average SG to return the measured bulk 0.8246, giving Kw = 11.95 (the published paraffinic band is 11.4–12.1, which the fit was not tuned to hit) and per-cut gravities running 0.689 for the light naphtha to 0.971 for the 595 °C residue; (2) mole fractions follow from that — equal volume means mass ∝ SG, so each cut's mole fraction is proportional to SG/MW; (3) the column runs with `rigorous_draws` — real MESH liquid withdrawals — because the default carve mode (side products sliced out of a converged 2-product profile) returns two near-identical draws here and does not fractionate. Bounded: constant Kw is itself an idealization (a real crude's Kw drifts a few tenths across the barrel, and aromatic/naphthenic crudes differ), but it is the standard characterization and is strictly better than one gravity for every cut.

Crude assayCDUPseudocomponents
Fresh
MIX
RX
COOL
Flash
NH3 Product
Split
Recycle COMP
Purge

Ammonia synthesis loop (Haber-Bosch, ChemSep casebook)

The classic industrial ammonia loop: fresh syngas joins recycled unconverted gas, reacts over an equilibrium reactor (N₂ + 3H₂ ⇌ 2NH₃) at synthesis conditions, is chilled to condense high-purity liquid ammonia, and the remaining vapor splits into a recycle (back to the loop) and a purge — the purge exists specifically to bleed off the inert argon a single-pass reactor could never consume, which would otherwise concentrate in the recycle forever.

Ammonia synthesisHaber-BoschRecycle loop
FEED
Solvent
feed
dist
btms
Qc
Qr
Extcol
Ethanol
feed
dist
btms
Qc
Qr
Recovcol
Water OUT
Glycol Recycle

Extractive distillation (ethanol/water with ethylene glycol)

Near-azeotropic ethanol/water (85 mol% ethanol) can't be pushed past the 89 mol% azeotrope by ordinary distillation. A heavy, high-boiling entrainer (ethylene glycol) fed near the top of the column raises water's relative volatility enough to pull overhead ethanol past the azeotrope in one pass; a second column then strips water overhead from the glycol, regenerating it as the bottoms product. The classic extractive-distillation textbook case (Luyben, Ind. Eng. Chem. Res. 2006, 45, 4625).

Extractive distillationAzeotropeMulti-feed column
FEED
feed
dist
btms
Qc
Qr
Lpcol
Acetone
COMP
feed
dist
btms
Qc
Qr
Hpcol
Recycle TO LP
Methanol

Pressure-swing azeotropic distillation (methanol/acetone)

Methanol and acetone form a minimum-boiling azeotrope whose composition shifts noticeably with pressure — enough that two ordinary columns run at different pressures can cross the azeotrope without an entrainer. Column 1 (low pressure) takes pure acetone bottoms and a near-azeotropic overhead; that overhead is compressed into Column 2 (high pressure), whose new, shifted azeotrope composition lets pure methanol come off the bottoms (the recycle of Column 2's now off-azeotrope overhead back to Column 1 is reported as a product here rather than closed, the same open-loop simplification the acetone-water example already uses). Luyben, Ind. Eng. Chem. Res. 2008, 47, 2696.

Pressure-swing distillationAzeotropeTwo-column train
Wetgas
Leanteg
liq
gas
gas
rich
Contactor
Drygas
Letdown
Degas
Flashgas
Regen
Waterout
Leanteg OUT

TEG natural gas dehydration

Wet natural gas is contacted counter-currently with lean triethylene glycol (TEG) in an absorber, pulling water vapor into the glycol to meet a pipeline water spec; the rich glycol is then let down in pressure and regenerated in two flashes — the first flashes off the bulk of the co-absorbed methane, the second (hot) flash boils the absorbed water off the now nearly gas-free glycol, leaving hot lean glycol bottoms (its recycle back to the absorber is reported as a product, the same open-loop simplification used elsewhere in this library). Water is the most common undesirable natural-gas impurity — it forms hydrates that plug valves and fittings once the gas is compressed or cooled.

Glycol dehydrationAbsorptionNatural gas treating
C5feed
Meohfeed
feed
dist
btms
RD
Lights
TAME Product

TAME synthesis via reactive distillation

Tert-Amyl Methyl Ether (TAME) is etherified from a cracked C5 cut's reactive isoamylenes (2-methyl-1-butene / 2-methyl-2-butene) and methanol over the reactive stages of a column, pulling unreacted light C5s overhead while methanol-free TAME leaves the bottoms — reaction and separation in one shell, the same reactive-distillation pattern as the DME etherification example. Luyben, Ind. Eng. Chem. Res. 2005, 44, 5715.

Reactive distillationEtherificationC5 upgrading
Acidfeed
Meohfeed
feed
dist
btms
RD
Methyl Acetate
Water Bottoms

Methyl acetate esterification via reactive distillation

Acetic acid and methanol esterify over the reactive stages of a column into methyl acetate and water — a genuine quadruple-azeotrope system where reactive distillation intensifies what would otherwise need several conventional columns. Reactive Distillation Design and Control, Luyben & Yu, Wiley (2006), pp. 147-164.

Reactive distillationEsterificationProcess intensification
Benzene
Propylene
MIX
RXN
feed
dist
btms
Qc
Qr
COL
Benzene Recycle
Cumene Product

Cumene production (benzene alkylation)

Benzene and propylene alkylate over a fixed-conversion reactor to cumene (isopropylbenzene, the feedstock for phenol/acetone via the Hock process); a downstream column recovers unreacted benzene overhead for recycle-quality purity while cumene leaves the bottoms. Luyben, Ind. Eng. Chem. Res. 2010, 49, 719.

AlkylationReactorCumene
Meacfeed
Buohfeed
feed
dist
btms
RD
Methanol OUT
Butyl Acetate

Butyl acetate synthesis via reactive distillation

Methyl acetate transesterifies with n-butanol over the reactive stages of a column into butyl acetate (a common paint/coatings solvent) and methanol, which is pulled overhead as it forms while high-boiling butyl acetate collects in the bottoms. Luyben et al., Ind. Eng. Chem. Res. 2011, 50, 1247.

Reactive distillationTransesterificationSolvent production
Butene
Isobutane Makeup
MIX
RXN
feed
dist
btms
Qc
Qr
DIB
Alkylate

Butene/isobutane alkylation

Sulfuric-acid alkylation of butene with excess isobutane produces high-octane alkylate gasoline blendstock; a conversion reactor stands in for the acid-catalyzed carbocation chemistry (a literal acid/hydrocarbon settler would need H2SO4 electrolyte thermodynamics this package doesn't carry — out of scope, same as the reactor already being a stand-in for the chemistry itself), and a deisobutanizer-style column recovers unreacted isobutane overhead. The high isobutane:olefin ratio real alkylation units run is maintained almost entirely by **recycling** that isobutane back to the reactor feed — closed here as a real Wegstein-converged tear loop, with only a small makeup feed replacing what the reaction actually consumes, rather than the previous version's isobutane leaving as an unrecycled product. Luyben, Principles and Case Studies of Simultaneous Design, Wiley (2011); Ind. Eng. Chem. Res. 2009, 48, 11081.

AlkylationReactorGasoline blending
Eofeed
Waterfeed
MIX
RXN
COOL
Degas
EO VENT
feed
dist
btms
Qc
Qr
COL
Water Recycle
MEG Product

Ethylene oxide hydration to mono-ethylene glycol (MEG)

Ethylene oxide reacts uncatalyzed with excess water at 200 C to mono-ethylene glycol (MEG, antifreeze/PET feedstock); the excess-water dilution that suppresses the over-reaction to di-/tri-ethylene glycol byproducts is reflected in the large water excess on the feed, and a downstream column concentrates MEG in the bottoms while excess water leaves overhead for recycle. Kinetics basis: Ind. Eng. Chem. Res. 2009, 48, 10840.

HydrationReactorGlycol production
Ethylene FEED
O2 FEED
MIX0
Epoxrx
Combrx
Cool0
Condense
Purge GAS
Waterfeed
MIX1
RXN
Cool1
Degas
EO VENT
feed
dist
btms
Qc
Qr
COL
Water Recycle
MEG Product

Ethylene oxide synthesis through to glycol

The full EO/MEG chain in one flowsheet, upstream of the standalone hydration example: ethylene and oxygen react over a silver catalyst to ethylene oxide (low per-pass ethylene conversion, ~10%, is realistic — high conversion pushes the competing total-combustion side reaction, which this model represents as a second reactor consuming a fixed share of the same ethylene at ~80% EO selectivity). A cooled flash condenses EO (and reaction water) from the unreacted ethylene/oxygen/CO2 vented for combustion-side purge; the condensed EO then hydrates with fresh water to MEG exactly as in the standalone hydration example. No ethylene/O2 recycle loop (an honest simplification — real plants recycle unreacted ethylene at high ratio).

EpoxidationReactorHydration
Ethylene FEED
O2 FEED
MIX0
Epoxrx
Combrx
Cool0
Condense
Purge GAS
Waterfeed
MIX1
RXN1
RXN2
RXN3
Cool1
Degas
Offgas
Dewater
Water Recycle
MEG COL
MEG Product
DEG COL
DEG Product
TEG Product

Ethylene glycol plant: fiber-grade MEG + DEG/TEG byproducts

Extends the EO/glycol chain all the way to separated products. Ethylene + O2 make ethylene oxide over a silver catalyst (with the competing total-combustion side reaction), EO condenses out, and then hydrates through the real CONSECUTIVE glycol reactions — EO + H2O -> MEG, EO + MEG -> DEG, EO + DEG -> TEG (all atom-balanced, keyed on the shrinking EO pool) — giving the industrial ~90/9/1 mono-/di-/tri-ethylene-glycol selectivity that a high water:EO ratio produces. The purification train recovers the water for recycle and splits the glycols into fiber-grade MEG (>=99.9%), DEG, and TEG products. HONEST SCOPE: the reaction chemistry is rigorous stoichiometry (real atom balances, realistic selectivity set by the fixed conversions); the PURIFICATION is modelled with spec-based component-split separators to the known product purities (the Aspen 'Sep'-block technique for a well-understood separation section), NOT rigorous vacuum distillation columns — a converged 99.9%-fiber-grade MEG column is not tractable in this solver under Peng-Robinson (the MEG/DEG relative volatility is too narrow for the wide-boiling MESH path; a real plant uses large multi-effect evaporators + vacuum columns). The water-recycle stream is left open (not looped back) — an honest simplification, like the parent EO example's ethylene recycle.

Ethylene glycolMEGDEG
Ethylene FEED
O2 FEED
MIX0
Epoxrx
Combrx
Cool0
Condense
Purge GAS
Water Makeup
MIX1
RXN1
RXN2
RXN3
Cool1
Degas
Offgas
MP Steam
feed
steam
conc
vapor
cond
Evap1
feed
steam
conc
vapor
cond
Evap2
Steam COND
OH MIX
OH KO
Dehydrate
GLY MIX
COND Water
Water Split
Water Purge
MEG COL
MEG Product
DEG COL
DEG Product
TEG Product

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).

Ethylene glycolMEGWater recycle
NH3
Water
EO
MIX
RXN1
RXN2
RXN3
COOL
Ammstrip
NH3 Recycle
Dewater
Water OUT
Meacol
MEA Product
Deacol
DEA Product
TEA Product

Ethanolamines plant: MEA / DEA / TEA from ethylene oxide + ammonia

The nitrogen analogue of the ethylene-glycol chain, and a major gas-treating-solvent process in its own right. Ethylene oxide reacts with ammonia through the same kind of CONSECUTIVE addition chain the glycols follow — EO + NH3 -> monoethanolamine (MEA), EO + MEA -> diethanolamine (DEA), EO + DEA -> triethanolamine (TEA), all atom-balanced and keyed on the shrinking EO pool. A large ammonia excess pushes selectivity toward MEA (the ~80/13/5 MEA/DEA/TEA slate a high NH3:EO ratio makes, amine-side mirror of how a high water:EO ratio favours MEG). The separation strips the excess ammonia (recovered for recycle) and the reaction water, then splits the amines by boiling point (MEA 170 C < DEA 269 C < TEA 335 C) into ~99.8% MEA, high-purity DEA, and a TEA bottoms cut. HONEST SCOPE: the reaction chemistry is rigorous stoichiometry (real atom balances, realistic selectivity from the fixed conversions), and the amines are characterized as pseudo-components (Tc/Pc/omega from the open-data databank — MEA/DEA/TEA have no CoolProp entry) so they flash under Peng-Robinson. The purification uses spec-based component-split separators (the Aspen 'Sep'-block technique), NOT rigorous vacuum columns -- the ethanolamines are wide-boiling with narrow adjacent-amine relative volatilities, the same wide-boiling-MESH limit measured for the glycol columns. The recovered ammonia is shown as an open recycle stream (an honest simplification, like the parent EO example).

EthanolaminesMEADEA
Cumene
AIR
MIX
OXID
Coolox
Oxflash
Offgas
Cleave
Coolcl
Acetcol
Acetone
Cumcol
Cumene Recycle
Phencol
Phenol
Heavies

Phenol + acetone via the Hock process (cumene peroxidation)

The route that makes ~95% of the world's phenol -- and co-produces acetone, the classic two-products-from-one-feed economics. It completes the cumene story: the existing cumene-synthesis example makes cumene from benzene + propylene; this oxidizes it onward. Two atom-balanced steps: air peroxidation (cumene + O2 -> cumene hydroperoxide, CHP) at low per-pass conversion, then acid-catalyzed cleavage (CHP -> phenol + acetone, near-complete). The spent air is vented, and the crude is separated by boiling point (acetone 56 C < cumene 152 C < phenol 182 C < CHP): high-purity phenol, crude acetone as the co-product, and unreacted cumene recovered for recycle. HONEST SCOPE: rigorous atom-balanced reaction stoichiometry; cumene hydroperoxide is a databank pseudo-component (no CoolProp entry) flashed under Peng-Robinson. The purification is spec-based component-split separators (the Aspen 'Sep'-block technique), not rigorous columns. The acetone product comes out ~98% because residual dissolved air (O2/N2) reports overhead with it -- a real plant adds a light-ends/degassing column for polymer-grade acetone; phenol comes out essentially pure. Recovered cumene is shown as an open recycle stream.

PhenolAcetoneCumene
FEED
feed
dist
side
btms
Qc
Qr
DWC
Lights
Aromatics MID
Xylene Bottoms

Reformate splitter via dividing-wall column

A refinery catalytic-reformer stream (benzene/toluene/o-xylene plus a non-aromatic n-heptane proxy) is split into three purified aromatics cuts by a single thermally-coupled dividing-wall column instead of two ordinary columns in series — the same DWC economics as the BTX example, applied to a genuine reformate splitter duty. Dejanovic, Matijasevic, Jansen, Olujic, "Designing a Packed Dividing Wall Column for an Aromatics Processing Plant," Ind. Eng. Chem. Res. 2011, 50, 5680.

Dividing-wall columnReformateAromatics
FEED
feed
dist
btms
Qc
Qr
COL
Water Bottoms
Decanter
Butanol Product
Aqueous Reflux

Butanol/water separation via LLE-assisted distillation

Butanol and water form a heterogeneous azeotrope: overhead vapor condenses into two liquid phases (a butanol-rich organic layer and a water-rich aqueous layer). A decanter splits the condensed reflux by liquid-liquid equilibrium, returning the water-rich phase to strip more butanol while the organic phase is drawn as a near-pure butanol product — the phase split does the separating work an ordinary VLE column can't past the azeotrope. Luyben et al., Energy Fuels 2008, 22, 4249.

Heterogeneous azeotropeDecanterLLE
Ebfeed
RXN
SEP
Offgas H2
feed
dist
btms
Qc
Qr
COL
Ethylbenzene Recycle
Styrene Product

Styrene monomer via ethylbenzene dehydrogenation

Ethylbenzene dehydrogenates over an equilibrium/conversion reactor to styrene monomer plus hydrogen — the endothermic reaction that supplies the world's polystyrene/SBR-rubber feedstock. A downstream column recovers unreacted ethylbenzene overhead for recycle while polymer-grade styrene leaves the bottoms. Vasudevan design, Ind. Eng. Chem. Res. 2009, 48, 10941 (Figure 15.1).

DehydrogenationReactorStyrene
FEED
Alkrx
COOL
feed
dist
btms
Qc
Qr
Alkcol
Light ENDS
Reheat
Dehydro
SEP
Offgas H2
feed
dist
btms
Qc
Qr
Stycol
Ethylbenzene Product
Styrene Product

Integrated styrene chain: benzene to styrene monomer

The full two-step styrene chain connected as one flowsheet rather than two standalone process snippets: benzene alkylated with ethylene to ethylbenzene, purified in a recovery column, then fed directly to the dehydrogenation reactor that makes styrene monomer. The unreacted ethylbenzene the dehydrogenation column recovers is reported as its own product stream rather than recycled back onto the alkylation feed (an honest simplification — closing that loop needs a torn-recycle edge back into ALKCOL, which the plant does but this flowsheet does not).

AlkylationDehydrogenationStyrene
FEED
Solvent
feed
dist
btms
Qc
Qr
ED
CO2 Product
feed
dist
btms
Qc
Qr
SR
Ethane Product
Solvent Recovered

CO2/ethane extractive distillation with n-decane

CO2 and ethane are close-boiling (both around 195 K at 1 atm) and form a near-azeotropic VLE at NGL-processing pressures, a known problem for straight distillation in CO2-flood-associated gas and acid-gas-rich NGL streams. A heavy n-decane solvent shifts CO2's relative volatility enough to take it overhead in far fewer stages than an ordinary deethanizer would need; a second column then strips the solvent from the ethane bottoms for recycle. The extractive column runs at a moderately high reflux (R=4.5) — the operating point a genuinely close-boiling pair needs to hold a sharp CO2/ethane split with a heavy solvent — and both columns converge.

Extractive distillationCO2NGL
FEED
Chill
feed
dist
btms
Qc
Qr
Demeth
Residue GAS
NGL Product

Deep ethane recovery with propane-refrigerated feed chilling

Associated gas is chilled by an external propane refrigeration package before a demethanizer recovers ethane and heavier as NGL bottoms from a methane-rich residue gas overhead — the cryogenic-chilling role Ortloff's CCS/GSP processes play ahead of the turboexpander in a real deep-ethane-recovery plant. The mechanical refrigeration loop itself (compressor/condenser/valve) isn't separately modeled here; the chiller's duty is represented directly as the feed's cooled outlet temperature (the same honest-simplification pattern used for LNG cold-box examples elsewhere in this library).

NGL recoveryCryogenicRefrigeration
NH3 FEED
Cracker
PSA
H2 Product
TAIL GAS

Ammonia cracking + H2 purification

Green ammonia is a widely proposed hydrogen *carrier* for shipping — easier to liquefy and transport than liquid H2 itself, then cracked back to H2 at the point of use. A fixed-conversion reactor dissociates NH3 (2 NH3 -> N2 + 3 H2, endothermic, 99% conversion at a typical 600 C cracking-furnace outlet) and the cracked gas is polished by an adsorption stage to fuel-cell-grade H2. Honesty note: this models the adsorption stage as a single equilibrium Langmuir contact (competitive isotherm, H2 weakly adsorbed vs. N2/NH3 strongly adsorbed) — a real PSA's cyclic pressure-swing/purge steps aren't modeled, only the equilibrium separation a cycle is built around. A true gas-phase membrane stage was left out for the same reason: the solver's `membrane` unit op is a liquid reverse-osmosis model (osmotic-pressure driven), not a gas-permeation membrane, so it doesn't apply here.

Ammonia crackingHydrogen carrierAdsorption
Brine
DLE
Spent Brine
Eluent
Elute MIX
RO PUMP
RO
RO Permeate
BPED
Steam1
feed
steam
conc
vapor
cond
Evap1
feed
steam
conc
vapor
cond
Evap2
Evap1 Condensate
Evap2 Condensate
feed
solid
liq
Cryst
LIOH Product
Mother Liquor

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·H2O 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). Honesty note: the BPED cell still tracks only the lumped li/lioh solute pair this brine thermo package carries (no first-class Cl-/H+/OH- species), so it produces one outlet stream (the Li+ -> LiOH conversion) rather than a genuine two-compartment acid+base product split — see flowsim/solver/unitops/bped.py for the exact scope.

Direct lithium extractionBattery metalsElectrolyte thermo
Blackmass
ACID
solid
acid
PLS
residue
Leach
Residue Product
Organic FEED
feed
solv
ext
raff
SX
Impurity Extract Product
BPED
feed
solid
liq
Cryst
LIOH Crystal Product
Mother Liquor Product

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 acid_leach.py's 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 (acid_leach.py, extraction_column.py, bped.py, crystallizer.py) chained into the one train none of them had been assembled into before. Honesty notes: no acid-consumption or neutralization mass balance between the strongly-acidic leach liquor and the pH-7.5 SX stage (the pH is an operator-set circuit condition, the same simplification co-ni-solvent-extraction already makes, not a titration model); the recovered Co/Ni/Mn organic concentrate leaves as a single product stream rather than being split into separate refined metal products (a further SX/strip train, out of scope here).

Battery recyclingHydrometallurgySolvent extraction
AMD
feed
clarified
sludge
Stage1
FEAL Sludge
feed
clarified
sludge
Stage2
NIZN Sludge
Clean Water

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. Honesty notes: equilibrium Ksp precipitation at a specified pH (no self-consistent pH-from-hydrolysis), a dilute-liquor solution-volume estimate from the water flow, B-dot activity coefficients; the lime reagent and the gypsum (CaSO4) a real lime circuit also throws are not tracked as feed streams (the pH is a dosed circuit condition, matching how the plant is actually operated). Screening-grade — a process-design starting point, not a certified sludge-volume/settling deliverable.

Water treatmentHydrometallurgyPrecipitation
PW
feed
clarified
sludge
Scale
solid
liquor
over
under
Thick
Sludge
Clean Water

Produced-water scale removal: precipitation + thickener dewatering

Oilfield produced water carries the classic mineral-scale ions — barium and strontium against sulfate (barite BaSO4 / celestine SrSO4, the notorious hard sulfate scales that plug tubing and need milling to remove) plus calcium against carbonate and sulfate (calcite / gypsum). A precipitation stage throws every over-saturated scale mineral at once — the `precipitator` unit op keyed on its CRC-cited solubility-product table, with each mineral removing BOTH its metal cation and its anion from the water — and a gravity thickener then dewaters the slurry into a dense underflow sludge and a clarified overflow. The barium (the worst offender) comes out essentially completely as barite. Honesty notes: equilibrium Ksp precipitation (B-dot activity, a dilute-liquor solution-volume estimate from the water flow); the minerals precipitate in the solubility-table order, so a sulfate-limited water partitions the sulfate to the least-soluble minerals first (barite and celestine before gypsum) — the physically right ranking, but a screening equilibrium, not a kinetic scale-tendency (Oddo-Tomson / ScaleChem) index. A real scale-management study adds antiscalant dosing and induction-time kinetics; this sizes the removable inventory.

Produced waterScale removalBarite
Residue
Liquor
WASH
solid
liquor
wash
solids
liquor
CCD
Tailings
feed
clarified
sludge
Precip
CU Sludge
Raffinate

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. Honesty notes: ideal equilibrium washing (perfect mixing + constant underflow at every stage; no settling-flux / thickener-area sizing, wash-water short-circuiting or solute adsorption on the solids) and equilibrium Ksp precipitation at a dosed pH (B-dot activity, a dilute-liquor solution-volume estimate) — a screening process-design starting point, the metallurgical-balance level, not a certified settling/reagent deliverable.

HydrometallurgyCopperCCD washing
Fluegas
Scrubwater
gas
solid
liquid
gas
slurry
VS
Stack
Slurry

Flue-gas desulfurization: venturi wet scrubber

A coal/oil-fired power-plant stack gas (SO2 in a hot N2/CO2/O2/water flue) is cleaned in a high-energy venturi wet scrubber before the stack — the classic flue-gas-desulfurization (FGD) front end. The new `venturi_scrubber` unit op accelerates the gas through a throat where injected scrubbing water is atomized, and a stated fraction of the soluble SO2 is absorbed into the drops and carried out as a slurry while the cleaned gas goes up the stack. Two cited pieces are computed: the momentum-exchange pressure drop `ΔP = ρ_L·(Q_L/Q_G)·v_gt²` (Calvert 1968; de Nevers — the L/G here is ~1.4 L/m³ and the throat runs 90 m/s, giving ~11 kPa, a real high-energy venturi), and the SO2 removal (92% at this water rate) that drops the stack SO2 to a fraction of the inlet. Honesty notes: the gas absorption is a stated removal efficiency (a screening scrub — the rate-based reactive contactor with real liquid-phase alkali chemistry is the `absorber` / `rate_based_absorber`), the cut-diameter particulate physics is idle here (a gas-only feed), and ΔP assumes complete drop acceleration. A screening process-design starting point for scrubber sizing / pressure-drop budgeting, not a certified FGD performance deliverable.

Air pollution controlFlue-gas desulfurizationVenturi scrubber
Roaster GAS
Converter
Absorber
ACID Product
TAIL GAS

Sulfuric acid: catalytic SO2 oxidation (contact process)

The heart of a sulfuric-acid plant: roaster/burner gas (SO2 in excess air) is oxidized to SO3 over a vanadium-pentoxide catalyst bed, then the SO3 is absorbed to make acid. The converter is a Gibbs-minimization reactor (Aspen RGibbs equivalent) that finds the SO2 ⇌ SO3 equilibrium from first-principles formation energies — no assumed conversion — so it captures the real design tension of the contact process: the reaction SO2 + ½O2 → SO3 is exothermic, so a lower bed temperature drives the equilibrium toward SO3 (higher conversion) while a higher temperature is needed for catalyst activity. At 700 K this converts ~99% of the SO2; raise the sensitivity temperature and watch the equilibrium conversion fall — the reason real plants use multiple catalyst beds with interstage cooling. The SO3-rich gas then goes to an absorption tower (modeled as SO3 capture into the acid product, leaving a spent tail gas of N2 + excess O2). Formation-energy source: CRC Handbook / NIST-JANAF (ΔHf°/ΔGf° for SO2 and SO3). Honesty notes: the converter is isothermal at the specified bed temperature (a real adiabatic bed heats up along its length, recovered between beds — not modeled here); the final H2O + SO3 → H2SO4 absorption is a highly non-ideal exothermic step represented here as SO3 capture (the acid-forming reaction and oleum thermodynamics are not modeled), the same capture simplification the carbon-capture examples use.

Sulfuric acidContact processGibbs reactor
AIR
Ammonia
MIX
Burner
Cooler
Oxidizer
Absorber
ACID Liquor
TAIL GAS

Nitric acid: the Ostwald process (NH3 -> NO -> NO2 -> HNO3)

The three-stage industrial route to nitric acid, each stage a genuinely different reaction regime. First a catalytic burner oxidizes ammonia in air over a Pt-Rh gauze (4 NH3 + 5 O2 -> 4 NO + 6 H2O) — this is a KINETICALLY selective step, not an equilibrium one: thermodynamics actually favours N2, and only the short contact time on the hot catalyst steers it to nitric oxide, so it's modeled as a fixed-conversion reactor (a Gibbs-minimization reactor here would wrongly predict N2). The gas is cooled and the nitric oxide is oxidized to nitrogen dioxide (2 NO + O2 -> 2 NO2), an exothermic step favoured by the low temperature. Finally the NO2 is absorbed in water to form nitric acid (3 NO2 + H2O -> 2 HNO3 + NO) — modeled as NO2 + water capture into the acid liquor. Cited heats of reaction (NH3 oxidation -226.3 kJ/mol NH3; NO oxidation -57.0 kJ/mol NO). Honesty notes: the burner and NO-oxidation conversions are fixed (representative values), not solved from kinetics; the water-absorption tower is a capture simplification (the acid-forming reaction and HNO3 solution non-ideality are not modeled), the same posture the sulfuric-acid and carbon-capture examples use. The point is the contrast — one kinetically-controlled step next to two thermodynamically-favoured ones — which is exactly why a nitric-acid plant can't be modeled with equilibrium reactors throughout.

Nitric acidOstwald processAmmonia oxidation
Feedwater
PUMP
Boiler
extr
exh
Q out
Turbine
Condenser
Condensate

Rankine steam power cycle (pump -> boiler -> turbine -> condenser)

The classic steam power cycle behind most of the world's electricity, on the rigorous IAPWS-97 steam properties. Feedwater is pressurized by a boiler-feed pump, fired to superheated steam in the boiler, expanded through a steam turbine to make shaft power, then condensed back to water in the surface condenser. The four Rankine components appear in order, and the numbers are the real thermodynamic ones: at 60 bar / 500 degC steam expanding to a 0.1-bar condenser vacuum the turbine makes ~18 MW of shaft work at 85% isentropic efficiency, the exhaust leaves the turbine as wet steam (~92% quality, the classic low-pressure blade-erosion concern), the condenser rejects ~40 MW to cooling water, and the feed pump costs only ~0.15 MW (the small back-work ratio that makes the Rankine cycle practical, since pressurizing a liquid is nearly free next to expanding a gas). Cycle thermal efficiency comes out ~28%. Every property (the superheat enthalpy, the isentropic expansion endpoint, the exhaust steam quality) is the real IAPWS steam-table value, not a correlation. Honesty notes: an open (once-through) view of the cycle rather than a physically closed loop (a real plant recirculates the condensate); no reheat or feedwater regeneration stage (a single expansion, no extraction), so the efficiency is the simple ideal-cycle figure, not a supercritical/reheat station's ~45%.

Rankine cycleSteam turbinePower generation
OIL FEED
H2 Makeup
MIX
Fired Heater
HDT Reactor
Effluent Cooler
HOT HP SEP
COOL
COLD HP SEP
Amine Absorber
H2S Product
Recycle Split
Purge
Recycle COMP
Liquid MIX
Letdown
LP SEP
SOUR GAS
Strip Steam
liq
gas
gas
rich
Stripper
Stripper Overhead
Hydrotreated Diesel

Diesel hydrotreater with closed H2 recycle + amine wash

Diesel (an n-hexadecane carrier with a dibenzothiophene sulfur slice) and hydrogen react over a trickle-bed-equivalent reactor (dibenzothiophene + 3H2 -> biphenyl + H2S, the real HDS desulfurization route) after a fired-heater preheat, at a treat-gas rate of ~3 mol H2 per mol oil (~380 Nm3/m3) — the hydrogen excess that keeps the catalyst wet with H2, not the 0.09 stoichiometric need. The effluent is cooled to 520 K (a real unit's feed/effluent exchange) before the hot high-pressure separator takes the gas off; a cold separator at 290 K condenses the carried-over oil; an amine wash (a fixed-recovery separator — the same simplification the carbon-capture example uses, not a full electrolyte amine model) scrubs H2S from the recycle gas, and a compressor closes the loop with a 3% purge. The separator liquids are let down to 3 atm: a low-pressure separator flashes off the dissolved hydrogen and most of the H2S as sour gas, and a six-stage steam stripper (Kremser, ~10 mol% stripping steam) finishes the desulfurized diesel. Every hydrogen atom is accounted for: makeup = reaction consumption + purge + sour gas + stripper overhead. History, because it changed the solver: this flowsheet used to run 6 mol/s of makeup on 50 mol/s of oil. All of that hydrogen dissolved in the hot liquid, both separators produced no gas, and the recycle the stream table showed was a stale tear iterate the loop had accepted as converged — the flowsheet now clears an edge its unit did not feed, so a loop can no longer converge onto a stream it fabricated. The refluxed stripper column that fed on it, asked to hold supercritical H2S in a 600 K bottoms under a 239 K H2S reflux, lost a fifth of its hydrogen and was gated unconverged for the same reason.

HydrotreatingDesulfurizationH2 recycle
FLUE
LEAN
liq
gas
gas
rich
ABS
Treated GAS
RICH PUMP
Richhx
Stripvap
liq
gas
gas
rich
Strip
OVHD COND
Reflux DRUM
CO2 Product
Reflux Water
LEAN Regen

MEA post-combustion CO2 capture (electrolyte NRTL)

The reference amine process on the reference amine: flue gas (12% CO2 at 1.1 bar, 313 K) scrubbed with 30 wt% aqueous monoethanolamine at a lean loading of 0.20 mol CO2 per mol MEA, the rich solvent pumped and heated to 388 K, steam-stripped at 1.9 bar, and the overhead condensed at 313 K into a CO2 product and a reflux-water stream. It runs on the `enrtl` package — carbamate/bicarbonate/protonation speciation with Davies activity, the CO2 partial pressure a function of loading and temperature — which is what sets the rich loading of 0.53 mol/mol the absorber reaches and drives the stripper the other way at 390 K. What it computes: 24 mol/s of CO2 into 695 mol/s of rich solvent, a 39 mol/s CO2 product at 94 mol% after the condenser knocks out 109 mol/s of water, 3.9 MW of rich-solvent heating for 650 mol/s of circulation (the sensible-heat penalty the sensitivity sweep traces against solvent rate) and 6.8 MW of overhead condensing. Honesty notes: the absorber and stripper are Kremser stage models with the K-value taken at the entering liquid, so the absorber sees the lean-end driving force everywhere and captures essentially all of the CO2 — the 85-90% design figure of a real plant comes from the rich-end pinch and the packed height, which a stage-count shortcut does not resolve (the rate-based absorber was tried and its gas-film HTU of ~0.06 m at atmospheric pressure is not a number to show either) — and the stripper regenerates the solvent to zero loading where a real reboiled column leaves ~0.2. The loop is left open, the same simplification the mixed-amine showcase makes. Building this card also repaired the package: its (T,P) flash was a clamped split that turned a heated rich amine into pure CO2 vapour at the full solvent rate; it is now a Rachford-Rice split that conserves composition through the heater.

Carbon captureMEAAmine treating
GAS
OIL
MIX
Contact
LEAN GAS
RICH OIL

CO2 dissolution in n-decane at 60 bar (PC-SAFT)

A CO2/methane gas contacted with n-decane at 60 bar and 313 K — the screening question behind CO2-EOR injection and physical-solvent CO2 removal: how much of the gas the oil takes up, and how much heat that releases. It runs on PC-SAFT (Gross & Sadowski 2001, chain + dispersion), the molecular equation of state for exactly this combination of a supercritical light gas and a long-chain alkane. The adiabatic mixer warms from 313 to 328 K on the heat of dissolution, and the isothermal contactor at 313 K leaves 186 mol/s of loaded oil (25.5 mol% CO2, 20.6% methane) against 14 mol/s of lean gas at 82% methane: 95% of the CO2 and 77% of the methane dissolve. Building this card exposed a flowsheet defect worth knowing about: the (P,H) flash behind every adiabatic mixer verified its answer by re-solving over the whole 80-1200 K range, and a SAFT density root at 80 K returns a residual enthalpy of the wrong sign, so the mixer reported 80 K for a state that is 328 K. The verification now brackets outward from the branch solution and keeps it when no sign change exists. Still bounded: PC-SAFT's bubble-point routine puts this mixture's bubble point at 421 K while its own flash finds vapour at 300 K — the flash is right and is what the results use; the saturation routine is the documented follow-up. No binary kij beyond what the package ships.

PC-SAFTCO2 solubilityEOR
FEED
feed
dist
btms
Qc
Qr
COL
Distillate
Bottoms

Ethanol-water column at 6 atm (SRK + MHV1)

The ethanol-water column everyone knows, run at 6 atm on the Gᴱ-mixing-rule package: Soave-Redlich-Kwong whose mixture energy parameter comes from NRTL's excess Gibbs energy through the MHV1 rule (Michelsen 1990) instead of a kij — the package built for polar, hydrogen-bonding mixtures at pressure, where a γ-φ activity model is past its ~10 bar ceiling and a plain cubic with van der Waals mixing has no hydrogen bonding at all. A 10 mol% ethanol feed through 16 stages at a reflux ratio of 2.5 gives a 66.7 mol% distillate and an ethanol-free bottoms, 2.6 MW on the reboiler. Read it against NRTL, which at 6 atm is still inside its own range: the two packages put the pressure-shifted azeotrope in different places — 0.88 mol fraction ethanol here, 0.84 on NRTL at 6 atm (0.97 against 0.89 at 1 atm) — so this card shows where the MHV1 rule sits, not a number to prefer over the fitted binary at low pressure. The cut is kept well short of the azeotrope on purpose: at a distillate ratio of 0.12 the profile pinched against it and the column reported exactly that. Each solve is about a minute, because every stage K-value is a Gᴱ mixing-rule evaluation.

DistillationGᴱ mixing ruleMHV1
GAS
LEAN
liq
gas
gas
rich
ABS
Treated GAS
Letdown
Richhx
Stripvap
liq
gas
gas
rich
Strip
OVHD COND
Reflux DRUM
CO2 Product
Reflux Water
LEAN Regen

AMP post-combustion CO2 capture (hindered amine)

The MEA capture loop run on 2-amino-2-methyl-1-propanol: the same flue gas (12% CO2 at 1.1 bar), 30 wt% AMP (8 mol%) at a lean loading of 0.10, steam stripping at 1.9 bar and an overhead condenser. AMP is sterically hindered — its carbamate is unstable, so CO2 goes to bicarbonate and one mole of amine can carry one mole of CO2 where MEA's carbamate stoichiometry stops at half — and the `enrtl-amp` package's speciation reproduces that: the rich loading comes out at 0.70 mol/mol against the MEA card's 0.53, so 500 mol/s of solvent does what 650 mol/s of MEA did, with 3.1 MW on the rich heater instead of 3.9. The CO2 product is 27.7 mol/s at 93 mol%. Same honesty notes as the MEA card: Kremser stage models, K at the entering liquid, loop open, regeneration to zero loading. The AMP constants are screening-grade (see flowsim/solver/thermo/enrtl.py); the trend against MEA is the physics, the third digit is not.

Carbon captureAMPHindered amine
GAS
LEAN
liq
gas
gas
rich
ABS
Treated GAS
Letdown
Richhx
Stripvap
liq
gas
gas
rich
Strip
OVHD COND
Reflux DRUM
CO2 Product
Reflux Water
LEAN Regen

DEA natural-gas sweetening at 50 bar

A high-pressure gas-treating unit on diethanolamine, the canonical secondary amine: 100 mol/s of 5% CO2 natural gas at 50 bar and 313 K against 200 mol/s of 25 wt% DEA (5.4 mol%), the rich amine let down to 1.8 bar, heated to 388 K and steam stripped, the overhead condensed. The `enrtl-dea` package carries DEA's cited protonation anchor (pKa 8.9) with a screening-grade carbamate constant. What it computes: a treated gas that is pure methane, a rich loading of 0.52 mol/mol — right at the carbamate ceiling of a secondary amine — a 5.1 mol/s CO2 product at 89 mol% (the rest methane co-absorbed at 50 bar and water), 1.2 MW on the rich heater. Same model bounds as the MEA card: Kremser stages with the K at the entering liquid, open loop, regeneration to zero loading.

Gas sweeteningDEAAmine treating
GAS
LEAN
liq
gas
gas
rich
ABS
Treated GAS
Letdown
Richhx
Stripvap
liq
gas
gas
rich
Strip
OVHD COND
Reflux DRUM
CO2 Product
Reflux Water
LEAN Regen

MDEA bulk CO2 removal from shifted syngas

Bulk CO2 removal ahead of a hydrogen or ammonia unit on N-methyldiethanolamine, the tertiary amine that forms no carbamate and so carries up to one mole of CO2 per mole as bicarbonate: 200 mol/s of shifted syngas (18% CO2, 70% H2) at 30 bar against 450 mol/s of 45 wt% MDEA (11 mol%), regenerated at 1.8 bar with steam. The `enrtl-mdea` package uses the proton-acceptor speciation only. What it computes: the treated syngas at 85% H2 / 12% CO with the CO2 gone, a rich loading of 0.75 mol/mol, a 37 mol/s CO2 product at 94 mol% and 2.7 MW on the rich heater. Bounds: Kremser stages (the K at the entering liquid, so the absorber captures to completion where a real MDEA absorber is kinetically slow and leaves a slip), open loop, and the loading model caps at 0.99 — the solvent rate is set so the rich end stays well below it, because past the cap the model keeps absorbing.

CO2 removalMDEASyngas
FEED
Devol
Vapor
Polymer

Polystyrene devolatilization, two solvents (Sanchez-Lacombe)

A solution-polymerized polystyrene (100 kg/mol) carried in toluene and benzene, flashed at 480 K and 0.2 atm to strip the solvent — the multi-solvent case the Flory-Huggins package cannot take (one polymer, one solvent) and the reason the Sanchez-Lacombe lattice-fluid equation of state is in the tree. Characteristic parameters are the published ones: polystyrene T* 735 K, P* 357 MPa, rho* 1105 kg/m3; toluene 543 K, 402 MPa, 966 kg/m3; benzene 523 K, 444 MPa, 994 kg/m3 (Sanchez & Lacombe, J. Phys. Chem. 80 (1976) 2352 and Macromolecules 11 (1978) 1145), with the segment number r from M P*/(R T* rho*). What it computes: 94% of the feed moles leave overhead as solvent vapour and the melt retains 0.16 wt% residual solvent — read it on mass, not moles, since a 100 kg/mol chain is one mole against 0.09 kg/mol solvents. No binary k_ij (none is published for this pair); a single equilibrium stage, no diffusion-limited devolatilization kinetics.

PolymerDevolatilizationSanchez-Lacombe
Syngas
LEAN MEOH
liq
gas
gas
rich
ABS
Treated
Letdown
Flash Regen
CO2 Offgas
Regen MEOH

Cold-methanol CO2 absorption at 30 bar (SRK + Huron-Vidal)

The Rectisol idea — CO2 dissolves strongly in methanol at -35 C and 30 bar while methane does not — on the one Gᴱ-mixing package whose parameters were regressed for the rule: SRK with Huron-Vidal mixing driven by Equinor NeqSim's Apache-2.0 set (methanol/CO2, methanol/methane fitted at infinite pressure), not by the low-pressure NRTL binaries the other Gᴱ packages borrow. 100 mol/s of 30% CO2 gas against 150 mol/s of cold methanol: the treated gas comes out at 99.9% methane with 0.08% CO2, the rich methanol holds 17 mol% CO2, and a first-stage flash to 2 bar releases 6.3 mol/s of 97% CO2 — a real Rectisol regenerates in several flash stages plus stripping, which is why this solvent still carries 14% CO2. K-values on the package: CO2 0.60 at 238 K against plain SRK's 1.64 (the mixing rule is the whole difference), methane 3100. Two things worth knowing: this card found and fixed a defect in every cubic package — the K-value refinement collapsed onto the trivial solution (K = 1 for everything) when a gas was seeded at the 1e-4 placeholder the Kremser absorber uses, and that K sent 27 mol/s of methane into the solvent; the refinement now retries from the lightest component's own vapour, the way a stability analysis does (flowsim/solver/thermo/cubic_kvalues.py). The lean methanol still carries the 0.1% dissolved methane a flash-regenerated solvent really has. And the absorber is a Kremser stage model at the mean of the two inlet temperatures.

Physical solventRectisolHuron-Vidal
FEED
feed
dist
btms
Qc
Qr
COL
Distillate
Bottoms

Methanol-water column at 10 atm (PR + Huron-Vidal)

A methanol-water column at 10 atm on Peng-Robinson with the original Huron-Vidal (1979) infinite-pressure Gᴱ mixing rule, driven by the fitted methanol/water NRTL binary. 30 mol% feed, 16 stages, reflux 2, 30% distillate: 96.2 mol% methanol overhead, 1.6% in the bottoms, 3.4 MW on the reboiler at 452 K. The point is the pressure: at 10 atm a gamma-phi activity model is at the edge of its ~10 bar envelope, and a cubic with a Gᴱ rule carries no such ceiling. Bound, as the package's own description says: Huron-Vidal wants activity parameters regressed at infinite pressure, and these are the low-pressure DECHEMA ones, so treat the split as the rule's reading of that binary rather than a validated high-pressure number (the SRK + NeqSim card is the one with parameters fitted for the rule).

DistillationHuron-VidalGᴱ mixing rule
FEED
feed
dist
btms
Qc
Qr
COL
Distillate
Bottoms

Acetone-water column at 3 atm (PR + Wong-Sandler)

An acetone recovery column at 3 atm on Peng-Robinson with the Wong-Sandler mixing rule — the one Gᴱ rule that keeps the quadratic composition dependence of the second virial coefficient, so it stays thermodynamically consistent at high pressure. 20 mol% acetone feed, 14 stages, reflux 2, 25% distillate: 80 mol% acetone overhead and acetone-free water in the bottoms, 2.65 MW on the reboiler. The cut is set at 0.25 rather than the feed's exact acetone fraction of 0.20, which pinned the column on a razor edge (temperature residual 2e-3, balance 3%); at 0.25 it closes to zero. Bound: the rule is driven by the low-pressure acetone/water NRTL binary and, as flowsim/solver/thermo/ge_params_neqsim.py records, NeqSim's Wong-Sandler kij is deliberately not wired in, so the second-virial cross term uses the van der Waals kij.

DistillationWong-SandlerGᴱ mixing rule
WELL
HP SEP
HP GAS
V1
MP SEP
MP GAS
V2
LP SEP
LP GAS
Condensate

Three-stage condensate stabilization (Soave-Redlich-Kwong)

Wellhead fluid at 60 bar and 320 K — 60% methane with ethane through n-hexane — through a high-pressure separator, a letdown to 15 bar and an adiabatic medium-pressure separator, then to 2 bar and a low-pressure separator, on plain SRK with its shipped kij: the workhorse cubic for hydrocarbons, exactly where it is meant to be used. What it computes: 69 mol/s of HP gas at 76% methane, 10 mol/s of MP flash gas, 5 mol/s of LP gas rich in propane and butane, and 15.9 mol/s of stabilized condensate carrying 0.2% methane and 2.2% ethane — the light ends that would otherwise vent from a tank. The Joule-Thomson cooling across each valve is the model's, not an input: 320 to 304 K at the first letdown, 280 K at the second. No honesty note needed here beyond the obvious: a real stabilizer would reboil the last stage.

SeparatorsCondensate stabilizationSRK
FEED
feed
dist
btms
Qc
Qr
COL
Distillate
Bottoms

n-Hexane / 1-butanol column with no fitted binary (UNIFAC)

A binary the databank has no regressed NRTL parameters for, so the column runs on predictive original UNIFAC from the two molecules' groups alone: 50/50 n-hexane and 1-butanol, 20 stages, reflux 2, 45% distillate. UNIFAC predicts the minimum-boiling azeotrope at 97 mol% hexane and 341.7 K, and the column lands its distillate exactly there (96.7%) with an 88% butanol bottoms — the azeotrope, not the stage count, is what caps the overhead purity, and that is a prediction from group contributions with no data on this pair behind it. Read it as a screening result: original UNIFAC's mean error against fitted binaries in this tree is 0.08 in ln gamma, and an alkane/alcohol pair is in its well-behaved range.

DistillationUNIFACPredictive
FEED
feed
dist
btms
Qc
Qr
COL
Distillate
Bottoms

Toluene removal from 1-butanol solvent (modified UNIFAC, Dortmund)

A recovered 1-butanol solvent contaminated with 5 mol% toluene, redistilled to send the toluene overhead: 24 stages, reflux 3, an 8% distillate. There is no fitted toluene/1-butanol binary, so this runs on modified UNIFAC (Dortmund) — the variant that cuts infinite-dilution error from 42% to 16% in this tree, and a dilute contaminant in a solvent is exactly the infinite-dilution regime. Dortmund puts the toluene/butanol azeotrope at 67 mol% toluene (original UNIFAC: 70%), which is why the overhead comes out at 43% toluene rather than pure, and the bottoms at 1.7% toluene — two-thirds of the contaminant removed per pass. The 3-point azeotrope difference between the two variants is the size of the model choice on this pair.

DistillationUNIFAC DortmundInfinite dilution
FEED
feed
dist
btms
Qc
Qr
COL
Distillate
Bottoms

Ethanol-water rectifier (UNIQUAC)

The ethanol-water rectifier on UNIQUAC — Abrams and Prausnitz's local-composition model with its surface and volume parameters, here on the one binary the package carries regressed parameters for (every other pair falls back to UNIFAC, which the package description says). 30 mol% feed, 20 stages, reflux 2.5, 40% distillate: 75 mol% ethanol overhead and ethanol-free water in the bottoms at 5.7 MW. The cut is kept at 0.40 on purpose: at 0.32 the spec asked for a 94% distillate past the 89.4% azeotrope and the column reported exactly that, and at 0.36 it pinched a hair short of it (balance 5e-3). Compare with the same column on NRTL and Wilson to see how much three regressed models agree on one well-measured pair — a few tenths of a percent in the distillate.

DistillationUNIQUACEthanol
FEED
feed
dist
btms
Qc
Qr
COL
Distillate
Bottoms

Beer column: 8% ethanol to 53% (Wilson)

The first column of a distillery on the Wilson equation — the oldest local-composition model, fine for a fully miscible pair like ethanol-water and unable by construction to represent a liquid-liquid split, which is why it is offered for this pair and not as a default. An 8 mol% fermenter beer, 12 stages with the feed near the top (stage 3) as a beer column is run, reflux 1, 15% distillate: 53 mol% ethanol overhead and a stillage bottoms with no ethanol left, 1.37 MW on the reboiler for 100 mol/s of beer. Ethanol-water is the one binary the package carries regressed Wilson parameters for; everything else falls back to UNIFAC.

DistillationWilsonEthanol
FEED
HEAT
DRUM
Vapor
Liquid

Ethanol-water heat-and-flash (Van Laar)

The simplest separation there is, on the simplest activity model that still gets a non-ideal pair right: a 40 mol% ethanol-water stream heated to 356 K at 1 atm and flashed adiabatically, on the two-constant Van Laar equation — the oldest of the family, temperature-independent, cheap to fit from a single azeotrope point. What it computes: 55% of the feed vaporizes at 356 K, the vapour at 54 mol% ethanol against 22% left in the liquid, on 2.75 MW of preheat. Ethanol-water is the one pair the package carries regressed constants for; other pairs fall back to UNIFAC.

FlashVan LaarEthanol
WELL
HP SEP
GAS
OIL

Methane / n-decane high-pressure separator (SAFT-VR Mie)

A 60/40 methane / n-decane well fluid at 60 bar and 320 K through one high-pressure separator, on SAFT-VR Mie (Lafitte et al. 2013): the full Mie-segment perturbation theory — a1/a2/a3 monomer terms plus the TPT1 chain — with cited pure-component parameters and no binary correction. What it computes: 49 mol/s of gas at 99.9% methane and 51 mol/s of oil holding 22 mol% dissolved methane, the K-values 3.9 for methane and 0.001 for decane. Two components and one flash on purpose: this package costs 7.5 s per flash here and 40 s per flash with four components, so a separator train on it does not belong on a gallery card (one was killed after 15 minutes). Non-associating fluids only — no water, no alcohols — which is the package's own stated scope.

SAFT-VR MieSeparatorHigh pressure
MCH FEED
MIX
Preheater
Dehydro Reactor
GAS LIQ SEP
H2 Product
feed
dist
btms
Qc
Qr
Toluene Column
Toluene Product

LOHC hydrogen release (methylcyclohexane dehydrogenation)

A liquid organic hydrogen carrier (LOHC) power train: methylcyclohexane (MCH) is preheated and catalytically dehydrogenated (MCH -> toluene + 3H2, endothermic, equilibrium-limited to ~90% single-pass conversion) to release hydrogen for downstream power generation. A flash drum separates the H2-rich gas from the liquid; a distillation column then recovers the unreacted MCH overhead and recycles it to the reactor feed, closing a real tight liquid recycle loop, while spent toluene leaves the bottoms (to be re-hydrogenated back to MCH off-site, closing the supply-chain loop — out of scope for this dehydrogenation-side flowsheet). Screening-fidelity note: MCH and toluene are genuinely close-boiling (relative volatility ~1.4 under this thermo package at column conditions), so the recycle carries real toluene along with the recovered MCH rather than a sharp cut — a production column would use more stages to purify it further; this shows the recycle topology and its convergence, not an optimized column design.

LOHCHydrogen carrierDehydrogenation
Ngfeed
ACID GAS Removal
CO2 VENT
MOL Sieve Dehydration
Water OUT
1
2
3
4
5
6
1
2
3
4
5
6
E1
K1W
AC1W
Exp1w
K1C
AC1C
Exp1c
1
2
3
4
5
6
1
2
3
4
5
6
MCHE
JTN
DRUM
LNG
BOG

FLNG dual N2-expander liquefaction

A reverse-Brayton (turboexpander, not vapor-compression) liquefaction train — the compact, offshore-friendly FLNG alternative to mixed-refrigerant cycles like C3MR. Natural gas is acid-gas-scrubbed and mol-sieve-dried (fixed-recovery separators, the same simplification the existing carbon-capture example uses for amine treating), then cooled in two cascaded closed nitrogen loops: a warm loop precools the gas and the cold loop's own N2 charge, and a cold loop finishes the liquefaction to ~113 K in a main cryogenic multi-stream exchanger. Both loops are pure compressor + turboexpander cycles — no phase change in the refrigerant, no JT valves — the real differentiator from every other LNG example here. Single precool level and a single MCHE bundle (a real train uses more); refrigerant charges are set via tear_specs.

FLNGLNGNitrogen expander
AIR FEED
FAN
Contactor
AIR VENT
CO2 TO Causticization
Pellet FEED
feed
gas
solid
Calciner
LIME Product
CO2 Cooler
CO2 Compressor
CO2 Refrigerant
Liquid CO2 Product

Direct air capture with solid-sorbent calcination + CO2 liquefaction

A Carbon Engineering-style DAC train: a fan draws ambient air (400 ppm CO2) through a liquid-KOH contactor (a fixed-recovery separator — the same simplification the existing carbon-capture example uses for chemical absorption, since no CO2-KOH electrolyte package exists) capturing ~75% of the CO2. The captured CO2 is causticized and precipitated into CaCO3 pellets by the real (unmodeled-in-detail) KOH/Ca(OH)2 loop — represented here as a matched pellet feed sized to the captured CO2 rate, since the generic reactor unit op can't itself produce a solid product (only a rotary kiln's decomposition path can, which is exactly what's used next). Those pellets calcine at ~977 degC in an indirectly-heated rotary kiln (real Arrhenius decomposition kinetics, Sullivan-Maynard-Valentine residence time), releasing pure CO2 that's compressed to ~20 atm and chilled to 250 K — above the real Span-Wagner CO2 saturation pressure at that temperature, so the solved outlet stream is genuine subcooled LIQUID CO2 (not just dense-phase pipeline gas) — while the CaO leaves for slaking and reuse (the lime side of the closed loop, out of scope for the same reason as the causticization step). Run the Carbon Footprint report on this example for the real Scope 1/2/3 CO2e + carbon-tax liability breakdown already built into this codebase's report generator.

Direct air captureCalcinationRotary kiln
AIR FEED
FAN
Contactor
AIR VENT
Loaded Sorbent FEED
CO2 Sweep FEED
feed
gas
solid
Desorber
Regenerated Sorbent Product
CO2 Compressor
Utility Water FEED
hot
cold
hot
cold
Q out
HEAT Recovery HX
Recovered HEAT Water Product
CO2 Refrigerant
Liquid CO2 Product

Solid-sorbent fluidized-bed DAC with compression heat recovery

A second, lower-temperature DAC pathway alongside the liquid-KOH + rotary-kiln example: the captured CO2 loads onto a solid sorbent, which regenerates in an indirectly-heated fluidized bed (real Wen-Yu minimum-fluidization sizing + Arrhenius desorption kinetics, unitops/solids.py's FluidizedBed) at 120 degC -- the real low-temperature regime solid amine/physisorbent DAC sorbents actually use, versus the other example's ~977 degC calcination. The bed is fluidized by a recycled CO2 sweep (self-sweep with product gas, a real design choice that sidesteps needing a steam-condensate knockout step). The desorbed CO2 is compressed toward liquefaction pressure in one adiabatic stage -- hot enough (~780 K discharge) that routing it through a heat exchanger against process utility water genuinely converts that water from subcooled liquid to a boiling mixed-phase stream before the CO2 continues on to the same real liquefaction physics as the other DAC example. Honesty note: this recovers real compression waste heat into a genuinely useful utility stream (the actual mechanical-vapor-recompression principle -- reusing a compressor's own heat instead of rejecting it to cooling water) but does NOT feed that heat back into the fluidized bed's own desorption duty, which this unit op takes as a fixed wall-temperature parameter, not a second heating-utility stream -- a literal closed MVR loop onto the desorber itself isn't wireable with this unit op as built.

Direct air captureFluidized bedHeat recovery
FEED
Ester Reactor
feed
dist
btms
Qc
Qr
Vacuum Column
Lights Product
Methyl Lactate Product

Patent benchmark: methyl lactate synthesis (CN104628563A)

Real patent replication, not an invented process: CN104628563A's acid-catalyzed lactate-ester route -- lactic acid esterified with excess methanol, then purified by vacuum distillation -- reproduced here as a continuous flowsheet. The patent's own worked methyl-lactate example reports 98.8% esterification conversion and 99.6% product purity at 120 degC/3h. This flowsheet's reactor conversion is set directly to the patent's reported 98.8% (not fitted); the vacuum column (0.2 atm, matching the patent's vacuum-distillation purification step) then splits the methanol and reaction water off the ester completely -- zero methyl lactate leaves overhead -- and delivers 97.8 mol% methyl lactate in the bottoms at 389.9 K. The property method is the whole story here, exactly as it was on the sulfolane extractive column. Written on Peng-Robinson, this example did not converge at all: every pair in a methanol / water / lactic-acid / methyl-lactate mixture is hydrogen-bonding, which van der Waals mixing cannot represent, and the column returned a partial profile carrying 2.60 mol/s of methyl lactate out of a column fed 1.98 -- 32% more product than the reactor made, a 0.26 component-balance residual. (That wrong profile is where this example's previously-published 98.75% purity was read from; the number was retracted at the test level and is now corrected here.) A plain activity model cannot be used either, for a data reason rather than a physics one: neither lactic acid nor methyl lactate carries a regressed ideal-gas-Cp correlation, and the gamma-phi enthalpy path raises on that where a cubic quietly falls back to a corresponding-states estimate. PSRK is a cubic whose mixing is driven by UNIFAC, so it has both -- and it converges to a 2.7e-06 component-balance residual, with methyl lactate and lactic acid each leaving in exactly the amount the reactor made. Honesty note: the 2.2 mol% of the product that is not methyl lactate is arithmetic, not an unconverged residual, and it splits cleanly in two. 1.19 points of it is unreacted lactic acid, and that part is structural -- at the patent's own 98.8% conversion 1.2% of the feed acid survives, and lactic acid boils *above* methyl lactate (505 K vs 418 K), so it leaves with the product in the bottoms. No lights-removal column rejects it at any stage count; the patent's 99.6% needs a second product column or an acid recycle, and this flowsheet has neither. The other 0.99 points is the deliberate light-cut margin: methanol plus reaction water is exactly 0.800 of the feed, and this column takes 0.798, leaving 1% of the light cut in the bottoms rather than specifying a perfect split no finite column can deliver. Raising the stage count does not move either number -- 10 and 12 stages were both measured and return the same 97.82%, because the ester/lights split is already complete at 8. See the Patent Benchmarks docs page for the full validation table and citation.

Patent benchmarkEsterificationVacuum distillation
GAS FEED
Medium FEED
gas
medium
off-gas
broth
Fermenter
OFF GAS Product
Broth Product

Patent benchmark: gas fermentation to single-cell protein (JP2024028821A)

The gas-fermentation process class JP2024028821A describes: hydrogen-oxidizing chemolithoautotrophic bacteria (the patent names Cupriavidus necator and Rhodococcus opacus strains) fixing CO2 using H2 as the electron donor to grow single-cell protein biomass. Built here with real physics closing two genuine gaps this session's fact-check found missing: gas-liquid mass transfer (Henry's-law dissolution + a volumetric kLa driving the H2 dissolution rate) and chemolithoautotrophic growth stoichiometry (McCarty's electron-balance method combining the H2-oxidation, O2-reduction, and C5H7O2N cell-synthesis half-reactions) -- not a Monod-on-dissolved-substrate shortcut repurposed for a gas feed. Honesty note, stated plainly: JP2024028821A is a prophetic patent with zero disclosed numerical yields, rates, or operating conditions, so unlike the methyl-lactate benchmark, there is no published number here to validate against -- this demonstrates the real capability (a genuinely mass-transfer-limited fermenter, exactly the regime a real gas-fermentation plant is designed around) rather than replicating a claimed result. The reactor's kLa and Henry's-law constant are illustrative order-of-magnitude values (a real design would fit kLa to measured aeration/agitation data), and the synthesis electron fraction fs=0.4 sits in the literature-typical 0.3-0.6 range for aerobic hydrogen-oxidizing bacteria.

Patent benchmarkGas fermentationChemolithoautotroph
CBGA FEED
Synthase Reactor
Cannabinoid Product

Patent benchmark: enzymatic cannabinoid synthesis (US9359625B2)

Real patent replication: US9359625B2's THCA-synthase-catalyzed conversion of cannabigerolic acid (CBGA) into either THCA or CBCA depending on operating pH -- closing the genuine enzyme-kinetics gap this session's fact-check found (only Monod biomass-growth kinetics existed anywhere in this codebase, no Michaelis-Menten). The patent's own disclosed pH-selectivity data anchors this model: it reports 'catalysis at a lower pH... favored THCA... while... neutral pH... favored CBCA,' a ~10:1 THCA:CBCA ratio at pH 5.0, and CBCA dominant at pH 7.0 -- fit here as a single-ionizable-group pH-titration switch (pKa_switch=6.0), which reproduces the reported 10:1 ratio at pH 5.0 exactly (that's how pKa_switch was chosen) and gives ~10:1 CBCA:THCA at pH 7.0 (matching the patent's 'CBCA exclusively' qualitatively, not to an exact published ratio, since the patent gives no numeric ratio at pH 7.0 to match). Reactor volume is sized to clear the patent's own disclosed '>20% conversion' commercial threshold (reaches ~25.0% here). Honesty note: the patent discloses no Km/kcat, so Vmax/Km are illustrative screening values consistent with the reported conversion/selectivity, not independently measured enzyme kinetics -- see the Patent Benchmarks docs page.

Patent benchmarkEnzyme kineticsMichaelis-Menten
C3 FEED
H2 FEED
MIX
Hydrogenate Propyne
Hydrogenate Propadiene
Purified C3 Product

Patent benchmark: selective C3 diene/acetylene hydrogenation (US6495732B1)

Real patent replication: US6495732B1's palladium-catalyzed selective hydrogenation of a cracked-gas C3 stream, removing methylacetylene (propyne) and propadiene down to trace levels while leaving propylene and propane untouched -- the patent's own Example 1 feed (82.7 mol% propylene, 2.37% methylacetylene, 1.30% propadiene) reacted here to '>99.5% removal of both dienes/acetylenes, no propylene-to-propane over-hydrogenation' (propane's mole fraction is unchanged before/after -- the actual selectivity claim the patent is about). Honesty note: the patent discloses conversions/selectivity at specific pilot conditions but no PdO-catalyst rate constants to derive kinetics from, and its real design runs the catalyst as reactive-distillation packing inside one column rather than a separate reactor -- this flowsheet uses two fitted-conversion reactors (conversion set to match the patent's own '95-100%' and 'essentially all... removed' language, not independently measured) ahead of the column, a legitimate simplification of the topology, not the kinetics.

Patent benchmarkSelective hydrogenationCatalytic
NB FEED
H2 FEED
MIX
RX
Hpsep
H2 VENT
Vflash
Water OVHD
Aniline Product

Aniline via nitrobenzene hydrogenation

Vapor-phase catalytic hydrogenation of nitrobenzene (C6H5NO2 + 3H2 -> C6H5NH2 + 2H2O, highly exothermic) with excess hydrogen, a high-pressure flash recovering unreacted H2 as a recycle vent, then a reduced-pressure flash stripping residual water from the crude aniline. Honesty notes: the reactor is a stoichiometric conversion model (98%), not a nitrobenzene-specific rate law — this solver has no curated hydrogenation kinetics for this reaction. The final aniline/water cut is a single-stage flash, not a multi-tray column: aniline and water are a genuinely non-ideal, partially-miscible pair, and this solver's UNIFAC-based decanter (the tool built for exactly that miscibility gap) doesn't have nitrobenzene's group decomposition, so a real plant's decant-then-distill sequence isn't fully modeled here.

HydrogenationExothermic reactionGas recycle
FEED
Expander
Cool1
Flash1
Cool2
Flash2
Crude HE
Condensate
NRU
N2 Product
Sales GAS

Cryogenic helium recovery / nitrogen rejection

A helium-rich natural gas is let down through a real isentropic turboexpander, then cascaded through two cryogenic flash stages (125 K, then 105 K) that progressively concentrate helium in the vapor while methane and nitrogen condense out. Honesty note: helium's near-infinite K-value at these conditions is numerically pathological for this solver's rigorous multi-stage column MESH (verified: even a trace of helium in a column feed reliably crashes or hangs the inside-out/Newton solvers) — so the methane/nitrogen split is modeled as a shortcut recovery-fraction separator, not a tray-by-tray column, and helium enrichment comes from cascaded flash equilibrium alone, not a true nitrogen-rejection distillation column.

CryogenicsHeliumNitrogen rejection
Waste FEED
Sulfolane FEED
feed
dist
btms
Qc
Qr
Extcol
IPA Product
feed
dist
btms
Qc
Qr
Stripper
Water OVHD
Sulfolane Recovered

Waste solvent recovery — extractive distillation (IPA/water)

A pharmaceutical waste isopropanol/water stream (near the ~68 mol% IPA azeotrope) is fed to an extractive column with a high-boiling entrainer feeding in a few stages above it; a second column strips the entrainer back out of the bottoms for reuse. Honesty note: the brief's original entrainer, DMSO, doesn't have a pinned NRTL isopropanol binary in this codebase's databank (only DMSO-water is pinned), so this uses sulfolane instead — a real, industrially-standard extractive/physical solvent with a genuine pinned NRTL isopropanol binary. At this stage count and solvent-to-feed ratio the entrainer effect is real but modest (overhead reaches ~82 mol% IPA, up from the 68% feed) — a sharper, near-anhydrous cut would need more stages/reflux or a higher solvent ratio than what this session verified converges reliably.

Extractive distillationSolvent recoveryAzeotrope
ETOH FEED
Dehydrate
WSEP
Water Byproduct
Oligomerize
H2 FEED
MIX
Hydrogenate
Fractionate
Light ENDS
SAF Product

Sustainable Aviation Fuel via Alcohol-to-Jet

Bio-ethanol is catalytically dehydrated to ethylene, oligomerized toward a decene-range olefin, then hydrogenated to n-decane — a real synthetic paraffin in the SAF/jet-range carbon-number band. Honesty note: all three reaction steps are stoichiometric conversion models (this solver has no ethanol-dehydration, oligomerization, or hydrogenation kinetics specific to these catalysts), and the oligomerization step is lumped to a single representative product (1-decene, 5 C2H4 -> C10H20) rather than the real broad C4-C16+ olefin distribution a real oligomerization catalyst produces. The final flash is a light-ends/product split, not a full multi-cut fractionation into light-ends/SAF/diesel bands (this build only makes one heavy product, so there's nothing yet to fractionate into separate SAF and diesel cuts).

SAFAlcohol-to-JetEthanol dehydration
Limestone FEED
feed
gas
solid
KILN
Clinker
Cool1
Knockout
Condensate
CO2 COMP
Cool2
Liquefy
VENT GAS
Liquid CO2

Cement kiln calcination + CO2 liquefaction

Preheated limestone (CaCO3) enters an indirectly-heated rotary kiln that calcines it toward CaO, releasing a CO2-rich off-gas; the gas passes a knockout drum, then is compressed and cooled to liquefy the CO2 for transport/storage. Honesty notes: (0) the off-gas is modelled **dry**, so that knockout drum passes it through unchanged rather than condensing anything. A real raw meal carries free moisture, but this flowsheet runs on NRTL, which has no CO2 group decomposition and cannot flash a CO2/water mixture at all — the drum marks where moisture removal belongs, it is not a stage that does work here. notes: (1) this specific kiln model (`rotary_kiln`) heats via an indirect utility-temperature wall duty (an NTU model), not a simulated internal flame, so no combustion stoichiometry runs inside it here — real oxy-fuel combustion IS modeled elsewhere in this codebase (`fired_heater`'s `oxidant="oxy_co2"` mode: near-pure-O2 combustion diluted by a recycled-CO2 stream instead of air's nitrogen), see `allam-fetvedt-cycle` for a real working example of it; (2) the calcination conversion shown (~21%) is the real, kinetically-limited result of this model's validated Arrhenius parameters at this residence time/temperature, not a claim of complete calcination — a real cement plant's preheater-tower-plus-kiln train achieves far higher calcination degree than one rotary-kiln unit alone models here; (3) CO2 must be compressed above roughly 5.2 atm before it can be liquefied by cooling at all (it has no liquid phase at 1 atm at any temperature), which the compressor stage here reflects.

CementCalcinationRotary kiln
FEED
feed
dist
side
btms
Qc
Qr
DWC
C2
C3
C4

NGL fractionation: single-shell Petlyuk dividing-wall column

A natural-gas-liquids cut (ethane / propane / n-butane) split into three on-spec products by ONE thermally-coupled dividing-wall column instead of two columns in series. This uses the native Petlyuk unit op: a prefractionator whose reflux and boilup are supplied by the main column (the single condenser + single reboiler), solved by an outer Wegstein loop that converges the bidirectional vapor/liquid coupling to self-consistency — the coupling legacy sequential-modular solvers approximate with two connected columns whose recycle fails to converge. Honesty note: the vapor-split and liquid-split ratios are specified inputs (not solved from tray hydraulics), and this is an outer-loop coupling of two rigorous MESH sub-solves, not a single monolithic Petlyuk MESH.

Dividing-wall columnPetlyukNGL fractionation
Medium
PERF
Harvest
Bleed

Perfusion bioreactor: continuous mAb culture with cell retention

A continuous mammalian culture run in perfusion — fresh medium is exchanged continuously while an ATF/TFF device retains the cells, and density is set by a deliberate bleed rather than by the medium-exchange rate. That decoupling is the whole point, and it is what an ordinary chemostat cannot represent: at steady state the cell balance pins mu - mu_d to the cell-specific removal rate D_eff = D[phi + (1-phi)(1-R)], not to the dilution rate, so this culture holds roughly ten times the cell density the same feed would support in a chemostat. Lactate accumulates and inhibits growth, cells die at a basal rate (so the reported viability is below 100%), and the secreted antibody follows Luedeking-Piret kinetics — leaving in the cell-free harvest while the bleed carries the cells away. Set retention to 0.0 and this collapses exactly to the plain chemostat the 'bioreactor' example shows. Honesty note: screening fidelity — the kinetic constants are illustrative rather than a regressed cell-line parameter set (no such databank ships with the kernel, deliberately); the model is isothermal, the retention device is a single efficiency number rather than a filter model (no fouling or sieving curve), and dissolved oxygen and pH are folded into mu_max rather than modelled.

PerfusionCell retentionMonoclonal antibody
Medium
PERF
UFDF
DRUG Substance
Permeate
Bleed

Continuous mAb: perfusion bioreactor into TFF concentration

The upstream and downstream halves of a biologics process on one canvas. A perfusion bioreactor produces a cell-free harvest, and the antibody in it is then concentrated by tangential-flow filtration — the step every biologics process ends with. **The membrane is a per-species rejection**, which is what makes UF/DF a genuine steady-state unit rather than something that has to be pretended into one: the antibody is fully retained while the spent substrate and lactate pass freely into the permeate. The split is not asserted — it follows from the concentration target, and the flux the membrane can actually deliver at the resulting wall concentration is what sets the area. The polarization is the point. Retained protein piles up at the membrane wall far above the bulk, and it is the *wall* concentration that sets the osmotic back-pressure — which is why ultrafiltration flux plateaus with pressure instead of rising with it, and why a specified-recovery membrane model cannot represent this step at all. Bounded, and inherited from the underlying model: no fouling or time-dependent resistance growth, and the virial coefficients that set a protein's osmotic pressure are caller inputs because they are measured per protein per formulation — no protein databank ships with this.

BiologicsPerfusionTFF
FEED
Desorbent
feed
eluent
extract
raff
SMB
Extract
Raffinate

Chiral API purification: continuous SMB chromatography

A racemic active pharmaceutical ingredient (R/S enantiomers, dilute in ethanol eluent) is resolved continuously by simulated moving bed chromatography — the workhorse of chiral-drug manufacture that legacy steady-state flowsheet simulators have no native model for (engineers script it in MATLAB). This uses the native SMB unit op, which solves the standard steady-state True Moving Bed equivalent: a 4-zone counter-current equilibrium-stage cascade whose zone flow-rate ratios sit inside the triangle-theory separation region, so the more-retained enantiomer reports to the extract and the other to the raffinate — the separation is driven by the chiral adsorption selectivity (the two enantiomers are otherwise thermodynamically identical). Honesty note: this is the TMB steady-state equivalent, not the transient multi-column process with discrete port switching; stages are ideal equilibrium stages (no mass-transfer resistance / axial dispersion); the isotherm affinities are illustrative screening values.

SMB chromatographyChiral separationEnantiomer
FEED
Water
feed
eluent
extract
raff
SMB
Extract
Raffinate

High-fructose corn syrup: SMB glucose/fructose separation

The single largest-volume industrial SMB in the world — separating fructose from glucose to make 55-HFCS. A glucose/fructose isomerate (dilute in water eluent) feeds the native SMB unit op; on a Ca²⁺-form ion-exchange resin fructose is the more-retained sugar, so it reports to the extract (the sweetener product) while glucose leaves in the raffinate (recycled to the isomerase reactor in a real plant). Solved as the steady-state True Moving Bed equivalent — a purely isotherm-driven liquid separation, so the sugars need no vapor-liquid-equilibrium data. Honesty note: TMB steady-state equivalent (not the transient port-switching process), ideal equilibrium stages, illustrative isotherm affinities capturing the real fructose > glucose retention order.

SMB chromatographyHFCSSugar separation
BEER
feed
dist
btms
Qc
Qr
COL
Ethanol
Steam
feed
steam
conc
vapor
cond
EVAP
COMP
Syrup
Condensate
Recompressed Vapor

Bio-ethanol: energy-integrated distillation + MVR stillage concentration

A dilute beer (10% ethanol) is concentrated toward the azeotrope in a beer column, and the water-rich stillage bottoms are concentrated in an evaporator whose vapor is recompressed by a mechanical-vapor-recompression (MVR) compressor — recovering the stillage vapor's latent heat as high-grade heating duty instead of venting it, the energy-integration route that eliminates a separate thermal oxidizer. Honesty note: the MVR train is modeled at screening fidelity (an evaporator + a real isentropic-efficiency recompression of its vapor, reporting the recompression work); the solids in real stillage are not tracked (the bottoms is modeled as the ethanol/water liquid), and this is an equipment-train energy study, not a rigorous three-phase superheated-steam dryer.

DistillationVapor recompressionEnergy integration
AIR
VPSA
Oxygen
TAIL GAS

On-site oxygen: multi-bed vacuum pressure swing adsorption (VPSA)

Medical- / green-steel-grade oxygen generated on site from air by a 4-bed vacuum pressure swing adsorption unit over an N₂-selective zeolite (LiX/13X). This uses the native VPSA unit op — the proven 2-bed Skarstrom engine generalized to N beds with pressure-equalization steps and sub-atmospheric evacuation: nitrogen is adsorbed while oxygen passes as the light product, then each bed is pulled to a vacuum to desorb the nitrogen tail gas. The solver runs the real cyclic transient (tanks-in-series bed discretization + linear-driving-force kinetics + inter-bed equalization) to a periodic steady state — the transient dynamic equilibrium legacy steady-state simulators cannot capture without a separate dynamic license. Honesty note: isothermal (no heat of adsorption, which is real and significant for N₂ on zeolite); only N₂ is modeled as adsorbing, so O₂ and argon pass together — which is why the product tops out near 93% O₂ (argon co-produces with oxygen), not fabricated pure O₂; p_low is a specified vacuum boundary, not a vacuum-pump curve.

VPSAOxygenAdsorption
FEED
feed
dist
btms
Qc
Qr
COL
Water
ACID

Acetic acid recovery — NRTL with vapor-phase dimerization

Concentrating dilute aqueous acetic acid (30 mol%) by distillation, modeled with the NRTL activity package and **chemical-theory vapor-phase association** (acetic acid dimerizes, 2 A -> A2, in the vapor). This is the physics a cubic equation of state gets wrong: the pinned NRTL acetic-acid/water binary (DECHEMA) plus the cited dimerization constants (Nagy et al., Molecules 2020) give the real bubble curve and latent heat, so the close-boiling acid/water pair actually separates and converges where Peng-Robinson does not. Honesty note: acetic acid and water are close-boiling with no azeotrope, so neither product is sharp at this screening duty — the bottoms comes out ~79 mol% acid and the distillate ~91 mol% water. Both are the solver's own converged, mass-closing answer; a sharper cut needs a taller column at higher reflux than 20 stages / R=1.6, and at that duty this column stops closing its component balance (see the CLAUDE.md note), so the honest result is reported rather than the target quoted.

DistillationNRTLAcetic acid
FEED
Solvent
feed
dist
btms
Qc
Qr
ED
Ethanol
feed
dist
btms
Qc
Qr
SR
Water
Solvent Recovered

Anhydrous ethanol — extractive distillation past the azeotrope (NRTL)

Producing fuel-grade anhydrous ethanol from a near-azeotropic ethanol/water feed using ethylene glycol as the extractive entrainer. Ordinary distillation is capped at the 89.4 mol% ethanol azeotrope; the high-boiling glycol raises water's relative volatility so **ethanol crosses its azeotrope and leaves the extractive column essentially pure**, while a vacuum solvent-recovery column strips the water and recycles the glycol. This is modeled with the NRTL activity package on **pinned DECHEMA binaries** for every pair (ethanol/water, ethanol/glycol, water/glycol) — the non-ideal, azeotrope-crossing VLE a cubic equation of state structurally cannot reproduce (Peng-Robinson stays trapped at the ~89% azeotrope). Honesty note: NRTL binaries come from the bundled DECHEMA VLE Data Collection (via ChemSep/DWSIM), not fitted here; the solvent-recovery column runs under vacuum to keep the glycol below its decomposition temperature.

Extractive distillationAzeotropeNRTL
OIL
H2feed
MIX
HDO
HC
Hpsep
Recycle H2
Water KO
SOUR Water
Letdown
Lpsep
Offgas
feed
dist
btms
Qc
Qr
NAPH COL
Naphtha
feed
dist
btms
Qc
Qr
JET COL
SAF JET
Renewable Diesel

Renewable diesel & SAF: HEFA hydrotreating train

The HEFA (Hydroprocessed Esters and Fatty Acids) pathway to sustainable aviation fuel and renewable diesel from fats/oils/greases: a triglyceride feed (triolein) plus a large hydrogen excess is hydrodeoxygenated (HDO) to n-paraffins + propane + water, the paraffins are hydrocracked/isomerized toward the jet range, the H2-rich recycle gas and the HDO process water are knocked out, the light ends are stabilized, and a two-column fractionation splits the product into light naphtha, a jet-range SAF cut, and renewable-diesel bottoms. Honesty notes: the databank carries no lauric/oleic assay, so the FOG feed is modeled as triolein hydrodeoxygenating to n-octadecane (real HDO stoichiometry: triolein + 15 H2 -> 3 n-C18 + propane + 6 H2O); the hydrocracking lump (n-C18 -> n-C12 + n-C6) is illustrative, not a fitted kinetic network; and the n-/iso-paraffin distinction that actually sets the jet freeze-point spec is NOT resolved (the databank carries n-paraffins, not the specific branched isomers) — the train computes real material/energy balances and a real fractionation, not a validated freeze-point. A 3-phase water knockout is modeled as a component separator (the real unit gravity-decants the sour water).

SAFHEFARenewable diesel
Sourgas
LEAN
liq
gas
gas
rich
ABS
Treated GAS
Richhx
Letdown
Stripvap
liq
gas
gas
rich
Strip
ACID GAS
LEAN Regen

Refinery acid-gas treating: MDEA/PZ absorber-stripper

Simultaneous CO2 AND H2S removal from a sour natural-gas / refinery off-gas stream by a piperazine-promoted MDEA solvent — the mixed-amine chemistry legacy tools reach for heavy rate-based/OLI add-ons to model. A high-pressure absorber contacts the sour gas with lean MDEA/PZ solvent (both acid gases absorb into the amine); the rich amine is heated and let down to a low-pressure steam stripper that drives the acid gases back off as a concentrated acid-gas stream and regenerates the lean solvent. Runs on the new 'enrtl-mdea-pz' electrolyte package: a generalized speciation (MDEA protonation + piperazine carbamate/dicarbamate + CO2/HCO3-/CO3-- + H2S/HS- + water) with Davies activity — it correctly reproduces piperazine's promotion (the blend holds more CO2 at a given partial pressure than MDEA alone). Honesty notes: this is an EQUILIBRIUM capacity/selectivity model — NOT rate-based, so PZ's kinetic CO2 promotion and MDEA's kinetic H2S-over-CO2 selectivity are not captured; the absorber/stripper are Kremser shortcut columns; the PZ carbamate constants and the H2S path are screening-grade (see flowsim/solver/thermo/enrtl_blend.py); and the lean-amine loop is left OPEN (the regenerated solvent is a product, not closed back onto the absorber — the same honest simplification the 'co2-from-natural-gas' example makes), with makeup steam as the reboiler surrogate. What it genuinely computes: deep sweetening of the gas, the rich CO2/H2S amine loadings, the concentrated acid-gas overhead, and a fully regenerated lean solvent.

Acid-gas removalAmine treatingMDEA
Sourgas
Makeup
Leanmix
liq
gas
gas
rich
ABS
Treated GAS
Richhx
Letdown
Stripsteam
liq
gas
gas
rich
Strip
ACID GAS
Leancool
Leanpump
Bleed Split
Solvent Bleed

aMDEA closed solvent loop (activated-MDEA acid-gas removal)

The activated-MDEA (aMDEA) acid-gas removal process BASF developed at Ludwigshafen -- methyldiethanolamine promoted with piperazine -- run as a genuinely CLOSED solvent loop: the regenerated lean amine is cooled, pumped back to absorber pressure and returned to the absorber, with a small side bleed and a demin-water/amine makeup. The companion 'mixed-amine-acid-gas-treating' showcase deliberately leaves that loop open (the regenerated solvent is a product); closing it is what this example adds, and it changes what the model can tell you. Sour gas at 50 bar (5% CO2, 3% H2S in methane) is contacted with lean solvent; the rich amine is heated, let down to 1.8 bar and stripped; the lean solvent returns through a cooler and a pump; a 3% bleed purges degradation products; makeup replaces what leaves. One Wegstein tear on the lean stream closes it. The headline result is one no open-loop model can produce: the lean-solvent composition is not specified anywhere in the flowsheet -- it is the fixed point of the loop's own water and amine balance -- and it converges to 87.7 mol% water / 10.2% MDEA / 2.0% piperazine, which is 41 wt% MDEA and 5.9 wt% PZ (about 3.6 and 0.7 mol/L at a typical 1.04 g/cm3 solvent density), inside the concentration window BASF's own aMDEA patents claim. Also computed: 114 mol/s of circulating solvent for 100 mol/s of sour gas, a rich loading of 0.36 mol CO2 + 0.21 mol H2S per mole of amine, treated gas that is pure methane, a 39 mol/s acid-gas overhead, and 0.23% hydrocarbon slip into it. Sweeping the stripping steam traces the loop's water balance: more steam carries more water overhead, so the circulating inventory shrinks from 225 to 53 mol/s across the sweep -- a closed-loop coupling that simply does not exist in an open-loop model. Balance closure is the precondition for an acceptance test under VDI 2048 (control and quality improvement of process data by correction calculation, for operation and acceptance tests in energy technology and the chemical industry); the same variance-weighted least-squares correction that standard is built on is available on solved results through the data-reconciliation tool. Honesty notes: (1) equilibrium, not rate-based -- piperazine's kinetic CO2 promotion and MDEA's kinetic H2S selectivity are not captured, and both columns are Kremser shortcut contactors; (2) there is no overhead reflux condenser -- the stripper runs on external stripping steam as a reboiler surrogate, so the acid gas leaves wet (79 mol% water) and the makeup is correspondingly large at 14 mol/s of mostly demin water; adding a reflux drum that returns that water is the next increment, and it needs a real reboiler rather than a steam feed to keep the water balance closed; (3) the piperazine carbamate constants and the H2S path are screening-grade; (4) solvent degradation and heat-stable salts are not modeled, so the 3% bleed is a specified purge, not a computed degradation rate; (5) this is the process class BASF commercialized, not a reproduction of any BASF plant design.

Closed solvent loopRecycle convergenceaMDEA
Nitrobenzene
Hydrogen
Loopmix
RX
Loophx
SEP
Offgas
Takeoff
Crude Aniline
Looppump

Jet loop reactor: nitrobenzene to aniline

A circulating loop reactor of the kind BASF and Buss built for strongly exothermic three-phase hydrogenations -- here nitrobenzene to aniline (C6H5NO2 + 3 H2 -> C6H5NH2 + 2 H2O, -443 kJ/mol). Fresh nitrobenzene and hydrogen are injected into a large circulating liquid stream; the reactor itself runs adiabatic and the reaction heat is taken out by a heat exchanger in the EXTERNAL loop, which is the whole architectural point -- the exchanger area is set independently of the reactor, and the circulation rate, not a cooling jacket, is what holds the temperature. A gas separator vents the excess hydrogen, 5% of the liquid is taken off as crude aniline, and the rest is pumped back. What it computes: a 19:1 recycle-to-product ratio holds the adiabatic reactor to 429.7 K in / 494.3 K out, a 64.6 K rise, with the loop cooler removing 4.66 MW; overall nitrobenzene conversion is 99.98% (99.70% per pass) and the crude leaves at 34.7% aniline / 64.9% water. Counting the vent as well as the crude, one aniline is made per two water, which is the stoichiometric mass-balance check on the whole loop -- the crude by itself runs slightly water-lean because the vent carries water vapour off with the excess hydrogen. The acid test is what happens without the loop: the same feed in one adiabatic once-through reactor is already at 627 K by 30% conversion and runs off the top of the model's temperature range well before full conversion. That gap is the reason the architecture exists. Honesty notes: (1) the rate constants are illustrative, chosen for a realistic per-pass conversion, not fitted plant or catalyst data -- the kinetic reactor requires the user to supply them and none ship with it; (2) the jet nozzle is not modeled hydraulically -- gas induction and entrainment by the motive jet, the loop pressure drop, and the gas hold-up and mass-transfer intensification a real jet loop is chosen for are all represented only as a circulation pump plus a mixer, so this captures the loop's THERMAL behaviour, not its mass-transfer behaviour; (3) an ideal CSTR with one lumped reaction -- no nitrosobenzene / phenylhydroxylamine / azo intermediates and no condensation by-products, so selectivity is assumed, not predicted; (4) Peng-Robinson on a strongly polar aniline/water mixture is screening-grade, and the 1.5 mol% aniline carried out in the vent is a real consequence of that (a plant condenses and recovers it); (5) this is the reactor class, not a reproduction of any licensor's design. Loop balances closed to this tolerance are the precondition for an acceptance test under VDI 2048.

Loop reactorRecycle convergenceHydrogenation
Makeup
Loopmix
Loophx
Qsplit
Feedhx
BED1
Qmix1
BED2
Qmix2
BED3
Chill
SEP
Ammonia
Purgesplit
Purge

Quench-converter ammonia synthesis loop

The multi-bed quench converter BASF first installed in 1942, which displaced the tube-cooled converters before it, running inside a complete 200 bar synthesis loop. Ammonia synthesis is equilibrium-limited and exothermic, so the catalyst wants to run hot for rate and cool for equilibrium, and no single adiabatic bed can do both. The quench converter's answer is mechanical: split the loop gas, send 55% through the interchanger into bed 1 and inject the other 45% as cold shots between the beds, so each bed heats up adiabatically and each quench pulls it back down. What it computes: the sawtooth, 673 -> 766 K in bed 1, quenched to 689 K and out at 760 K, quenched to 712 K and out at 766 K; 12.5 mol% ammonia at the converter exit, in the 12-18% band real quench converters deliver, at 20.9% nitrogen conversion per pass; 44.6 mol/s of 97.8% liquid ammonia off the 250 K separator; and argon and methane held at 3.3% and 4.2% in the loop by a 3% purge, with the recycle closed by a Wegstein tear. The acid test is the counterfactual: one adiabatic bed producing that same 12.51 mol% ammonia exit ends at 834.7 K -- 562 C, past the sintering limit of promoted-magnetite catalyst -- while the three-bed quench converter delivers the identical duty with a 766 K (493 C) peak. Honesty notes: (1) each bed is a specified-conversion adiabatic reactor, so the model computes the THERMAL consequence of a given quench split faithfully but does not predict the conversion itself -- the equilibrium ceiling that motivates the design is an input to the story here, not an output of it, and a kinetic or equilibrium bed model is the next increment; (2) the feed/effluent interchanger is represented by two specified-temperature heaters rather than a coupled exchanger, so its area and approach are not checked; (3) no catalyst kinetics, bed pressure drop, or converter sizing; (4) the 2.2% dissolved hydrogen, nitrogen and argon in the liquid ammonia is a real separator result, not an artifact -- a plant recovers it in a letdown flash that is not modeled here; (5) this is the converter class BASF pioneered, not a reproduction of a specific BASF converter. Closed loop balances of this kind are what an acceptance test under VDI 2048 reconciles plant measurements against.

AmmoniaHaber-BoschQuench converter
Syngas
MIX
Reactor
Chill
SEP
NH3 Product
Split
Purge

High-recycle ammonia loop (equation-oriented)

A tight, high-recycle ammonia synthesis loop built to show why a modern simulator solves recycles the way legacy sequential-modular tools can't. Fresh syngas (N2 + 3H2, with argon inert) mixes with a large recycle, reacts to only ~10% per pass, chills so ammonia condenses out as product, and the unreacted gas recycles — a recycle-to-fresh ratio of ~5:1, with argon building up until a small purge balances it. **Run this in Equation-Oriented mode (Solver menu > Mode > Equation-oriented).** In the default sequential-modular mode the solver tears the recycle and iterates Wegstein ~78 times to close the loop; the equation-oriented solver instead makes every inter-unit stream a global unknown and closes all ~35 of them in one simultaneous Newton solve — the same simultaneous approach AVEVA SimCentral / gPROMS / IDAES use, and the reason tightly coupled recycles that crawl (or stall) in sequential-modular converge cleanly here. Honesty note: the ammonia-formation Keq is illustrative (chosen for a realistic ~10% per-pass conversion and ~5:1 recycle), not a fitted plant value; both solver modes reach the same converged answer — the point is the path, not the result.

Recycle convergenceEquation-orientedAmmonia
FEED
Reformer
Cool1
WGS
Cool2
Knockout
Water OUT
Co2cap
Captured CO2
BLUE H2

Blue hydrogen: SMR + water-gas-shift + CO2 capture

A low-carbon (blue) hydrogen train: steam-methane reforming converts natural gas + steam to syngas (CH4 + H2O <=> CO + 3H2) at 1123 K, a water-gas-shift reactor converts the CO with more steam to extra H2 + CO2 (CO + H2O <=> CO2 + H2), the gas is cooled, the process water knocked out, and 96% of the CO2 is captured as a pure stream for sequestration/EOR (the CCS that makes the hydrogen 'blue'). Both reactors are solved to real chemical equilibrium (partial-pressure basis) rather than a fixed conversion. Honesty notes: the reforming/shift Keq values are the representative high-temperature equilibrium magnitudes (~85% CH4 conversion at 1123 K, near-complete CO shift at 620 K), not fitted to one plant; CO2 capture is modeled as a component separator (a real unit uses an amine or physical-solvent loop -- see the 'mixed-amine-acid-gas-treating' showcase for the rigorous MDEA/PZ chemistry, which needs its own electrolyte thermo package and so can't share this flowsheet's gas EoS); and the ~4% residual CH4 slip in the product is real (a plant polishes it with a PSA -- see 'psa-h2-purification').

Blue hydrogenSteam reformingWater-gas shift
FEED
feed
dist
btms
COL
DIST
BOT

Rate-based distillation (Maxwell-Stefan, ChemSep-style)

A depentanizer split (n-pentane overhead from an n-pentane/n-hexane/n-heptane feed) solved with a **rigorous rate-based (nonequilibrium) stage model** rather than the usual equilibrium-stage assumption. Every stage carries separate bulk vapor and liquid compositions with a vapor-liquid interface in equilibrium and finite **Maxwell-Stefan mass-transfer fluxes** across each film, and the per-stage transfer coefficients come from the real Chan-Fair (1984) tray-efficiency correlations off estimated tray geometry -- the exact physics ChemSep and Aspen RateSep are built on. The result: real trays lag equilibrium, so the finite-transfer distillate is measurably less pure (~98.7% C5) than an equilibrium-stage model predicts (~99.8%) on the identical column -- roughly 5x more hexane slips overhead. Open the equivalent equilibrium column ('ethanol-water-distillation' or any 'distillation' node) to see the gap the equilibrium-stage assumption hides. As the mass-transfer coefficients grow the model collapses back onto the equilibrium column (the built-in validation limit).

Rate-basedMaxwell-StefanNonequilibrium
LSR Naphtha
ISOM
Isomerate

C5/C6 isomerization: why the colder catalyst wins

The light end of a gasoline pool. Straight-chain C5/C6 paraffins have poor octane, their branched isomers have good octane, and the reaction between them is a simple reversible **exothermic** rearrangement. Which means the equilibrium gets *worse* as the reactor gets hotter -- and that single fact, not activity, is the technology choice in this unit. Run the built-in temperature sweep: this light straight-run naphtha reaches **74.9% iso-C5 and 67.2% iso-C6 at 400 K** (the chlorided-alumina window) and only **65.3% and 57.6% at 530 K** (the zeolitic window). A chlorided-alumina catalyst does not beat a zeolite by being more active; it beats it by approaching a better equilibrium. That is also why the two are not interchangeable in a revamp -- a zeolitic unit cannot be pushed to alumina octane by running harder, only by running colder than its catalyst allows. Two things the flowsheet shows directly: moles are conserved **exactly** (one molecule in, one molecule out -- 100.00000 mol/s out for 100 in, the module's own gate), and the benzene and cyclohexane in the feed pass through **untouched** at 4.00% and 6.00%, because a component named in no pair is not something this block pretends to convert. Only two pairs are written (n-pentane/isopentane and n-hexane/2-methylpentane) and that is deliberate: pairs are applied in sequence over a shared mole pool, so two pairs sharing one normal would let the second redistribute what the first already converted. A real C6 network (n-hexane / 2-MP / 3-MP / 2,2-DMB / 2,3-DMB, each with its own equilibrium) is a coupled problem this block does not solve -- see the honesty notes in flowsim/solver/unitops/isomerization.py. **K_ref and the heat of reaction are inputs, not predictions**: they come from the catalyst licensor or a pilot run and differ by catalyst, so the ones here are illustrative, fitted to put the unit in the published operating window rather than taken from a source. The fitted heats land at -6.9 and -6.0 kJ/mol, the right magnitude for a paraffin skeletal isomerization -- a sanity check on the fit, not a citation. `approach_to_equilibrium` (0.96 here) is where a real catalyst's shortfall against equilibrium goes, and is likewise the caller's to supply. **Octane is deliberately not reported.** The block returns it only when given a `research_octane` table, because pure-component RON is published but blending octane is not linear -- a component's contribution to a real pool differs from its pure value, sometimes by several numbers -- so a shipped table would hand back a blend calculation the number cannot support. Not modelled: kinetics and space velocity, catalyst deactivation, chloride injection, hydrocracking side reactions, benzene saturation (a real duty in a modern ISU), and the deisohexanizer recycle that a real unit uses to push past single-pass equilibrium -- that last one is a flowsheet you draw around this block, not something it does internally. Refs: Meyers (2004), Handbook of Petroleum Refining Processes ch. 9; Gary, Handwerk & Kaiser, Petroleum Refining ch. 11.

IsomerizationRefiningOctane
ACID GAS
SRU
TAIL GAS
Liquid Sulfur

Claus sulfur recovery unit (SRU): the 2:1 ratio that sets the ceiling

The back end of the amine train, and the unit that keeps a refinery's sulfur out of the atmosphere. Acid gas off an amine regenerator (60% H2S, 36% CO2) is part-burned in a reaction furnace, then reacted over two catalyst beds with sulfur condensed between them. **The whole design follows from one number.** The furnace burns a fraction phi of the H2S to SO2 (`H2S + 3/2 O2 -> SO2 + H2O`); the Claus reaction then consumes them at 2:1 (`2 H2S + SO2 -> 3 S + 2 H2O`). Burn exactly one third and the effluent arrives at precisely 2 H2S per SO2, so neither reagent is left over -- which is why air demand, not catalyst, is the manipulated variable in every real Claus plant. Off-ratio, the excess reagent walks straight through to the tail gas and recovery is capped by a **stoichiometric ceiling** `min(3*phi, 3*(1-phi)/2)` that no amount of catalyst can beat. Run the built-in combustion-fraction sweep to see it: recovery peaks at **95.3% at phi = 1/3** and falls away symmetrically -- 85.8% at phi = 0.30 and *also* 85.8% at phi = 0.40, 71.5% at phi = 0.25 and *also* at phi = 0.50, because the ceiling's two branches cross at one third. Air demand is not symmetric though (128.6 vs 171.4 mol/s at those same two points), so over-firing costs blower duty on top of the lost sulfur. At the design point the unit makes 57.17 mol/s of liquid sulfur from 60 mol/s of H2S against a 142.9 mol/s air demand, and the 2.84 mol/s of sulfur reaching the tail gas is still at exactly 2:1 H2S/SO2 -- the unconverted reagents leave in the ratio they were fed, which is what a tail-gas treating unit downstream is sized for. The sulfur atom balance closes exactly (60.000 mol/s S in, 57.165 as liquid sulfur + 2.835 in the tail gas). Staging is why two beds get to 95%: each converts a fraction of what is *left*, so `X_total = 1 - (1-X_thermal)*prod(1-X_i)` -- 0.65 thermal then 0.70 and 0.55 catalytic. Honesty notes (see flowsim/solver/unitops/claus.py): **per-stage conversion is an input, not a prediction** -- the Claus equilibrium runs through S2/S6/S8 allotrope speciation whose free energies this tree does not carry, and a designer takes those numbers from the licensor's equilibrium chart or a measured approach, so inventing a correlation would fabricate exactly the data that decides the answer. What *is* exact: the air demand, the ratio, the ceiling, the staging arithmetic and the sulfur atom balance. Not modelled: furnace flame temperature and waste-heat-boiler duty, NH3/BTEX destruction (flagged if present, since they set the minimum furnace temperature), COS/CS2 formation and hydrolysis, sulfur dew point, and the tail-gas treating unit that takes ~95% to ~99.9%. The front end is the companion 'mixed-amine-acid-gas-treating' showcase, whose stripper produces exactly this kind of acid gas. Refs: GPSA Engineering Data Book S22; Kohl & Nielsen (1997), Gas Purification ch. 8.

ClausSulfur recoverySRU
Sourgas
LEAN
liq
gas
gas
rich
ABS
Treated GAS
RICH Amine

Rate-based reactive amine absorber (packed, MDEA/PZ)

A packed acid-gas absorber sized the way ChemSep / Aspen RateSep size one -- by real mass-transfer rate over a PACKED HEIGHT, not an assumed stage count. Sour gas (CO2 + H2S in methane) contacts a piperazine-promoted MDEA solvent in a structured-packed column, and the recovery of each acid gas is set by three coupled pieces of physics: the **Onda-Takeuchi-Okumoto (1968)** gas/liquid film coefficients and wetted area over the packed height (the rate), a **reaction-enhancement factor** on the liquid film from the Hatta number (the reaction speeding up liquid-side transfer), and the **reactive vapor-liquid equilibrium** from the electrolyte 'enrtl-mdea-pz' package (the capacity). The result is a genuine design curve: CO2 recovery climbs from ~85% at 0.3 m of packing to pipeline spec by ~1.5 m (5 ppm CO2, 3 ppm H2S) -- run the built-in packed-height sweep to see it. A revealing rate-based insight the equilibrium-stage shortcut can't give: the fast amine reaction makes the liquid resistance negligible, so this absorber is **gas-film-controlled** -- recovery barely moves with solvent rate but scales directly with packed height. Honesty notes (see flowsim/solver/unitops/rate_based_absorber.py): dilute-absorption HTU-NTU with a lean-solvent Colburn form, mean-property diffusivity, a pseudo-first-order (Ha/tanh Ha) enhancement with no instantaneous-reaction cap, and screening-grade reaction rate constants -- it captures the real rate-based behaviour (recovery vs. height, gas-film control) without claiming RateSep-grade rigor. The companion 'mixed-amine-acid-gas-treating' showcase runs the full absorber-stripper loop with the equilibrium-stage (Kremser) absorber for contrast.

Rate-basedPacked columnAmine treating
NG
Chill
JT
SEP
Sales GAS
NGL

Cryogenic NGL recovery (GERG-2008 EoS)

A natural-gas dew-point-control / NGL knockout run on the GERG-2008 reference equation of state -- the multiparameter Helmholtz model the LNG and custody-transfer industries use because cubic EoS (Peng-Robinson/SRK) are off by several percent on cryogenic natural-gas density. Rich pipeline gas is chilled, let down across a Joule-Thomson valve into the two-phase region, and flashed cold to drop out an NGL liquid (propane/butane-rich) from the methane sales gas. The value is accuracy: on this flowsheet GERG predicts an NGL liquid density ~10% different from Peng-Robinson at cryogenic conditions -- enough to change vessel and exchanger sizing. Implemented via CoolProp's multiparameter Helmholtz mixture model (GERG-2008 binary reducing/departure functions), a validated implementation -- not a hand-transcription of GERG's thousands of coefficients. Scope: natural-gas / light-hydrocarbon components only (every species must be a CoolProp fluid); see flowsim/solver/thermo/gerg.py.

GERG-2008NGL recoveryCryogenic
FEED
RWGS
Cool1
KO
RWGS Water
HEAT
FT
Syncrude

e-Fuels (Power-to-Liquids): rWGS + Fischer-Tropsch

The Power-to-Liquids / e-SAF pathway: captured CO2 and green hydrogen are converted to synthetic hydrocarbons. A reverse water-gas-shift reactor turns CO2+H2 into CO + H2O (solved to real chemical equilibrium), the water is knocked out, and the syngas feeds a **Fischer-Tropsch reactor** that builds a whole hydrocarbon slate via the **Anderson-Schulz-Flory** chain-growth law. The single knob that sets the product spectrum is the chain-growth probability alpha (here 0.90): a high alpha shifts the slate toward diesel/wax, a low alpha toward LPG/naphtha -- the reactor distributes the reacted carbon across n-paraffins C1..C8 (the tail lumped as C8 wax) with **exact C/H/O atom balances**, so it conserves atoms wherever the distribution is cut. Honesty notes (see flowsim/solver/unitops/fischer_tropsch.py): this is the standard **yield/selectivity** FT model (ASF + specified CO conversion), not a mechanistic kinetic or slurry/fixed-bed hydrodynamic model; olefin/oxygenate co-products aren't split out (paraffins + water only); the raw syncrude effluent is delivered as-is (a real plant recycles the H2-rich tail gas and fractionates the liquid -- shown here as the reactor product, not a finished fuel cut); and the rWGS Keq is the representative high-temperature equilibrium magnitude.

e-fuelsPower-to-LiquidsFischer-Tropsch
FEED
Reformer
Cool1
WGS
Cool2
Knockout
Water OUT
LEAN
liq
gas
gas
rich
ABS
BLUE H2
RICH Amine

Blue hydrogen with rigorous amine capture (multi-thermo)

The blue-hydrogen train done properly: steam-methane reforming and water-gas-shift run on a cubic gas EoS (Peng-Robinson), while the CO2 capture runs on the rigorous electrolyte amine package (MDEA/piperazine 'enrtl-mdea-pz') -- **two thermo methods in one flowsheet**, via per-node thermo_overrides. This is what legacy tools do with a property-method 'section' and what the plain 'blue-hydrogen-smr-ccs' showcase *couldn't* (one package per flowsheet forced a component-separator stand-in for the capture). Here the shifted syngas is contacted with a lean MDEA/PZ solvent in an absorber that removes the CO2 by real reactive equilibrium (H2/CO/CH4 pass through as insoluble gases), delivering ~94% H2 with the CO2 driven to trace and a rich amine at a realistic ~0.7 mol CO2/mol amine loading. Honesty notes: streams cross the PR<->eNRTL boundary carrying their universal fields (flow/T/P/composition), but each package uses its own enthalpy reference, so a rigorous *energy balance across the boundary* is not consistent (the absorber is a Kremser shortcut and doesn't attempt one) -- see the thermo_overrides note in docs/interfaces.py; the reforming/shift Keq are representative equilibrium magnitudes.

Blue hydrogenMulti-thermoAmine capture
Naphtha FEED
FUEL GAS
process
fuel
proc
flue
Furnace
FLUE Stack
Crack1
Crack2
Crack3
TLE Quench
Primary COOL
Primary SEP
Pygas Heavy
Compressor1
COOL C1
KO1
KO1 Liquid
Compressor2
COOL C2
KO2
KO2 Liquid
Acetylene Hydro
Chill Demeth
Coldflash
TAIL GAS
feed
dist
btms
Qc
Qr
Deeth
feed
dist
btms
Qc
Qr
C2 Splitter
Ethylene Product
Ethane Byproduct
feed
dist
btms
Qc
Qr
Depropanizer
Propylene Product
C4 Butadiene Product

Naphtha steam cracker: furnace, quench, compression, cryo train

The full ethylene-plant process shape (steam-methane-cracking's headline technology, e.g. Linde's steam cracking line): a fired-heater convection preheat, a three-reactor lumped pyrolysis furnace, a transfer-line-exchanger quench, a primary fractionator pulling off pyrolysis gasoline, two-stage compression with interstage knockouts, selective acetylene hydrogenation, and a cryogenic cold train (cold-flash light-gas rejection, deethanizer, C2 splitter, depropanizer) delivering four real products -- ethylene, propylene, a butadiene-rich C4 cut, and a pygas/heavy-ends byproduct -- plus an H2/CH4-rich tail gas and two knockout condensate streams. Honesty notes: (1) naphtha is modeled as a single n-heptane surrogate (no fitted radical-chain kinetics exist in this codebase for real naphtha pyrolysis, so the furnace is three chained fixed-conversion reactors on real, exactly mass-balanced cracking/dehydrogenation stoichiometry -- C7H16 -> C2H4+C2H6+C3H6, C7H16 -> CH4+C2H4+C4H6+H2, and C2H4 -> C2H2+H2 for a trace acetylene impurity -- tuned to a representative, not literature-fitted, product distribution, the same 'illustrative, not fitted' posture already disclosed for saf-hefa-renewable-jet's hydrocracking lump). (2) The demethanizer is a single cold flash stage, not a rigorous multi-tray column: H2 is permanently supercritical at any realistic column pressure (Pc~13 atm vs. the ~20+ atm this train runs at), which was found during this build to corrupt the MESH solver's initial temperature-profile guess (fixed in unitops/distillation.py -- see its CLAUDE.md entry -- but even after that fix a genuine ~15 mol% H2 feed to a sharp-cut demethanizer is a hard column this solver doesn't converge on cleanly); a single flash stage rejects H2/CH4 in bulk instead, consistent with the 'cold-box front-end flash' some real designs use, but with materially worse light-key rejection than a real 20+ tray demethanizer. That carries through honestly to the ethylene product: it converges at ~77 mol% ethylene (the balance methane and H2), not polymer-grade purity -- the real number the solver computes, not an assumed spec. Propylene fares much better (~96%) since it isn't competing with as light a contaminant. (3) No BTX/aromatics extraction -- the pygas cut is reported as a single lumped heavy stream, matching saf-hefa's precedent of not resolving every real product cut.

Steam crackingEthylenePropylene
FEED
Electric Furnace
Crack
Quench
COMP
Cool2
SEP
H2tail
feed
dist
btms
Qc
Qr
COL
Ethylene
Ethane

Electrically heated ethane cracker (Linde/BASF/SABIC STARBRIDGE concept)

The same ethane-to-ethylene thermal cracking chemistry as ethane-cracker, but with the furnace's radiant-coil heating supplied by an electric heater instead of a fuel-gas-fired one -- the real distinguishing feature of Linde's STARBRIDGE technology (demonstrated at industrial scale with BASF and SABIC at Ludwigshafen, 2024): resistive heating elements replace burners, transferring heat to the process coils by radiation 'in a configuration similar to conventional furnaces,' eliminating the furnace's own combustion-derived CO2 emissions (upstream grid emissions aside). Modeled here as a plain electric `heater` node (no fuel-gas inlet, no flue gas, no combustion stoichiometry) in place of `fired_heater`'s combustion-fired duty -- the honest difference this technology actually is: identical process-side thermal duty and cracking chemistry, a different (electric) heat source with no direct-combustion byproduct stream. Linde's own proprietary heating-element/coilbox design, materials, and thermal efficiency figures are not published and are not fabricated here; the furnace's computed duty is a genuine energy-balance result (electric heater -> real Q required to bring the feed to cracking temperature), not a marketing number.

Electric furnaceSteam crackingDecarbonization
Ethane FEED
O2 FEED
MIX
ODH MAIN
ODH ACOH
ODH COX
COOL
Knockout
Crude ACOH
DRY GAS

Oxidative dehydrogenation of ethane to ethylene + acetic acid (EDHOX concept)

Linde's EDHOX technology co-produces ethylene AND acetic acid from ethane and oxygen in one catalytic step (a proprietary mixed-metal catalyst in a multi-tubular salt-cooled reactor), with combined ethylene+acetic-acid selectivity published above 93% and the CO2 by-product of over-oxidation recovered pure (no nitrogen dilution, since the oxidant is pure O2, not air). Modeled here as three chained fixed-conversion reactors on real, exactly mass-balanced reactions: the main dehydrogenation (C2H6 + 0.5 O2 -> C2H4 + H2O), the acetic-acid co-production path (C2H6 + 1.5 O2 -> CH3COOH + H2O), and a minor full-oxidation loss path (C2H6 + 3.5 O2 -> 2 CO2 + 3 H2O) accounting for the un-selective balance -- the same 'illustrative, not fitted' posture as the naphtha cracker's furnace, since Linde's catalyst kinetics are proprietary and not published. The per-reaction conversions here are tuned to reproduce the one real published number (>93% combined selectivity: this flowsheet computes ~96%), not an assumed per-pass ethane conversion, which Linde doesn't publish. Honesty note: the acetic acid/water co-product is reported as one crude liquid stream (recovered via a simple cold knockout, ~98% of the acetic acid produced) -- the real downstream acetic-acid/water dehydration column is not modeled, matching this codebase's convention of disclosing every unmodeled downstream separation rather than implying a purity that wasn't computed.

EDHOXOxidative dehydrogenationEthylene
EDC FEED
Pyrolysis
Quench
feed
dist
btms
Qc
Qr
HCL COL
HCL Product
feed
dist
btms
Qc
Qr
VCM COL
VCM Product
Unconverted EDC

EDC pyrolysis furnace: 1,2-dichloroethane to vinyl chloride monomer

The balanced-process route to PVC's monomer: 1,2-dichloroethane (EDC) thermally cracks in a fired furnace to vinyl chloride (VCM) + HCl (C2H4Cl2 -> C2H3Cl + HCl, exactly mass-balanced), the HCl is stripped overhead in a distillation column (recovered pure -- it's recycled to the plant's oxychlorination unit in a real balanced VCM process, not modeled here), and a second column separates VCM product from unconverted EDC (also recycled in a real plant). Unlike Linde's proprietary furnace internals (tube metallurgy, coking-cycle length, radiant-zone geometry), EDC pyrolysis chemistry itself is standard, widely published petrochemical engineering (Kirk-Othmer and equivalent references), not proprietary Linde IP -- so this is built directly from the real reaction and typical single-pass conversion (~50-55%, a widely cited industrial range for this process, not a specific plant's exact figure), the same 'illustrative, representative, not literature-pinned to one source' posture used throughout this codebase's cracking-furnace examples. Honesty note: a real EDC/VCM plant recycles both the HCl (to oxychlorination) and unconverted EDC (back to the furnace); both leave as standalone product streams here since neither the oxychlorination unit nor a recycle loop is modeled in this example.

EDCVinyl chlorideVCM
Wastewater FEED
O2 FEED
Preheat
MIX
WAO Reactor
COOL
Offgas SEP
OFF GAS
Treated Water

Wet air oxidation of phenolic wastewater

Liquid-phase oxidation of dissolved organics in wastewater by dissolved O2 at elevated temperature/pressure (kept liquid, not flashed to steam) -- a real, widely licensed generic technology (Zimpro and equivalents), not Linde-proprietary IP, so it's built directly from the real, exactly mass-balanced combustion reaction of a standard WAO test/design compound: phenol (C6H5OH + 7 O2 -> 6 CO2 + 3 H2O). Phenol is the compound most WAO literature uses as the reference organic for design/kinetic studies, not an arbitrary choice. Honesty note: the 95% phenol destruction used here is representative of published WAO performance at adequate severity, not a fitted rate law -- there is no cited kinetic model in this codebase for phenol WAO, so (matching the fixed-conversion-reactor posture used throughout this codebase when kinetics aren't available) this is a fixed-conversion reactor, not an Arrhenius rate expression.

Wet air oxidationWastewater treatmentPhenol
Waste GAS FEED
Preheat
Oxidizer
Stack COOL
Clean Stack GAS

Thermal oxidizer: VOC-laden waste-gas incineration

A dilute VOC-laden air stream preheats and combusts completely at typical thermal-oxidizer operating temperature (~1100 K / 827degC, in the 750-870degC range these units commonly run at for reliable VOC destruction), destroying toluene (a standard VOC surrogate) to CO2 + H2O (C7H8 + 9 O2 -> 7 CO2 + 4 H2O, exactly mass-balanced) at 99.9% destruction-and-removal efficiency (DRE) -- the real regulatory benchmark figure widely cited for thermal oxidizers/incinerators (e.g. the hazardous-waste-incinerator DRE standard), not a fabricated number. This is generic combustion-based air-pollution-control technology, not Linde-proprietary IP -- built the same way fired_heater.py already models fuel-gas combustion, applied here to a waste-destruction duty instead of a process-heating duty. Honesty note: no NOx formation chemistry is modeled (matching fired_heater's own disclosed bounded scope), and heat recovery (regenerative/recuperative preheat of the incoming waste-gas stream, standard on real thermal oxidizers to cut fuel demand) isn't modeled -- the preheat duty here is a plain utility heater, not a heat-integrated exchanger.

Thermal oxidationVOC destructionAir pollution control
FEED
MIX
COMP
COOL
Precool
OPC
JT
Flash
LH2

Hydrogen liquefaction with catalytic ortho-para conversion

A Linde-Hampson JT-cycle liquefaction loop for H2 (the same recycle topology as helium-liquefaction), but H2's real liquefaction process needs one more step helium doesn't: normal H2 feed is ~75% ortho-/25% para-spin-isomer, while the equilibrium mix at liquid-H2 temperature is ~99.8% para -- liquefying without converting first leaves the ortho fraction far above its new equilibrium value, and its slow natural relaxation releases heat (the textbook explanation for uncatalyzed LH2 tanks self-boiling). This closes a real gap: `ortho_para_converter.py` (a catalytic cold-box converter, real equilibrium-para-fraction statistical mechanics) existed in this codebase but was never wired into a showcase example -- and turned out to also be missing from the backend's unit-type validation catalog entirely (fixed alongside this example, in `catalog.py`). Precooling to 30 K (deep enough that H2's JT effect actually condenses it -- verified numerically: 77 K/60 K/45 K precool all give zero liquid yield at 20 atm -> 1.3 atm here, since H2's JT-cooling window needs real precooling well below LN2 temperature, unlike simpler gases) also happens to sit right where the ortho-para conversion actually matters. Honesty notes: (1) real plants reach this depth of precooling via a multi-stage refrigeration cascade (LN2 first stage, then a closed H2 or He Brayton/turboexpander cycle) -- collapsed here into one utility `heater` node, same simplification as every other liquefaction example in this codebase; (2) the converter's `approach_to_equilibrium=0.9` is a stage-efficiency simplification (no cited Fe2O3/Cr2O3 rate constant exists to verify a real kinetic model), disclosed in the unit op's own docstring, not fabricated here.

Hydrogen liquefactionOrtho-para conversionCryogenics
FLUE GAS FEED
Adsorber
Treated FLUE GAS
CO2 RICH Stream

Flue-gas CO2 capture by solid-sorbent adsorption

A generic solid-sorbent (zeolite-13X-class) adsorption capture step on real combustion flue gas (13 mol% CO2 -- typical of a natural-gas- or coal-fired flue gas, a much higher CO2 partial pressure than direct-air-capture's ~400 ppm case, which is why this uses the existing `Adsorption` unit op's real competitive-Langmuir isotherm directly on the flue-gas stream rather than the fixed-recovery `separator` shortcut the existing DAC examples use). Adsorption-based flue-gas capture is a real, generically licensed technology category (Linde's HISORP CC targets exactly this application); the isotherm parameters here are representative order-of-magnitude values for a zeolite-13X-class sorbent's CO2/N2/O2/H2O selectivity (real published 13X studies show CO2 adsorbing roughly an order of magnitude more strongly than N2/O2, and water more strongly still, competing for capacity), not pinned to one specific cited paper's exact figures -- disclosed as representative, matching this codebase's convention when a precise source isn't confidently pinnable, rather than presenting invented precision. Adsorbent inventory (adsorbent_mass) is sized to a real, honest ~96% CO2 capture rate -- not assumed/rounded to a marketing-friendly number. Honesty note: water's strong, competing adsorption on 13X is a real effect this model reproduces (the captured stream carries substantial co-adsorbed water, not pure CO2) -- a real plant would dry the flue gas upstream or use a water-tolerant sorbent, neither of which is modeled here; also, this is the equilibrium single-pass building block a real cyclic PSA/TSA process would be built from (per the unit op's own docstring), not the actual pressure/temperature-swing regeneration cycle.

CO2 captureAdsorptionZeolite
Cracked GAS FEED
Solvent Absorber
LEAN Cracked GAS
RICH Solvent Stripper
PURE Acetylene
Stripper Offgas

Acetylene recovery from cracked gas (selective solvent absorption)

The other real use of cracked-gas acetylene: instead of being hydrogenated away as a trace impurity (see naphtha-steam-cracker's ACETYLENE_HYDRO step and patent-c3-selective-hydrogenation), acetylene is deliberately RECOVERED as product when present at high enough concentration -- industrially via selective solvent absorption (DMF or NMP preferentially dissolve acetylene over the other light hydrocarbons), then stripped back out to release a pure acetylene stream. Honesty note: no cited DMF/NMP-hydrocarbon binary VLE data exists in this codebase to build a rigorous absorber/stripper, so this uses the same fixed-recovery `separator` shortcut this codebase's existing amine/CO2-capture examples already use for exactly this situation (e.g. blue-hydrogen-smr-ccs's CO2 capture step) -- a disclosed simplification of a real physical separation, not a claim of rigorous solvent thermodynamics.

AcetyleneSolvent absorptionCracked gas
Ethylene FEED
LDPE Reactor
LDPE Product

LDPE: high-pressure free-radical ethylene polymerization

Low-density polyethylene is genuinely made by free-radical polymerization of ethylene at very high pressure (~2000 atm here, in the real 1500-3000 atm industrial range) and high temperature -- the exact kinetics this codebase's existing `polymerization` unit op already models (Arrhenius CSTR, method-of-moments Mn/Mw/PDI), previously only ever demonstrated on an arbitrary 'ethanol' stand-in monomer with a fictional molar mass. This uses the real monomer (ethylene, real molar mass 28.05 g/mol) and the real thermo package for it (peng-robinson, not the alcohol/water-tuned NRTL the placeholder examples used). Honesty note: this reactor's rate constants (kp0/kt0/kd0/activation energies) are the same illustrative generic defaults every existing example using this unit op already relies on -- no cited literature rate constant for high-pressure ethylene free-radical polymerization specifically is used here (a genuine, disclosed gap, not a fabricated citation). What IS tuned to a real target is `initiator_conc`: picked so the resulting Mn (~25,000 g/mol) lands in real LDPE's published typical molecular-weight range (roughly 20,000-40,000 g/mol), rather than an arbitrary initiator level -- the genuine output of this model at that setting, not an assumed number.

PolyolefinLDPEFree-radical polymerization
Purge GAS FEED
Membrane
H2 Permeate Product
Retentate FUEL GAS

H2 recovery from purge gas by gas-permeation membrane

A real technology gap this codebase had no unit op for at all: gas-phase membrane separation (the existing `membrane` op is liquid-phase reverse osmosis, not gas permeation). Built here as a new `gas_membrane` unit op -- solution-diffusion transport (real textbook model), solved as the coupled fixed point it actually is (both outlet compositions depend on every component's flux, which depends on both outlet compositions) via a proper Newton-type root-find rather than naive fixed-point substitution, which was tried first and found to genuinely oscillate for a stiff permeance*area product -- see the unit op's own module docstring. Demonstrates the textbook H2-recovery application: a high-pressure purge/off-gas (H2/CH4/N2, e.g. from an ammonia loop or hydroprocessing unit) crosses a polyimide-class membrane, H2 permeating far faster than the other species. Honesty note: the permeance values used are representative order-of-magnitude figures for a polyimide-class membrane's real H2/CH4/N2 selectivity pattern (H2 permeates markedly faster than either), not digits pinned to one specific cited membrane material/thickness -- disclosed as representative rather than presenting invented precision, the same posture used elsewhere in this codebase when an exact source isn't confidently pinnable. The single-stage recovery shown (~32% of the feed H2, at ~96% permeate purity) is a real, honest limitation of one membrane stage -- real plants cascade multiple stages for higher overall recovery, not modeled here.

Gas membraneH2 recoverySolution-diffusion
LNG FEED
FUEL GAS
process
fuel
proc
flue
SCV
FLUE Stack
Regas Natural GAS

LNG regasification via submerged combustion vaporizer

A real LNG-terminal regasification technology: fuel gas burns submerged in a water bath, and the hot combustion products bubbling through that bath transfer heat (via submerged tube coils) to vaporize the incoming LNG -- no new unit-op physics needed here, since this codebase's existing `fired_heater` already models exactly the energy balance this needs (Q_process = efficiency * Q_released from real fuel-gas combustion stoichiometry, then a duty-driven (P,H) flash on the process-side stream) and doesn't care whether that process stream starts liquid or vapor -- feeding it cryogenic liquid methane and specifying a target outlet temperature above its boiling point genuinely vaporizes it through the same mechanism. Honesty note: the water bath itself (its own thermal mass, the bubble-column heat-transfer coefficient, tube-coil geometry) isn't separately modeled -- the water bath is a heat-transfer PATH, not a separate energy-balance node, so representing it as fired_heater's existing efficiency-scaled duty transfer is honest, not a shortcut around missing physics (the same 'indirect utility duty stands in for the real mechanical path' posture already used by rotary_kiln's wall-temperature model elsewhere in this codebase).

LNG regasificationSubmerged combustionCryogenics
Richgas
Coldbox
Coldsep
Salesgas
Rawngl

Cold-separator NGL recovery / dew-point control

A rich natural gas is chilled in the gas/gas exchanger + propane-chiller train (lumped here as one cold box) to -33 degC and let into a cold separator. The heavy hydrocarbons (C3+) drop out as a raw NGL liquid, leaving a leaner sales gas that meets its hydrocarbon dew-point spec — so no more liquid forms as the gas cools in the export pipeline. The cold separator is modelled as an adiabatic flash fed by the chiller, so the single knob (the chill temperature) drives both the NGL recovered and the refrigeration duty: colder recovers more NGL but costs more refrigeration (the built-in sensitivity). Peng-Robinson handles the hydrocarbon VLE; the companion gas-conditioning utilities (hydrate risk, water content, Joule-Thomson choke cooling, and compressor sizing for the sales-gas recompression) quantify the rest of the plant around it.

Gas processingNGL recoveryDew-point control
NGL
feed
dist
btms
Qc
Qr
Deprop
C3prod
C4plus

Depropanizer (NGL fractionation)

The raw NGL recovered by a cold separator is fractionated: a depropanizer column splits it into a C3-and-lighter overhead (propane + a little ethane, the LPG product) and a C4+ bottoms (butanes + natural gasoline). The column is solved with the component-flow Naphtali-Sandholm MESH (method "ns"), which carries every component flow as an unknown so the feed-vs-products material balance is an equation the solver closes by construction — the right tool for a sharp C3/C4 cut, where a reduced-form column would drag the split off and leak a few percent of a component. Peng-Robinson handles the light-hydrocarbon VLE; the built-in sensitivity sweeps the reflux ratio against the reboiler duty (the classic distillation energy trade-off).

Gas processingNGL fractionationDistillation
NGL
feed
dist
btms
Qc
Qr
Deprop
C3prod
feed
dist
btms
Qc
Qr
Debut
C4prod
Gasoline

NGL fractionation train (depropanizer + debutanizer)

The full two-column NGL fractionation train of a gas plant: a raw NGL is split into three products. The depropanizer takes a propane-and-lighter overhead (the propane product), and its C4+ bottoms feed a debutanizer that splits butane overhead from a natural-gasoline (C5+) bottoms. Both columns use the component-flow Naphtali-Sandholm MESH (method "ns") so each sharp cut conserves every component exactly; the two columns solve in sequence (no recycle) and the whole train closes on mass. Peng-Robinson handles light-hydrocarbon VLE; the debutanizer runs at a lower pressure (7 bar vs 18) so its reboiler stays within a reasonable temperature.

Gas processingNGL fractionationDistillation
Medium
PERF
Protein A
LOW PH HOLD
Virus Filter
UFDF
LYO
DRUG Product
Condenser Vapor
Bleed
Flowthrough
VF Retained
Permeate

Monoclonal antibody — perfusion culture to freeze-dried vial

A monoclonal antibody from the perfusion culture that makes it to the freeze-dried vial: **culture → capture → viral inactivation → virus filtration → UF/DF → lyophilization**. Every downstream step was a standalone calculator before this; wiring them together is what makes the train's numbers agree with each other — raise the culture's productivity and the capture column, the filter area and the vial count all move with it. **The protein enters as a product, not a feed.** No property databank carries a 148 kDa antibody (a biomolecule databank is a licensed-data gap, not a missing formula), so the mAb is produced by the bioreactor rather than declared on a feed — a feed component has to be priced thermodynamically, and this one cannot be. **Capture (`PROTEIN_A`).** Sized on **dynamic binding capacity** via Bohart-Adams, the model derived for the near-irreversible isotherm a Protein A resin has — the rigorous bed PDE does not converge at a ~1e-3 g/L dissociation constant, so the method here is the one process development actually uses. Titre and harvest volume come from the feed stream, so changing the upstream titre resizes the column. **Viral inactivation (`LOW_PH_HOLD`).** The kill is **biphasic**: the resistant fraction imposes a hard −log₁₀(f) ceiling, so a longer hold stops helping. single-population fit would promise unlimited kill and justify a hold that cannot deliver — raise `target_log_reduction` past the ceiling and the step says so instead of reporting a number. **Virus filtration (`VIRUS_FILTER`).** Sized on **capacity**, not flux: the filter plugs, so throughput climbs toward Vmax and never past it. That is why more pressure does not rescue an undersized filter, and why the step reports throughput against capacity. **UF/DF (`UFDF`).** Film-theory polarization and the virial osmotic-pressure flux equation solved *together* — which is what produces the pressure-independent plateau that defines ultrafiltration. Raise the TMP and watch the flux barely move while the wall concentration climbs; raise the mass-transfer coefficient (crossflow) instead and it responds. The reverse-osmosis `membrane` op structurally cannot show that. **Freeze drying (`LYO`).** Primary drying by the Pikal vial model, with the **collapse margin** the cycle actually has to respect. Push the shelf temperature up and the cycle shortens right up until the product crosses its collapse temperature and the batch is lost. **No biologics data ships, deliberately.** Every number that decides an answer here — resin capacity and rate constant, the virus kill rate and Vmax, the protein's second virial coefficient, the vial heat-transfer coefficient and cake resistance — is measured for *your* molecule, *your* resin, *your* dryer. The values in this example are illustrative and each step refuses rather than defaulting when one is missing. **Bounds.** Screening-grade process development, not a tech-transfer package: pH elution is a declared yield rather than a desorption model, the ICH Q5A clearance budget across steps lives in the Viral clearance tool (a budget spans steps), and no GMP artefacts — batch records, 21 CFR Part 11 — exist here.

BiologicsProtein AUF/DF
SEP GAS
Surge GAS
PSV SEP
PSV Surge
Flare
SEP Product
Surge Product

Relief system — the fire case, on the flowsheet

Two vessels on one fire zone, each protected by a relief valve, both discharging into a shared flare header. The point is that **nothing here is retyped**: the relieving temperature, pressure, composition and molecular weight come from the solved streams, and the flare's load is the sum of what the valves actually send it. **The relief study, block by block.** `PSV_SEP` is on the separator overhead: its scenario is the API 521 external fire, `Q = C·F·A^0.82` over 45 m² of wetted surface, and the vapour rate is `Q/λ` with the latent heat taken from the property package at the relieving pressure rather than assumed. `PSV_SURGE` protects the surge drum on the classic blocked-outlet case — it relieves the whole inlet flow, which is a number the canvas already knows. Each reports its required orifice area with the API 526 letter above it. **Why they are drawn as lifted.** Both carry `relieving: true`, which models the relief case rather than normal operation. Turn it off and each valve is shut — the process passes through untouched and only the sizing is reported — but then the flare has no load to size against, and says so instead of inventing one. A design load only becomes a flow when you say the valve is open. **What the flare adds that valve-by-valve sizing misses.** A fire zone lifts every valve in it at once, so the header carries both loads together: that is what sets the built-up back pressure, and it is checked against the **lowest-set** valve on the header, because a back pressure a 20-barg PSV shrugs off will chatter a 6-barg one beside it. The tip is checked against the API 521 ~0.5 Mach blow-off limit, and the radiant flux at a receiver 60 m away against the 4.73 kW/m² personnel level, with the heat of combustion computed from the relief gas itself. **Bounds, stated.** A single header (the multi-branch network with per-source back pressures is the Flare network tool); a point-source radiation model with no wind tilt; no knock-out or seal drum; and the fire case is API 520's peak instantaneous rate, not a depressuring transient — that is the Depressuring / blowdown tool.

ReliefAPI 520API 521
Supply
Additive
FCV Supply
FCV Additive
Header
Trunk
TEE
HCV Unit1
HCV Unit2
Unit1
Unit2

Blending header — one model, three solve modes

A solvent blending and distribution header, built to demonstrate the capability AVEVA sells SimCentral on and Aspen splits across separate products: **one flowsheet that solves steady-state, pressure-driven, and dynamically** — no re-modelling between them. A water-rich supply and an ethanol-rich additive each pass a control valve into a common header, down a trunk line, and split at a tee to two consumers. **1. Steady-state (Solver menu > Steady-state).** You specify the flows (100 and 25 mol/s) and each valve's outlet pressure; the solver reports the blend — 22 mol% ethanol — and the pressure profile down the header. This is the design question: *what pressures do I need to move this flow?* **2. Pressure-driven (Solver menu > Pressure-driven).** Now the feeds specify **pressure** (9 bar) instead of flow, the consumers are pinned at 2 bar, and each valve's `cv` becomes a resistance law. Flow is a solved unknown, closed by mass balance against every element's resistance. This is the rating question: *what flow do I actually get?* The valves here are sized for the design duty, so the answer comes back at the same 125 mol/s and the same 6.0 bar header — the two modes agree because they describe one plant. **The tee is where it gets interesting:** in pressure-driven mode the 60/40 split is not read from `split_fractions` (that parameter is ignored) — it is solved from the two consumer valves' Cv against the downstream pressures. Halve `HCV_UNIT2`'s cv and the split moves and the total flow drops; do the same in steady-state mode and nothing budges, because there the split is something you asserted rather than something the network decided. **3. Dynamic (Solver menu > Dynamic).** Initialized from the steady-state solution, step the additive feed to 98 mol% ethanol and watch the blend move: the header responds first, then each consumer lags it by its own holdup, all settling at 23.6 mol% — the value a hand mass balance gives, ((100x0.05) + (25x0.98))/125. **Honesty notes.** The dynamic mode is *composition* dynamics at fixed hydraulics (a standard simplification — the flows stay at their steady-state values, so this is not a pressure transient); the pressure-driven nodal solver uses a representative composition for pipe density inside a split, exact for the single-fluid case here and screening-level for a genuinely multi-fluid ΔP. Neither is a limitation of the flowsheet — both are documented bounds of the engines, stated so the demo is not read as more than it is.

Pressure-drivenDynamicOne model
Rundown
Rundown Cooler
Letdown
Sphere
XFER PUMP
Loading LINE
Truck

LPG storage — fire case, PSV sizing and flare radiation

An LPG storage and truck-loading facility, built so the relief study that follows it is the real one: rundown from the fractionator is cooled, let down to storage pressure, held in a sphere, and pumped to a loading line. The process itself is deliberately simple — the demonstration is what you do with it next, using the Analysis panel's API 520/521 tools, which is the workflow HYSYS sells its Depressuring and Flare utilities on. **Fire case (Analysis > Fire-case relief).** The governing scenario for a pressurised LPG vessel. A 160 m2 wetted sphere in a pool fire with adequate drainage takes 2.77 MW of absorbed heat (API 521 environment factor 1.0); at a relieving pressure of 18 bar abs the stored 70/30 propane-butane boils at 338 K with a latent heat of 270 kJ/kg, so the PRV must pass 10.3 kg/s — an API 526 **M** orifice. **Reaction force (Analysis > Relief reaction force).** That same 10.3 kg/s leaving a 150 mm tailpipe chokes at 9.5 bar and 260 m/s, putting **17.7 kN** on the pipe — the load the tailpipe supports have to carry, and the number that decides whether the discharge piping needs bracing. **Flare radiation (Analysis > Flare radiation).** Burning that relief load (46 MJ/kg, 30% radiated) releases 473 MW. From a 40 m radiant centre the API 521 exclusion zones come out at 64 m horizontal for continuous exposure, 18 m for emergency personnel access, and zero for equipment. **The actionable result:** a receiver 60 m away sees 2.5 kW/m2 — comfortably under the 4.73 kW/m2 personnel limit, but above the 1.58 kW/m2 continuous limit, so a permanently manned building there needs shielding or relocation. **Thermal relief (Analysis > Thermal relief).** A second, entirely different scenario on the same facility: the loading line blocked in full of liquid and warmed by the sun. 12 kW into trapped LPG (cubic expansion coefficient 3.9e-3 /K at 526 kg/m3) needs only 0.017 kg/s — a **D** orifice, the smallest API 526 size. Sizing this line for the fire case instead would oversize the valve by three orders of magnitude in area, which is exactly the mistake the separate tool exists to prevent. **Honesty notes.** These are screening calculations to the API 520/521 equations, not a stamped relief study: the wetted area, drainage credit, heat of combustion and radiant-centre height are engineering inputs you supply, and the vessel inventory is not modelled dynamically (a depressuring transient is a different calculation from the steady relief rate sized here). The flowsheet's own numbers — 250 mol/s of liquid at 310 K, the 0.15 bar loading-line drop, an erosional-velocity ratio of 0.2 against the API 14E limit — come from the solve, not the prose.

Relief sizingAPI 521Fire case
FEED
feed
dist
btms
Qc
Qr
COL
MEOH
Stillage

Methanol column sized by design spec

A methanol-water column sized by **design specification** rather than by trial and error — Aspen's Design Spec / SimCentral's Adjust, and a capability that had no curated example despite being solver-native. The column is specified the way a shortcut (FUG) column is: light and heavy keys with their recoveries (98% of the methanol overhead, 2% of the water). What is *not* specified is the reflux ratio. Instead the flowsheet carries a `design_specs` entry — vary `COL.reflux_ratio` until the metric `shortcut_n_stages` equals 14 — and the solver root-finds it, re-solving the whole flowsheet each trial. Open the Design Spec panel to see it, or the solved result: reflux settles at **1.06** for exactly 14.00 stages. **Why that is the interesting question.** Reflux and stages trade off against each other, and against energy. Left at the initial 1.6, this separation needs only 10.8 stages but 4.35 MW of reboiler duty; pulled down to 1.06 it needs 14 stages and just **3.49 MW** — a 20% energy saving bought with three more trays. A design spec lets you state the column you can afford to build and have the solver tell you how to run it, instead of guessing a reflux ratio and reading off whatever height falls out. The Sensitivity tab comes preloaded with that trade-off as a sweep (reflux ratio against reboiler duty) so the curve behind the single design-spec answer is one click away. **Honesty notes.** This is the Fenske-Underwood-Gilliland shortcut, not a rigorous stage-by-stage solve: `shortcut_n_stages` is Gilliland's correlation, so the 14 stages is a sizing estimate to take into a rigorous run, exactly as DSTWU feeds RadFrac. A design spec is an outer root-find over the whole flowsheet and runs in sequential / tear-EO modes only.

Design specShortcut columnFUG
Spent
feed
dist
btms
Qc
Qr
COL
Recovered
Aqueous

Acetone recovery — batch still vs. continuous column

A spent-solvent stream (60 mol% acetone, 40% water) recovered two ways, so the Analysis panel's **Batch distillation (Rayleigh)** tool has something to be compared against — it had no curated example, and a batch calculation only means anything next to the continuous alternative. **The flowsheet** is the continuous answer: a shortcut column recovering 98% of the acetone overhead and rejecting 98% of the water, giving 59.8 mol/s of distillate at high purity for 4.4 MW of reboiler duty. **The batch answer (Analysis > Batch distillation).** Charge 100 mol of the same mixture to a still and boil it down until the pot falls to 10 mol% acetone: you distil 67.4 mol and the *average* distillate is only **84.2 mol% acetone**. That is the Rayleigh result and it is the whole lesson — a simple batch still has one theoretical stage, so the vapour it makes is enriched but never pure, and the composition drifts the entire time. Reaching column-grade purity in a batch needs reflux and cuts (a batch rectifier), or a second pass. **Why the comparison is the point.** Batch equipment is cheap, flexible, and right for small or campaign volumes; the column is right when the duty is continuous and purity matters. Having both numbers on the same feed is what makes that a decision rather than a preference. **Honesty notes.** The Rayleigh tool integrates the differential mass balance for a **binary** charge at one theoretical stage — no reflux, no holdup, no column dynamics — and takes its relative volatility from the property package at the stated pressure. The column here is the FUG shortcut, a sizing estimate rather than a rigorous stage-by-stage solve.

Batch distillationRayleighSolvent recovery
COLD FEED
HOT Effluent
hot
cold
hot
cold
Q out
FEED Preheater
TO Reactor
TO Cooler

Feed-effluent preheater — duty from the flowsheet, geometry from EDR

A feed/effluent preheater, built so the **shell-and-tube rating** in the Analysis panel has a real duty to rate. The flowsheet answers *how much heat*; the rating answers *whether this exchanger can move it* — the split Aspen sells as EDR, and it had no curated example. **From the flowsheet.** Hot reactor effluent (130 mol/s at 420 K) preheats 120 mol/s of cold feed to 360 K, transferring **1.53 MW** and leaving the hot side at 373 K, against an LMTD of 66.4 K. Those are the numbers you carry into the rating. **The rating (Analysis > HX design).** Put a candidate bundle against that duty — a 0.6 m shell, 320 tubes of 19 mm OD on a 4.88 m length, two tube passes, 0.25 m baffle spacing — and the Bell-Delaware method returns U = **681 W/m2K**, 93.2 m2 available against 53.6 m2 required: **74% over-surface, adequate**. It also exposes the correction factors that actually decide the shell-side coefficient (segmental-cut j_c = 0.91, leakage j_l = 0.67, bypass j_b = 0.54, combined 0.33), which is where a real rating lives — most of the difference between an ideal bank and the bundle you can buy is leakage and bypass. **Reading the margin.** 74% over-surface is generous, not automatically right: it buys fouling allowance and turndown, and costs capital and residence time. The rating is the tool for trading those off — shrink the bundle and watch the margin close. **Honesty notes.** Shell-side characterization (Reynolds, Prandtl, conductivity, tube-side coefficient) is supplied as screening input rather than derived from the stream, so this sizes and checks a bundle, it does not replace a vendor's thermal design. The exchanger in the flowsheet is specified by outlet temperature; its own `u_a` rating mode is the alternative when you want the duty to fall out of the geometry instead.

Heat exchanger ratingBell-DelawareEDR
Wellhead
Choke
GAS Chiller
COLD Separator
Condensate
Gathering LINE
Sales

Wellhead gathering — cold separation and the hydrate check

A wet-gas wellhead through a JT choke, a cold separator and a gathering line — the flowsheet that gives HYSYS Upstream's own tools (well IPR, hydrates, water content, gas pipeline) something real to work on. All four are in the Analysis panel and none had a curated example. **From the flowsheet.** 800 mol/s of wet gas lets down 120 to 60 bar across the choke, cooling itself to 294 K by Joule-Thomson alone; a chiller takes it to 250 K (2.6 MW) and the cold separator drops **88.5 mol/s of condensate (11%)**, sending 711.5 mol/s of sales gas down 25 km of 300 mm line for a 3.8 bar drop at 2.4 m/s. **Well deliverability (Analysis > Well IPR).** Vogel's composite IPR from one test point (0.045 at 200 bar flowing bottomhole, against a 240 bar reservoir and a 180 bar bubble point) gives an absolute open flow of 0.18 and, at 120 bar flowing pressure, a deliverability of 0.125 — the curve that says whether the well can actually feed this train. **The hydrate check (Analysis > Hydrates, Water content).** This is the pair that matters and the reason the two tools belong together. At 60 bar the gas is water-saturated at **21.2 lb/MMscf** with free water present; Towler-Mokhatab puts the hydrate formation temperature at **291.2 K**. Operating anywhere near seabed or winter temperature — 288 K, say — is 3.2 K *inside* the hydrate envelope, calling for about **20.5 wt% MEG** to stay clear with a 3 K margin. A line that is hydraulically fine can still plug solid. **Honesty notes.** Hydrate temperature is the Towler-Mokhatab gas-gravity correlation and the inhibitor dose is Hammerschmidt — both screening correlations, not a rigorous hydrate equilibrium model. Vogel's IPR is a reservoir-inflow correlation, not a reservoir simulation. The gathering line here is single-phase gas; a genuinely two-phase line is the `pipeline` op's Beggs-Brill branch, which needs a mixed inlet.

UpstreamHydratesWell IPR
Process HOT
hot
cold
hot
cold
Q out
PROC HX
Process OUT
Closed Supply
CL PUMP
hot
cold
hot
cold
Q out
Plate HX
Closed Return
OPEN Supply
Tower
OPEN Return

Hybrid cooling — a closed circuit isolated from the tower by a plate exchanger

Three loops in series, and the middle one is the point. The process is cooled by a **closed** circuit of treated water that never contacts air; that circuit rejects its heat across a **plate exchanger** into an **open** evaporative circuit; and only that outer circuit goes to the tower and loses water. Why a plant pays for the extra exchanger: open cooling water picks up oxygen, airborne dirt and biology, and concentrates its dissolved salts every cycle. Putting that water through a reactor jacket or a condenser is what fouls and corrodes them. The closed loop stays clean, stays at pressure, and its inventory never concentrates — so the equipment the process actually touches sees water that does not scale. Solved here: the process leaves at 318 K, the closed circuit picks that up (303 -> 320 K) and is knocked back to 306 K across the plate exchanger, the open circuit takes it (301 -> 311 K) and the tower returns it to 301.15 K at a **4.0 K approach** to a 297.15 K wet bulb. Water loss appears **only** in the open circuit — the closed one leaves with exactly the flow it entered with, which is the whole claim made arithmetic. The tower also reports its scaling limit from the makeup analysis: this water saturates in calcite at **2.2 cycles**, so the 4 cycles configured here shows negative headroom — a real operating conflict, left visible rather than tuned away. Bounded: steady state, so there is no basin inventory and no level control (a level is only meaningful in the dynamic engine). Fouling is not modelled — the argument for the closed loop is made by the chemistry, not by a fouling rate. Feeds and returns are open rather than recycled, the same convention `cooling-water-tower` uses.

Cooling waterUtilitiesHeat exchange
RAW Water
RAW Solids
solid
liquor
cake
filt
Makeup Filter
Filter CAKE
Softener
Biocide
Scale Inhibitor
Corrosion Inhibitor
Dosing Mixer
CW Return HDR
CW PUMP
HDR Split
P1 HOT
hot
cold
hot
cold
Q out
HX Reactor
P1 OUT
P2 HOT
hot
cold
hot
cold
Q out
HX Condenser
P2 OUT
P3 HOT
hot
cold
hot
cold
Q out
HX Intercooler
P3 OUT
Return Mixer
Tower
Blowdown Split
TO Basin
Blowdown TO ETP

Cooling-water utility circuit — treatment, dosing, consumers, blowdown

A whole cooling-water utility rather than a single tower: raw water is **filtered**, **dosed**, and joins a circulating header that a pump pushes through **three consumers** with different duties — a reactor jacket, a condenser and a compressor intercooler — before the warmed return goes to the tower and a **blowdown draw-off** leaves for effluent treatment. The number worth checking is the consistency between the two halves. The tower computes the blowdown it needs to hold 4 cycles of concentration (32.1 mol/s) and the makeup that implies (128.3 mol/s); the drawn blowdown split and the sized raw-water intake match those to under 1.5%. A circuit whose blowdown valve and cycles disagree is the commonest way a real plant silently runs at a different concentration than its water chemistry was designed for, and the flowsheet is arranged so you can see them agree. Solved: 300 m3/h circulating at 301.15 K, split 45/35/20 across the three exchangers, returning mixed at 312 K for an 11.0 K tower range at a 4.0 K approach. **What is drawn but not modelled, stated plainly.** The biocide, scale-inhibitor and corrosion-inhibitor streams are real streams carrying real flow, and their *chemistry is not simulated* — no inhibitor efficacy, no biological control, no corrosion rate exists in this tool. They are here because a utility flowsheet without them misrepresents the plant, not because dosing more of them will change a number. The scale risk that IS quantified comes from the tower's saturation indices against the makeup analysis, and on this water it says calcite saturates at 2.2 cycles — below the 4 being held. Blowdown leaves to a product labelled for effluent treatment; the treatment train itself is not modelled, because carrying dissolved hardness as flowsheet components requires an electrolyte package and would change the thermodynamics of the entire water loop. And there is no basin: steady state has no inventory, so a sump level and its controller belong to the dynamic engine.

Cooling waterUtilitiesWater treatment
PUMP Disch
PCV
HDR LINE
PT
PT
PID
PC
HDR Split
P1 HOT
hot
cold
hot
cold
Q out
HX A
P1 OUT
P2 HOT
hot
cold
hot
cold
Q out
HX B
P2 OUT
Return MIX
CW Return

Pressure-controlled cooling-water header

A distribution header held at pressure by a control valve, rather than a valve with a pressure typed into it. A pressure transmitter reads the header downstream of the distribution line, a controller compares it with the 4.5 bar setpoint, and its output is written back into the valve — the flowsheet is re-converged until the manipulated variable and the measurement agree. What makes it a real loop rather than a tautology is the **line between them**. The transmitter sits 180 m downstream, so the valve cannot simply be set to the setpoint: it has to sit above it by exactly whatever the line is losing, and the controller has to find that. Solved here, it lands at **462.1 kPa at the valve for 450.0 kPa at the header** — a 12.1 kPa line loss it was never told about — in 5 control passes. The controller runs in **integral** mode, so the steady-state offset a proportional-only controller would leave is driven to zero: the header sits at the setpoint to the last significant figure, not near it. One detail worth copying if you build your own: the pipeline carries an explicit `molar_mass`. Darcy-Weisbach needs *mass* density and `ThermoPkg.density` returns mol/m³, so a line without it inflates its pressure drop by roughly 1/M — about 55x for water. It warns, but the warning is easy to miss, and 12 kPa became 587 kPa while this example was being built. Bounded: steady state, so this finds the operating point a controller settles at, not the transient getting there — no overshoot, no settling time, no derivative action. Those live in the dynamic engine. The consumer splits are fixed fractions, so this demonstrates pressure control, not flow redistribution when a user throttles.

Cooling waterControlUtilities
Blowdown
feed
clarified
sludge
LIME Stage
Sludge
Clarified

Cooling-tower blowdown treatment — lime dosing and what it will not remove

The stream `cooling-water-utility-circuit` sends to effluent, treated. Concentrated blowdown (4 cycles on a hard makeup, plus zinc from a corrosion-inhibitor programme) is dosed with lime to pH 10.5, and the metals that can drop as hydroxides do. **A separate flowsheet on purpose.** This runs on the `brine` electrolyte package with the ions as real components; the cooling loop runs on `steam` with water alone. Carrying hardness as flowsheet components changes the thermodynamics of every stream it touches, so the loop keeps its water model and the treatment plant gets the one it needs — which is also how the two are engineered and operated in a real plant. **The result is mostly a lesson in what hydroxide precipitation cannot do.** Magnesium goes from 2100 to 10 ppm-equivalent (99.5% removed) and zinc is essentially complete, leaving a sludge that is 91% Mg(OH)2 and 9% Zn(OH)2. **Calcium does not move at all** — it enters at 0.0042 mole fraction and leaves at 0.0042. That is correct, not a failure to converge: Ca(OH)2 is far too soluble to precipitate at this pH, and removing calcium needs carbonate — soda-ash softening — which is a different reagent and a different chemistry from the one dosed here. A treatment report claiming lime alone softens a blowdown is describing something this model will not reproduce. Sulfate likewise passes straight through: it leaves with the clarified water, which is why blowdown salinity is a discharge-consent question rather than something a precipitation stage fixes. Bounded: equilibrium Ksp at a dosed pH (see `thermo/electrolytes.py`), with no self-consistent pH from the metal hydrolysis itself, a dilute-liquor volume estimate, and B-dot activities. The lime reagent is a circuit condition rather than a tracked feed, and the gypsum a real lime circuit throws is not modelled. Sludge dewatering is absent deliberately: the precipitator's solid outlet carries no entrained water, so a thickener placed after it would be splitting a dry stream and reporting a 'recovered water' that is 100% hydroxide.

Water treatmentEffluentPrecipitation
LIQ P21
SOL P21
solid
liquor
cake
filt
CF P21
PEL P21
SUP P21
LIQ P22a
SOL P22a
solid
liquor
cake
filt
CF P22a
PEL P22a
SUP P22a
LIQ P22b
SOL P22b
solid
liquor
cake
filt
CF P22b
PEL P22b
SUP P22b
LIQ P23
SOL P23
solid
liquor
cake
filt
CF P23
PEL P23
SUP P23

Differential sedimentation — Stokes settling, size selectivity, Svedberg

Four centrifuges run side by side on the same medium so the **d² law is visible as a result rather than asserted**: 20, 50 and 100 nm protein particles at 200,000 × g, plus a 10.24 nm particle at 250,000 × g. `centrifuge` is sized by **Sigma theory**, `Σ = Q/(2 v_g)`, where `v_g` is the g-amplified Stokes settling velocity `v = d²(ρ_p − ρ_m)g/(18η)`. So the reported `sigma_m2` carries the settling velocity, recoverable as `v = Q_liquid/(2Σ)`. Against the closed form the solver agrees to machine precision (relative difference 0 to 4e-16), which makes this a check of the tool and not just a demonstration of it. What it shows: **v(20 nm) = 1.53e-3 cm/s**; the 100 nm particle settles **exactly 4×** faster than the 50 nm one, since velocity goes as the square of diameter and every other term cancels; and the 250,000 × g branch is sized so its velocity is 5e-4 cm/s, giving a sedimentation coefficient **s = v/ω²r = 20.4 S** — the Svedberg range real proteins occupy (catalase 11.3 S, ribosome ~70 S). **Bounded, and the bound matters.** This is terminal Stokes velocity at constant field: no wall, no concentration gradient, no Boycott effect, and no hindered settling. Run the 50 and 100 nm particles for 30 minutes and the arithmetic says they separate by 51 cm, which no rotor can deliver — both pellet against the tube bottom first, the 100 nm one in about four minutes. The *ratio* is robust; the distance is what the formula says rather than what a centrifuge does. It is also the reference wiring for a solids flowsheet: the particles arrive as their own `phase: "solid"` feed with a flat `solids` payload, wired **directly** to the centrifuge. Declaring them `liquid` or `mixed`, or routing them through a mixer first, leaves the unit with no solid-phase inlet and the solve fails.

SedimentationCentrifugationStokes law
Ambient Air
Process Air In
Pvt Heat Source
hot
cold
hot
cold
Q out
Pvt Coil
Pvt Heat Sink
Condenser Heat Source
hot
cold
hot
cold
Q out
Condenser Coil
Condenser Heat Sink
District Heat Source
hot
cold
hot
cold
Q out
District Coil
District Heat Sink
ƒ(x)
Regen Section
Regen Exhaust
ƒ(x)
Dehum Section
Evap Coil
Supply Air Out

Desiccant rotor HVAC — three-stage low-grade heat recovery

A desiccant dehumidification rotor whose **regeneration air is preheated by three low-grade heat sources in ascending temperature order**: a PVT (photovoltaic-thermal) collector loop at 40 °C, condenser heat rejected by the chiller at 50 °C, and a district-heating return at 55 °C. Cascading them warmest-last is the whole point — each coil lifts the air as far as its own source can reach, so the 55 °C district return is spent only on the final lift instead of being wasted on air that is still at ambient. Every coil leaves a **5 K approach at its hot end**, which is what makes this solvable: a cold stream can never leave an exchanger hotter than the hot stream entering it, and in a series train each coil's outlet is the next one's inlet, so a target that looks reasonable in isolation becomes impossible two units downstream. The hot-side flows are sized so the water gives up its duty over a modest ΔT and stays above the air at the cold end as well — specifying the approach alone is not enough if the heat-capacity flow rates don't support it. The rotor's two halves are `custom_block` equation blocks (the regen side and the process side), and the process air is finished to a 16 °C supply condition by the evaporator coil.

HVACHeat recoveryDesiccant
VGO
Riser
Cracked

FCC riser: the gasoline optimum

A fluid catalytic cracking riser — the unit that makes most of a refinery's gasoline — showing the one result that decides how you run it. Gas oil cracks to gasoline, but gasoline **overcracks** to gas and coke, and the catalyst deactivates as coke lays down. Those three together mean gasoline goes through a MAXIMUM in contact time: past the optimum, running the riser harder destroys product while conversion keeps climbing. Open the sensitivity and the curve draws itself — that hump is the whole point. A first-order network (all `hydrocracker` can express) makes gasoline rise monotonically with conversion and would recommend exactly the wrong operation. The cat/oil ratio is **computed, not chosen**: cracking is endothermic and the only heat source is the sensible heat of hot regenerated catalyst, so the circulation follows from a heat balance and lands in the real 5-10 band. That is the number tying the riser to the regenerator an operator actually turns — raise the regenerator temperature and watch it fall. **The rate constants here are illustrative and are NOT any real feed's kinetics.** The unit op deliberately ships none: an FCC lump matrix is regressed from one feed on one catalyst, it is licensor-proprietary, and a fabricated one would decide the answer while looking authoritative. A riser without constants fails validation and says why. Bring your own regression and this becomes your riser. Bounded: three lumps (no per-cut gasoline detail), isothermal riser (a real one drops 30-60 K as the endotherm bites), no catalyst/vapour slip, and no regenerator — coke burn and the air rate are a separate unit this does not model.

FCCCatalytic crackingGasoline optimum
AZEO FEED
Entrainer
MIX
SEP
Anhydrous Ethanol
WET Entrainer

Ionic liquid breaks the ethanol-water azeotrope

The ethanol-water azeotrope is a wall: at 89.4 mol% ethanol the vapour and the liquid have the SAME composition, relative volatility is 1, and no number of trays gets you past it. This flowsheet walks through it by adding an involatile ionic liquid, [EMIM][BF4], which binds water preferentially and pulls the two apart. The numbers are the demonstration. NRTL puts the relative volatility at the azeotrope at **0.996** — that is the wall, computed, not asserted. Add the IL and it climbs to 2.10 at 10 mol%, 2.98 at 20%, and 3.66 at 30%. Flash the IL-laden mixture here and the vapour comes off at an ethanol:water ratio of **22.6 against the azeotrope's 8.43** — decisively across. Run the same feed with no IL and there is nothing to separate: the mixture goes straight from all-liquid to all-vapour with no useful two-phase band, which is precisely what an azeotrope means. Why an IL rather than the usual glycol entrainer (see 'anhydrous-ethanol-extractive-distillation'): an ionic liquid has effectively no vapour pressure, so it never contaminates the distillate and it regenerates by flashing rather than by a second column. Bounded, and this is why the example is a flash and not a column: the IL package models the phase behaviour — which is what decides whether an entrainer works — but omits the IL's own pure-component enthalpy, so a rigorous column energy balance is a follow-up. The separation shown here needs only the phase equilibrium. The IL also carries no molar mass in the databank, so mass-basis readouts show a dash; the mole-basis flash is exact.

Ionic liquidAzeotropeEntrainer
Effluent
Hpsep
Recycle GAS
Letdown
Lpsep
Offgas
Liquid Product

Hydrotreater HP separator (Chao-Seader)

The high-pressure separator on a hydrotreater: reactor effluent — mostly hydrogen, with light ends and liquid product — is flashed hot and at pressure to recover recycle gas overhead, then let down to release the dissolved gas from the product. This runs on **Chao-Seader**, the semi-empirical K-value method refiners actually use for hydrogen-rich hydrocarbon systems, and which the app offers but no example used. It is not a relabelled cubic: K = gamma*nu/phi builds the liquid fugacity from the Curl-Pitzer corresponding-states correlation and the activity from regular-solution theory, with SRK supplying only the vapour fugacity. On this feed it lands at 89.2% vaporised and 61.7% recycle-gas hydrogen, against Peng-Robinson's 91.7% / 59.3% and SRK's 90.4% / 60.2% — a real, if modest, difference on the number a recycle-compressor is sized from. Honest about what is approximate: the package ships as Chao-Seader, and the Grayson-Streed 1963 special coefficients for hydrogen are a documented follow-up rather than transcribed, so the HYDROGEN K itself comes from the general correlation and is approximate — it saturates the solver's K bound here. Read the hydrocarbon splits and the phase fractions, which is what the method is good at; do not read the H2 K-value as rigorous. Chao-Seader is a K-value method only, so enthalpy and density come from the inherited SRK — the pairing Aspen also uses.

Chao-SeaderHydrotreaterRecycle hydrogen
Crude
Preflash
Light ENDS
Fired Heater
crude
dist
cuts
btms
Qc
Qr
CDU
Naphtha
Kerosene
Diesel
Residue

Crude unit: why a CDU needs pumparounds

A pumparound draws liquid off a tray, cools it, and returns it a few trays higher. It removes no material — its entire job is heat. This example solves the same atmospheric crude unit twice, with its two pumparounds and without, and the difference is not a matter of degree. **With them the rigorous column converges and cuts correctly**: every product is dominated by the pseudocomponent it is named for (naphtha cut_1, kerosene cut_2, diesel cut_3 at 0.857, residue cut_4 at 0.677), the cut ladder spans 134 K, the pumparound duty reads back as exactly the -7.00 MW specified, and the reboiler sits at +2.25 MW against a 1.25 MW condenser. It solves in about 5 seconds. **Without them the rigorous energy-balance MESH does not converge at all** at this operating point — it stalls at a residual of 7.9e-3 with a component balance off by 0.45. That is the honest result, and it is the whole point: the feed arrives at 660 K from the fired heater carrying far more enthalpy than the overhead condenser's 1.26 MW can remove, and with no pumparound to take the rest there is no operating point for the solver to find. What comes back instead is FlowSim's screening carve, the fallback model, which **has no rigorous stage energy balance** — and it says so, in a warning on the result. Its answer is worth looking at precisely because it is the degraded one: the naphtha cut comes back dominated by the second-lightest pseudocomponent rather than the lightest, the residue by cut_3 rather than cut_4, the ladder collapses from 134 K to 85 K, and the reboiler duty goes negative at -5.23 MW — the column asking to be cooled rather than heated. Those numbers are the carve's, not a rigorous solution's, and this example is built so you can see the difference between the two rather than be handed one as the other. A pumparound is only meaningful against a rigorous stage energy balance, so this example runs `ns_energy` and `rigorous_draws`: under constant molal overflow the vapour rates are PINNED, and removing heat provably cannot move an internal flow. Specifying a pumparound therefore switches the energy balance on for you. **Bounded — read the size before you scale it up.** This is 12 stages on 4 pseudocomponents because that is what the rigorous-energy path can currently afford: the same column at Brent's full 20 stages and 8 cuts did not converge in 48 minutes, against 115 s on the constant-molal-overflow path. The cost is the flash inner loop, which profiling puts at 82% of the solve, evaluated once per unknown per Jacobian (332 unknowns at that size) by finite differences — and on petroleum pseudocomponents that loop is pure Python, because CoolProp has no entries for them. Analytic K-value derivatives are the fix at this size; the dense Jacobian's O(n^3) factorization is what binds at full commercial scale. Both are known, and this example is deliberately small rather than quietly slow.

Crude distillationPumparoundHeat integration
WET GAS
Chiller
KO DRUM
FREE Water
Sieve
DRY GAS

Gas dehydration: why the property package decides the answer

A wet pipeline gas at 70 bar and 40 C is chilled to 15 C, the condensed free water is knocked out, and a 4A molecular-sieve bed takes the rest down to the cryogenic 0.1 ppmv spec. It is the standard front end of every gas plant, and it is **one number wide**: how much water the gas holds at saturation. Everything downstream is arithmetic on that number — the knockout drum's liquid rate, the sieve's cycle time, the bed size, the regeneration duty. Here the feed carries 1500 ppmv (71 lb/MMscf). Chilling to 288 K drops the saturation limit to **313 ppmv (14.9 lb/MMscf)**, so 3.57 mol/s of essentially pure water (99.9 mol%) falls out in the KO drum for a 3.91 MW chilling duty, and the sieve carries the remaining 0.94 mol/s. A 4000 kg bed then sizes out at 2.69 m diameter by 0.96 m deep on a **7.8-hour cycle** — the 8-hour cycle real molecular-sieve dehydrators are built around — with 108 kW of regeneration duty and 11 kPa of bed pressure drop. This example runs on **CPA** (Cubic-Plus-Association) and not on a cubic, deliberately. Water in a hydrocarbon gas is the case a bare cubic equation of state is worst at: its hydrogen bonding is not a small correction to be absorbed into a binary interaction parameter, it is the thing that sets the answer. CPA adds a Wertheim association term on top of SRK and switches it on only for the hydrogen-bonding species, so hydrocarbons still behave exactly as SRK. **Bounded, and the bound is measured.** Against the McKetta-Wehe chart's ~60 lb/MMscf for methane at 100 F and 1000 psia, CPA lands at ~55, PR at ~50 and SRK at ~45 — CPA is the closest, and all three still underpredict. None of them has a cited methane-water binary interaction parameter, and extrapolating CPA's published n-alkane correlation (kij = 0.1915 - 0.026*n_carbon, fitted C3..C10) down to methane would fabricate the number that decides the answer, so it stays absent. Good for a first-cut dehydration duty; not a guarantee-grade contract number.

DehydrationCPAWater content
GAS CY
DUST CY
gas
solid
gas
solid
CY
Caught CY
Stack CY
GAS ESP
DUST ESP
gas
solid
gas
solid
ESP
Caught ESP
Stack ESP
GAS BH
DUST BH
gas
solid
gas
dust
BH
Caught BH
Stack BH

Dust collector selection: cyclone vs ESP vs baghouse

The same kiln offgas — 500 mol/s at 420 K carrying 8 mol/s of 20 micron dust (sphericity 0.7, GSD 2.2) — offered to the three gas-cleaning devices side by side, because choosing between them is a real design decision and the three models answer different questions. The **cyclone** catches **85.6%**. That number is not specified anywhere: it is computed from the particle size distribution against the device's own cut size, and its d50 lands at 10 microns — half the dust's mean size, so everything finer escapes. It is the honest ceiling of a device with no consumables and no electricity, and it costs the most fan power of the three here at **1555 Pa**. The **ESP** reaches **99.81%** by Deutsch-Anderson on the migration velocity and plate area — also predicted, not specified — at essentially no pressure drop. The **baghouse** reports **99.8%**, and this one you should read differently: its capture is the ``penetration`` you gave it, an INPUT. The baghouse model predicts pressure drop (37.7 Pa here, from the Cooper & Alley filter-drag law) and cloth area (1149 m2 at a 0.015 m/s air-to-cloth ratio) — not efficiency. Two of these three efficiencies are predictions and one is a specification, and a comparison that hides which is which is worse than no comparison. **Why three parallel trains and not one series train.** A cyclone roughing into a baghouse polishing is the standard industrial arrangement, and it cannot be drawn here: the cyclone folds its escaped dust back into the gas stream without a solids payload, so a second collector downstream sees no solids to catch. That is a modelling limitation, not a physical one, and it is stated rather than designed around. **Bounded:** the ESP's zero pressure drop is a model simplification (a real precipitator runs a few hundred Pa), and the pressure drops here are screening values from published correlations, not vendor guarantees.

SolidsGas cleaningCyclone
ORE
MILL
feed
over
under
Screen
Oversize
Product

Grinding circuit: what a size reduction costs

Ore at 1 mm is ground to a 100 micron P80 and screened at 150 microns. The number the example exists for is the **172.3 kW** the mill draws, and it is not a parameter — it is Bond's Law computed from the size reduction itself: `W = 10 x Wi x (1/sqrt(P80) - 1/sqrt(F80))` with sizes in microns gives 9.57 kWh/t at a Bond work index of 14, and 18 t/h of ore turns that into 172.3 kW. Halve the product size again and the law's inverse-square-root shape is what tells you the power does not halve — comminution is where a mineral plant's electricity goes, and this is the relationship that decides it. The screen then splits the ground product **27.9% oversize / 72.1% undersize**, and it genuinely sorts: the oversize leaves at a 247 micron mean against the undersize's 81 microns, from one 100 micron feed. The cut is applied to the real size distribution (GSD 2.0), not as a specified split fraction. **Open circuit, and that is a limitation rather than a choice.** A real grinding circuit recycles the screen oversize back to the mill, and it cannot be drawn here: a `mixer` flashes its outlet and drops the stream's solids payload, so the recycled ore arrives at the mill with no particle size and the mill rejects it. The same limitation stops a cyclone feeding a baghouse in series (see the dust-collector example). Stated here because an open circuit reports a *lower* circulating load and a *coarser* product than the closed circuit a plant actually runs.

SolidsComminutionBond's Law
Makeup
LP Steam
DA
Boiler
DSH
Steam

Steam utility island: deaerator, boiler, desuperheater

The three units that stand between raw makeup water and steam a turbine can accept, on the IAPWS steam tables. The **deaerator** takes 500 mol/s of 300 K makeup and 40 mol/s of LP steam and returns 540 mol/s of saturated liquid at 5 bar (425 K) for 3.23 MW. It is a direct-contact heater, so the heating steam does not leave — it condenses into the feedwater and shows up in the outlet flow. That is the point of the unit: the reason a plant heats feedwater by injecting steam into it rather than through a tube bundle is that boiling the water is what strips the dissolved oxygen out of it. The **boiler** then absorbs 26.6 MW into the water and fires 31.3 MW to do it — the gap is the stack loss, and it is the number a fuel bill is written against, not the absorbed duty. The **desuperheater** takes that 720 K steam down to a 660 K target by spraying 25.96 mol/s of water into it. The spray rate is SOLVED, not specified: you state the temperature you want and the unit finds the water that achieves it, which is how an attemperator is actually specified. Note the outlet is 566 mol/s, more than entered it, the spray water becomes steam. **Bounded:** the deaerator is an equilibrium model, so it reports no rate-based O2/CO2 stripping (there is no residual-oxygen ppb number here, which is what a real deaerator is guaranteed on), and the desuperheater assumes the spray fully evaporates.

SteamUtilitiesDeaerator
FEED
feed
dist
btms
Qc
Qr
COL
TOPS
BTMS

Shortcut column sizing (Fenske-Underwood-Gilliland)

Before anyone builds a rigorous column they size it in about a second, and this is that step — Aspen's DSTWU, the calculation every distillation design starts from. State the two keys and how well you want them separated, and the shortcut answers the four questions that set the capital cost. For a depropaniser feed (30% propane, 40% n-butane, 30% n-pentane) at 10 bar recovering **98% of the propane overhead and 98% of the n-butane in the bottoms**: **Fenske** gives 8.34 minimum stages — the count at total reflux, where you spend infinite energy to buy the fewest trays. **Underwood** gives a minimum reflux of 1.54 — the reflux at infinite stages, the opposite corner. Neither is buildable; the real column lives between them, and **Gilliland** interpolates: at 1.3x the minimum reflux you need **17.7 theoretical stages**, with **Kirkbride** putting the feed on stage 7.85. That is a little over twice the minimum stage count for 1.3 times the minimum reflux, which is the trade every column is designed on. The energy follows: 1.67 MW reboiler against a 1.35 MW condenser. **Bounded, and this is the important part.** These are screening numbers, not a design. The shortcut assumes constant relative volatility and constant molal overflow — it cannot see a pinch, a tangent, an azeotrope, or a temperature profile. Its job is to give a rigorous MESH column a starting point that converges, not to replace it. Run the `distillation` unit op on 18 stages with a feed at 8 to check it.

DistillationShortcutFUG
WELL
COMP
Export

Wellhead compression: what the reservoir gives and what it costs to move

A gas well is not a feed whose flow you type in. The rate is an OUTCOME of how hard the facility pulls on the reservoir, and this example starts there. The **well** runs the Vogel inflow-performance relationship: at a 250 bar reservoir pressure and a 5e-5 mol/s/Pa productivity index its absolute open flow is `J x p_r / 1.8` = **694 mol/s**, and the fraction of that you actually get follows `1 - 0.2(p_wf/p_r) - 0.8(p_wf/p_r)^2`. Holding 180 bar at the bottomhole delivers **306 mol/s, 44% of open flow**. Squeeze to 150 bar and it rises to 411; back off to 240 and it collapses to 49. The curve is deliberately not a straight line — that curvature is why compression pays for itself, and why the last increment of drawdown buys less than the first. **Compression is where the stage count earns its keep.** Taking that gas from 30 to 150 bar in ONE stage lands the discharge at **508 K (235 C)** — past what reciprocating machine valves and lube oil tolerate, before any efficiency argument. Split it into three with intercooling to 313 K and the discharge is **362 K**; four stages give 349 K. The temperature, not the power, is what sets the stage count on a real machine. **Read the reported duty carefully.** `duty` on this unit is the NET of the compression work and the intercooler heat removed, summed into one number — it goes from +2094 kW at one stage to -384 kW at three, not because compression got cheaper but because there is now intercooling to subtract. It is not shaft power, and this example does not present it as such.

UpstreamWellIPR
Biomass
PYRO
Syngas

Yield reactor: modelling a reaction nobody has kinetics for

Pyrolysis, gasification and cracking share a problem: the feed is not a set of molecules with a stoichiometry, it is biomass or coal or a heavy residue, and there is no reaction network to write down. What you have instead is a measured product slate from a pilot run. The **yield reactor** (Aspen's RYield) is the unit op for exactly that case — you give it the slate, it gives you a stream. Here 100 mol/s of feed goes to 823 K and comes out as 112 mol/s of gas at a specified mass yield (31% CO2, 28% water, 22% methane, 14% ethane, 5% hydrogen), for a **3.66 MW** heating duty. The mole count rises and the **mass does not**: the yields are normalised so the product mass equals the feed mass exactly, which is the entire contract of a yield reactor and the one thing it will not let you get wrong. **Be honest about what this is.** It has no kinetics, no equilibrium, no residence time and no temperature dependence of the slate — change the outlet temperature and the products do not shift, only the duty does. It is a way to carry a measured yield through a heat and material balance so the rest of the flowsheet is right; it predicts nothing about the reaction itself. If you have a rate law, use `kinetic_reactor`; if the system reaches equilibrium, use `gibbs_reactor`. Reach for this one when you have neither, which for solid-feed conversion is most of the time.

ReactorYieldRYield
Charge
RX
Still
Product
Residue

Batch campaign: a batch step inside a continuous flowsheet

Fine chemicals and pharma run batches, but a flowsheet is written in mol/s. These two unit ops reconcile that: they integrate the real batch physics over the batch, then report the products as the RATE that campaign delivers, so a batch step sits inside a continuous flowsheet the way a plant actually runs one. The **batch reactor** esterifies ethanol with acetic acid to ethyl acetate and water. It reaches **63.2% conversion** and stops, and that number is not a specification — it is the equilibrium. The reaction is reversible with an equilibrium constant of 4 (the forward and reverse pre-exponentials are given as 5.0e4 and 1.25e4), and solving `K = x(0.10+x)/(0.45-x)^2 = 4` for an equimolar charge carrying 10% water gives an extent of 0.285, which is 63.3% of the acid. Fischer esterification really does plateau there; a model that ran to completion would be describing a different reaction. **Turnaround time costs throughput exactly as reaction time does.** Two hours of reaction plus one hour of turnaround is a **3-hour cycle** and **2922 batches a year**, and the reactor is only reacting for **67%** of the time it is occupied. That fraction is the number that decides whether you need a second reactor, and it is invisible to a steady-state model. The **batch still** then takes the crude and recovers the ethyl acetate — the distillate comes off essentially pure, from a pot that started at 28.5 mol% ester — on its own longer 4-hour cycle, so the two units run at genuinely different campaign rates. **Bounded:** the flowsheet sees each unit's CYCLE AVERAGE, not the transient. A real plant has a surge tank between these two smoothing the pulses, and neither the concentration profile during the batch nor the still's changing overhead composition is visible downstream.

BatchEsterificationEquilibrium
Supply
FT
FT
CV
PT
PT
USER
PID
FIC
PID
PIC

Instrumentation: transmitters and controllers on the canvas

Field instruments are first-class wireable nodes here, not annotations. A **flow transmitter** and a **pressure transmitter** sit in the line, pass their stream through completely unchanged, and report their reading on a **signal wire** — a distinct edge kind that carries information rather than material — to a controller. In this let-down station the FT reads the **200 mol/s** flowing through it and the PT reads the **20 bar** downstream of the control valve. Each controller compares its reading against a setpoint and reports the measurement, the setpoint and its output. **These two controllers are report-only, deliberately.** Neither has an OUTPUT wire, so nothing is written back and the flowsheet solves once — this is the instrumentation and measurement layer on its own. Give a controller an output wire plus an `output_param` and the same machinery becomes a genuine closed loop: the output is written into the manipulated variable and the flowsheet re-converged through a Wegstein outer loop. **Bounded:** a signal edge never carries material, so it can never affect a mass or energy balance — which is exactly why a transmitter is safe to insert anywhere in a working flowsheet. The steady-state controller is proportional by default and therefore keeps a genuine offset (it converges the self-consistent operating point, not the setpoint); `integral` removes that offset. Derivative action needs a time history a single steady-state solve does not have.

InstrumentationControlTransmitter
FEED GAS
COLD Resid
COLD LIQ
1
2
3
4
5
6
1
2
3
4
5
6
BOX
P COLD
P WARM
P FREE

Multistream exchanger: one core, three streams, one free outlet

A cryogenic cold box is not a network of two-stream exchangers — it is one brazed-aluminium core with several streams exchanging heat simultaneously, and the **multistream exchanger** models it as such. Three streams share this core: 300 mol/s of 300 K feed gas being chilled, 250 mol/s of 190 K residue gas being rewarmed, and 60 mol/s of 200 K cold liquid. You specify outlet temperatures for **all but one** — 225 K for the feed gas, 280 K for the residue — and the remaining stream is the **free** one: its outlet, **230.1 K**, is not specified but SOLVED, because it is what closes the adiabatic energy balance across the core. That is the correct number of degrees of freedom for an adiabatic exchanger, and specifying all three would over-specify it. The **1.08 MW** duty and a **composite-curve pinch check against a 3 K minimum approach** come with it, so a specification that would need heat to flow the wrong way is rejected rather than reported. **Bounded:** this is a thermal feasibility and duty model, not a mechanical design. There is no core geometry, no layer stacking, no fin type, no per-stream pressure drop from passage dimensions — a real cold box datasheet needs all of those, and a vendor computes them from proprietary correlations.

Heat exchangeCryogenicCold box
FEED
feed
dist
btms
COL
TOPS
BTMS

Tray efficiency: 20 real trays are not 20 stages

Every equilibrium column model quietly assumes each tray reaches equilibrium. Real trays do not, and the gap is not small enough to ignore when you are buying a shell. The same depropaniser is solved twice at 20 trays, a 2.5 reflux ratio and a 50/50 split. As **20 equilibrium stages** it puts **99.61%** propane overhead. As **20 actual trays** on the rate-based model it manages **96.63%** — the tower is the same height and the separation is measurably worse, because the model applies an efficiency instead of assuming one. Left to itself it derives that efficiency from the feed's relative volatility and liquid viscosity through the **O'Connell** correlation; give it a `stage_efficiency` and it uses yours, and at a punishing Murphree 0.5 the overhead drops further to **95.33%**. The practical reading: an equilibrium model sized this column at 20 trays and the tray efficiency spent roughly three points of product purity. Size on equilibrium stages and you will under-build the tower — that is what the efficiency is for. **Bounded:** this applies a single overall efficiency to every tray, which is a screening treatment. It is not a rigorous rate-based column — for genuine two-film Maxwell-Stefan transfer with per-stage interface composition and energy coupling, use `nonequilibrium_distillation` instead. O'Connell itself is a correlation fitted to commercial tray data, so it carries that scatter.

DistillationTray efficiencyO'Connell
FEED
Pretreat
Sugar Liquor
Fresh Water
WASH MIX
ENZ
FERM
Broth

Lignocellulosic ethanol — pretreatment + enzymatic hydrolysis + real fermentation

The bioresource-engineering gap this closes: two existing 'corn-ethanol' showcases in this catalog (`superheated-steam-drying-loop`, `bioethanol-mvr-stillage`) are both **downstream-only** — drying and distillation on an already-fermented feed or a generic surrogate solid, with no bioreactor anywhere in either flowsheet. This is the first biofuel showcase that actually runs a real fermentation: `pretreatment` (dilute-acid/steam) solubilizes part of the lignocellulosic feed into fermentable sugars, the existing generic `enzymatic_reactor` (Michaelis-Menten) saccharifies the cellulose fraction left behind, and the existing `bioreactor` (Monod chemostat) ferments the resulting sugar to ethanol — the real kinetics kernel, not a spec-based separator standing in for the biology. Bounded, and stated plainly: the `pretreatment` conversion fraction (hemicellulose -> sugar) is a **caller-specified design input** — a measured/vendor yield, not a predicted dilute-acid severity-factor (log R0) correlation; inventing one would fabricate exactly the number this flowsheet's answer depends on. Real lignocellulose chemistry (cellulose, hemicellulose, xylose, glucose) carries **no enthalpy or density data anywhere in this codebase's thermo databank** — every sugar was checked directly and none has a liquid-density or ideal-gas-Cp correlation, so a flowsheet naming them by their real identities cannot solve at all. Real, differently-named organics with full databank coverage stand in 1:1 instead (glycerol for the lignocellulosic solid, acetic acid for the hemicellulose-derived sugar liquor, methanol for glucose) — the same generic-surrogate posture already established elsewhere in this codebase (e.g. ethanol standing in as the dissolved substrate in the perfusion-bioreactor tests). Ethanol itself is the one real target molecule in the chain — no surrogate needed. Kinetic constants (mu_max, Vmax, Km, yields) are illustrative, not fit to a published fermentation study — the same posture the LHHW methanol-synthesis showcase states for its own rate law. The pentose-sugar liquor from pretreatment is not fermented in this showcase (many industrial processes do not ferment it with ordinary yeast either) — it reports to its own product stream rather than being silently discarded. No downstream distillation is attempted: a rigorous VLE column needs every component priceable, and the fermentation broth carries an unpriced 'biomass' pseudo-component (the same class of limitation this session's Gibbs-reactor work hit with elemental carbon) — ethanol recovery is the documented next real step, not modeled here.

Bioresource engineeringLignocellulosic ethanolPretreatment

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