Pressure Swing Adsorption — H2 purification — a PENG-ROBINSON process flowsheet
A 5 bar shift-gas feed (H₂/CO₂, the dominant impurity leaving a steam-methane-reforming shift reactor) is purified across a real cyclic 2-bed PSA unit: while one bed adsorbs CO₂ at high pressure (delivering H₂-rich product), the other regenerates at low pressure, swept countercurrently by a slipstream of that product to desorb CO₂ 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 uses) to a periodic steady state.
Modeling assumptions & limitations
- 1This is a bounded 2-bed, 2-step v1 — a real industrial H₂-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)
- 2The CO₂ Langmuir isotherm is screening-order (a defensible physical magnitude for CO₂ on activated carbon/zeolite near ambient T), not fitted to one cited adsorbent's published isotherm
- 3Other real shift-gas impurities (CH₄, CO, N₂) aren't modeled, only the dominant CO₂ — see the module docstring for the complete scope.
182 views 0 forks
- Rigorous PENG-ROBINSON thermodynamics, solved by the same engine every simulation runs on.
- 1 unit operations modeled: PSA.
- Focus areas: PSA, Pressure swing adsorption, Hydrogen purification, Cyclic process, Adsorption.
- Thermodynamics
- PENG-ROBINSON
- Components
- h2, co2
- Unit operations
- PSA
Opens in a new tab, loaded straight into the app — no setup.
Read the step-by-step guideReproduce this exact result from Python — the real client.get_example() → run_and_wait() path, not a mockup.
from flowsim.sdk import FlowSimClient
client = FlowSimClient()
example = client.get_example("psa-h2-purification")
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
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.
Ammonia cracking + H2 purification
Green ammonia is a widely proposed hydrogen carrier for shipping — easier to liquefy and transport than liquid H₂ itself, then cracked back to H₂ at the point of use. A fixed-conversion reactor dissociates NH₃ (2 NH₃ → N₂ + 3 H₂, 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 H₂.
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% CO₂ — typical of a natural-gas- or coal-fired flue gas, a much higher CO₂ 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 CO₂/N₂/O₂/H₂O selectivity (real published 13X studies show CO₂ adsorbing roughly an order of magnitude more strongly than N₂/O₂, and water more strongly still, competing for capacity), not pinned to one specific cited paper's exact figures — disclosed as representative, matching MaximaLabs'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% CO₂ capture rate — not assumed/rounded to a marketing-friendly number.
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.
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.
Cement kiln calcination + CO2 liquefaction
Preheated limestone (CaCO₃) enters an indirectly-heated rotary kiln that calcines it toward CaO, releasing a CO₂-rich off-gas; the gas passes a knockout drum, then is compressed and cooled to liquefy the CO₂ for transport/storage.