MaximaLabs
Separations

Rigorous multi-stage separations engine

The distillation column is solved with the Boston-Sullivan inside-out method — a tridiagonal inner loop on fixed K-values and enthalpies, with an outer loop refreshing both from the thermo package — and the flowsheet's recycle loops converge with Wegstein acceleration.

Ethanol/water/hexane
Azeotropic column
Decanter
Ethanol (bottoms)
Organic reflux
Aqueous purge

A heterogeneous azeotropic distillation: the column's overhead feeds a three-phase decanter, splitting organic entrainer from the aqueous purge — draggable, live on this page.

See the math

The exact governing equations the column solver closes at every stage — material balance, phase equilibrium, mole-fraction summation, and the enthalpy balance — fetched live from the same catalog the in-app math panel renders.

Mi,j:  li,j1+vi,j+1+fi,jli,jvi,j=0M_{i,j}:\; l_{i,j-1} + v_{i,j+1} + f_{i,j} - l_{i,j} - v_{i,j} = 0
Ei,j:  yi,j=Ki,jxi,jE_{i,j}:\; y_{i,j} = K_{i,j}\, x_{i,j}
Sj:  iyi,j1=0S_j:\; \sum_i y_{i,j} - 1 = 0
Hj:  Lj1hj1L+Vj+1hj+1V+FjhFLjhjLVjhjVQj=0H_j:\; L_{j-1}h^L_{j-1} + V_{j+1}h^V_{j+1} + F_j h^F - L_j h^L_j - V_j h^V_j - Q_j = 0
Symbols
M
Material-balance residual on a stage — in minus out; driven to zero at convergence (the 'M' of MESH)
l
liquid flow leaving a stage [mol/s]
v
vapour flow leaving a stage [mol/s]
f
feed flow onto a stage [mol/s]
E
Equilibrium residual — the K-value relation y=Kx, satisfied at convergence (the 'E')
K
equilibrium ratio K=y/x — how strongly a component favours the vapour; K>1 climbs toward the distillate, K<1 sinks toward the bottoms
y
vapour mole fraction on a stage
x
liquid mole fraction on a stage
S
Summation residual — the mole fractions on a stage must add to 1 (the 'S')
H
energy-balance (entHalpy) residual on a stage — closed at convergence (the 'H')
L
internal liquid traffic between stages [mol/s] — set by the reflux
V
internal vapour traffic between stages [mol/s] — set by the boilup
h^L
liquid molar enthalpy [J/mol]
h^V
vapour molar enthalpy [J/mol]
h^F
feed molar enthalpy [J/mol]
Q
reboiler/condenser duty [W] — the energy in and out that drives the whole separation
j
stage index (1 = top)
i
component index

Live from the same catalog the app's own "math" tab renders — not a screenshot.

Distillation column stage profile — per-stage temperature and K-value charts from a converged MESH solve

A converged column's per-stage temperature and K-value profile — the actual MESH output, not an illustration.

Engine capabilities

What this solver actually handles, not a feature-list promise.

Azeotropic distillation

A three-phase decanter splits the overhead into organic and aqueous phases around a heterogeneous azeotrope — the entrainer loop closed on the same MESH column solver.

Dividing-wall columns

A single rigorous shell modeling the coupled prefractionator and main-column sections of a dividing-wall column, not two separate towers stitched together.

Liquid-liquid extraction

Multistage LLE with the same activity-coefficient thermo the column uses, for solvent-based separations a simple flash can't resolve.

Reactive distillation

Reaction and separation solved simultaneously stage-by-stage — conversion and split converge together instead of a reactor-then-column approximation.

Extractive distillation

A high-boiling solvent shifts relative volatility enough to break a tight or azeotropic split, solved on the same rigorous MESH stages.

Pressure-swing azeotropic distillation

Two columns at different pressures shift an azeotrope's composition enough to cross it without an entrainer — sized and converged together.

Live column solve-time benchmark

The real Boston-Sullivan MESH solver, timed on this server at increasing stage counts — not example figures.

Stage countReflux ratioSolve timeResidualStatusRun live
515.00.97 s8.24e-7Passed
815.012.31 s7.11e-4Passed
1215.016.93 s6.64e-4Passed

One real, timed solve per stage count (median-of-repeats isn't practical here — a rigorous MESH column solve is second-to-tens-of-seconds scale, unlike a millisecond control-law solve) — measured on this server, not fabricated.

Scripted from Python

The same engine, called from the flowsim SDK.

from flowsim.sdk import FlowSimClient

client = FlowSimClient()
sim = client.create_simulation("Ethanol-water column", flowsheet)
client.run(sim["id"])
print(client.streams(sim["id"]))  # every stream table entry, straight off the converged column

See it on your own process

Every number on this page comes from a real, converged flowsheet — open the workspace and run one yourself.

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