On this page

Unit operation equations

Every equation the untangle.bio engine uses: how flows move through a flowsheet, how each unit operation splits mass between its outlets, how it is sized, and how its cost scales with size. Taken from the code, not from a textbook.

Each operation opens with a worked example: a representative feed run through the real equations and the real cost estimator, at the stated flow and at ten times it. A few examples are withheld while the model behind them is revised; their equations and cost cards stay. Below that are its defaults, its mass balance, its sizing and energy equations, the conditions under which it refuses to give a number, and a cost card read straight from the cost database. Function names point into backend/services/unit_operation_equations.py unless another module is named. How these feed the plant cost is in the techno-economic analysis docs.

All unit operations

How flows are calculated

Every stream is a volumetric flow plus a concentration for each component. Each unit operation turns that into mass flow, splits the mass between its outlets, and converts back to concentrations. Mass is conserved exactly, water included. Volume is never assumed: it is recomputed from the masses and the density of each component.

Stream representation

stream        Q [L/h],  c_i [g/L],  T,  pH,  P,  vapour fraction v
mass flow     m_i [g/h] = c_i · Q                (kg/h = c_i · Q / 1000 in the thorough tier)
back          V = Σ m_i / ρ_i;   c_i = m_i / V

Solving the flowsheet

ORDER          steps are solved in topological order (Kahn's algorithm on the canvas);
               a step may only draw from an earlier step
INLET          Q_in = Q_source_outlet · f,   0 < f ≤ 1;   Σ f claimed from one outlet ≤ 1
MIXING         Q_mix   = Σ_k Q_k
               c_i,mix = Σ_k c_i,k·Q_k / Q_mix
               T_mix   = Σ T_k·Q_k / Σ Q_k        (thorough tier: Σ ṁ·cp·T / Σ ṁ·cp)
               pH_mix  = Σ pH_k·Q_k / Σ Q_k      (thorough tier: from H⁺ with buffer capacity)
PARAMETERS     catalogue defaults, overridden by the user's values
DISPATCH       operation_type → one equation function (the sections below);  unknown → pass-through
DENSITY        every outlet:  m_i = c_i · Q_out
CLOSURE        V_liq = Σ m_i / ρ_i;   V = V_liq·(1 − v) + V_gas (ideal gas at T, P)
               c_i ← m_i / V;   Q_out ← V
FORWARD        drawn handle → matching stream type → light/heavy class;
OUTLET         otherwise the outlet carrying the most target mass
Default component density (g/mL)
water 1.00 · alcohol 0.80 · lipid 0.92 · terpene 0.90 · cell 1.10 · polymer 1.20
organic acid, vitamin, antibiotic, metabolite, other 1.30 · protein 1.35 · amino acid, polyphenol 1.40
polysaccharide 1.50 · sugar 1.55 · salt 2.16

Mass balance inside a unit operation

m_in,i    = c_i · Q_feed
m_ret,i   = retention law of the operation (rejection, capture, partition, equilibrium …)
m_perm,i  = m_in,i − m_ret,i
water     split by volume share, not back-calculated:  m_w,ret = m_w,in · share_ret
          added water (wash, buffer, dilution) joins the outlet it enters
c_out     = m_out / V_out
dry matter  DM = Σ c_i  over non-water components
purity      P = Σ c_target / Σ c_j     j excludes water and a declared solvent carrier
yield       = m_target,outlet / m_target,inlet    (1 if the step makes the target)

Outlets and where they go

HEAVY   heavy_phase, retentate, concentrate, solid, brine, off_gas, magma
LIGHT   light_phase, filtrate, permeate, product, liquid, waste, volatiles, condensate, diluate, organic_phase
ports   bioreactors [broth, off_gas];  dryers [vapour → vent, product];  others [light, heavy]
billing consumed by a later step → internal;  vapour → vent;  sink → product or waste
        billable wastewater Q_ww = Σ Q_liquid · (1 − recycled) · (1 − consumed)

Recycle loops (thorough tier)

draw        m_R,i = m_out,i · φ,   φ ∈ [0, 0.99];   forward keeps m_out · (1 − Σφ)
tear        guessed recycle masses x, recomputed masses g after one pass
residual    r = max_k |g_k − x_k| / max(|g_k|, |x_k|, 1e-9)      converged when r < 1e-6, ≤ 60 passes
Wegstein    s = Δg/Δx;   q = clamp(s/(s − 1), −5, 0.5);   x_next = max(q·x + (1 − q)·g, 0)
divergence  gain ‖Δg‖₁/‖Δx‖₁ ≥ 1.0 for 4 passes in a row → declared divergent
closure     per step |m_in − m_out| / m_in ≤ 1e-4;   energy ≤ 5 % (10 % reactive)

How equipment cost scales

Each unit operation has a cost entry: a purchased cost at a reference size, an exponent, and a largest single unit. That is the flow basis. Operations whose size is set by something other than flow replace it with their own basis: bed volume for columns, vessel volume for reactors, cake area for filters, bowl geometry for the disc stack, membrane area as a multiplier. The cost card under each operation shows its entry as it stands in unit_operation_costs.json.

Power law and parallel units

SINGLE UNIT
  C = C_ref · (Q / Q_ref)^n
      C_ref = base_cost_usd,   Q = design inlet flow of the step [L/h],   n = scaling_exponent

PAST THE CEILING
  Q_cap = ceiling · 1.10          ceiling = max_capacity_by_grade[grade] or max_capacity_lhr
  N     = ⌈Q / Q_cap⌉
  C     = N^r · C_ref · ((Q/N) / Q_ref)^n            r = repeat_unit_exponent, default 0.90

  Above the ceiling the cost grows about as Q^0.90, not Q^n: the exponent collapses to the
  repeat-unit exponent, because the plant buys more identical machines.

Other sizing bases

VESSEL VOLUME   bioreactors, conversion reactor, enzymatic hydrolysis, digester, refold
  N = ⌈V / V_max⌉;   C = N^r · C_ref · ((V/N) / V_ref)^n
  V_ref = reference_volume_L (else Q_ref · 48);   V_max microbial 500 000, mammalian/insect 25 000, plant cell 100 000 L
  anaerobic vessels use a commodity tank anchor: $1.388M at 3 785 000 L
CAKE AREA       filter press, rotary drum, belt
  N = max(1, ⌈A/A_max⌉, ⌈Q/Q_cap⌉);   C = N^r · C_ref · ((A/N) / A_ref)^n
PACKED BED      chromatography, activated carbon
  N = ⌈V_bed / V_max⌉;   C = N^0.90 · max(SKID + C_ref · ((V_bed/N)/V_ref)^0.75, floor)
DISC STACK      C = N · C_ref · (V_bowl / V_bowl,ref)^n
MEMBRANE AREA   C × clamp(A / A_nominal, 1/20, 20)^0.85
EVAPORATORS     C × N_effects^0.70  (N ≤ 7),   or × 1.8 for MVR

Adjustments, in order

1  floor          C = max(C, cost_floor_usd)                     flow and volume bases
2  facility grade C × G[plant grade] / G[anchor_grade]               not for bed basis or grade-independent entries
3  membrane area  × ratio^0.85  (capped where the entry declares a cap)
4  effects        × N^0.70 or × 1.8 (MVR)
5  CEPCI          × CEPCI[cost year] / CEPCI[basis year]             all entries are 2026, so 1.0 today
6  installed      = purchased × installation_factor
Facility gradeG
commodity_bulk0.72
chemical0.80
food_grade1.00
industrial_biotech1.15
single_use1.20
food_gmp1.30
pilot_plant1.70
pharma_gmp2.00
sterile_fill_finish2.40

Batch-window design flow (pharma grades)

Downstream of a batch or fed-batch vessel on a pharma_gmp or sterile_fill_finish plant,
equipment is sized to process one harvest inside a window, not at the annual average flow:

  F        = max(1, t_cycle / (n_vessels · t_window))
  Q_design = Q_avg · F                  capex only; opex stays on Q_avg

  window  8 h: centrifuges, depth filtration, MF, UF, ion exchange, SEC, RP, HIC, membrane chromatography
          9 h: affinity        2 h: viral inactivation

From equipment cost to cost per kg

CAPITAL (itemised direct fixed capital, per facility grade)
  PC     = Σ purchased equipment (incl. seed train and GMP support)
  TPDC   = PC + installation + PC·(instrumentation + piping + insulation + electrical + buildings + yard + auxiliary)
  TPC    = TPDC · (1 + engineering + construction)
  DFC    = TPC · (1 + contractor fee + contingency)
  FCI    = DFC + wastewater plant installed (× 3.0)
  TCI    = FCI + working capital + start-up (fraction × DFC)
  DFC/PC ranges from 3.67 (chemical) to 8.37 (pharma_gmp) and 9.92 (sterile fill-finish)

OPEX
  maintenance 0.05·FCI,  insurance 0.01·FCI,  local taxes 0.015·FCI,  depreciation 0.10·FCI (10 yr)
  operators  N_OL = √(6.29 + 31.7·P² + 0.23·N_np)      P = solids steps (≤ 2), N_np = other steps
  labour     = operators per shift · relief · 1.18 · wage
  overhead   = (labour + maintenance) · overhead fraction
  energy     P [kW] = kW per m³/h · Q/1000;   $/yr = P · hours · price    (0.10 $/kWh, steam 18 $/GJ)
  consumables  C = C_catalogue · (Q/Q_ref)^k    k = 1 for volume-driven, k = n for spare parts
  OPEX       = fixed + labour + QC + overhead + energy + consumables + utilities + wastewater + raw materials
  hours      8000 per year by default

COST PER KG
  COGS/kg    = OPEX / annual product mass       product = m_product · hours · (1 − batch failure)
  MSP        = price at which the cash-flow schedule has NPV = 0
  screening  capital charge/kg = CRF · installed capex / kg,   CRF = i(1 + i)^n/((1 + i)^n − 1) = 0.163

Bioreactors

All four bioreactor types run one model (bioreactor_separation with fermentation_kinetics.simulate_fermentation). The type only picks the mode: fed_batch → fed-batch; continuous → continuous (chemostat); everything else → batch. airlift also switches the oxygen-transfer correlation. The fermenter is priced on its vessel volume, which comes from the cycle time the kinetics produce.

Bioreactors stirred_tank_bioreactor fed_batch_bioreactor continuous_bioreactor airlift_bioreactor

Grows cells on a sugar and nitrogen feed and turns the substrate into biomass and product, run as a batch, fed-batch, continuous or air-lift culture.

Worked example Stirred Tank Bioreactor · stirred_tank_bioreactor

Scenario: Batch yeast ethanol fermentation

Set beyond the catalogue defaults: organism = yeast, oxygen_regime = anaerobic, temperature_c = 32, fermentation_temperature = 32

Ethanol titer
41.8 g/L
Productivity
1.51 g/L/h
Batch cycle
30 h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductOff gas
Flow, L/h1,0001,00023,200
Glucose, g/L1008.16–
Ammonium Sulfate, g/L2520.9–
Yeast (S. cerevisiae), g/L–7.5–
Ethanol, g/L–41.9–
V_work = Q t_cycle;  V_vessel = 1.25 V_work
V_work = 1,000 L/h x 30 h = 30,000 L;  V_vessel = 1.25 x V_work = 37,500 L

Purchased cost: $240k for a 37,500 L vessel (vessel-volume basis, feed 1,000 L/h) (cost floor); $539k for a 430,000 L vessel (vessel-volume basis, feed 10,000 L/h).

Worked example Fed-Batch Bioreactor · fed_batch_bioreactor

Worked example withheld while this model is revised.

Worked example Continuous Bioreactor (Chemostat) · continuous_bioreactor

Worked example withheld while this model is revised.

Worked example Air-Lift Fermentor · air_lift_fermentor

Scenario: Aerobic yeast culture producing lactase in an air-lift

Modelled with the stirred-tank oxygen-transfer and agitation terms; an air-lift has no impeller, so cycle time and power are indicative.

Set beyond the catalogue defaults: organism = yeast

Lactase titer
2.71 g/L
Cell density
9.85 g/L
Batch cycle
45.3 h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductOff gas
Flow, L/h1,0001,00014,000
Glucose, g/L408.35–
Yeast (S. cerevisiae), g/L–10–
Lactase (beta-galactosidase), g/L–2.75–
V_work = Q t_cycle;  V_vessel = 1.25 V_work
V_work = 1,000 L/h x 45.3 h = 45,300 L;  V_vessel = 1.25 x V_work = 56,600 L

Purchased cost: $645k for a 56,600 L vessel (vessel-volume basis, feed 1,000 L/h); $3.57M for a 604,000 L vessel (vessel-volume basis, feed 10,000 L/h) (2 units in parallel).

bioreactor_separation, _run_fermentation_kinetics · fermentation_kinetics.simulate_fermentation, size_production_vessel · gases in fermenter_gas_balance

ParameterDefaultNote
titer_basispredictedspecified, stoichiometric
substrate_conversion X0.95fed-batch 0.92, continuous 0.90, airlift 0.80
product_titer / cell_density2 / 12 g/Lused when specified
fermentation_temperature37 °C
head_pressure_bar / O₂ fraction0.5 / 0.2095
aeration_vvm0.5 aerobic, 0 anaerobic
specific_power_kw_m32.0 aerobic, 0.3 anaerobicmax 5.0
growth_modelhaldanemonod, contois
feed_substrate_g_l500fed-batch
dilution_rate_per_h0.30·μmaxcontinuous
host defaultsμmax 0.4, Y_XS 0.4, Y_PS 0.1, Y_XO2 1.0, Ks 0.1, K_O2 1e-4, m_s 0.03, m_O2 0.02, k_d 0.02, Ki 200

Yields

order        user value → molecule database → stoichiometric estimate → host Y_XS (biomass) → host y_ps
degree of reduction   γ = (4C + H − 2O − 3N)/C
stoichiometric        Y_Cmol = min(1, γ_S/γ_P);   Y_theo = Y_Cmol·(MW_P/C_P)/(MW_S/C_S);   Y = 0.65·Y_theo
biomass ceiling       D_G = 200 + 18(6 − C)^1.8 + exp{[(3.8 − γ)²]^0.16·(3.6 + 0.4C)}      (Heijnen & van Dijken 1992)
                      −ΔG_cat = 118·γ aerobic, 40 anaerobic
                      Y_X,max = 1/(1 + D_G/ΔG_cat);   Y_XS clamped to it
element check         (Y_XS, Y_i) projected onto a feasible C/H/O/N/electron balance; unlocked yields only move down

Oxygen supply

u_g      = vvm·V/60 / (πD²/4),   D = (4V/(π·H/D))^(1/3)
kLa      stirred, coalescing       3600 · 0.026 · (P/V)^0.40 · u_g^0.50      (van 't Riet 1979)
         stirred, non-coalescing   3600 · 0.002 · (P/V)^0.70 · u_g^0.20
         bubble column             3600 · 0.32 · u_g^0.7;   airlift × 0.7
         × viscosity penalty (1 + k_visc·X)^n_visc
C*       water solubility at T and P_abs × 10^−(0.14·I + 0.014·c_org)   factor [0.3, 1]
OUR_max  = 0.90 · (vvm·60/24.5) · y_O2 · 32   g/(L·h)                    gas feed ceiling

Kinetics (adaptive Euler, dt 0.0005–0.25 h)

temperature   m_G = 4.5·exp[−(69000/8.314)(1/T − 1/298)];   m_s, m_O2 × m_G(T)/m_G(T_ref)
pH            μmax × r(pH)/r(pH_opt),   r(x) = 1/(1 + 10^(pH_low − x) + 10^(x − pH_high))
substrate     Monod S/(Ks + S);  Haldane S/(Ks + S + S²/Ki);  Contois S/(Ksx·X + S)
dissolved O₂  kLa·(C* − C) = [μmax·f_S·C/(C + K_O2)/Y_XO2 + m_O2]·X          quadratic in C
product       f_P = max(0, 1 − P/Pmax)^n                                        Levenspiel
growth        μ = μmax · f_S · f_O2 · f_P;   if OUR > OUR_max:  μ ≤ (OUR_max − m_O2·X)·Y_XO2/X
uptake        q_s = μ/Y_XS + m_s + β·f_P/Y_PS                                   Herbert–Pirt
balances      dX/dt   = (μ − k_d − D)·X
              dP/dt   = (α·μ + β·f_P)·X − D·P,   α = Y_PS/Y_XS               Luedeking–Piret
              dS/dt   = −q_s·X + D·(S_f − S)
              intracellular product ≤ 0.30 g/g DCW (0.35 inclusion bodies)
DO control    below 0.5·setpoint, stirrer speed N/N₀ rises (≤ 3);  P/V = P₀·(N/N₀)³
FED-BATCH     V₀ = 0.45·V_max
              on demand    F = min(0.02·V_max, [q_s·X·V + (0.05·Ki − S)·V] / S_f)
              exponential  plan = (μ_set/Y_XS + m_s)·X·V,  μ_set = 0.25·μmax
CONTINUOUS    washout if D + k_d > μmax·f_S(S_feed);  steady state after 5/D at < 0.2 %/h change
STOP          harvest titer → productivity peak (P/(t + t_turnaround) < 0.95 × max) → washout/steady
              → vessel full → substrate spent → stall (μ ≤ 0.02·μmax) → time limit (200 h)
HEAT          metabolic 14.4 kJ/g O₂ × OUR (anaerobic 0.55 kJ/g substrate) + agitation − evaporation

Mass balance of the broth

SPECIFIED TITER
  S_X = X/Y_XS,   S_P = P/Y_PS,   S_growth = the binding one
  S_required = S_growth / (1 − f_m)                 f_m = maintenance fraction ≤ 0.5
  fed-batch feed  F = (S_req + R − S₀) / (1 − (S_req + R)/c_f),   R = 3 g/L residual
  shortfall       X, P × S_available/S_required  (a locked titer is refused instead)
  nitrogen        X ≤ N_available / f_N,   f_N = 28.014/246.26  (biomass C10H18O5N2)
PREDICTED / STOICHIOMETRIC
  S_consumed = X·S_in;   X = Y_XS·S_consumed;   P = Y_PS·S_consumed    (or from the integrator)
  titer ceiling   per product min(solubility/5, top of typical range), class wall when a titer is declared
GASES (element balance, g per L broth)
  CO₂ = C_substrate − C_biomass − C_products
  NH₃ = max(0, N_out − N_substrate);   H₂O = (H_in + H_NH3 − H_out)/2
  O₂  = (O_out + O_in,CO2/H2O − O_in)/2        anaerobic: routed to an electron sink (H₂)
  water stripped = 1.20 · air per L · [W(T, 1) − W(20 °C, 0.5)] · 1000,   ≤ 5 % of liquid
VOLUME
  Q_out = (m_in + Q_fed)·1000 / (1000 − g_net),   g_net = O₂ + CO₂,fixed − CO₂ − H₂O,stripped

Sizing (sets capex)

cycle       fill = drain = 0.5·(V_unit/1000)^0.35 h;  sterilise 1.5;  inoculate 0.5;  clean 2.0 h
batch       V_work = Q · t_cycle   (fixed point with n vessels);   V_vessel = V_work · 1.25
continuous  V_work = Q / D;         V_vessel = V_work · 1.25
n           = ⌈V_vessel / V_max⌉      V_max microbial 500 000, mammalian/insect 25 000, plant cell 100 000 L
seed train  stages N = ⌈ln(V_p/V₀)/ln(1/r)⌉ ≤ 5,  r = 0.10 microbial / 0.20 mammalian,  V₀ 500 / 800 L
            each stage priced on its own volume × n_trains^0.90
capex       C = n^0.90 · C_ref · ((V_vessel/n) / 48 000 L)^0.65,   floor $150k
anaerobic   commodity tank anchor $1.388M at 3 785 000 L  (NREL F-300)
  • Refused: aeration on an anaerobic step, no usable nitrogen source, a declared titer the substrate or kinetics cannot reach, no growth from the pitch, CO₂ fixation beyond the CO₂ fed.
  • The perfusion bioreactor was removed on 2026-09-23. A flowsheet that still names it gets a named refusal pointing to continuous_bioreactor.
Cost scaling stirred_tank_bioreactor
C = $832k · (V / 48,000 L)^0.65
Exponent n
0.65
Base cost
$832k at 1,000 L/h
Largest single unit
5,000 L/h
Largest vessel
500,000 L
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
2.0
Cost floor
$150k
Power
60 kW per m³/h
Cost scaling fed_batch_bioreactor
C = $1.06M · (V / 48,000 L)^0.65
Exponent n
0.65
Base cost
$1.06M at 1,000 L/h
Largest single unit
5,000 L/h
Largest vessel
500,000 L
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
2.1
Cost floor
$150k
Power
120 kW per m³/h
Cost scaling continuous_bioreactor
C = $915k · (V / 48,000 L)^0.65
Exponent n
0.65
Base cost
$915k at 1,000 L/h
Largest single unit
5,000 L/h
Largest vessel
500,000 L
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
2.1
Cost floor
$150k
Power
17 kW per m³/h
Cost scaling airlift_bioreactor
C = $666k · (V / 48,000 L)^0.65
Exponent n
0.65
Base cost
$666k at 1,000 L/h
Largest single unit
5,000 L/h
Largest vessel
800,000 L
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
2.0
Cost floor
$150k
Power
30 kW per m³/h

Reactors & biomass processing

Conversion reactor conversion_reactor enzymatic_hydrolysis

Converts a feed component into a product in a stirred reactor, by a chemical reaction or by enzymes breaking down a polymer such as cellulose.

Worked example Conversion Reactor · conversion_reactor

Scenario: Saccharifying liquefied starch to glucose

Set beyond the catalogue defaults: substrate_component = Maltodextrin (DE 10), product_component = Glucose

Maltodextrin converted
90 %
Glucose out
304 g/L
Reactor volume
30,000 L

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h1,000987
Maltodextrin (DE 10), g/L30030.4
Glucose, g/L–304
V_liquid = Q tau;  V_vessel = 1.25 V_liquid
V_liquid = 1,000 L/h x 24 h = 24,000 L;  V_vessel = 1.25 x V_liquid = 30,000 L

Purchased cost: $750k for a 30,000 L vessel (vessel-volume basis, feed 1,000 L/h); $3.76M for a 300,000 L vessel (vessel-volume basis, feed 10,000 L/h).

Worked example Enzymatic Hydrolysis · enzymatic_hydrolysis

Scenario: Cellulase hydrolysis of pretreated stover

Cellulose converted
90 %
Glucose out
100 g/L
Reactor volume
105,000 L

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h1,000996
Cellulose, g/L10010
Xylose, g/L5050.2
Lignin, g/L5050.2
Glucose, g/L–100
V_liquid = Q tau;  V_vessel = 1.25 V_liquid
V_liquid = 1,000 L/h x 84 h = 84,000 L;  V_vessel = 1.25 x V_liquid = 105,000 L

Purchased cost: $159k for a 105,000 L vessel (vessel-volume basis, feed 1,000 L/h); $797k for a 1,050,000 L vessel (vessel-volume basis, feed 10,000 L/h).

conversion_reactor_separation, _conversion_reactor_single_row, resolve_conversion_reaction

ParameterConversion reactorEnzymatic hydrolysis preset
reactionrichest glucan → glucosecellulose → glucose
conversion X0.900.90 (X_max 0.95)
mass yield Y1.111 g/g1.111
residence time τ24 h84 h
temperature50 °C48 °C
catalyst dose / price10 g/kg / $5/kg20 g/kg / $6.5/kg
mixing dutyfrom the feed (below)unagitated pump-around, 0.02 kW/m³
MODES
  stoichiometric   X and τ as set
  equilibrium      K(T) = K_ref·exp[−(ΔH·1000/8.314)(1/T − 1/T_ref)];   X ≤ K/(1 + K)
  kinetic          k = k_ref·exp[−(Ea·1000/8.314)(1/T − 1/T_ref)]        k_ref 0.035 /h at 50 °C
                   k_app = k/(1 + P/K_I);   x′ = X/X_max
                   batch/PFR  τ = −ln(1 − x′)/k;     CSTR  τ = x′/(k(1 − x′))
                   enzyme decay  τ = −(1/k_d)·ln[1 + (k_d/k)·ln(1 − x′)],  k_d = ln2/t½;   τ ≤ 168 h
BALANCE (per reaction row)
  converted   = X·m_S,in
  product_i  += converted · Y_i
  substrate   = (1 − X)·m_S,in
  Δwater      = −X·(ΣY − 1)·m_S,in           X scaled down if the water runs out
DUTY
  sensible    (T_rx − T_in)·ṁ·4.186/3600;   reaction  ΔH·(converted/MW_repeat)/3600
SIZING
  V_liquid = Q · max(τ, 0.1 h);   V_vessel = V_liquid · 1.25   → capex on VOLUME
  capex  n^0.90 · C_ref · ((V/n)/V_ref)^0.70
AGITATION (one table, both tiers, on LIQUID volume;  Walas 1990 Ch. 10)
  duty                        kW/m³   band
  blending                    0.07    0.04–0.10
  homogeneous reaction        0.20    0.10–0.30
  reaction with heat transfer 0.65    0.30–1.00
  liquid–liquid               1.00    0.70–1.30
  gas–liquid                  1.50    1.00–2.00
  slurry                      2.00    1.50–2.50
  unagitated pump-around      0.02    NREL T-310
  default duty: insoluble solids > 10 wt% (whole stream, water by volume) → slurry;
  otherwise reaction with heat transfer if the step has a jacket duty, else homogeneous.
  agitation_kw_per_m3 on the step wins.   power = P/V · V_liquid + declared ancillary kWh/m³ · Q
Cost scaling conversion_reactor
C = $600k · (V / 30,000 L)^0.7
Exponent n
0.7
Base cost
$600k at 1,000 L/h
Largest single unit
15,000 L/h
Largest vessel
450,000 L
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
15.75 kW per m³/h
Cost scaling enzymatic_hydrolysis
C = $743k · (V / 950,000 L)^0.7
Exponent n
0.7
Base cost
$743k at 39,600 L/h
Largest single unit
11,310 L/h
Largest vessel
1,200,000 L
Repeat-unit exponent
0.9
Anchor grade
commodity_bulk
Installation factor
2.0
Cost floor
$80k
Power
2.3 kW per m³/h

Dilute-acid pretreatment pretreatment_reactor

Cooks lignocellulosic biomass in hot dilute acid so the hemicellulose dissolves and the cellulose opens up to enzymes.

Worked example Pretreatment Reactor (Dilute Acid) · pretreatment_reactor

Scenario: Dilute-acid pretreatment of corn stover

Xylose released
51.7 g/L
Combined severity
1.06
Steam
245 kg/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedWasteHeavy phase
Flow, L/h1,000209,0001,120
Cellulose, g/L100–81.8
Hemicellulose (Xylan), g/L60–5.35
Lignin, g/L50–44.6
Xylose, g/L––51.7
Glucose, g/L––7.93
log R0 = log10(tau exp((T - 100)/14.75));  CS = log R0 - pH
log R0 = log10(5 min x exp((158 - 100) / 14.75)) = 2.41;  CS = 2.41 - 1.35 = 1.06

Purchased cost: $1.35M at 1,000 L/h (cost floor); $1.35M at 10,000 L/h (cost floor).

pretreatment_reactor_separation (NREL TP-5100-47764 Area 200; Saeman 1945)

ParameterDefaultNote
temperature / time158 °C / 5 min
acid18 mg/g dryH₂SO₄
xylan → xylose / furfural0.85 / 0.05
glucan → glucose / HMF0.08 / 0.003
SEVERITY
  pH      = clamp(−log10 M_acid, 0.5, 3)
  log R₀  = log10(τ · exp((T − 100)/14.75));    CS = log R₀ − pH
  f_furf ≥ 0.02 + 0.055·max(0, CS − 0.8)
REACTIONS (g/h)
  xylose   = 1.1363·f_x·m_xylan        furfural = 0.7273·f_f·m_xylan
  glucose  = 1.1111·f_g·m_glucan       HMF      = 0.7778·f_h·m_glucan
STEAM AND FLASH
  Cp       = x_s·1.4 + (1 − x_s)·4.18
  steam    = m·Cp·(T − T_feed)/2100  kg/h
  flash    = Cp·(T − 100)/2257;   30 % of the furfural leaves with the vapour
Cost scaling pretreatment_reactor
C = $13.8M · (Q / 250,000 L/h)^0.78
Exponent n
0.78
Base cost
$13.8M at 250,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Cost floor
$1.5M
Power
4 kW per m³/h

Anaerobic digester anaerobic_digester

Lets microbes break organic waste down to biogas, a mix of methane and carbon dioxide, without oxygen.

Worked example Anaerobic Digester · anaerobic_digester

Worked example withheld while this model is revised.

anaerobic_digestion_separation (Metcalf & Eddy 5th ed., ch. 13)

ParameterDefaultNote
HRT20 d≥ 10
organic loading rate3 kg VS/m³/d
temperature37 °C
biomass yield Y_x0.07 g VSS/g COD
destroyed_i  = x_type · m_i     sugar 0.90, organic acid 0.95, protein 0.75, lipid 0.78, cells 0.50 …   ≤ 75 % of VS
COD removed  = Σ COD_factor · destroyed
Y_CH4        = (22.414/64) · (1 − 1.42·Y_x)   Nm³/kg COD
CH4          = Y_CH4 · COD_removed;   CO2 = C_destroyed − CH4 − C in new biomass
biomass      = Y_x · COD_removed
VOLUME       V_liquid = max(Q·24·HRT,  VS_in·24/OLR)
             V_vessel = V_liquid · 1.15  (declared headroom, band 1.10–1.25)   → capex on VOLUME
power        0.006 kW/m³ · V_liquid + declared ancillary 0.6 kWh/m³ feed (pumps, blower)   same in both tiers
heating      ṁ·4.0·ΔT·(1 − recovery)·1.18;   biogas heat V_CH4·35.8 MJ/Nm³
Cost scaling anaerobic_digester
C = $1.31M · (V / 4,800,000 L)^0.78
Exponent n
0.78
Base cost
$1.31M at 10,000 L/h
Largest single unit
16,000 L/h
Largest vessel
8,000,000 L
Repeat-unit exponent
0.9
Anchor grade
commodity_bulk (grade-independent)
Installation factor
2.2
Cost floor
$150k
Power
3.5 kW per m³/h

Biomass digestion (PHA release) biomass_digestion

Digests the cell mass around PHA granules with hypochlorite, optionally with SDS, so the polymer granules are freed for recovery.

Worked example Biomass Digestion (PHA Granule Release) · biomass_digestion

Scenario: Hypochlorite digestion to release PHA granules

PHA freed
57 kg/h
Granule purity
98.5 %
Molecular weight lost
48 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h1,0004,090
Bacteria (generic), g/L400.208
Polyhydroxyalkanoate (PHA), g/L6013.9
f_dig = f_max (1 - exp(-t / tau)) f_dose   (hypochlorite f_max 0.98, tau 0.30 h)
f_dig = 0.98 x (1 - exp(-2 h / 0.30 h)) x 1 = 0.979

Purchased cost: $661k at 1,000 L/h; $3.24M at 10,000 L/h (2 units in parallel).

biomass_digestion_separation (Berger 1989; Jacquel 2008)

ParameterHypochloriteEnzymatic
f_max / τ0.98 / 0.30 h0.93 / 0.80 h
temperature / pH30 °C / 10.552 °C / 8.5
doseNaOCl 20 % v/vprotease 20 g/kg, lysozyme 5 g/kg
dilution    V_req = (m_cells + m_PHA) / DCW_set(30 g/L);   V_susp = max(Q, V_req)
extent      f_dig = f_max · (1 − e^(−t/τ)) · f_dose
hypochlorite  NaOCl demand = 1.2·m_cells (× 0.5 with SDS);   f_dose = min(1, NaOCl/demand)
              MW loss = clamp(0.20 + 0.10(t − 1)⁺ + 0.30(pct − 5)⁺/25, 0.20, 0.50)
masses      digested = m_cells·f_dig;   PHA freed = m_PHA·(1 − 0.05)
energy      heat = Q_out·4180·ΔT/3.6e6;   steam = heat/0.85
Cost scaling biomass_digestion
C = $460k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$460k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
8 kW per m³/h

Solid–liquid separation

Centrifuges, cake filters and settlers split a stream into a solids-rich heavy phase and a clarified light phase. What matters is how much of the suspended material each one captures, and how dry it leaves the solids. The code settles capture from Stokes settling wherever it knows a particle size, and refuses to guess one where it does not.

Shared centrifuge balance

dissolved cap   0 for cells, lipids and insoluble species; else solubility(T, pH)
                dissolved = min(C, cap);   surplus = max(0, C − cap)
capture ε       from the settling model (below), ≤ 0.995
heavy solids    m_heavy,p = Σ surplus·Q·ε;   carry-over m_light,p = Σ surplus·Q·(1 − ε)
heavy DM        C_DM = clamp(dm%/100, 0.01, 0.99) · 1000 g/L
volumes         V_heavy = m_heavy,p / C_DM;   V_light = Q − V_heavy
cake water      C_w,heavy = max(0, 1000 − C_DM − Σ dissolved);   m_w,heavy = min(m_w,in, C_w,heavy·V_heavy)
each solute     heavy = dissolved·V_heavy + surplus·Q·ε;   light = dissolved·V_light + surplus·Q·(1 − ε)
particle basis  d = Σ(size·c)/Σc;   Δρ = Σ(max(5, ρ_p − 1000)·c)/Σc   over cells and suspended species
Stokes          v = Δρ·g·d² / (18μ)

Disc-stack centrifuge disc_centrifugation

Spins a dilute broth through a stack of conical discs so cells and debris settle out, giving a clear liquid and a concentrated sludge.

Worked example Disc Stack Centrifugation · centrifugation_disc

Worked example withheld while this model is revised.

centrifugation_separation → _size_disc_stack_capacity_and_capture → disc_stack_design.design_disc_stack (catalogue unit centrifugation_disc)

ParameterDefaultNote
separation_efficiency0.98capture target
heavy_phase_dm20 %
bowl_speed_rpm80003000–12000
sigma_efficiency_factor η0.45
discharge_interval_min104–30; 8 s ejection
max_machines16≤ 24
particle GSD1.8
SIGMA (designed geometry)
  Σ = (2π/3) · N_ch · ω²/g · (r_o³ − r_i³)/tanθ · f_corr         ω = 2π·rpm/60
  r_o = 0.88·R_bowl,  r_i = 0.33·r_o,  θ = 40°,  gap 1 mm,  RCF = ω²R/g ≤ 15 000
  search R 0.068–0.25 m, 30–200 channels
CAPTURE
  G(d) = min(1, v(d)·η·Σ / Q_machine)          integrated over a log-normal size distribution
PER-MACHINE CAPACITY  (uptime u = 60·t_int / (60·t_int + 8 s))
  separation   Σ / (Σ per L/h at the capture target) · u
  hydraulic    55 m³/m²/h · πR² · 1000 · u
  sludge       V_sl = π(R² − r_o²)·0.65R·0.55;   wet V_sl/(t_int/60)·u;   dry V_sl·0.35/(t_int/60)·u
  machines     smallest N meeting all four limits, smallest bowl envelope
FREE OIL (above 0.5 g/L light liquid)
  oil recovery 0.97 demulsified (0.95–0.99), 0.55 emulsion;  water in oil 0.3 / 5 wt %
CAPEX (geometry, no repeat-unit discount)
  purchased = N × $650k × (πR²H / (π·0.17²·0.4))^0.62
  • Refused when solids carry no particle size and none is declared: capture would be a guess.
  • Refused when more than the machine limit is needed, or when the wet discharge exceeds the feed.
Cost scaling disc_centrifugation
C = $650k · (Q / 1,000 L/h)^0.62
Exponent n
0.62
Base cost
$650k at 1,000 L/h
Largest single unit
150,000 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
2.2
Batch window
8 h
Power
2.5 kW per m³/h
Cost scaling centrifugation
C = $450k · (Q / 1,000 L/h)^0.67
Exponent n
0.67
Base cost
$450k at 1,000 L/h
Largest single unit
50,000 L/h
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
2.0
Batch window
8 h
Power
1.5 kW per m³/h

Decanter centrifuge decanter_centrifugation

Separates a solids-heavy slurry in a horizontal spinning bowl, with a scroll that pushes the settled solids out continuously.

Worked example Decanter Centrifuge · decanter_centrifuge

Scenario: Decanting mycelium from citric acid broth

The balance applies the stated 0.90 capture; the grade-efficiency model alone would capture more of 20 um mycelium.

Mycelium captured
90 %
Cut size d50
1.36 um
Machines in parallel
1

Selected components shown; water, salts and minor by-products omitted.

StreamFeedLight phaseHeavy phase
Flow, L/h1,00093069.8
Aspergillus niger, g/L252.69322
Citric Acid, g/L10099.4107
v50 = Q_m / (2 Sigma eta);  d50 = sqrt(18 mu v50 / (drho g))
v50 = 2.78e-04 m3/s / (2 x 8,000 m2 x 0.2);  d50 = sqrt(18 x 1.17 mPa s x v50 / (100 kg/m3 x 9.81 m/s2)) = 1.36 um

Purchased cost: $475k at 1,000 L/h; $2.55M at 10,000 L/h.

centrifugation_separation → _evaluate_non_disc_centrifuge_capacity_and_capture → _model_centrifuge_sigma

ParameterDefaultNote
separation_efficiency0.9
heavy_phase_dm30 %
Σ per machine / η8000 m² / 0.20
particle / Δρ / GSD4 µm / 80 kg/m³ / 2.0fallbacks
max_machines8
GRADE (Ambler)   v_50 = Q_m / (2·Σ·η);   d50 = √(18μ·v_50 / (Δρ·g))
                 G(d) = min(1, 0.5·(d/d50)²)         G(d50) = 0.5;  integrated over the log-normal
ONE FLEET        Q_σ  = per-machine flow at which the grade integral reaches separation_efficiency
                 N    = ⌈max(Q/Q_hydraulic, Q/Q_σ)⌉
                 capture evaluated at Q/N per machine (≥ target);   capex bills the same N
                 N > 8  → refused: decanter_parallel_limit_exceeded
INSTALLED        declared N → capture at that N, never resized;  Q/N above the hydraulic rating → refused
NO SOLIDS        nothing to capture → hydraulic sizing, capture 1.0
Cost scaling decanter_centrifugation
C = $380k · (Q / 1,000 L/h)^0.73
Exponent n
0.73
Base cost
$380k at 1,000 L/h
Largest single unit
80,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
3 kW per m³/h

Basket centrifuge basket_centrifugation

Spins a slurry against a filter cloth in a perforated basket, holding back crystals or coarse particles as a cake.

Worked example Basket Centrifuge · basket_centrifuge

Scenario: Dewatering fumaric acid crystals

Set beyond the catalogue defaults: heavy_phase_dm = 70

Crystals captured
98 %
Wash water
58.7 L/h
Mother liquor left in cake
35.8 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedLight phaseHeavy phase
Flow, L/h1,000917142
Fumaric Acid, g/L15013.6971
W = V_wash / V_liq;  R = 0.01 + 0.99 x exp(-2.0 W)
W = 58.7 / 112 L/h = 0.523;  R = 0.01 + 0.99 x exp(-2.0 x 0.523) = 0.358

Purchased cost: $625k at 1,000 L/h; $4.17M at 10,000 L/h (5 units in parallel).

centrifugation_separation (filtering centrifuge: cake wash applies)

ParameterDefaultNote
separation_efficiency0.95
heavy_phase_dm30 %
wash_water_ratio0.3 kg/kg cake≤ 3.0
CAPTURE (cloth sieving, not settling)
  G(d)    = 0.98 above the cloth cut, 0.70 between 0.5× and 1× the cut, 0 below   (filtration ladder)
  capture = ∫ G(d)·f_m(d) dd over the log-normal size basis;   cloth cut default 10 µm [1–100]
  refused when the median particle is below the cut;  no declared size → stated capture, flagged
CAKE WASH (displacement)
  V_liq   = V_heavy − Σ m_solid/ρ
  V_wash  = ratio · m_cake / 1000;   W = V_wash / V_liq
  residual R = 0.01 + 0.99·e^(−2.0·W)
  kept    = max(R·dissolved_in_cake, saturated-liquor floor)
capacity  hydraulic wall 2 000 L/h;   N = ⌈Q / 2000⌉
Cost scaling basket_centrifugation
C = $500k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$500k at 1,000 L/h
Largest single unit
2,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
7.5 kW per m³/h

Three-phase decanter three_phase_decanter

Splits a feed into a light oil phase, a water phase and solids in one spinning bowl.

Worked example Three-Phase Decanter · three_phase_decanter

Scenario: Recovering oil from a lysed oleaginous yeast broth

Oil recovery
92.1 %
Oil left in the water
0.501 wt%
Solids to the cake
27 kg/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedOrganic phaseHeavy phase
Flow, L/h1,00061.5941
Triolein, g/L608985.02
Cell Debris, g/L30–31.9
unrecovered = residual% x m_heavy;  recovery = 1 - unrecovered / F_oil
recovery = 1 - (0.501 % x 944 kg/h) / 60 kg/h = 0.921

Purchased cost: $710k at 1,000 L/h; $3.81M at 10,000 L/h.

three_phase_decanter_separation

ParameterDefaultNote
oil recovery0.90[0.85, 0.95]
residual_oil_wt_pct0.5[0.1, 5.0]
water_in_oil_wt_pct2.0
unrecovered oil = min(F_oil·(1 − rec), residual% · (m_feed − F_oil·rec))
recovery        = 1 − unrecovered / F_oil
light phase     oil + water x_w = m_oil·w/(1 − w)
heavy phase     aqueous + all solids
  • Refused when the feed has no free light liquid, when the oil is not demulsified, or when Δρ < 0.05 g/mL.
Cost scaling three_phase_decanter
C = $494k · (Q / 1,000 L/h)^0.73
Exponent n
0.73
Base cost
$494k at 1,000 L/h
Largest single unit
60,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
3.5 kW per m³/h

Shared cake-filter balance

REJECTION σ
  solid share × (0.98 if size > cutoff, 0.70 if size > 0.5·cutoff, else 0)
  assumed sizes: cells 1.0 µm, colloid 0.5, crystal 5, oil 5
STATED CAPTURE (press 0.98, drum 0.95, belt 0.95)
  V_cake = min(Σ m·share·capture / DM_max, 0.95·Q),   ≥ Σ(m·share·capture/ρ)/0.64   (close packing)
NO STATED CAPTURE (depth, nutsche)
  V_r = Q·(1 − filtrate_fraction),   ≥ Σ(m·σ)/DM_max,   then packing relief
STREAMS
  V_wash = V_r·N;   V_filtrate = Q − V_r + V_wash;   V_cp = Q − V_r
  liquor retained = V_r/(V_r + V_cp) · e^(−N)
  solid retained  = m·capture   or   m·V_r/(V_r + (1 − σ)·V_cp) · e^(−N(1 − σ))
CAKE AREA (press, drum, belt → capex basis)
  t = (μαc / 2ΔP)·(V/A)² + μR_m·(V/A)/ΔP          solved for V/A
  A = Q · t_cycle / (V/A)
  α = stated, else Carman–Kozeny 180(1 − ε)/(1100·d²·ε³);   ε 0.4;   R_m 1e11 m⁻¹
  capex: N = max(1, ⌈A/A_max⌉, ⌈Q/(1.1·max_cap)⌉);   C = N^0.9 · base · ((A/N)/A_ref)^n

                ΔP bar   t_cycle h   d µm   α m/kg        DM g/L   wash   cutoff µm
  filter press  12       2.0         10     1e12          350      1.0    2
  rotary drum   0.7      0.03        10     1e12          250      0.5    1
  belt          0.45     0.05        50     3e11          200      0.5    5
  nutsche       1.0      2.0         30     Carman–Kozeny 400      2.0    2

Depth filtration depth_filtration

Traps cells and fine debris inside a thick porous filter medium, the usual step to clarify broth before sterile filtration.

Worked example Depth Filtration · depth_filtration

Scenario: Polishing fine debris out of an enzyme centrate

Set beyond the catalogue defaults: filter_cutoff = 0.5

Enzyme recovered in the filtrate
97.1 %
Debris removed
79.7 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedFiltrateRetentate
Flow, L/h1,0001,00080
Cell Debris, g/L20.40619.9
Amylase, g/L32.911.1
A = V / loading   (single-use cartridges, 400 L per m2)
A = 1,000 L/h / 400 L/m2 = 2.5 m2 of cartridge per hour; 20,000 m2/yr over 8,000 h at $25/m2 = $500,000/yr of media

Purchased cost: $120k at 1,000 L/h; $588k at 10,000 L/h (2 units in parallel).

filtration_separation

ParameterDefaultNote
filtrate_fraction0.92
filter_cutoff1.0 µm
TMP1.5 bar
loading400 L/m²
balance      shared filter balance, no stated capture
area ratio   = clamp(100 LMH / film-theory average flux, 1, 20),  CF = Q/V_r     capped at 4 for capex
thorough     A = (permeate/100)·ratio;  N = ⌈A/200 m²⌉;  price × ratio^0.85
cartridges   Q·hours / 400 L/m²
Cost scaling depth_filtration
C = $120k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$120k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
1.6
Batch window
8 h
Power
1.5 kW per m³/h

Filter press filter_press_filtration

Pumps a slurry into cloth-lined chambers between plates, building a solid cake while the filtrate drains away.

Worked example Filter Press (Plate & Frame) · filter_press

Scenario: Filter-pressing mycelium from citric acid broth

Mycelium kept in the cake
98 %
Cake area
2.42 m2
Average flux
414 L/m2/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedFiltrateRetentate
Flow, L/h1,0001,00069.8
Aspergillus niger, g/L250.5351
Citric Acid, g/L10097.436.9
t = (mu alpha c / 2 dP) (V/A)^2 + mu R_m (V/A) / dP;  A = Q t_cycle / (V/A)
2 h = (0.001 Pa s x 1.00e+12 m/kg x 25 kg/m3 / (2 x 12 bar)) (V/A)^2 + 0.001 x 1e11 /m x (V/A) / 12 bar  ->  V/A = 0.827 m3/m2;  A = 1 m3/h x 2 h / 0.827 m3/m2 = 2.42 m2

Purchased cost: $211k at 1,000 L/h; $1.06M at 10,000 L/h.

filtration_separation · cake area in rate_based_models

stated capture 0.98;  ΔP 12 bar;  2 h cycle;  cake DM 350 g/L
capex on cake area A (A_ref 2.65 m², A_max 400 m² per press)
Cost scaling filter_press_filtration
C = $180k · (A / 2.647 m²)^0.7
Exponent n
0.7
Base cost
$180k at 1,000 L/h
Largest single unit
20,000 L/h
Largest unit area
400 m²
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
2 kW per m³/h

Rotary vacuum drum filter rotary_vacuum_filtration

Pulls liquid through a cloth on a rotating drum under vacuum, leaving a cake that is scraped off on every turn.

Worked example Rotary Vacuum Drum Filter · rotary_vacuum_filter

Scenario: Removing mycelium from citric acid broth

Mycelium kept in the cake
95 %
Cake area
1.43 m2
Average flux
697 L/m2/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedFiltrateRetentate
Flow, L/h1,00095394.8
Aspergillus niger, g/L251.31251
Citric Acid, g/L10098.960.8
t = (mu alpha c / 2 dP) (V/A)^2 + mu R_m (V/A) / dP;  A = Q t_cycle / (V/A)
0.03 h = (0.001 Pa s x 1.00e+12 m/kg x 25 kg/m3 / (2 x 0.7 bar)) (V/A)^2 + 0.001 x 1e11 /m x (V/A) / 0.7 bar  ->  V/A = 0.0209 m3/m2;  A = 1 m3/h x 0.03 h / 0.0209 m3/m2 = 1.43 m2

Purchased cost: $307k at 1,000 L/h; $1.61M at 10,000 L/h.

filtration_separation

stated capture 0.95;  ΔP 0.7 bar;  cycle 0.03 h;  cake DM 250 g/L
capex on cake area A (A_ref 1.55 m², A_max 150 m² per drum)
Cost scaling rotary_vacuum_filtration
C = $260k · (A / 1.549 m²)^0.72
Exponent n
0.72
Base cost
$260k at 1,000 L/h
Largest single unit
12,000 L/h
Largest unit area
150 m²
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
6 kW per m³/h

Vacuum belt filter belt_filtration

Draws the liquid out of a slurry through a moving filter cloth under vacuum, washing the cake before it is discharged.

Worked example Belt Filter · belt_filter

Scenario: Belt-filtering mycelium from citric acid broth

Mycelium kept in the cake
95 %
Cake area
1.43 m2
Average flux
700 L/m2/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedFiltrateRetentate
Flow, L/h1,000941118
Aspergillus niger, g/L251.33201
Citric Acid, g/L10098.660.8
t = (mu alpha c / 2 dP) (V/A)^2 + mu R_m (V/A) / dP;  A = Q t_cycle / (V/A)
0.05 h = (0.001 Pa s x 3.00e+11 m/kg x 25 kg/m3 / (2 x 0.45 bar)) (V/A)^2 + 0.001 x 1e11 /m x (V/A) / 0.45 bar  ->  V/A = 0.035 m3/m2;  A = 1 m3/h x 0.05 h / 0.035 m3/m2 = 1.43 m2

Purchased cost: $178k at 1,000 L/h; $1M at 10,000 L/h.

filtration_separation

stated capture 0.95;  under 3 kg polymer/t DS:  capture = 0.50 + (cap − 0.50)·(dose/3)
ΔP 0.45 bar;  cycle 0.05 h;  cake DM 200 g/L
capex on cake area A (A_ref 1.53 m², A_max 200 m²)
polymer $/yr = V_m³/yr · 0.030 t/m³ · dose · $4/kg
Cost scaling belt_filtration
C = $150k · (A / 1.527 m²)^0.75
Exponent n
0.75
Base cost
$150k at 1,000 L/h
Largest single unit
30,000 L/h
Largest unit area
200 m²
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
1 kW per m³/h

Nutsche filter nutsche_filtration

Filters a batch of slurry through a flat filter plate in a closed vessel, where the cake can be washed in place.

Worked example Nutsche Filter · nutsche_filter

Worked example withheld while this model is revised.

filtration_separation

no stated capture;  ΔP 1.0 bar;  2 h cycle;  2 diavolumes wash;  DM floor 400 g/L
capex on flow, × the membrane area ratio (nominal 100 LMH) in the classic tier
Cost scaling nutsche_filtration
C = $350k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$350k at 1,000 L/h
Largest single unit
1,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
2 kW per m³/h

Flocculation flocculation

Adds a flocculant so fine particles clump into larger flocs that settle or filter more easily.

Worked example Flocculation / Coagulation · flocculation

Scenario: Flocculating cell debris out of an E. coli homogenate

Debris captured
89 %
Polymer dose
75 mg/L
Settler area
1.2 m2

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductWaste
Flow, L/h1,000657343
Cell Debris, g/L152.5138.9
Amylase, g/L33.032.93
theta = D_s / D_sat;  f_agg = 0.95 x 4 theta (1 - theta);  capture = f_agg G(d_floc) + (1 - f_agg) G(d_primary)
theta = 5 / 10 kg/t DS = 0.5;  f_agg = 0.95 x 4 x 0.5 x (1 - 0.5) = 0.95;  capture = 0.95 x 0.937 + (1 - 0.95) x 1.71e-04 = 0.89

Purchased cost: $129k at 1,000 L/h; $515k at 10,000 L/h.

flocculation_separation

DOSE (per tonne of suspended dry solids, La Mer bridging)
  D_s     = dose / X_ss;   default dose = D_opt by class
            pam_sludge 5 kg/t DS [1–10] (WEF MOP-8);  cationic_harvest 50 kg/t DS [20–150] (McNerney 2015)
  θ       = min(1, D_s / D_sat),  D_opt = 0.5·D_sat
  E(θ)    = 4θ(1 − θ);   f_agg = 0.95·E(θ)          θ > 0.8 → overdose restabilisation warning
CAPTURE   f_agg·G(d_floc) + (1 − f_agg)·G(d_primary)      G = the Hazen integral above
          d_floc 200 µm [100–500];  floc Δρ 15 kg/m³ (flocs are mostly water)
SLUDGE    V_sludge = captured dry solids / 40 g/L;  dissolved species split by liquor volume
REAGENT   polymer mass enters the stream and leaves with the sludge;  billed kg/h × price
          (cationic harvest polymers need a declared price)
sizing    G·T = 6e4, G = 60 s⁻¹;  V = Q·t·1.2;  P = μG²V
Cost scaling flocculation
C = $90k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$90k at 1,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
1.5
Power
0.5 kW per m³/h

Gravity thickener gravity_thickening

Lets solids settle under gravity in a large tank, drawing off a thickened underflow and a clear overflow.

Worked example Gravity Thickener · gravity_thickener

Scenario: Thickening flocculated biological sludge

The flocs are declared as 150 um particles at 1.02 g/mL.

Solids captured
90 %
Settler area
72 m2
Underflow solids
40 g/L

Selected components shown; water, salts and minor by-products omitted.

StreamFeedLight phaseHeavy phase
Flow, L/h30,00026,6003,370
Bacteria (generic), g/L50.56340
A = max(solids load / solids flux, overflow / q_o,design)
A = max(3,600 kg/d / 50 kg/m2/d, 31.9 m2) = 72 m2

Purchased cost: $68.2k at 30,000 L/h; $383k at 300,000 L/h.

gravity_thickener_separation (runs the centrifuge balance with capture and underflow DM)

ParameterDefaultNote
solids_capture0.9[0.5, 0.999]
underflow_dry_matter40 g/L[5, 60]
solids_flux50 kg/m²/d[5, 200]
solids load   suspended (above-solubility) solids only
area          A = max(solids load kg/d ÷ solids flux,  overflow m³/d ÷ q_o,design 20 m³/m²/d)
CAPTURE (Hazen ideal settler, the Σ integral with Σ = A and g = 1)
  q_o      = Q_overflow / A;   v_cut = q_o / η_h,   η_h 0.6 [0.4–0.8] short-circuiting
  G(d)     = min(1, v_t(d)·η_h / q_o)
  capture  = min(declared solids_capture, ∫ G f_m)
underflow     one shared settler balance (thickener and flocculation);  feed already denser than the
              target → whole feed to underflow, "capped … conserved";  below 20 g/L → dilute warning
capex on flow
Cost scaling gravity_thickening
C = $100k · (Q / 50,000 L/h)^0.75
Exponent n
0.75
Base cost
$100k at 50,000 L/h
Largest single unit
1,000,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical (grade-independent)
Installation factor
2.2
Power
0.05 kW per m³/h

Hydrocyclone hydrocyclone

Swirls a pressurised feed inside a cone so dense particles are thrown to the wall and leave at the bottom, with no moving parts.

Worked example Hydrocyclone · hydrocyclone

Scenario: Classifying fumaric acid crystals

Crystals to the underflow
98.5 %
Cut size d50
19.7 um
Cyclones
1

Selected components shown; water, salts and minor by-products omitted.

StreamFeedLight phaseHeavy phase
Flow, L/h1,000819181
Fumaric Acid, g/L1502.8816
G(d) = 1 / (1 + (d50 / d)^m)
G(100 um) = 1 / (1 + (19.7 / 100)^2.5) = 0.983

Purchased cost: $6.19k at 1,000 L/h; $28k at 10,000 L/h (2 units in parallel).

hydrocyclone_separation (Plitt 1976, Rietema 1961)

ParameterDefaultNote
ΔP1.5 bar≥ 0.1
diameter D_c50 mm10–500
Plitt m2.52–4
underflow fraction R_f0.100.03–0.4
ρ_s1500 kg/m³
q_unit = 7.5 m³/h · (D/50)² · √(ΔP/1.5);   n = ⌈Q / q_unit⌉
u      = q_unit / (πD²/4);   Eu = ΔP / (½ρu²);   Stk50 = 0.0611 / Eu
d50    = √(Stk50 · 18μD / (Δρ·u))
G(d)   = 1 / (1 + (d50/d)^m)
split  particulates R = R_f + (1 − R_f)·G;   solutes and water R_f
pump   kW = Q/3600 · ΔP·1e5 / 0.65 / 1000
  • Cells above 0.1 g/L are refused by the expert rules: they are too small and too light to cyclone.
Cost scaling hydrocyclone
C = $15k · (Q / 7,500 L/h)^0.55
Exponent n
0.55
Base cost
$15k at 7,500 L/h
Largest single unit
7,500 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
0.065 kW per m³/h

Membranes

Microfiltration, ultrafiltration, nanofiltration and reverse osmosis share one rejection model, one flux model and one area integral (membrane_flux.py). Capex is priced on feed flow and then multiplied by an area ratio: when the physics says the membrane can only run below its nominal design flux, it needs more area and costs more.

Shared membrane equations

REJECTION σ per species
  phase share      σ = s·1.0 + (1 − s)·σ_dissolved              s = undissolved / total  (cells, colloid, crystal, oil)
  UF sieving       σ = Φ( (ln(MW/MWCO) + 1.2816·ln GSD_MW) / ln GSD_MW )     σ = 0.90 at MW = MWCO
                   GSD_MW = GSD_pore³  (default 1.4 → 2.744),  σ ∈ [0, 0.999]
  globular protein 1 − σ = −ln(1 − loss) / ln 20        loss interpolated from the MW-ratio table
                   (0.2, 0.05) (0.5, 0.30) (1.0, 0.741) (1.5, 0.97) (2.0, 0.99) (3.0, 0.999) (5.0, 0.9995)
  random coil      MW ratio × 2.0
  NF/RO neutral    σ = r^3.2 / (r^3.2 + 0.28^3.2),   r = MW/MWCO,  ≤ 0.99
  NF/RO salt       σ = max(σ_salt, σ_neutral);  RO σ_salt 0.99;  NF 0.50 (monovalent) / 0.95 (≥ 2 equivalents)
  ionisable acid   σ = f_charged(pKa, pH)·σ_salt + (1 − f_charged)·σ_neutral

RETAINED FRACTION
  single stage (NF, RO, filters)   m_ret/m_in = V_ret / (V_ret + (1 − σ)·V_perm)
  batch (UF)                       m_ret/m_in = CF^−(1 − σ)
  diafiltration                    C_N/C_0 = exp(−N·(1 − σ))          N = wash volume / retentate volume ≤ 10
  UF/NF species                    m_ret = m·s + m·(1 − s)·f_conc(σ)·washout(σ, N)

FLUX  J = min(J_osm, J_gel, J_crit)
  osmotic   π = i·(C/MW)·R·T  [+ (1.1e-6·C² + 3.6e-9·C³)·R·T for MW ≥ 5000]
            J_osm = Lp·(TMP − Σσ_i·π_i) / max(1, μ/μ_water)
  gel       J_gel = k·ln(C_gel/C_bulk)·3.6e6  LMH
            k: spacer 0.065·Re^0.875·Sc^0.25;  turbulent 0.023·Re^0.8·Sc^0.33;  Lévêque 1.86(Re·Sc·dh/L)^(1/3)
            dh = 0.8 mm, L = 1 m, u = 0.5 m/s;  D = D_Brownian + 0.03·a²·(8u/dh)
  critical  MF 220 LMH, UF 160 LMH when solids are retained
  fouling   every term × ff:  MF 0.45, UF 0.55, NF 0.75, RO 0.85
  Lp        MF 800, UF 150, NF 5, RO 1.5 LMH/bar

CONCENTRATION CEILINGS (UF, NF; smallest CF wins)
  osmotic   Σσ_i·π(C_i(CF)) ≥ TMP − NDP_min,   NDP_min = clamp(0.25·TMP, 0.5, 5) bar
  gel       Σ C_i(CF)/Cg_i ≥ 1        (whey 275, soy 225, casein 250, gelatin 100, xanthan 50 g/L …)
  packing   volume relief factor > 1  (saturation / 0.90)
  derate    = min(1, 20·J/J_nom);   V_ret = V_feed − (V_feed − V_ret,req)·derate

AREA AND COST
  J_nom     MF 100, UF 50, NF 25, RO 15 LMH, MD 1.64 kg/m²/h
  A         = Σ ΔV·(1/J_a + 4/J_mid + 1/J_b)/6    Simpson on a log volume grid, + V_final·N/J(CF) for diafiltration
  J_avg     = V_perm / A
  ratio     = clamp(J_nom / J_avg, 1, 20)
  capex     = flow-based cost × ratio^0.85
  skids     n = ⌈A / 200 m²⌉;   pump P = Q·ΔP/0.65, + 3× for recirculation (not RO)
  elements  cost/yr = USD_per_m² · (Q/J_nom) / life

Microfiltration microfiltration

Holds back cells and particles on a porous membrane while water and dissolved molecules pass through.

Worked example Microfiltration · microfiltration

Scenario: Cell removal from an E. coli enzyme broth (concentration factor 3, 3 diafiltration volumes)

The flux shown is film theory at the feed concentration; the retentate is far more concentrated by the end, so the membrane area is optimistic.

Set beyond the catalogue defaults: filtrate_fraction = 0.667

Enzyme recovered in the filtrate
98.3 %
Cells retained
100 %
Sustained flux
75.3 L/m2/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedFiltrateRetentate
Flow, L/h1,0001,670332
E. coli cells, g/L30–90.3
Amylase, g/L31.770.15
Glucose, g/L10.590.0499
J_gel = k ln(C_gel / C_bulk) x 3.6e6;  J = min(J_osm, J_gel, J_crit) x ff
J_gel = 2.24e-05 m/s x ln(240 / 30 g/L) x 3.6e6 = 167 L/m2/h;  J = min(J_osm, J_gel, J_crit) = 167 L/m2/h;  x ff 0.45 = 75.3 L/m2/h (gel-limited on the cell layer)

Purchased cost: $303k at 1,000 L/h; $1.35M at 10,000 L/h.

filtration_separation (absolute membrane)

ParameterDefaultNote
filter_cutoff0.2 µm
transmembrane_pressure_bar1.0
filtrate_fraction0.9
wash_water_ratio N3diavolumes
max_retentate_dry_matter150 g/L
V_ret      = V_feed · (1 − filtrate_fraction)
relief     V_ret ≥ Σ(m·σ)/DM_max        ≤ 0.95·V_feed, then packing relief (8 iterations)
wash       V_wash = V_ret·N,   V_filtrate = V_feed − V_ret + V_wash
V_cp       = V_feed − V_ret
solid      m_s · [V_ret/(V_ret + (1 − σ)V_cp)] · e^(−N(1 − σ))
liquor     m_l · [V_ret/(V_ret + V_cp)] · e^(−N)
σ          solids 1.0; dissolved 0;  assumed sizes cells 1.0 µm, colloid 0.5, crystal 5, oil 5
Sizing     CF = inlet/retentate → area ratio;  J_nom 100 LMH;  J_crit 220 × 0.45 = 99 LMH
  • TMP ≤ 0 refuses: retentate = feed.
Cost scaling microfiltration
C = $300k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$300k at 1,000 L/h
Largest single unit
10,000 L/h; commodity_bulk 393,100; chemical 393,100
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
1.8
Batch window
8 h
Power
1.5 kW per m³/h

Ultrafiltration ultrafiltration_10k ultrafiltration_30k ultrafiltration_100k

Holds back proteins and other large molecules on a membrane with a set molecular-weight cut-off, to concentrate the product or exchange its buffer.

Worked example Ultrafiltration (10kDa MWCO) · ultrafiltration_10k

Scenario: Concentrating and diafiltering a clarified amylase solution

The flux shown is film theory at the feed concentration; the retentate is far more concentrated by the end, so the membrane area is optimistic.

Enzyme recovered
99.9 %
Concentration factor
10 x
Diafiltration volumes
5

Selected components shown; water, salts and minor by-products omitted.

StreamFeedPermeateRetentate
Flow, L/h1,0001,40099.9
Amylase, g/L50.0052150
Glucose, g/L10.7140.00692
J_gel = k ln(C_gel / C_bulk) x 3.6e6;  J = min(J_osm, J_gel, J_crit) x ff
J_gel = 1.32e-05 m/s x ln(313 / 5 g/L) x 3.6e6 = 196 L/m2/h;  J = min(J_osm, J_gel, J_crit) = 160 L/m2/h;  x ff 0.55 = 88 L/m2/h (the retained protein layer)

Purchased cost: $450k at 1,000 L/h; $2.59M at 10,000 L/h (2 units in parallel).

Worked example Ultrafiltration (30kDa MWCO) · ultrafiltration_30k

Scenario: Concentrating and diafiltering a clarified antibody harvest

The flux shown is film theory at the feed concentration; the retentate is far more concentrated by the end, so the membrane area is optimistic.

Antibody recovered
99.9 %
Concentration factor
10 x
Diafiltration volumes
5

Selected components shown; water, salts and minor by-products omitted.

StreamFeedPermeateRetentate
Flow, L/h1,0001,40099.9
Monoclonal Antibody (IgG), g/L50.0052150
Host Cell Protein (HCP), g/L10.1837.45
J_gel = k ln(C_gel / C_bulk) x 3.6e6;  J = min(J_osm, J_gel, J_crit) x ff
J_gel = 1.26e-05 m/s x ln(324 / 6 g/L) x 3.6e6 = 180 L/m2/h;  J = min(J_osm, J_gel, J_crit) = 160 L/m2/h;  x ff 0.55 = 88 L/m2/h (the retained protein layer)

Purchased cost: $783k at 1,000 L/h; $4.51M at 10,000 L/h (2 units in parallel).

Worked example Ultrafiltration (100kDa MWCO) · ultrafiltration_100k

Scenario: Concentrating and diafiltering IgM on a 100 kDa membrane

The flux shown is film theory at the feed concentration; the retentate is far more concentrated by the end, so the membrane area is optimistic.

IgM recovered
99.9 %
Concentration factor
10 x
Diafiltration volumes
5

Selected components shown; water, salts and minor by-products omitted.

StreamFeedPermeateRetentate
Flow, L/h1,0001,40099.9
IgM (Immunoglobulin M), g/L10.001049.99
Host Cell Protein (HCP), g/L10.6980.227
J_gel = k ln(C_gel / C_bulk) x 3.6e6;  J = min(J_osm, J_gel, J_crit) x ff
J_gel = 5.54e-06 m/s x ln(325 / 1 g/L) x 3.6e6 = 115 L/m2/h;  J = min(J_osm, J_gel, J_crit) = 115 L/m2/h;  x ff 0.55 = 63.4 L/m2/h (the retained protein layer)

Purchased cost: $832k at 1,000 L/h; $4.79M at 10,000 L/h (2 units in parallel).

ultrafiltration_separation, membrane_operating_point (batch mode)

ParameterDefaultNote
mwco10 000 / 30 000 / 100 000 Daby grade
transmembrane_pressure_bar2.0
crossflow0.8 m/s
concentration_factor CF10
wash_water_ratio N5
pore_diameter_gsd1.4
1. CF clipped to the binding ceiling (≥ 1.0001)
2. V_ret = V_feed / CF
3. dry-matter relief, then packing relief (each ≤ 0.5·V_feed)
4. driving-force derate on V_ret and N
5. species: CF^−(1 − σ) × washout × stream split
6. V_perm = V_feed − V_ret + V_ret·N
Sizing: area_ratio from the flux integral;  J_nom 50 LMH;  J_crit 160 LMH
  • Infeasible when a CF above 1 is asked for but the derate is about 0 or the delivered CF is at most 1.0002.
  • The three grades differ only in MWCO (10 000, 30 000, 100 000 Da); the panel shows each grade's own catalogue default.
Cost scaling ultrafiltration_10k
C = $450k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$450k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
2.0
Batch window
8 h
Power
4 kW per m³/h
Cost scaling ultrafiltration_30k
C = $450k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$450k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
2.0
Batch window
8 h
Power
3.5 kW per m³/h
Cost scaling ultrafiltration_100k
C = $450k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$450k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
2.0
Batch window
8 h
Power
3 kW per m³/h

Nanofiltration nanofiltration

Passes water and small monovalent ions through a tight membrane while holding back sugars, divalent ions and small organic molecules.

Worked example Nanofiltration · nanofiltration

Scenario: Demineralising whey permeate

Lactose retained
91.2 %
Concentration factor delivered
2.79 x
Membrane area vs nominal
2.46 x

Selected components shown; water, salts and minor by-products omitted.

StreamFeedPermeateRetentate
Flow, L/h1,000641359
Lactose, g/L486.61122
Salt (NaCl), g/L64.428.83

Purchased cost: $598k at 1,000 L/h; $4.13M at 10,000 L/h (5 units in parallel).

ultrafiltration_separation (single-stage mode, dense rejection branch)

ParameterDefaultNote
mwco500 Da
concentration_factor5
transmembrane_pressure_bar15
crossflow0.5 m/s
m_ret/m_in = V_ret / (V_ret + (1 − σ)·V_perm)      σ from the dense branch (charge- and pH-weighted)
Lp 5 LMH/bar,  ff 0.75,  J_nom 25 LMH
Cost scaling nanofiltration
C = $320k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$320k at 1,000 L/h
Largest single unit
2,000 L/h
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
2.1
Power
6 kW per m³/h

Reverse osmosis reverse_osmosis

Pushes water through a dense membrane against the osmotic pressure, leaving almost all dissolved solutes behind.

Worked example Reverse Osmosis · reverse_osmosis

Scenario: Pre-concentrating a dilute glucose stream

Glucose retained
97.1 %
Water recovery
73.5 %
Glucose in the retentate
110 g/L

Selected components shown; water, salts and minor by-products omitted.

StreamFeedPermeateRetentate
Flow, L/h1,000735265
Glucose, g/L301.19110
Salt (NaCl), g/L20.07927.34

Purchased cost: $112k at 1,000 L/h; $469k at 10,000 L/h.

reverse_osmosis_separation, _ro_feasible_water_recovery

ParameterDefaultNote
water_recovery WR0.75[0, 0.95]
transmembrane_pressure_bar P30
design_margin_bar5.0
mwco150 Da
V_ret  = V_feed·(1 − WR),   V_perm = V_feed·WR
solute m_ret = m · V_ret / (V_ret + (1 − σ)·V_perm)
water  m_perm = m_w·WR
π      van 't Hoff (+ virial) on the retentate;   NDP = P − π
WR ceiling (bisection): infeasible if NDP ≤ 0, NDP < design margin, or C_i > solubility(T)
Sizing  once-through;  J_nom 15 LMH,  Lp 1.5,  ff 0.85;  pump Q·ΔP/0.65;  elements $100/m²
  • If even WR = 0 is infeasible: permeate 0, retentate = feed (fatal).
Cost scaling reverse_osmosis
C = $90k · (Q / 1,000 L/h)^0.62
Exponent n
0.62
Base cost
$90k at 1,000 L/h
Largest single unit
20,000 L/h; commodity_bulk 393,100; chemical 393,100
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
1.8
Power
5 kW per m³/h

Membrane distillation membrane_distillation

Evaporates water through a hydrophobic membrane, driven by a temperature difference, to concentrate a feed without boiling it.

Worked example Membrane Distillation · membrane_distillation

Scenario: Concentrating a glucose stream by membrane distillation

Glucose retained
100 %
Concentration factor
5 x
Glucose in the concentrate
150 g/L

Selected components shown; water, salts and minor by-products omitted.

StreamFeedPermeateConcentrate
Flow, L/h1,000800200
Glucose, g/L300.0153150
Salt (NaCl), g/L20.0010210
V_conc = V_feed / CF
V_conc = 1,000 L/h / 5 = 200 L/h

Purchased cost: $522k at 1,000 L/h; $4.14M at 10,000 L/h (10 units in parallel).

membrane_distillation_separation, md_area_penalty_factor

ParameterDefaultNote
concentration_factor5.0≥ 1.01
md_configurationAGMDDCMD / AGMD / SGMD / VMD
feed_temperature_c60≤ 85
permeate_temperature_c30
heat_recovery_gor3.0[0.5, 6.5]
             TPC    B_m (kg/m²/h/Pa)
  DCMD       0.65   1.8e-3
  AGMD       0.80   3.6e-4
  SGMD       0.75   4.0e-4
  VMD        0.70   1.1e-3

T_fm = T_f − ½(1 − TPC)ΔT,    T_pm = T_p + ½(1 − TPC)ΔT
p_sat = 10^(8.07131 − 1730.63/(233.426 + T)) · 133.322  Pa
J     = B_m·(p_sat(T_fm)·a_w − p_sat(T_pm)) · GOR^−0.9          a_w by Raoult, salts count ions
derate = min(1, 20·J_raw/1.64);   removal = (1 − 1/CF)·derate ≤ 0.999
m_w,evap = m_w,in − (V_feed/CF − V_solutes,ret)·ρ_aq             fixed point
volatiles α_MD = min(50, (p_i/p_w)·γ∞·f_neutral·τ),  τ 0.30 (DCMD/AGMD) or 0.70;  carry = 1 − w^α
Area   A = (m_w,evap/1000) / J_avg;   ratio = clamp(1.64/J_avg, 1, 20)
Heat   Q = V_distillate · h_fg(T)/GOR   kWh/m³;   cooling = Q
  • Ceiling at packing, or water activity aw < 0.72. Warnings for ΔT < 5 K and wetting by surfactants or alcohols.
Cost scaling membrane_distillation
C = $600k · (Q / 1,000 L/h)^0.85
Exponent n
0.85
Base cost
$600k at 1,000 L/h
Largest single unit
1,000 L/h
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
2.2
Power
1.2 kW per m³/h

Electrodialysis electrodialysis

Moves ions out of a stream through charged membranes under an electric field, to desalt it or recover an organic acid.

Worked example Electrodialysis · electrodialysis

Scenario: Desalting a glucose stream

Fixed-split model: salt removed = target removal x current efficiency, so 76.5 % comes out below the 90 % target.

Salt removed from the product
76.5 %
Glucose kept
98 %
Brine volume
99.1 L/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedLight phaseConcentrate
Flow, L/h1,00090199.1
Glucose, g/L3032.66.06
Salt (NaCl), g/L20.52215.4
b = removal x CE  (fraction of the salt sent to the brine)
b = 0.9 x 0.85 = 0.765

Purchased cost: $750k at 1,000 L/h; $4.68M at 10,000 L/h (2 units in parallel).

electrodialysis_separation

ParameterDefaultNote
target_salt_removal0.90[0, 0.99]
current_efficiency0.85[0, 1]
volume_ratio r9.0diluate : concentrate
V_dil = V_feed·r/(1 + r),   V_conc = V_feed/(1 + r)
b = removal · CE                       (0.765 at defaults)
fraction to brine:  salt b;  small acids (MW < 500) 0.7·b;  other charged 0.5·b;
                    protein, sugar, cells 0.02;  other uncharged 0.05;  water by r
  • A fixed-fraction split. There is no stack, current or area model, so capex scales on feed flow alone.
Cost scaling electrodialysis
C = $600k · (Q / 1,000 L/h)^0.75
Exponent n
0.75
Base cost
$600k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.2
Power
3 kW per m³/h

Chromatography & adsorption

The packed columns (affinity, both ion exchangers, HIC, reverse phase, size exclusion) share one engine: each column computes the fraction of every species it retains, and the engine turns that into outlet volumes, buffer use and a bed volume. Packed columns are priced on that bed, not on flow; the flow anchor in the cost table is a fallback used only when no bed can be sized.

Shared column engine

CAPACITY
  D          = Σ C_i · V_f · retained_i                      capacity demand, g/h
  fixed bed  cap = q · V_bed · utilisation;   if D > cap every retained_i × cap/D
  DBC band   affinity 35–80, HIC 10–60, IEX macromolecule 40–160 g/L resin
             IEX small molecule  eq/L × MW / |q|   (cation 1.5–2.2, anion 1.0–1.4 eq/L)

BED RATE (bind–elute)
  B          = V_f / LBV                LBV = load bed volumes (affinity 5, IEX 10, default 10)
  B_dbc      = D / (q · util)
  B          = min(V_f/LBV, max(B_dbc, V_f/100))

BUFFER AND OUTLETS (bind–elute)
  E_cv       elution CV, default 5;   T_cv total CV per cycle, default 20
  V_buffer   = E_cv · B                → leaves as the eluate (product)
  V_other    = (T_cv − E_cv) · B       → leaves as waste
  V_waste    = V_f + V_other

PER-COMPONENT SPLIT
  ret        = m_in · retained,   ft = m_in · (1 − retained)
  product    = ret · release + ft · (1 − throwaway) · ft_to_product
               release 100 %;  flow-through carryover 3 % (0 for IEX and membrane)
  cut        product_fraction = base_cut / √max(0.35, S),  clipped [0.08, 0.55]
             S = target retained / impurity retained;  base cut IEX 0.28, affinity 0.18, SEC 0.32, RP 0.22, HIC 0.25

CYCLE AND BED
  t_cyc      1.5 h (SEC 3.0 h)
  bed        = B · t_cyc
  fallback   bed = load_g/h · t_cyc / (DBC · 0.8)
             DBC pharma: affinity 40, IEX 80, HIC 22, RP 35;  industrial IEX 50
  campaign   bed × max(1, t_batch / (n_vessels · window))       pharma batch plants

COLUMN PRICE (bed basis, no grade multiplier)
  n          = ⌈bed / single-column ceiling⌉
  C          = n^0.90 · max(SKID + C_ref · ((bed/n)/bed_ref)^0.75, floor)

               C_ref ($)   bed_ref (L)   floor ($)   ceiling (L)   skid ($)
  pharma       167 100     150           0           1 000         350 000
  industrial   241 155     6 592         30 000      5 000         0
  GAC          400 000     20 000        100 000     20 000        0

RESIN AND BUFFER OPEX
  cycles_life   = cycles_before_replacement (200) × life factor   (industrial: IEX 10, HIC/RP 3, SEC 2, affinity 1)
  replacements  = max(cycles_per_yr / cycles_life, 1/7)
  resin $/yr    = bed · price_per_L · replacements
                  pharma $/L: affinity 12 000, IEX 1 500, HIC 2 000, RP 3 000, SEC 2 500
                  industrial: affinity 12 000, IEX 25 (400 protein), HIC 150, RP 300, SEC 800
  buffer $/yr   = pumped L/h · hours · (1.00 pharma, 0.20 industrial $/L)
  CIP $/yr      = (1.50 pharma, 0.10 industrial) $/L resin/cycle · bed · cycles

Affinity chromatography affinity

Captures the product on a resin carrying a ligand that binds it specifically, then elutes it as a concentrated, purified pool.

Worked example Affinity Chromatography · affinity_chromatography

Worked example withheld while this model is revised.

_affinity_capture in _chromatography_separation

ParameterDefaultNote
kd_target / kd_impurity0.5 / 40 g/L
ligand_utilization target / impurity0.9 / 0.3
elution_efficiency target / impurity0.95 / 0.35
resin_capacity35 g/Lband 35–80
resin_bed_volumes5
θ        = C / (K_d + C)
retained = clip(θ · ligand_util · elution_eff, 0, 1)
then the shared engine: bind–elute, 3 % carryover, base cut 0.18, bed-priced
Cost scaling affinity
C = $800k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$800k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
2.5
Batch window
9 h
Power
3 kW per m³/h

Ion exchange ion_exchange_cation ion_exchange_anion

Binds charged molecules to a charged resin and releases them with a change in salt or pH, separating them by charge.

Worked example Cation Exchange Chromatography · ion_exchange_cation

Scenario: Cation-exchange capture of an antibody

Antibody recovered
93 %
Resin bed
90 L
Buffer pumped
1,200 L/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductWaste
Flow, L/h1,0003331,870
Monoclonal Antibody (IgG), g/L5140.187
Host Cell Protein (HCP), g/L10.090.52
B = min(V_f / LBV, max(D / (q util), V_f / 100));  bed = B x t_cycle
B = min(1,000 / 10, max(4,800 g/h / 80 g/L, 1,000 / 100)) L/h;  bed = B x 1.5 h = 90 L

Purchased cost: $464k for a 90 L bed (bed-volume basis, feed 1,000 L/h); $991k for a 900 L bed (bed-volume basis, feed 10,000 L/h).

Worked example Anion Exchange Chromatography · ion_exchange_anion

Scenario: Anion-exchange capture of lactate from a clarified broth

Lactate recovered
91.3 %
Resin bed
1,500 L
Buffer pumped
20,000 L/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductWaste
Flow, L/h10,0005,74024,300
Lactic Acid, g/L6095.52.15
Glucose, g/L50.2612
B = min(V_f / LBV, max(D / (q util), V_f / 100));  bed = B x t_cycle
B = min(10,000 / 10, max(549,000 g/h / 60 g/L, 10,000 / 100)) L/h;  bed = B x 1.5 h = 1,500 L

Purchased cost: $79.5k for a 1,500 L bed (bed-volume basis, feed 10,000 L/h); $527k for a 15,000 L bed (bed-volume basis, feed 100,000 L/h) (3 units in parallel).

_ion_exchange_capture, _iex_binding (steric mass action, Brooks & Cramer 1992)

ParameterDefaultNote
load_conductivity_mS_cm5 (cation) / 2 (anion)
resin_capacity80 / 60 g/L
resin_bed_volumes10
phase_ratio R1.5
elution_efficiency target / co-ionic0.93 / 0.85
CHARGE
  protein    q = −0.12 · MW_kDa · (pH − pI),   |q| ≤ 0.2 · MW_kDa
  small      q = n_basic − Σ 1/(1 + 10^(pKa_i − pH))
  binds      cation: q > 0.05;   anion: q < −0.05
SMA BINDING
  ν          = (0.65 if protein else 1) · |q|
  C_salt     = max(0.005, I·1000/58.44, conductivity · 0.0085)   M
  log10 Keq  = log10 K0 + ν · log10(Λ / C_salt)        Λ = 0.30 M;  K0 protein 0.3, small ion 2.0
  C_elute    = Λ · (K0 · R)^(1/ν)
CAPTURE
  k′         = Keq · R
  capture    = k′/(1 + k′) · min(1, (1 + k′)/max(1, LBV))
RECOVERY TO PRODUCT CUT
  target     capture · 0.93 + (1 − capture) · carryover
  impurity   capture · 0.85 · overlap + (1 − capture) · carryover
  overlap    = 1 / (1 + ((r − 1)/0.10)²),   r = ratio of elution salts

FLOW-THROUGH POLISH MODE (chromatography_mode = flow_through)
  kd         = 5.0 · clip(|q|, 0.05, 2.5) / (1 + 1.2·I);   bound f = kd·R/(1 + kd·R)
  salts      90 % removed;  product loss 2 %
  bed        = max(V_f / 10 BV/h,  captured · 4 / (0.8 · capacity))
  t_run      = clip(0.8 · capacity · bed / captured, 4, 168) h
  regen      8 · bed / t_run  L/h;   regenerant 3.0 kg/kg captured at $0.55/kg
Cost scaling ion_exchange_cation
C = $700k · (Q / 1,000 L/h)^0.75
Exponent n
0.75
Base cost
$700k at 1,000 L/h
Largest single unit
10,000 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
2.3
Batch window
8 h
Power
2.5 kW per m³/h
Cost scaling ion_exchange_anion
C = $700k · (Q / 1,000 L/h)^0.75
Exponent n
0.75
Base cost
$700k at 1,000 L/h
Largest single unit
10,000 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
2.3
Batch window
8 h
Power
2.5 kW per m³/h

Hydrophobic interaction hydrophobic_interaction

Binds proteins by their hydrophobic surface patches at high salt and releases them as the salt drops.

Worked example Hydrophobic Interaction Chromatography · hydrophobic_interaction_chromatography

Worked example withheld while this model is revised.

_hydrophobicity_index in _chromatography_separation

ParameterDefaultNote
ammonium_sulfate_load_M M1.5≤ 3.0
elution_efficiency target / impurity0.90 / 0.20
resin_capacity25 g/Lband 10–60
h          starts 0.35; salt −0.25, sugar −0.18, organic acid +0.10, metabolite +0.08,
           protein +0.22 + 0.18·exp(−|pH − pI|/1.2);  −0.06·min(3, |charge|);  clamp [0.02, 0.98]
log k      = −5.48 + 10.0·h + 1.86·M          k bounded 10^±4
retained   = k/(1 + k) · elution_eff
Cost scaling hydrophobic_interaction
C = $700k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$700k at 1,000 L/h
Largest single unit
2,000 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
2.5
Batch window
8 h
Power
2.5 kW per m³/h

Reverse phase reverse_phase

Separates molecules by hydrophobicity on a non-polar resin, eluting them with an organic solvent.

Worked example Reverse Phase Chromatography · reverse_phase

Scenario: Reverse-phase purification of vancomycin

Set beyond the catalogue defaults: organic_fraction = 0.05

Vancomycin recovered
76.7 %
Resin bed
30 L
Buffer pumped
400 L/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductWaste
Flow, L/h200112488
Vancomycin, g/L56.830.477
Glucose, g/L20.9770.595
log k = log k0 - S phi;  bed = (V_f / LBV) x t_cycle
loaded at phi = 0.05 organic;  bed = (200 L/h / 10 BV) x 1.5 h = 30 L

Purchased cost: $400k for a 30 L bed (bed-volume basis, feed 200 L/h); $631k for a 300 L bed (bed-volume basis, feed 2,000 L/h).

_reverse_phase_capture

ParameterDefaultNote
organic_fraction φ0.40catalogue default; read as the strength the column is loaded at
solvent_strength_coeff S3.8
elution_efficiency target / impurity0.9 / 0.45
log k0     = −0.5 + 3.5·h + 0.2                h = hydrophobicity index (as HIC)
log k      = log k0 − S·φ                        bounded ±4
retained   = k/(1 + k) · elution_eff
solvent    $1 000/day × flow/100 L/h
Cost scaling reverse_phase
C = $650k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$650k at 1,000 L/h
Largest single unit
1,000 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
2.1
Batch window
8 h
Power
3.5 kW per m³/h

Size exclusion size_exclusion

Separates molecules by size as they pass through a porous gel, largest first.

Worked example Size Exclusion Chromatography · size_exclusion

Scenario: Size-exclusion polish of a concentrated antibody pool at clinical scale

SEC is not used for bulk antibody at this cost; it is shown at clinical polish scale.

Antibody recovered
94 %
Packed bed
750 L
Product dilution
1.7 x

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductWaste
Flow, L/h58.49497
Monoclonal Antibody (IgG), g/L3016.60.0181
Host Cell Protein (HCP), g/L0.30.04010.00233
B = V_f / load fraction;  bed = B x 3.0 h
B = 5 L/h / 0.02 CV;  bed = B x 3 h = 750 L

Purchased cost: $909k for a 750 L bed (bed-volume basis, feed 5 L/h); $6.57M for a 7,500 L bed (bed-volume basis, feed 50 L/h) (8 units in parallel).

_size_exclusion_captures, _sec_cycle_cv

ParameterDefaultNote
pore_radius_nm4.5
fraction_window_sigma σ0.12
target / impurity recovery scale0.94 / 0.55
sec_load_fraction_of_cv0.020.003–0.04
radius     r = 1.25 · 0.066 · MW^(1/3) nm      (or size/2)
Kav        = (1 − clip(r/r_pore, 0, 1))²
captured   = exp(−(Kav − Kav_target)² / (2σ²)) · scale
B          = V_f / load fraction
dilution   = 1.3 + 0.7 · (0.04 − LBV)/(0.04 − 0.003)
V_product  = V_f · dilution;   V_buffer = V_product − 0.03·V_f
bed        = B · 3.0 h    (150 × V_f at the 0.02 default)
  • Refused outside 0.3–4 % CV load, or for desalting duty (a desalting column is a different design).
Cost scaling size_exclusion
C = $650k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$650k at 1,000 L/h
Largest single unit
2,000 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
2.2
Batch window
8 h
Power
2 kW per m³/h

Membrane chromatography membrane_chromatography

Runs flow-through or bind-and-elute chromatography on stacked adsorptive membranes in disposable capsules instead of a packed column.

Worked example Membrane Chromatography · membrane_chromatography

Scenario: Anion-exchange membrane flow-through polish of a post-capture antibody pool

Antibody recovered
98.1 %
HCP removed
80.3 %
Membrane per hour of feed
0.6 L

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductWaste
Flow, L/h3002918.52
Monoclonal Antibody (IgG), g/L1515.110
Host Cell Protein (HCP), g/L0.0150.003040.424
V_mem = L_target / (loading x 1000)
V_mem = 4,500 g/h / (7.5 kg/L x 1000) = 0.6 L

Purchased cost: $77.4k at 300 L/h; $274k at 3,000 L/h.

Ion-exchange physics in the shared engine; sized as capsules

ParameterDefaultNote
modeflow_through, anion
product_fraction0.95
membrane_loading_kg_per_l7.50.1–20
resin_capacity30 g/L≤ 60
capsule price$5 000/L pharma, $3 000/L industrial
V_product  = V_f · 0.95;   product = ret · 0.05 + ft · 1.0
V_mem      = L_target / (loading · 1000)          flow-through
           = L_target / (DBC · 0.8)               bind–elute
capsules   L/yr = annual kg / (loading · cycles)
capex      flow basis (no resin family)
Cost scaling membrane_chromatography
C = $150k · (Q / 1,000 L/h)^0.55
Exponent n
0.55
Base cost
$150k at 1,000 L/h
Largest single unit
20,000 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
1.5
Cost floor
$75k
Batch window
8 h
Power
1.5 kW per m³/h

Activated carbon activated_carbon

Takes colour, odour and trace organics out of a liquid by adsorbing them onto activated carbon.

Worked example Activated Carbon Adsorption · activated_carbon

Scenario: Decolourising glucose syrup

Colour body removed
98.8 %
Glucose recovered
98 %
Carbon used
5 kg/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductWaste
Flow, L/h1,00098020.2
Glucose, g/L300300300
Caffeic Acid, g/L0.20.002419.81
dose = max(dose to reach the removal target, polish floor);  carbon = dose x V_f / 1000
dose = max(1.96, 5) g/L;  carbon = dose x 1,000 L/h / 1000 = 5 kg/h

Purchased cost: $100k for a 333 L bed (bed-volume basis, feed 1,000 L/h) (cost floor); $104k for a 3,330 L bed (bed-volume basis, feed 10,000 L/h).

activated_carbon_separation, Langmuir helpers

ParameterDefaultNote
carbon_dose_g_per_l5.0polish floor
impurity_removal_fraction0.90
product_loss_fraction0.02hold-up
ebct_min20[5, 60]
q_eff      = q_max (from molecule DB);  acids × (1 − 1/(1 + 10^(pKa1 − pH)))
b          = 100 · (q_max/0.10)²     clamp [0.05, 1000] L/g
a          = dose · 0.75 · q_eff      inventory per L feed
outlet x   solves  b·x² + (a·b − C_in·b + 1)·x − C_in = 0
dose       = max(bisection to reach the removal target, polish floor)
product    = (m_in − m_ads) · (1 − hold)
carbon     kg/h = dose · V_f / 1000
BED (capex, GAC anchor)
  V_bed    = Q · EBCT/60 · stages;   velocity = depth/(EBCT/60) in 2–20 m/h
opex       single use: dose · ($3.0 + $0.35 disposal)/kg;  regenerated: dose · (1.5 + 0.08·3.0)
  • Refused when solids exceed 0.1 g/L, the target is a cell or colloid, log P exceeds 3, or more than 5% of the target would adsorb.
Cost scaling activated_carbon
C = $100k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$100k at 1,000 L/h
Largest single unit
10,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical (grade-independent)
Installation factor
1.5
Power
1 kW per m³/h

Adsorption–elution adsorption_elution

Loads the product onto a resin or carbon bed, then strips it off with a smaller volume of eluent, capturing and concentrating it in one step.

Worked example Adsorption-Elution (Resin / Carbon Capture) · adsorption_elution

Scenario: Capturing chlorogenic acid on a macroporous resin

Chlorogenic acid recovered
85.5 %
Concentration factor
4.17 x
Resin bed cycled
31.6 L/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductWaste
Flow, L/h1,0002051,030
Chlorogenic Acid, g/L312.50.421
Glucose, g/L100.001169.68
R_cap = C_t (1 - f_bt) / (f_dyn q_t);  bed = V_f R / rho_bed
R_cap = 3 x (1 - 0.05) / (0.7 x 0.198) = 20.5 g resin/L;  bed = 1,000 L/h x 20.5 / 650 g/L = 31.6 L/h

Purchased cost: $438k at 1,000 L/h; $2.19M at 10,000 L/h.

adsorption_elution_separation (macroporous resin or carbon)

ParameterDefaultNote
eluent / eluent_fraction φethanol / 0.7
elution / wash bed volumes3.0 / 1.5
dynamic_binding_fraction f_dyn0.7
breakthrough_loss_fraction f_bt0.05
max_loading_bed_volumes60
elution_recovery0.9
isotherm   q_i = q_eff,i · b_i · C_i / (1 + Σ b_j·C_j)          competitive Langmuir
R_cap      = max_t C_t·(1 − f_bt) / (f_dyn · q_t)                g bed per L feed
R          = max(R_cap, ρ_bed / max_loading_BV)                   ρ_bed resin 650, carbon 480 g/L
bed        = V_f · R / ρ_bed  L/h
bound      = min(C_i·(1 − f_bt), R·f_dyn·q_i) · V_f
washed     weak species × (1 − exp(−wash_BV))
eluted     = (bound − washed) · elution_recovery
eluate     = eluted + elution·φ·ρ_eluent + (elution·(1 − φ) + void)·1000
bill       eluent make-up = organic · (1 − 0.9);  resin bed cycled / life at $35/kg
Cost scaling adsorption_elution
C = $350k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$350k at 1,000 L/h
Largest single unit
10,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
1 kW per m³/h

Molecular sieve dehydration molecular_sieve_dehydration

Removes the last water from a solvent such as ethanol by adsorbing it into a zeolite bed, getting past the azeotrope that distillation cannot.

Worked example Molecular Sieve Dehydration · molecular_sieve_dehydration

Worked example withheld while this model is revised.

molecular_sieve_dehydration_separation, _sieve_solve_recycle

ParameterDefaultNote
product water w_D0.005
purge water w_R0.30
stripper recovery η_s0.96
half-cycle / beds8 min / 2
working capacity / utilisation0.045 kg/kg / 0.60
u_s / p / T0.30 m/s / 2.5 bara / 140 °C
WATER BALANCE with recycle (≤ 200 iterations)
  F = m + S;   w_F = (m·w_F0 + S·w_s)/F
  R/D = (w_F − w_D)/(w_R − w_F);   D = F/(1 + R/D);   R = F − D
  S = η_s · R · (1 − w_R)/(1 − w_s)
BED
  W       = (F·w_F − D·w_D)/1000  kg/h water removed
  m_cap   = W · t_h / (q_work · util)
  ρ_v     = p·1e5·(MW/1000) / (8.314·(T + 273.15))
  A       = Q_v / u_s;   D_bed = √(4A/π)
  L       = clip(m_cap/(700·A), max(1.8, D_bed), L/D · D_bed)     ≤ 8 m
  ΔP/L    = 150μ(1 − ε)²u/(ε³d²) + 1.75ρ_v(1 − ε)u²/(ε³d)          Ergun, ε 0.37, d 3 mm
ENERGY
  regeneration 2 900 kJ/kg · W;  superheat 1.8 · ΔT;  stripper h_vap · 3
  • Refused above 15 wt% feed water or 0.5 g/L non-volatiles, when dew point + 28 K exceeds 200 °C, or when the recycle does not converge.
Cost scaling molecular_sieve_dehydration
C = $750k · (Q / 1,000 L/h)^0.72
Exponent n
0.72
Base cost
$750k at 1,000 L/h
Largest single unit
17,000 L/h; commodity_bulk 55,000; chemical 55,000
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
400 kW per m³/h

Thermal, drying & crystallisation

Shared helpers used across this group. Every operation here is priced on flow: stage counts, reflux, dryer area, crystalliser volume and flash-drum diameter are computed and reported, and they set the energy bill, but they do not move capex.

Trouton        ΔHvap = ΔS · (Tb + 273.15)            ΔS = 110 J/mol/K (water, alcohol, organic/amino acid), else 88
Volatility     α = exp[ −(ΔH_i/R)(1/T − 1/Tb_i) + (ΔH_w/R)(1/T − 1/373.15) ]      (exponent clipped ±50)
Rayleigh       f_overhead = 1 − w^α                   w = fraction of water remaining, α clipped [0, 20], α < 0.05 → 0
Water Tsat     T = B/(A − log10 P_mmHg) − C           Antoine  A,B,C = 8.07131, 1730.63, 233.426  (≤100 °C)
                                                               8.14019, 1810.94, 244.485  (>100 °C)
Column α       α = γ1·P1sat / (γ2·P2sat)              Antoine + van Laar from ONE table (backend/data/van_laar_water.json,
                                                      read by every tier), else Raoult with
               ΔHvap = K_F·Tb·(36.6 + 8.31 ln Tb)    Kistiakowsky–Fishtine, K_F = 1.0 / 1.1 acid / 1.2 alcohol / 1.3 polyol
van Laar       ln γ1 = A12·[A21·x2 / (A12·x1 + A21·x2)]²
               acetone (2.1041, 1.5555) Perry 13-2;  acetic acid (0.4185, 0.5754) ideal-vapour fit, no azeotrope;
               n-butanol (3.80, 1.20) dilute-aqueous fit;  each row declares its 1 atm azeotrope and a test checks it
two liquids    inside a pair's mutual-solubility gap the result carries a named two_liquid_phase warning
Latent heat    λ = 2256.5·[(647.096 − T)/(647.096 − 373.15)]^0.38   kJ/kg (Watson)
Steam          steam_kg/h = Q_kW · 3600 / 2133
Bubble point   Σ x_i·γ_i·Psat_i(T) = P                (bisection, 0.5–373.9 °C)
Steam economy  E(N) = 0.92·N / (1 + 0.10·(N − 1))     N ≤ 7; TVR adds 2 to N; MVR = 15 kWh per t water

Distillation distillation

Separates liquids by boiling point in a column, taking the volatile components overhead and the heavier ones from the bottom.

Worked example Distillation · distillation

Scenario: Beer stripper and rectifier: ethanol from clarified beer to near the azeotrope

The API fixes the distillate purity target at 0.99, above the 0.955 azeotrope, so the column sits at the azeotrope with reflux at its minimum.

Set beyond the catalogue defaults: n_stages = 40

Ethanol to the distillate
98 %
Distillate ethanol
95.5 wt%
Ethanol left in the bottoms
1.05 g/L

Selected components shown; water, salts and minor by-products omitted.

StreamFeedLight phaseHeavy phase
Flow, L/h1,00064.3948
Ethanol, g/L507611.05
Glucose, g/L2–2.11

Purchased cost: $810k at 1,000 L/h; $3.62M at 10,000 L/h.

distillation_separation · energy _energy_distillation

ParameterDefaultNote
n_stages15
murphree_efficiency EM0.70
reflux_ratio1.5min 0.1
column pressure1 atmfrom any declared mbar / bar / atm key
key_recovery0.98[0.5, 0.9999]
distillate / bottoms purity0.99[0.05, 0.9999] mass fraction

Mass balance

T_op   = water boiling point at column pressure
α_i    = alpha_vs_water(i) at the feed pseudo-binary mole fraction
Key    = volatile target with highest α; light if α_p > 1, else heavy

Light product:   d_p = key_recovery · F_p
                 d_water = d_p/spec − d_p − Σ(non-keys in D)       clamped [0, water in]
Heavy product:   b_p = key_recovery · F_p
                 b_water = b_p/spec − b_p − Σ(non-keys in B)

Azeotrope cap on product mass fraction (water heavy key only):
   override → van Laar crossing where α = 1 → static record (ethanol 0.956, IPA 0.874, …)

Fenske          N_min = ln[(xd/(1−xd))·((1−xb)/xb)] / ln α          α = geometric mean at xb, xf, xd, ≥ 1.01
Underwood       R_min = [xd/xf − α(1−xd)/(1−xf)] / (α − 1)
Non-key split   d_i/b_i = (d_k/b_k) · α_ik^N_min
Gilliland       Y = 0.75·(1 − X^0.5668),  X = (R − R_min)/(R + 1)
Available       N_act = n_stages · E_M
Reflux needed   Y = (N_act − N_min)/(N_act + 1) → X → R = (R_min + X)/(1 − X)
Design reflux   R = max(reflux_ratio, R_needed, 0.1)
Stage-limited   (N_act ≤ N_min,spec): key logits scaled by k = N_ach/N_min,spec
Reported        N_theo = (N_min + Y)/(1 − Y),  stages_required = ceil(N_theo / E_M)
Volumes         V_D = V_feed · m_D/m_total

Energy & sizing

Q_reboiler  = D·(R + 1)·λ_top + max(0, m_feed·cp·(T_bottom − T_in))
Q_condenser = D·(R + 1)·λ_top
Classic tier: 90 kW thermal per m³/h feed
  • Refused if Ntheo > 150 or αavg < 1.05 (Kister 1992; Perry's Sec. 13).
  • Refused if the target decomposes: Tb(P) > Tdecomp − 20 K; the message names the vacuum needed.
  • With no volatile target: 30% of the water overhead, others by Kremser φ = αN/(1 + αN).
Cost scaling distillation
C = $900k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$900k at 1,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
12 kW per m³/h

Evaporation evaporation

Boils off water to concentrate a solution, often in several effects that reuse the heat in the vapour.

Worked example Thin-Film Evaporator · thin_film_evaporator

Scenario: Concentrating a glucose stream

Water evaporated
800 L/h
Glucose in the concentrate
150 g/L
Concentration factor
5 x

Selected components shown; water, salts and minor by-products omitted.

StreamFeedCondensateConcentrate
Flow, L/h1,000800200
Glucose, g/L30–150
Salt (NaCl), g/L2–10
V_conc = V_feed / CF
V_conc = 1,000 L/h / 5 = 200 L/h

Purchased cost: $825k at 1,000 L/h; $3.28M at 10,000 L/h.

evaporation_separation, _evaporator_water_evaporated · energy _energy_evaporation

ParameterDefaultNote
concentration_factor CF5.0min 1.01
evap_water_removal_fraction0.92[0.01, 0.999]
operating_pressure_mbar—sets T; otherwise evap_temperature_c = 60
evap_thermal_efficiency η0.92energy only
number_of_effects Nby gradeindustrial 4, pharma 1
evaporation_modemulti_effectsingle / tvr / mvr

Mass balance

V_conc      = V_feed / CF
m_w,kept    = max(0, (V_conc − Σ m_solute/ρ_solute) · 1000)
m_evap      = min(m_w,in − m_w,kept, 0.92 · m_w,in)
w           = 1 − m_evap / m_w,in
T_boil      = Tsat(P) + boiling-point elevation (Raoult bubble point of the concentrate)
f_i         = 1 − w^α_i        overhead fraction of each non-water species

Energy

Multi-effect  Q_heat = (sensible + λ·m_vap / E(N)) / η
MVR           Q_heat = sensible / η,   electricity = 15 kWh/t water evaporated
Classic tier  Q = [m·4.18·(60 − 25) + m_w·λ(60 °C)/E] / 0.92
Capex         flow basis × N^0.70  (× 1.8 for MVR)
  • Warns when the CF needs more than the removal ceiling, and when MVR runs below 2 t/h of water.
Cost scaling evaporation
C = $250k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$250k at 1,000 L/h
Largest single unit
150,000 L/h; commodity_bulk 393,100; chemical 393,100
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Effects exponent
0.7
Power
5 kW per m³/h

Evaporative crystalliser evaporative_crystallizer

Boils off solvent until the product exceeds its solubility and crystallises out.

Worked example Evaporative Crystallizer · evaporative_crystallizer

Scenario: Evaporative crystallisation of salt from brine

Salt crystallised
60 %
Water evaporated
590 kg/h
Boiling point elevation
4.38 K

Selected components shown; water, salts and minor by-products omitted.

StreamFeedMagmaCondensate
Flow, L/h1,000410590
Salt (NaCl), g/L280683–
magma = sum m_crystallised / (m_feed - W)
magma = 168 / (1,150 - 590) kg/h = 0.3

Purchased cost: $1.85M at 1,000 L/h; $9.26M at 10,000 L/h.

evaporative_crystallization_separation · energy in thorough_flowsheet

ParameterDefaultNote
crystallizer_modeevaporativeor vacuum_cooling
operating_pressure_mbar100water boils at 45.8 °C
magma_density_target0.30[0.02, 0.35]
crystallization_yield η0.70
mother_liquor_fraction0.30[0.02, 0.60]
mother_liquor_recycle r0≤ 0.95
hold_time_hr2

Mass balance

T_op = Tsat(P) + BPE                    BPE iterated 3× on fresh feed, ≥ 0
Evaporative mode:
  bisect W ∈ [0, 0.95·m_w,in] (24 iterations) until
  magma = Σ m_crystallised / (m_feed − W) = target
  each trial runs the cooling-crystalliser equilibrium at T_op on the concentrated feed
Vacuum-cooling mode (adiabatic flash):
  W·λ(T_op) = m·cp·(T_feed − T_op) + Q_cryst
Outlets:  magma (heavy)  +  condensate W as pure water
Yield       = crystallised target / target in
Selectivity = (crys_t/crys_imp)/(in_t/in_imp)   clamped [0.01, 100]

Energy & sizing

net_latent = max(0, λ(T_boil)·W − Q_cryst)        Q_cryst: ΔH_sol → ΔH_fus → class default (sugar 60 … 120 kJ/kg)
Steam       Q_heat = (sensible + net_latent/E(N)) / 0.92
MVR         Q_heat = sensible/0.92,  +15 kWh/t
Vessel      V = (magma kg/h ÷ 1.2 kg/L) · τ(2 h) · 1.25     reported, not priced
Capex       flow basis × effects multiplier (as evaporation)
  • Magma held at ≤ 0.35 solids (Myerson Ch. 6); inherits every cooling-crystalliser refusal.
Cost scaling evaporative_crystallizer
C = $700k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$700k at 1,000 L/h
Largest single unit
150,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.5
Effects exponent
0.7
Power
4 kW per m³/h

Cooling crystallisation crystallization

Cools a solution so the solubility of the product falls and it comes out as crystals.

Worked example Crystallization · crystallization

Scenario: Cooling crystallisation of succinic acid

Succinic acid crystallised
73.1 %
Solubility at 4 degC
41.4 g/L
Crystal purity
100 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedMagma
Flow, L/h1,0001,000
Succinic Acid, g/L150150
Glucose, g/L33
eq = 1 - C_sat V / m;  frac = max(eta eq, 1 - 1.05 (1 - eq))
eq = 1 - 41.4 g/L x 930 L/h / 150 kg/h = 0.743;  frac = max(0.7 x 0.743, 1 - 1.05 x (1 - 0.743)) = 0.731

Purchased cost: $400k at 1,000 L/h; $1.79M at 10,000 L/h.

crystallization_separation, _cryst_partition, _crystallization_with_mother_liquor_recycle

ParameterDefaultNote
temperature4 °C
crystallization_yield η0.70[0, 1]
occluded_liquor_fraction f0.05[0.02, 0.08]
mother_liquor_recycle r0≤ 0.95
hold_time_hr4

Mass balance

C_sat(T, pH)  van 't Hoff from the 25 °C solubility, then Henderson–Hasselbalch
              factor clamped [0.1, 10], T clamped 0–100 °C, C_sat ≤ 1500 g/L
V_liquor      = m_water/1000 + Σ m_dissolved/ρ_solid          ρ_solid default 1350 g/L
m_solid       = η · max(0, m − C_sat·V_liquor)                 fixed point, 12 iterations
eq            = 1 − C_sat·V/m
frac          = clamp(max(η·eq, 1 − 1.05·(1 − eq)), 0, eq)
Magma cap     (crystals + carried)/m_total ≤ 0.35  → scaled pro rata
Occlusion     m_occl = crystals · f/(1 − f)    ≤ 0.5 × liquor
Recycle       loop feed = fresh + r·liquor;  V_loop = P_total / C_fresh
              purge limit r = (K − 1)/(K·φ − φ_p),  K = 0.95·C_sat/c_0

Energy & sizing

Q_cool  = max(0, m·cp·(T_in − T_final) + Q_cryst),   chiller electricity = Q/3
Vessel  V = Q_loop · τ(4 h) · 1.25                     reported, not priced
  • Refused when the target is water-miscible, liquid at Top, has no solubility record, was never dissolved, or particulates exceed 2 g/L or magma 0.40.
Cost scaling crystallization
C = $400k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$400k at 1,000 L/h
Largest single unit
20,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
15 kW per m³/h

Flash drum flash_drum

Drops the pressure on a liquid so its volatile part vaporises at once, splitting the stream into vapour and liquid.

Worked example Flash Drum · flash_drum

Scenario: Flashing ethanol from beer

Set beyond the catalogue defaults: flash_temperature_c = 97

Ethanol to the vapour
37.2 %
Vapour flow
74.9 kg/h
Ethanol activity coefficient
4.95

Selected components shown; water, salts and minor by-products omitted.

StreamFeedLight phaseHeavy phase
Flow, L/h1,000107,000933
Ethanol, g/L500.17333.7
Glucose, g/L2–2.14
Q_v = m_v / rho_v;  D = sqrt(4 Q_v / (pi u_max))
Q_v = 74.9 kg/h / 0.699 kg/m3;  D = sqrt(4 Q_v / (pi x 4.05 m/s)) = 0.0968 m

Purchased cost: $72k at 1,000 L/h; $405k at 10,000 L/h.

flash_drum_separation

ParameterDefaultNote
flash_temperature_c80
flash_pressure_mbar1013

Mass balance

K_i = γ_i(x) · Psat_i(T) / P                van Laar on organic + water pseudo-binary
Rachford–Rice   Σ z_i(K_i − 1) / (1 + ψ(K_i − 1)) = 0      ψ ∈ [0, 1), bisection
Vapour fraction of i = ψK_i / (1 + ψ(K_i − 1))
Non-volatile by class: cells, protein, salt, sugar, amino acid, polymer, MW ≥ 1000

Sizing (reported)

ρ_v    = P·MW_v / (8314.462·T)
u_max  = 0.107 · √((ρ_L − ρ_v)/ρ_v)          Souders–Brown, GPSA
D      = √(4·Q_v / (π·u_max)),   L/D = 4
Cost scaling flash_drum
C = $80k · (Q / 1,000 L/h)^0.75
Exponent n
0.75
Base cost
$80k at 1,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
5 kW per m³/h

Solvent recovery solvent_recovery

Distils spent solvent back out of a stream so it can be reused, with the unrecovered part billed as make-up.

Worked example Solvent Recovery · solvent_recovery

Worked example withheld while this model is revised.

solvent_recovery_separation

ParameterDefaultNote
solvent_recovery0.98[0.95, 0.995]
residual_solvent_wt_pct0.3[0, 10]
water_overhead = recovery · water_in
                 (azeotrope: min(water_in, solvent_in·recovery·w/(100 − w)))
unrecovered    = solvent_in · (1 − recovery)
residual       = min(unrecovered, spec·base/(1 − spec))     base = non-solvent + product water
overhead       = solvent_in − residual
make-up        = solvent_in · (1 − recovery)                  billed
residual ppm checked against ICH Q3C
Cost scaling solvent_recovery
C = $300k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$300k at 1,000 L/h
Largest single unit
50,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
2 kW per m³/h

Reactive distillation (esterification) esterification_reactive_distillation

Runs an esterification inside a distillation column, taking the products away as they form so the reaction keeps going.

Worked example Esterification (Reactive Distillation) · esterification_reactive_distillation

Scenario: Esterifying lactic acid with methanol

Set beyond the catalogue defaults: acid_component = Lactic Acid

Lactic acid converted
98 %
Methyl lactate overhead
902 kg/h
Methanol bought
569 kg/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductHeavy phase
Flow, L/h1,0001,67031.6
Lactic Acid, g/L8000.0191506
Methyl Lactate, g/L–538143
Methanol, g/L–1739.19
X_ceil = 1 - (1 - X_eq)^n;  X = min(X_req, X_ceil)
X_ceil = 1 - (1 - 0.571)^8 = 0.999;  X = min(0.98, 0.999) = 0.98

Purchased cost: $1.3M at 1,000 L/h; $6.22M at 10,000 L/h.

esterification_reactive_distillation_separation, esterification_equilibrium_conversion

ParameterDefaultNote
alcoholmethanolethanol, butanol
alcohol_to_acid_mol_ratio r2.0[1.05, 8]
k_eq_esterification K2.5[0.2, 20]
n_reactive_stages n8[1, 40]
target_conversion0.98[0.10, 0.999]
catalyst WHSV / life / price2 h⁻¹ / 2 yr / $12/kg
Equilibrium   K = (X + e0)(w0 + X) / ((1 − X)(r − X))
Column        X_ceil = 1 − (1 − X_eq)^n                      Taylor & Krishna 2000
Conversion    X = min(X_req, X_ceil, 0.999, 0.999·r)
MW_ester      = MW_acid + MW_alcohol − 18.015
Split         ester 0.995 light; free alcohol 0.999 light; acid & non-volatiles heavy (0.002 carryover)
Bottoms water = heavy_nonwater · (1/0.60 − 1)
Catalyst      inventory = acid kg/h ÷ WHSV;  use = inventory / (life × 8000 h)
Energy        Q = λ_overhead·(R + 1) + sensible to T_bottom      reaction thermoneutral
Cost scaling esterification_reactive_distillation
C = $1.3M · (Q / 1,000 L/h)^0.68
Exponent n
0.68
Base cost
$1.3M at 1,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.5
Power
150 kW per m³/h

Dryers spray_drying freeze_drying drum_drying fluid_bed_drying rotary_drying vacuum_tray_drying

Removes water from a product to leave a dry powder or solid, by spray, freeze, drum, fluid-bed, rotary or vacuum tray drying.

Worked example Spray Drying · spray_drying

Scenario: Spray drying whey protein concentrate

The purchased cost sits at the low end of published spray-dryer costs.

Protein to the powder
97 %
Dry product out
230 kg/h
Residual moisture
3 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedEvaporated water (vapour)Solid
Flow, L/h1,0001,330,000170
Whey Protein, g/L2000.004521,140
Lactose, g/L300.000678171
product water = rm / (1 - rm) x sum retained
product water = 0.03 / (1 - 0.03) x 223 kg/h = 6.9 kg/h

Purchased cost: $300k at 1,000 L/h; $1.19M at 10,000 L/h.

Worked example Freeze Drying (Lyophilization) · freeze_drying

Worked example withheld while this model is revised.

Worked example Drum Dryer · drum_dryer

Scenario: Drum drying yeast cream

Yeast to the flakes
96 %
Dry product out
90 kg/h
Residual moisture
4 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedWasteSolid
Flow, L/h500703,00082.9
Yeast (S. cerevisiae), g/L1800.005121,040
product water = rm / (1 - rm) x sum retained
product water = 0.04 / (1 - 0.04) x 86.4 kg/h = 3.6 kg/h

Purchased cost: $192k at 500 L/h; $964k at 5,000 L/h.

Worked example Fluid Bed Dryer · fluid_bed_dryer

Scenario: Fluid-bed drying fumaric acid crystals

Crystals to the dry product
95 %
Dry product out
174 kg/h
Residual moisture
2 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedWasteSolid
Flow, L/h200124,000108
Fumaric Acid, g/L9000.07281,590
Water, g/L4510.70132.4
product water = rm / (1 - rm) x sum retained
product water = 0.02 / (1 - 0.02) x 171 kg/h = 3.49 kg/h

Purchased cost: $238k at 200 L/h; $947k at 2,000 L/h.

Worked example Rotary Dryer · rotary_dryer

Scenario: Drying wet distillers' grains to DDGS

Solids to the dry product
95 %
Dry product out
380 kg/h
Residual moisture
5 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedWasteSolid
Flow, L/h1,0001,230,000283
Cellulose, g/L1700.00693570
Hemicellulose (Xylan), g/L1100.00449369
Yeast (S. cerevisiae), g/L1000.00408335
Water, g/L7220.57367
product water = rm / (1 - rm) x sum retained
product water = 0.05 / (1 - 0.05) x 361 kg/h = 19 kg/h

Purchased cost: $360k at 1,000 L/h; $1.8M at 10,000 L/h.

Worked example Vacuum Tray Drying · vacuum_tray_drying

Scenario: Drying a wet pharmaceutical crystal cake (ampicillin)

The drying loss is routed to the vapour and condensate stream.

Crystals to the dry product
93 %
Dry product out
11.7 kg/h
Residual moisture
5 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedCondensateSolid
Flow, L/h156.448.56
Ampicillin, g/L8001301,300
Water, g/L42990768.6
product water = rm / (1 - rm) x sum retained
product water = 0.05 / (1 - 0.05) x 11.2 kg/h = 0.587 kg/h

Purchased cost: $529k at 15 L/h; $1.88M at 150 L/h.

drying_separation (shared mass balance) · energy _energy_drying

ParameterDefaultNote
residual_moisture rm0.050 allowed
drying_yield0.93
drying_temperature_cspray 60, fluid bed 70, tray 50, freeze −20, rotary 80, drum 100

Mass balance

w              = [rm/(1 − rm) · DM · yield] / m_w,in
f_co,i         = 1 − w^α_i                            co-evaporation (Rayleigh)
retained_i     = m_i · (1 − f_co,i) · yield
product water  = rm/(1 − rm) · Σ retained              ≤ water fed
vapour water   = water in − product water
powder volume  = (DM/600) · (1 + rm)/(1 − rm)

Energy by dryer

Spray / fluid bed / rotary (convective, one formula for both tiers)
  η_air = (T_in − T_out)/(T_in − T_amb) · (1 − f_loss)       per-dryer heat loss in data
          fluid bed 70/40 °C → 0.60;  spray 0.58;  rotary 0.55   (≈ 4.2 MJ/kg water for the fluid bed)
  Q     = λ(T_out)·m_evap/η_air + sensible,   Q ≥ 4500 kJ/kg × m_evap   (Baker & McKenzie 2005)
Drum
  Q = latent/0.75 + sensible;   area = m_evap / 20 kg/m²/h (reported)
Vacuum tray
  P 10 mbar, T_evap = Tsat(P);   Q = (latent + sensible)/0.75
Freeze
  sublimation = m·2838/3600 kW;   freezing = sensible to 0 °C + m_w·333.6 + m·2.05·25
  condenser   = sublimation + m·1.996·15;   electricity = refrigeration/1.25 + vacuum
  • Rayleigh co-evaporation overstates volatile loss from a drying droplet (Thijssen & Rulkens 1968). The code says so.
Cost scaling spray_drying
C = $600k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$600k at 1,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
2.8
Power
30 kW per m³/h
Cost scaling freeze_drying
C = $2M · (Q / 500 L/h)^0.5
Exponent n
0.5
Base cost
$2M at 500 L/h
Largest single unit
500 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
3.0
Power
60 kW per m³/h
Cost scaling drum_drying
C = $250k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$250k at 1,000 L/h
Largest single unit
10,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.2
Power
5 kW per m³/h
Cost scaling fluid_bed_drying
C = $500k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$500k at 1,000 L/h
Largest single unit
2,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
20 kW per m³/h
Cost scaling rotary_drying
C = $400k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$400k at 1,000 L/h
Largest single unit
50,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.5
Power
10 kW per m³/h
Cost scaling vacuum_tray_drying
C = $880k · (Q / 200 L/h)^0.55
Exponent n
0.55
Base cost
$880k at 200 L/h
Largest single unit
200 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.2
Power
20 kW per m³/h

Heat sterilisation heat_sterilization

Heats a medium or feed long enough to kill contaminating organisms, then cools it back down.

Worked example Continuous Heat Sterilizer · continuous_heat_sterilizer

Scenario: Sterilising fermentation medium

Del factor delivered
40
Hold time
48.2 s
Glucose kept intact
99 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h1,0001,000
Glucose, g/L10099
Ammonium Sulfate, g/L2525
k_d = (ln10 / D121) exp(-(Ea/R)(1/T - 1/394.25));  t_hold = Del / k_d
k_d = (ln10 / 2.4 min) x exp(-(283,000 / 8.314) x (1/(140 + 273.15) - 1/394.25));  t_hold = 40 / k_d = 48.2 s

Purchased cost: $359k at 1,000 L/h; $1.28M at 10,000 L/h.

heat_sterilization_separation · hold time in sterility_economics

ParameterDefaultNote
hold_temp_c140 °C[130, 150]; old key temperature_c still accepted
target_del_factor40≥ 32.2
yield_loss0.01[0, 0.15]
regeneration efficiency η0.90≤ 0.95
Balance     target_out = target_in · (1 − yield_loss)       rest kept as heat-degraded
Del factor  k_d = (ln10 / D121) · exp(−(Ea/R)(1/T − 1/394.25))    D121 = 2.4 min, Ea = 283 kJ/mol
            t_hold = ∇ / k_d   (∇ target 40 → 48 s at 140 °C, 132 s at 135 °C)   or declared hold → ∇ delivered
            one resolver (sterility_economics) feeds the balance, the rate panel and the TEA
Energy      Q = m·cp·(T_hold − T_in)·(1 − η)   billed as STEAM at the same setpoint in both tiers,
            plus trim cooling water for the same duty
  • Delivered Del below 32.2 is fatal ("Under-sterilised medium"), with the hold that would be needed. The old default of 135 °C for 5 s delivered Del 1.5.
Cost scaling heat_sterilization
C = $250k · (Q / 1,000 L/h)^0.55
Exponent n
0.55
Base cost
$250k at 1,000 L/h
Largest single unit
50,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
12.8 kW per m³/h

Pasteurisation pasteurization

Heats a liquid briefly to kill vegetative microbes, a milder treatment than sterilisation.

Worked example Pasteurizer (HTST) · pasteurizer

Scenario: HTST pasteurisation of sweet whey

Vegetative log reduction
10 log
Pasteurisation units
12.9 PU
Heating after regeneration
40.2 kW

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h5,0005,000
Whey Protein, g/L65.97
Lactose, g/L4848
D_T = D_ref x 10^((72 - T)/z);  log reduction = t_hold / D_T
D_T = 1.5 s x 10^((72 - 72) / 6);  log reduction = 15 s / D_T = 10

Purchased cost: $454k at 5,000 L/h; $1.61M at 50,000 L/h.

pasteurization_separation

ParameterDefaultNote
temperature_c72> 100 refused, clamped
hold_time_s15
z_value_c6.0
d_ref_s1.5 s at 72 °C
yield_loss0.005[0, 0.10]
D_T            = D_ref · 10^((72 − T)/z)
log reduction  = t_hold / D_T                        warning below 5 log (US PMO)
spores         D = 120 s · 10^((121.1 − T)/10)
PU             = (t/60) · 10^((T − 60)/7)
Q              = m·4.186·(T − T_in)·(1 − η)          T_in 25 °C
Cost scaling pasteurization
C = $150k · (Q / 1,000 L/h)^0.55
Exponent n
0.55
Base cost
$150k at 1,000 L/h
Largest single unit
50,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
5.5 kW per m³/h

Extraction & precipitation

Liquid–liquid extraction extraction

Moves the product from the water phase into an immiscible solvent in which it dissolves better.

Worked example Liquid-Liquid Extraction · liquid_liquid_extraction

Scenario: Extracting vanillin into ethyl acetate

Vanillin extracted
98 %
Vanillin in the extract
5.19 g/L
Solvent make-up
8.11 kg/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedOrganic phaseHeavy phase
Flow, L/h1,0009441,060
Vanillin, g/L55.190.0947
Glucose, g/L50.003054.73
makeup = m_extract (1 - recovery) + m_raffinate (1 - stripper)
makeup = 822 x (1 - 0.995) + 80 x (1 - 0.95) kg/h = 8.11 kg/h

Purchased cost: $438k at 1,000 L/h; $1.74M at 10,000 L/h.

liquid_liquid_extraction_separation · make-up in process_solvents.solvent_makeup_kg_per_hr

ParameterDefaultNote
solvent_ratio R (v/v)1.0[0.1, 10]
n_stages N3[1, 10]
extraction_pHinlet pH, else 7.0
solvent_typeethyl_acetate
solvent_recovery / raffinate stripper0.995 / 0.95
V_org = R·F,   V_aq = F
solvent lost to raffinate  m_s,raff = min(m_solv, S_sw·F)
water into extract         m_w,ext = min(m_w,in, m_s,ext · w/(1 − w)),   w = water-in-solvent wt fraction ≤ 0.5
log P                      component → database → class fallback (protein −2, salt −3, sugar −2.5, acid 0.5 …)
acids / amino acids        logP_eff = logP + log10(f_neutral),   f_neutral = 1 − 1/(1 + 10^(pKa − pH))
K_D                        = 10^clamp(logP_eff + solvent correction, −5, 5)
Kremser (countercurrent)   E = K_D·R
                           f_org = (E^(N+1) − E)/(E^(N+1) − 1),   E = 1 → N/(N + 1),   ≤ 0.98
make-up                    charge = F·R·ρ;  raffinate = min(charge, S_sw·F/1000)
                           makeup = (charge − raffinate)(1 − recovery) + raffinate(1 − stripper)
thorough sizing            V_stage = F(1 + R)·(10/60)·1.25 per stage, 0.4 kW/m³
  • A water-miscible solvent (ethanol, methanol) is refused: it makes one phase, not two.
Cost scaling extraction
C = $350k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$350k at 1,000 L/h
Largest single unit
20,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
1 kW per m³/h

pH-swing back-extraction ph_swing_back_extraction

Moves an acidic or basic product back out of the organic solvent into a fresh water phase by changing the pH.

Worked example pH-Swing Back Extraction · ph_swing_back_extraction

Scenario: Penicillin G extraction and back-extraction

Penicillin recovered
89.2 %
Concentration factor
4.91 x
Forward extraction pH
2.26

Selected components shown; water, salts and minor by-products omitted.

StreamFeedLight phaseConcentrate
Flow, L/h1,000984182
Penicillin G, g/L302.68147
Glucose, g/L55.080.00388
E = D R;  f = (E^(N+1) - E) / (E^(N+1) - 1)   (Kremser, forward extraction)
E = 16.2 x 0.25 = 4.06;  f = (4.06^(1.7 + 1) - 4.06) / (4.06^(1.7 + 1) - 1) = 0.929

Purchased cost: $1.75M at 1,000 L/h; $7.82M at 10,000 L/h.

ph_swing_back_extraction_separation, _kremser_fraction, _ph_swing_distribution_ratio

ParameterDefaultNote
solvent_type / ratio Rbutyl_acetate / 0.25[0.05, 5]
stages forward / back2 / 2[1, 10]
stage_efficiency η0.85
back_phase_ratio0.2
temperature_c / acid hold5 °C / 1 h
degradation_rate_per_hr0.02 at 5 °C
pH window      acid: fwd = pKa − 0.5, back = pKa + 4.5;   base: fwd = pKa + 1.0, back = pKa − 4.0   (clamp 1.5–12)
D(pH)          = 10^clamp(logP + log10 f_neutral(pKa, pH) + solvent correction, −5, 5)
N_eff          = N·η
forward        f1 = min(0.98, Kremser(D_fwd·R, N_fwd,eff))
degradation    k = k_ref·2.5^((T − 5)/10);   loss = 1 − exp(−k·t_hold)        acid swing only
back           V_back = back_ratio·R·F;   E_b = (V_aq/V_solv)/D_back;   f_b = min(0.98, Kremser(E_b, N_back,eff))
buffer floor   V_back ≥ m_target / (1.5·c_sat(T, pH_back))
back titrant   mol = m_target/MW/eq + 0.02·V_back       (eq 2 for H2SO4, Ca(OH)2)
solvent        makeup = s_raff(1 − stripper) + s_prod + purge·circulating
  • Refused for proteins, polymers, cells or MW > 1500, and for a pKa outside acid 2–8 or base 5.5–11.5.
Cost scaling ph_swing_back_extraction
C = $700k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$700k at 1,000 L/h
Largest single unit
15,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
6 kW per m³/h

Precipitation precipitation

Adds salt, solvent or acid so the product, or an impurity, becomes insoluble and drops out as a solid.

Worked example Precipitation · precipitation

Scenario: Ammonium sulfate precipitation of an enzyme

Set beyond the catalogue defaults: mechanism = salting_out

Amylase precipitated
80 %
Ammonium sulfate dosed
325 kg/h
Ionic strength
7.38 mol/L

Selected components shown; water, salts and minor by-products omitted.

StreamFeedMagma
Flow, L/h1,0001,180
Amylase, g/L54.22
Glucose, g/L10.845
m_solid = eta max(0, m - C_sat V_liquor)
m_solid = 0.8 x max(0, 5 kg/h - 4.00e-04 g/L x 1,180 L/h) = 4 kg/h

Purchased cost: $431k at 1,000 L/h; $1.72M at 10,000 L/h.

precipitation_separation, _precip_isoelectric_c_sat, shared partition _cryst_partition

ParameterDefaultNote
mechanismautoisoelectric, salting_out, antisolvent, metal_salt, thermal
pH / temperature_c4.5 / 4
precipitantammonium sulfate, 325 g/L
occluded_liquor_fraction0.05[0.02, 0.08]
hold_time_min30sizing
PROTEIN SOLUBILITY (isoelectric / salting-out; Cohn)
  q      = 0.12 · MW_kDa · |pH − pI|
  S_pH   = min(S_w, (S_w/30) · 10^(0.25·q))
  S      = S_pH · 10^(−0.75·I)              I = factor·dose/MW  ((NH4)2SO4 3, NaCl 1, CaCl2 3, alum 15)
ANTISOLVENT
  C_sat × 10^(−4.5·φ)                       φ: xanthan IPA 0.60, hyaluronan EtOH 0.70, default EtOH 0.67
  top-up V = (φ − φ_feed)·F/(1 − φ)
METAL SALT  C_sat × 0.02;   THERMAL (T ≥ 60 °C) proteins C_sat × 0.05
PARTITION
  m_solid = η · max(0, m − C_sat·V_liquor)   η: isoelectric 0.75, salting-out 0.80, antisolvent 0.93, metal 0.85, thermal 0.85
  magma ≤ 0.35 solids;  occluded = crystals·f/(1 − f)
SIZING   V = Q · hold/60 · 1.25,  0.3 kW/m³
  • Isoelectric needs a protein with a pI and |pH − pI| ≤ 0.5. A magma above 0.40 solids is refused.
Cost scaling precipitation
C = $300k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$300k at 1,000 L/h
Largest single unit
50,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
1.8
Power
3 kW per m³/h

Conditioning, dosing & holds

pH adjustment ph_adjustment

Adds acid or base to bring a stream to a target pH.

Worked example pH Adjustment · ph_adjustment

Scenario: Neutralising lactic acid broth

pH
7
Sodium hydroxide
35.1 kg/h
Base demand
0.878 eq/L

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h1,0001,020
Lactic Acid, g/L9088.6
Glucose, g/L54.92
titrant g/h = mol/L x MW x F
NaOH = 0.878 mol/L x 39.997 g/mol x 1,000 L/h = 35.1 kg/h

Purchased cost: $150k at 1,000 L/h; $597k at 10,000 L/h.

ph_adjustment_separation, ph_calculations.titrant_demand

ParameterDefaultNote
target_pH7.0required
titrantautoNaOH (up), H2SO4 (down); lime, NH4OH, HCl, KOH
charge balance   SID = Kw/h − h + Σ C_i·α_i(pH),   α = 1/(1 + 10^(pKa − pH))
dose D           bisection (60×, 0–12.5 mol/L) until pH_after(SID + z·D) = target;  deadband 0.05
H2SO4            eq = D·(1 + α_HSO4(pH)),  bisulfate pKa 1.99
lime             mol = D/2
NH4OH            mol = D + mol·α_9.25(pH_in)     fixed point
titrant g/h      = mol/L · MW · F
acid dose        forms a salt: g_salt = mol·F·stoich·MW_salt   (e.g. (NH4)2SO4 132.14)
Cost scaling ph_adjustment
C = $120k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$120k at 1,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
1.6
Power
0.6 kW per m³/h

Reagent dose reagent_dose

Adds a set amount of a liquid or solid reagent to a stream.

Worked example Reagent Dosing · reagent_dose

Scenario: Dosing ethanol to precipitate pullulan

Ethanol dosed
1,600 kg/h
Water left in the liquor
37.6 wt%
Ethanol cost
1,440 USD/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h1,0003,030
Pullulan, g/L309.91
Ethanol, g/L–529
V_add = F phi / (1 - phi);  m = V_add rho
V_add = 1,000 L/h x 0.67 / (1 - 0.67) = 2,030 L/h;  m = V_add x 0.789 kg/L = 1,600 kg/h

Purchased cost: $188k at 1,000 L/h; $746k at 10,000 L/h.

reagent_dose_separation

ReagentFormρ g/mL · $/kg
ethanol / isopropanolliquid0.789 · 0.90 / 0.786 · 1.50
ammonium sulfatesolid1.77 · 0.20
PEGsolid1.20 · 2.80
calcium hydroxidesolid2.21 · 0.18
flocculantsolid1.10 · 4.00
liquid (ratio = final volume fraction φ, default 0.67)   V_add = F·φ/(1 − φ);   m = V_add·ρ·1000
solid  (ratio = g per L feed)                            m = ratio·F;   V_add = m/(ρ·1000)
V_out = F + V_add;   every feed concentration × F/V_out
above solubility → suspended;  lime bisected to pH 12.45, the rest is slurry
  • Refused at φ ≥ 0.9 or ratio ≤ 0.
Cost scaling reagent_dose
C = $150k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$150k at 1,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
1.8
Power
1 kW per m³/h

Mixing vessel mixing_vessel

Blends streams and additions together in a stirred tank.

Worked example Mixing Vessel · mixing_vessel

Scenario: Glucose syrup diluted with process water to fermentation strength

Glucose out
100 g/L
Mixed flow
1,000 L/h
Glucose recovered
100 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h2001,000
Glucose, g/L500100
C_mix = sum C_k V_k / V_out
C_mix = (500 g/L x 200 L/h syrup + 0 g/L x the dilution water) / 1,000 L/h = 100 g/L

Purchased cost: $160k at 200 L/h; $637k at 2,000 L/h.

mixing_vessel_separation

inlets are mixed upstream by mass:  C_mix,i = Σ C_i,k·V_k / Σ V_k
target C × (1 − conversion)            conversion default 0
optional target_pH → titrant_demand (NaOH / H2SO4);  kg/h = kg_per_m³ · F/1000
yield = 0.99·(1 − 0.05·conversion)
sizing  V = Q · residence_time/60 · 1.25   (15 min),  0.5 kW/m³
Cost scaling mixing_vessel
C = $160k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$160k at 1,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
food_grade
Installation factor
1.6
Power
0.5 kW per m³/h

Viral inactivation viral_inactivation

Holds the product at low pH for a set time so enveloped viruses are inactivated, then neutralises it.

Worked example Viral Inactivation · viral_inactivation

Scenario: Low-pH hold of a Protein A eluate

Antibody recovered
98 %
Hold pH
3.8
Titrant used
0.00277 kg/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h300300
Monoclonal Antibody (IgG), g/L1514.7
Host Cell Protein (HCP), g/L0.030.03
target_out = target_in (1 - yield_loss)
target_out = 4.5 kg/h x (1 - 0.02) = 4.41 kg/h

Purchased cost: $92.8k at 300 L/h; $329k at 3,000 L/h.

viral_inactivation_separation, _apply_product_loss

ParameterDefaultNote
methodlow_pHsolvent_detergent, heat
hold_pH / post-neutralisation pH3.8 / 7.0
yield_loss0.02[0, 0.20]
hold_time_min60sizing
target_out = target_in · (1 − yield_loss)          lost part kept as "(denatured)"
low pH: two titrant legs pH_in → 3.8 → 7.0, bisulfate carried between them
sizing  V = Q · hold/60 · 1.25;  capex design flow uses the 2 h batch window
Cost scaling viral_inactivation
C = $180k · (Q / 1,000 L/h)^0.55
Exponent n
0.55
Base cost
$180k at 1,000 L/h
Largest single unit
10,000 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
2.0
Batch window
2 h
Power
0.5 kW per m³/h

Cell disruption, milling & biomass treatment

Homogeniser & bead mill high_pressure_homogenizer bead_mill

Breaks cells open to release the product inside them, by forcing them through a valve at high pressure or grinding them with beads.

Worked example High-Pressure Homogenizer · high_pressure_homogenizer

Scenario: Releasing an intracellular enzyme from yeast

Cells disrupted
84 %
Pump power
52.3 kW
Passes
2

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h1,000993
Yeast (S. cerevisiae), g/L10016.1
Lactase (beta-galactosidase), g/L54.23
Lactase (beta-galactosidase) (cell-associated), g/L–0.806
Cell Debris, g/L–44
R = 1 - (1 - R1)^(N (P/800)^a)   (yeast R1 0.60, a 2.2)
R = 1 - (1 - 0.60)^(2 x (800 / 800)^2.2) = 0.84

Purchased cost: $522k at 1,000 L/h; $3M at 10,000 L/h (2 units in parallel).

Worked example Bead Mill (Cell Disruptor) · bead_mill

Scenario: Bead-milling yeast to release an intracellular enzyme

Set beyond the catalogue defaults: bead_mill_specific_energy_kwh_per_kg_dcw = 2

Cells disrupted
81.7 %
Shaft power
235 kW
Specific energy
2 kWh/kg DCW

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h1,000993
Yeast (S. cerevisiae), g/L10018.4
Lactase (beta-galactosidase), g/L54.12
Lactase (beta-galactosidase) (cell-associated), g/L–0.92
Cell Debris, g/L–42.8
R = 1 - exp(-k E)   (yeast k 0.85)
R = 1 - exp(-0.85 x 2 kWh/kg) = 0.817

Purchased cost: $492k at 1,000 L/h (4 units in parallel); $3.75M at 10,000 L/h (34 units in parallel).

cell_disruption_separation, _homogenizer_release_fraction, _bead_mill_release_fraction

ParameterDefaultNote
passes N2[1, 5]
homogenizing_pressure_bar P800[300, 1500]
organism_classyeast
bead mill specific energy E1.0 kWh/kg DCW[0.2, 5]
HCP release0.30 g/g (0.42 bacteria)
non-protein solubles0.18 g/g
HOMOGENISER (Hetherington / Follows, Middelberg 1995)
  R = 1 − (1 − R1)^(N·(P/800)^a)          ≤ 0.995
      yeast (0.60, 2.2)   gram-negative (0.80, 1.4)   gram-positive (0.55, 1.8)   mammalian (0.97, 1.0)
  energy  kWh/m³ = N·P·1e5/3.6e6;   pump kW = kWh/m³ · Q / η(0.85)
  ΔT_ad   = N·P·1e5 / (1000·4180)
BEAD MILL
  R = 1 − exp(−k·E)                        k: yeast 0.85, gram-positive 0.7, gram-negative 2.5, mammalian 5.0
  P_shaft = max(E·X·Q, 0.45·E·100·Q)
  heat-limited capacity  Q_max = 60 kW / (E·X)
BALANCE
  solubles = m_X·R·(g_HCP + g_NPS);   debris = m_X·R·(1 − g_HCP − g_NPS);   intact = m_X·(1 − R)
  intracellular target: released m·R, the rest stays cell-associated
Cost scaling high_pressure_homogenizer
C = $600k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$600k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
1.8
Power
52.3 kW per m³/h
Cost scaling bead_mill
C = $400k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$400k at 1,000 L/h
Largest single unit
2,000 L/h
Repeat-unit exponent
0.9
Anchor grade
industrial_biotech
Installation factor
1.7
Power
100 kW per m³/h

Hammer & ball mill hammer_mill ball_mill

Grinds solid feed such as biomass or grain into smaller particles, with hammers or tumbling balls.

Worked example Hammer Mill · hammer_mill

Scenario: Size-reducing baled corn stover

Specific energy
38.2 kWh/t
Motor power
39.1 kW
Product size P80
2,000 um

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h710710
Cellulose, g/L592592
Hemicellulose (Xylan), g/L395395
Lignin, g/L310310
E = 10 Wi (1/sqrt(P80) - 1/sqrt(F80))
E = 10 x 250 kWh/t x (1/sqrt(2,000) - 1/sqrt(20,000)) = 38.2 kWh/t

Purchased cost: $12.4k at 710 L/h; $69.6k at 7,100 L/h.

Worked example Ball Mill · ball_mill

Scenario: Fine grinding milled corn stover

Specific energy
79 kWh/t
Motor power
80.7 kW
Product size P80
300 um

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h710710
Cellulose, g/L592592
Hemicellulose (Xylan), g/L395395
Lignin, g/L310310
E = 10 Wi (1/sqrt(P80) - 1/sqrt(F80))
E = 10 x 200 kWh/t x (1/sqrt(300) - 1/sqrt(3,000)) = 79 kWh/t

Purchased cost withheld while this cost model is revised.

milling_separation (Bond 1952)

HammerBall
work index Wi (kWh/t)250200
feed F80 (µm)20 0003 000
target P80 (µm)2 000300
E [kWh/t dry] = 10·Wi·(1/√P80 − 1/√F80)
shaft kW = E · dry t/h;   motor kW = shaft / 0.90
mass unchanged; every solid leaves at size P80
  • Refused above 15% moisture. P80 below 100 µm is clamped.
Cost scaling hammer_mill
C = $100k · (Q / 10,000 L/h)^0.75
Exponent n
0.75
Base cost
$100k at 10,000 L/h
Largest single unit
25,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
32 kW per m³/h
Cost scaling ball_mill
C = $150k · (Q / 10,000 L/h)^0.75
Exponent n
0.75
Base cost
$150k at 10,000 L/h
Largest single unit
25,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.0
Power
40 kW per m³/h

Alkaline lysis alkaline_lysis

Opens bacterial cells with alkali and detergent to release plasmid DNA, then neutralises so debris and genomic DNA precipitate.

Worked example Alkaline Lysis (Plasmid DNA Release) · alkaline_lysis

Scenario: Alkaline lysis to release plasmid DNA

Plasmid recovered
78.4 %
Lysate volume
900 L/h
RNA per plasmid
34.2 g/g

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h200913
E. coli cells, g/L500.219
Plasmid DNA (pDNA), g/L0.30.0515
RNA, g/L–1.76
m_wet = m_X / 0.25;  V_resusp = max(F, 7.5 m_wet);  V_out = 3 V_resusp
m_wet = 40 kg/h;  V_resusp = max(200, 7.5 x 40) = 300 L/h;  V_out = 3 x 300 = 900 L/h

Purchased cost: $171k at 200 L/h; $840k at 2,000 L/h (2 units in parallel).

alkaline_lysis_separation (plasmid DNA)

ParameterDefault
resuspension7.5 mL/g wet cells
NaOH / SDS / KAc0.2 M / 1.0 % / 3.0 M
lysis_time_min / efficiency4 / 0.98
pdna_recovery0.8
plasmid_size_kb5
m_wet = m_X/0.25;   V_resusp = max(F, 7.5·m_wet/1000);   V_out = 3·V_resusp
NaOH g = M·39.997·V;   SDS g = pct·10·V;   KAc g = M·98.142·V
shear loss = min(0.30, max(0, kb − 20)·0.01);   over-lysis = min(0.9, max(0, t − 5)·0.03)
recovered pDNA = m·lysis_eff·pdna_recovery·(1 − shear)(1 − over-lysis)
floc = other + DNA(1 − leak) + RNA(1 − 0.8) + LPS(1 − 0.05) + 0.95·SDS + 0.9·protein
cooling = V_out·4180·ΔT/3.6e6 / COP 3
Cost scaling alkaline_lysis
C = $450k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$450k at 1,000 L/h
Largest single unit
1,500 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
2.0
Power
12 kW per m³/h

Inclusion-body refold inclusion_body_refold

Dissolves insoluble protein aggregates in a denaturant, then dilutes them so the protein folds back into its active form.

Worked example Inclusion Body Solubilisation & Refolding · inclusion_body_refold

Scenario: Solubilising and refolding proinsulin inclusion bodies

Native protein, overall
43.7 %
Refold pool
4,980 L/h
Refold yield
52.7 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProductWaste
Flow, L/h1004,960233
Proinsulin, g/L300.2641.74
Cell Debris, g/L50.01611.8
beta = C / C*;  Y = ln(1 + beta (1 - exp(-k1 tau))) / beta;  refold = Y_max Y
beta = 0.5 / 0.35 = 1.43;  Y = ln(1 + 1.43 (1 - exp(-0.35 x 16))) / 1.43 = 0.62;  refold = 0.85 x 0.62 = 0.527

Purchased cost: $5.99M for a 93,700 L vessel (vessel-volume basis, feed 100 L/h); $47.6M for a 937,000 L vessel (vessel-volume basis, feed 1,000 L/h) (10 units in parallel).

inclusion_body_refold_separation, _ib_refold_yield_fraction

ParameterDefault
wash cycles k / volume ratio r / loss2 / 5 / 0.07
chaotropeurea 8 M
solubilisation / refold concentration25 / 0.5 g/L
refold time / temperature / pH16 h / 10 °C / 8.5
disulfide_bonds3
WASH        dissolved kept (1/(1 + r))^k;  target kept (1 − loss)^k;  debris removal min(0.8, 0.5 + 0.1·M)
SOLUBILISE  f_sol = 0.96 / (1 + exp(−(M_eff − 5.0)/0.45))       M_eff = M × potency (urea 1, GuHCl 2)
REFOLD      V_refold = m_sol / refold_g_l
  class by disulfides   (Y_max, C*, k1):  0 → (0.92, 3.0, 20);  ≤2 → (0.88, 0.80, 0.50);  ≤4 → (0.85, 0.35, 0.35);
                                          ≤8 → (0.70, 0.10, 0.20);  more → (0.50, 0.02, 0.10)
  temperature           C* = C*_ref·exp(50000/8.314·(1/T − 1/283.15)),  k1 with the opposite sign
  β                     = C_protein / C*;   pulses n ≤ 3, β_eff = β/n
  kinetic yield         Y = ln(1 + β(1 − e^(−k1·τ))) / β
  refold yield          = Y_max · (1/n)·Σ Y(β_eff, k1, τ(n − i)/n)
  non-native            × 0.70 → aggregate
VESSEL      V_work = V_pool · τ;   sized volume = V_work / 0.85   → capex on VOLUME
Cost scaling inclusion_body_refold
C = $1.35M · (V / 30,000 L)^0.7
Exponent n
0.7
Base cost
$1.35M at 1,875 L/h
Largest single unit
6,250 L/h
Largest vessel
100,000 L
Repeat-unit exponent
0.9
Anchor grade
food_grade
Installation factor
2.2
Power
250 kW per m³/h

RNA reduction heat shock rna_reduction_heat_shock

Heats harvested cells briefly so their own enzymes break down RNA, lowering the nucleic-acid content of single-cell protein.

Worked example RNA Reduction (Heat Shock) · rna_reduction_heat_shock

Scenario: RNA reduction of mycoprotein

RNA removed
1.72 kg/h
Biomass kept
14 kg/h
RNA left
2 %

Selected components shown; water, salts and minor by-products omitted.

StreamFeedProduct
Flow, L/h1,000999
Mycoprotein, g/L2014
m_out = m_b (1 - f);  RNA removed = m_b rna_in - m_out rna_out
m_out = 20 x (1 - 0.3) = 14 kg/h;  RNA removed = 20 x 0.1 - 14 x 0.02 = 1.72 kg/h

Purchased cost: $200k at 1,000 L/h; $1M at 10,000 L/h.

rna_reduction_separation

defaults: 68 °C, 30 min, dry-mass loss f 0.30, RNA 0.10 → 0.02, heat regeneration 0.50
m_out        = m_b · (1 − f)
RNA removed  = m_b·rna_in − m_out·rna_out
leachate     = max(m_b·f, RNA removed)  → nucleotides + cell solubles
Q_heat       = ṁ·4.186·(T_hold − T_in)·(1 − regen);   Q_cool = Q_heat
Cost scaling rna_reduction_heat_shock
C = $200k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$200k at 1,000 L/h
Largest single unit
50,000 L/h
Repeat-unit exponent
0.9
Anchor grade
food_grade
Installation factor
2.0
Power
25 kW per m³/h

Chemical conversion & utilities

Ester hydrolysis ester_hydrolysis

Splits an ester back into its acid and alcohol with water in a reactive distillation column.

Worked example Ester Hydrolysis (Reactive Distillation) · ester_hydrolysis

Scenario: Hydrolysing methyl lactate to pure lactic acid

Set beyond the catalogue defaults: ester_component = Methyl Lactate, acid_component = Lactic Acid

Ester hydrolysed
98 %
Lactic acid product
848 kg/h
Methanol recovered
300 kg/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedHeavy phaseLight phaseWaste
Flow, L/h1,000818413392
Methyl Lactate, g/L1,0001.2246–
Lactic Acid, g/L–1,040––
Methanol, g/L––7263.85
X_ceil = 1 - (1 - X_eq)^n;  X = min(X_req, X_ceil)
X_ceil = 1 - (1 - 0.667)^8 = 1;  X = min(0.98, 1) = 0.98

Purchased cost: $1M at 1,000 L/h; $4.79M at 10,000 L/h.

ester_hydrolysis_separation, hydrolysis_equilibrium_conversion

defaults: water:ester 4.0 mol/mol, K 2.5, 8 reactive stages, target conversion 0.98
water make-up = max(0, r_w·n_ester·18.015 − water in)
equilibrium   (1/K)(1 − X)(r_w − X) = (X + a0)(X + b0)
column        X_ceil = 1 − (1 − X_eq)^n;   X = min(X_req, X_ceil, 0.999)
acid formed   = X·n·MW_acid;   alcohol formed = X·n·MW_alc
heavy (acid)  water = non-water · (1/0.88 − 1);   light (recycle) alcohol × 0.995
Cost scaling ester_hydrolysis
C = $1M · (Q / 1,000 L/h)^0.68
Exponent n
0.68
Base cost
$1M at 1,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
2.5
Power
130 kW per m³/h

Hydrotreater hydrotreater_upgrading

Reacts a bio-oil or lipid with hydrogen over a catalyst to strip out oxygen and leave a hydrocarbon fuel.

Worked example Hydrotreater / Upgrader · hydrotreater_upgrading

Scenario: Hydrotreating a triglyceride oil to renewable diesel

Renewable fuel
706 kg/h
Hydrogen consumed
30.6 kg/h
Quench beds
6

Selected components shown; water, salts and minor by-products omitted.

StreamFeedLight phaseHeavy phaseOff gas
Flow, L/h1,00092410957,000
Triolein, g/L900–––
Renewable hydrocarbon fuel, g/L–763––
Unconverted oil, g/L–19.5––
M_HC = Y X M_oil
M_HC = 0.8 x 0.98 x 900 kg/h = 706 kg/h

Purchased cost: $1.35M at 1,000 L/h (cost floor); $5.49M at 10,000 L/h.

hydrotreating_separation (PNNL-23227)

Feed classFuel yield YH2 kg/kgC content
lipid0.800.0340.904
HTL biocrude0.770.0430.89
pyrolysis oil0.450.0600.47
Y ≤ max(0.05, (CC·0.855 − G·0.5)/0.855)      carbon ceiling, G = gas fraction 0.07
M_H2 = y·M_oil;   M_HC = Y·X·M_oil;   gas = G·M_oil;   X = 0.98
M_H2O = M_oil(1 + y) − M_HC − (1 − X)M_oil − gas     ≤ M_oil·O_frac·18.015/16
catalyst  V = (M_oil/900) / LHSV(0.6);   Q_rxn = 50 MJ/kg H2
beds      n = ⌈ΔT_ad / 55⌉;   compression 1.35 kWh/kg H2
Cost scaling hydrotreater_upgrading
C = $13.9M · (Q / 30,000 L/h)^0.75
Exponent n
0.75
Base cost
$13.9M at 30,000 L/h
Largest single unit
200,000 L/h
Repeat-unit exponent
0.9
Anchor grade
chemical
Installation factor
1.7
Cost floor
$1.5M
Power
40 kW per m³/h

CHP boiler & turbogenerator chp_boiler_turbogenerator

Burns residues or biogas to raise steam, and runs a turbine on it for electricity and process heat.

Worked example CHP Boiler / Turbogenerator · chp_boiler_turbogenerator

Scenario: Burning lignin cake for steam and power

Net electricity
307 kW
Process steam
1,330 kW
Fuel heat released
7,360 MJ/h

Selected components shown; water, salts and minor by-products omitted.

StreamFeedWasteOff gas
Flow, L/h1,0009.115,140,000
Lignin, g/L350––
Cellulose, g/L60––
Carbon Dioxide, g/L––0.142
P_el = eta_el x Q_fuel / 3.6
P_el = 0.15 x 7,360 MJ/h / 3.6 = 307 kW

Purchased cost: $2.49M at 1,000 L/h; $14M at 10,000 L/h.

chp_boiler_separation, _chp_flue_balance (NREL/TP-5100-47764)

defaults: boiler η_b 0.80, net electrical η_el 0.15, back-pressure mode, excess air 0.20
LHV_i     = 0.94·ΔHc, else class (lipid 38, protein 23, sugar 14.6, cell 21 … MJ/kg)
Q_fuel    = m_comb·LHV − m_water·2.44                       MJ/h
P_el      = η_el · Q_fuel / 3.6                             kW
Q_steam   = max(0, η_b·Q_fuel − 3.6·P_el)
flue      O2 = C + H/4 + S − O/2;  air = O2·(1 + EA)/0.2095
          CO2 = C, H2O = H/2 + moisture, N2 = 0.7905·air + N/2
credit    steam and power credited up to the plant's own demand
  • Refused below 35% solids: the fuel does not burn self-supporting.
Cost scaling chp_boiler_turbogenerator
C = $14M · (Q / 10,000 L/h)^0.75
Exponent n
0.75
Base cost
$14M at 10,000 L/h
Largest single unit
100,000 L/h
Repeat-unit exponent
0.9
Anchor grade
commodity_bulk (grade-independent)
Installation factor
2.2
Power
0 kW per m³/h

Wastewater treatment wastewater_treatment

Treats the waste streams of the plant to remove their organic load before discharge.

Worked example Wastewater Treatment · wastewater_treatment_unit

Worked example withheld while this model is revised.

wastewater_treatment_separation · plant cost in wastewater_cost_lines

COD            = Σ c_i · ThOD_i           ThOD from formula, else class (sugar 1.07, lipid 2.9, alcohol 2.1 …)
effluent COD   = COD · (1 − removal)      physicochemical 0.60, aerobic 0.95, anaerobic–aerobic 0.98
PLANT COST (on every waste stream, OSBL)
  hydraulic    = 70 000 · (V_waste/1000)^0.75
  COD capital  = hydraulic · (m − 1)
  installed    × 3.0
  opex /m³     = 2.5 kWh · price + $1.50 chemicals + $0.80 labour + surcharge

  COD tier       ceiling mg/L   m      surcharge $/m³
  low            500            1.0    0
  medium         2 000          1.5    1.5
  high           10 000         2.5    4.0
  very high      50 000         4.0    8.0          (log-linear between tiers)
Cost scaling wastewater_treatment
C = $70k · (Q / 1,000 L/h)^0.75
Exponent n
0.75
Base cost
$70k at 1,000 L/h
Repeat-unit exponent
0.9
Anchor grade
commodity_bulk (grade-independent)
Installation factor
2.2