MaximaLabs
Back to gallery
Port Arthur, Texas, USA

Crude distillation unit (full train) — a PENG-ROBINSON process flowsheet

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

167 views 3 forks

Crude
Washwater
hot
cold
hot
cold
HX1
Desalt MIX
Desalter
Brine
HX2
Fired Heater
crude
dist
cuts
btms
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
What this showcases
  • Rigorous PENG-ROBINSON thermodynamics, solved by the same engine every simulation runs on.
  • 7 unit operations modeled: HX1, Desalt MIX, Desalter, 3× COND, CDU, Reflux DRUM, 3× Strip HGO.
  • Focus areas: Crude, CDU, Desalter, Side-strippers, Reflux drum.
Specification
Thermodynamics
PENG-ROBINSON
Components
naphtha, kerosene, light_gas_oil, heavy_gas_oil, residue, water
Unit operations
HX1Desalt MIXDesalter3× CONDCDUReflux DRUM3× Strip HGO
Open in workspace

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

Read the step-by-step guide
Python SDK

Reproduce this exact result from Python — the real client.get_example() → run_and_wait() path, not a mockup.

from flowsim.sdk import FlowSimClient

client = FlowSimClient()
example = client.get_example("crude-distillation-full-train")
sim = client.create_simulation(example["title"], example["flowsheet"])
result = client.run_and_wait(sim["id"])

print(result["status"])              # "converged"
streams = client.streams(sim["id"])

Related models

Jamnagar, Gujarat, India

Crude distillation (preset cuts)

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

North Sea (Brent Blend), landed at Rotterdam, Netherlands

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.

LNG receiving and export terminal

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.

Ichthys LNG, Darwin, Northern Territory, Australia

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 C₅/C₆ 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% CO₂ removal leaves 33 ppmv, and at the coldest point in the train (115.9 K) the solid-CO₂ 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.

NGL recovery plant, Permian Basin, Texas, USA

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

Reference model

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.

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