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 normally closes from component masses and densities. A liquid unit model may instead publish its own validated bulk-volume balance with an explicit basis and reason; routing preserves that volume rather than replacing its physics.

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          default V = Σ m_i / ρ_i;   c_i = m_i / V
model bulk    a liquid model may own V when flow is finite and positive for nonempty mass, and both
              volume_basis and its physical reason are present; component masses remain authoritative
posted water  closed to min(1000 − Σ c_i,  ρ_w·(1 − Σ c_i/ρ_i)) g/L:  a solvent or oil stream is never
              filled past one litre per litre;  a declared zero stays zero, a declared row is never lowered

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 when any inlet has explicit bulk volume; otherwise density closure
               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        default V_liq = Σ m_i / ρ_i;   V = V_liq·(1 − v) + V_gas (ideal gas at T, P)
               model_owned_bulk liquid outlets keep their validated V; all paths set c_i ← m_i / 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 − Σφ)
            explicit bulk volume follows the same fraction
tear        guessed recycle masses and, when explicit, bulk volume; both are recomputed 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
  the stirred, fed-batch and continuous fermenters, when the step's oxygen_regime is anaerobic,
  use their own whole commodity tank curve (NREL F-300, n fitted on F-303..F-305):
  C_ref $1.388M, V_ref = V_max = 3 785 000 L, n = 0.39, commodity_bulk;
  the entry's floor stays, read at that grade (adjustment 1)
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, F · G[anchor_grade] / G[F grade])     flow and volume bases
                  F = cost_floor_usd, quoted at the entry's anchor_grade;  anchor_grade is the
                  grade of the anchor that priced C, so a floor costs the same under either anchor
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[target year] / CEPCI[declared anchor year]; a provisional target-year
                  index is labelled as such; an entry already at the target year has factor 1.0
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.10·(PC + wastewater plant purchased), parts included (Petrides 2015; a commercial simulator, per item)
  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    dosed per volume; wear parts on a machine are in maintenance
  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
43.3 g/L
Productivity
1.48 g/L/h
Batch cycle
31.5 h

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

StreamFeedProductOff gas
Flow, L/h1,0001,00016,600
Glucose, g/L1004.95–
Ammonium Sulfate, g/L2520.9–
Yeast (S. cerevisiae), g/L–7.55–
Ethanol, g/L–43.3–
V_work = Q t_cycle;  V_vessel = 1.25 V_work
V_work = 1,000 L/h x 31.5 h = 31,500 L;  V_vessel = 1.25 x V_work = 39,400 L

Purchased cost: $374k for a 39,400 L vessel (vessel-volume basis, feed 1,000 L/h); $966k for a 450,000 L vessel (vessel-volume basis, feed 10,000 L/h).

Worked example Fed-Batch Bioreactor · fed_batch_bioreactor

Scenario: Very-high-gravity fed-batch yeast ethanol fermentation

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

Ethanol titer
96.4 g/L
Glucose fed
216 kg/h
Batch cycle
51 h

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

StreamFeedProductOff gas
Flow, L/h1,0001,44052,300
Glucose, g/L10012.3–
Ammonium Sulfate, g/L258.77–
Yeast (S. cerevisiae), g/L–16–
Ethanol, g/L–95.2–
V_work = Q_harvest t_cycle;  V_vessel = 1.25 V_work
V_work = 1,420 L/h harvest x 51 h = 72,400 L;  V_vessel = 1.25 x V_work = 90,600 L

Purchased cost: $517k for a 90,600 L vessel (vessel-volume basis, feed 1,000 L/h); $1.32M for a 1,010,000 L vessel (vessel-volume basis, feed 10,000 L/h).

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

The air-lift uses the pneumatic gas-velocity kLa relation with its riser/downcomer factor. Mechanical shaft power and impeller-speed control are zero; the current public cost anchor remains a screening estimate.

Set beyond the catalogue defaults: organism = yeast

Lactase titer
2.8 g/L
Cell density
10.2 g/L
Batch cycle
33.9 h

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

StreamFeedProductOff gas
Flow, L/h1,000993563,000
Glucose, g/L407.98–
Yeast (S. cerevisiae), g/L–10.3–
Lactase (beta-galactosidase), g/L–2.84–
V_work = Q t_cycle;  V_vessel = 1.25 V_work
V_work = 1,000 L/h x 33.9 h = 33,900 L;  V_vessel = 1.25 x V_work = 42,400 L

Purchased cost: $534k for a 42,400 L vessel (vessel-volume basis, feed 1,000 L/h); $2.59M for a 482,000 L vessel (vessel-volume basis, feed 10,000 L/h).

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 anaerobicstirred vessels only, max 5.0; air-lift shaft power is zero
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          curve      14.4 kJ/g O₂ × OUR (anaerobic 0.55 kJ/g substrate) + agitation − sparge gas
              jacket bill (plant time means on harvest flow × fermenting hours, not the cycle-sized vessel)
                         = 14.4 kJ/g × O₂ of the material gas solve (anaerobic 0.55 kJ/g × substrate consumed)
                         + mean agitation − [H(off-gas) − H(supply air)] + feed load

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  solved on the HARVEST volume (both bases, closed form):
                  F = (k·M_in − S_charged) / (c_f/1000 − k·m),   k = (S_consumed + R)/(1000 − g_net)
                  V_harvest = 1000·(M_in + m·F)/(1000 − g_net),   m = concentrate kg/L (density rule)
                  R = 3 g/L setpoint (specified) or the kinetics' own end residual (predicted)
  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₂)
SPARGE (per L harvest; supply air 25 °C, 1.01325 bar, V_m = RT/P)
  n_dry,in = 60·vvm·t_ferm·f / V_m     f = mean fill fraction; chemostat 1/D; no air in turnaround
  N₂ passes through;   O₂,out = O₂,in − O₂;   W_in = 0.0073 kg/kg dry air (≤ saturation)
  H₂O,out = n_dry,out · p_sat(T)/(P_hs − p_sat(T)),   P_hs = 1.01325 + head_pressure_bar
  H₂O,net = H₂O,out − H₂O,in   (signed, no cap; anaerobic: n_dry,out = CO₂ alone)
VOLUME
  Q_out = (m_in + Q_fed)·1000 / (1000 − g_net),   g_net = O₂ + CO₂,fixed − CO₂ − H₂O,net

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
fed-batch   V_work = Q_harvest · t_cycle   the vessel holds the end-of-batch broth, not its charge
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
            V_p = the charge the inoculum is pitched into (fed-batch: before any feed)
            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 at industrial_biotech
anaerobic   stirred, fed-batch and continuous types with oxygen_regime anaerobic (not the air-lift):
            C = n^0.90 · $1.388M · ((V_vessel/n) / 3 785 000 L)^0.39,   V_max 3 785 000 L,  commodity_bulk
            (NREL F-300; exponent from F-303..F-305);  the floor read at commodity_bulk is $93.9k,
            so a floor-bound vessel costs the same as on the aerobic anchor
  • 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

Bubble-column bioreactor bubble_column_bioreactor

Runs the shared fermentation chemistry in a tall, bottom-sparged vessel with no impeller, draft tube or deliberate air-lift circulation loop. Gas transfer and compressor electricity follow the pneumatic vessel rather than a stirred-tank motor correlation.

Worked example Bubble Column Bioreactor · bubble_column_bioreactor

Scenario: Aerobic yeast culture producing lactase in a bubble column

The shell cost excludes the sparger, compressor, external cooling loop, seed train, CIP/SIP and controls; compressor electricity is calculated separately from the declared gas state and pressure.

Set beyond the catalogue defaults: organism = yeast

Lactase titer
2.79 g/L
Compressor electricity
31.4 kW
Batch cycle
33.8 h

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

StreamFeedProductOff gas
Flow, L/h1,000993559,000
Glucose, g/L408.05–
Yeast (S. cerevisiae), g/L–10.3–
Lactase (beta-galactosidase), g/L–2.84–
V_work = Q t_cycle;  V_shell = 1.25 V_work
V_work = 1,000 L/h x 33.8 h = 33,800 L;  V_shell = 1.25 x V_work = 42,200 L

Purchased cost: $268k for a 42,200 L vessel (vessel-volume basis, feed 1,000 L/h); $1.87M for a 480,000 L vessel (vessel-volume basis, feed 10,000 L/h).

bioreactor_separation, fermentation_scaleup.scale_up_report, compressor_power_report · Heijnen & van't Riet (1984), NREL/TP-5100-71949 Appendix A

ParameterDefaultSupported scope
working volume / liquid H:D1,000 L / 5.0liquid volume; 0.8 shell fill
aeration0.5 vvm25 °C, 1.01325 bar supply-equivalent gas
head pressure0.5 bar gaugeplus liquid head and declared gas-path loss
oxygen fraction0.2095separate supply-capacity check
compressor efficiency0.75screening isentropic relation
shaft power0 kW/m³no fictitious agitator or motor ramp
GEOMETRY   D = [4 V_liquid / (pi H/D)]^(1/3)
GAS        Q_supply = vvm V_liquid x 60 / 1000;  u_g = Q_actual / (pi D²/4)
kLa        coalescing broth: 3600 x 0.32 x u_g^0.7   (derived screening only)
COMPRESSOR P = gamma/(gamma-1) p_in Q_in [(p_out/p_in)^((gamma-1)/gamma) - 1] / eta
TRANSFER   max over matched states of OUR/(1 - DO) compared with the priced-vessel OTR;
           oxygen-feed capacity is checked separately
SIZING     V_work = Q t_cycle;  V_shell = V_work / 0.8;  shells above 500,000 L split
COST       C_purchased = n^0.90 x $384,435 x ((V_shell/n) / 100,000 L)^0.80
  • A measured kla_per_h keeps its measurement basis. The model refuses an unsupported derived correlation, including a non-coalescing broth without measured kLa.
  • Zero declared gas-path loss is a lower bound. The purchased anchor is the bare 316SS shell; sparger, compressor, cooler, pump, seed train, CIP/SIP and controls are outside that line item.
Cost scaling bubble_column_bioreactor
C = $384.4k · (V / 100,000 L)^0.8
Exponent n
0.8
Base cost
$384.4k at 1,000 L/h
Largest single unit
5,000 L/h
Largest vessel
500,000 L
Repeat-unit exponent
0.9
Anchor grade
commodity_bulk
Installation factor
2.3
Power
0 kW per m³/h

Photobioreactor photobioreactor

Screens one declared photoautotrophic biomass composition against independent light, carbon, nutrient and water limits. The defaults retain the incident-photon and dissolved-feed screen. Independent opt-ins add a source-matched one-sided slab light ceiling and finite measured dry-gas transfer without turning the result into a species forecast.

Worked example Photobioreactor · photobioreactor

Scenario: LED photoautotrophic production on measured carbon and nutrients

Industrial purchased and installed PBR capital remain unavailable and require a vendor quote. The engine still reports the supported light/carbon screen, authored circulation screening assumption and lighting electricity.

Set beyond the catalogue defaults: lighting_mode = led

Biomass produced
2.3 kg/h
Hydraulic working volume
48 m3
Lighting electricity
696 kW

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

StreamFeedProductOff gas
Flow, L/h1,0009922,770
Carbon Dioxide, g/L105.71–
Ammonia, g/L54.89–
Diammonium Phosphate ((NH4)2HPO4), g/L54.91–
Phototrophic Biomass (Chisti basis), g/L–2.32–
Oxygen, g/L––1.31
V_work = Q x 24 x HRT / 1000;  V_shell = V_work / 0.8
V_work = 1,000 L/h x 24 x 2 d / 1000 = 48 m3;  V_shell = V_work / 0.8 = 60 m3

Purchased cost: not priced at 1,000 and 10,000 L/h: photobioreactor capital is not evaluated: No transferable purchased-cost anchor and scale law for the selected industrial geometry; vendor quote required. Whole-plant capital and capital-dependent financial metrics are withheld; any supported simulation and measured operating receipts remain available.

photobioreactor_separation, solve_measured_pbr_physics, shared gas-reference and aqueous-gas authorities · Chisti (2007), Zijffers et al. (2010), Molina et al. (2001), Le Borgne and Pruvost (2013), Le Gouic et al. (2021), IAPWS G7-04

ParameterDefaultSupported scope
biomassPhototrophic Biomass (Chisti basis)C100H183O48N11P composition only
light / carbon modelincident_empirical / dissolved_feedlegacy defaults; measured modes are independent opt-ins
incident PAR / photoperiod500 umol/m²/s / 16 h/daygross supplied surface light
incident photon yield0.5 g/mol photonsapplied once; not multiplied by absorption; 1.5 API rail is conservative nitrate-case screening policy, not a measured universal maximum
legacy illuminated area80 m²/m³replaced by A = V/L only in measured slab mode
hydraulic residence2 daysV = nominal feed Q x HRT; downstream volume uses density closure
lightingsolarLED uses 550 nm and 0.4 wall-plug photon efficiency
circulation electricity1 kWh/m³ feedauthored screening assumption; not a measured duty without separate source evidence
measured slab inputsnoneL, Ka, mumax, Ik, Hill n, valid PAR/temperature and source are all required when selected
source-qualified dark-loss inputsnonenet daylight-growth basis, measured nonnegative dark-loss rate, source, culture state, matching temperature, covered dark duration, and joint biomass calibration minimum/maximum are all required in the dark-loss mode
measured gas inputsnonedry reference flow/CO2 fraction, ambient-or-purchased carrier basis, absolute contact pressure, separate CO2/O2 kLa, temperature/source, and measured-or-passive delivery-power basis are required when selected
REACTION   100 CO2 + 9 NH3 + 1 (NH4)2HPO4 + 73.5 H2O
           -> C100H183O48N11P + 114.75 O2
INCIDENT   N_inc = I_0 x 10^-6 x 3600 x t_light x A / 24
           P_incident = Y_X,incident x N_inc       (yield and LED duty use supplied photons once)
LEGACY     P_carbon = M_CO2 / (100 x MW_CO2 / MW_biomass)
           P = min(P_incident, P_carbon); measured NH3, DAP and water must cover P
HYDRAULIC  V_work = Q x 24 x HRT / 1000;  V_shell = V_work / 0.8
LED        P_radiant = n_photon x 33.2296 / lambda_nm;  P_wall = P_radiant / eta_LED
MEASURED SLAB (independent opt-in)
  A = V/L;  X = (Q X_in + P)/Q;  tau = K_a X L
  I_back = I_0 exp(-tau);  I_avg = I_0[-expm1(-tau)]/tau
  mu_potential = mu_max I_avg^n/(I_k^n + I_avg^n) x t_light/24
  mu_required = P/(X V);  feasible only when mu_potential >= mu_required
SOURCE-QUALIFIED DARK LOSS (separate slab/Hill opt-in)
  mu_24 = mu_daylight x t_light/24 - k_dark x (24 - t_light)/24
  P_low = max(0, Q X_min - B_in)
  P_high = min(P_incident, P_carbon, Q X_max - B_in); search only [P_low, P_high]
MEASURED DRY GAS (independent opt-in; i = molecular CO2 or O2)
  F_i,out = F_i,in - T_i;  C_i,out = (Q C_i,in + T_i - R_i)/Q
  C_i* = H_i(T) P_contact y_i,out;  T_i = kLa_i V(C_i* - C_i,out)
  F_N2,out = F_N2,in;  one bounded scalar root closes the dry offgas total
ENERGY     P_total = P_circulation,authored + P_LED,incident + P_gas-delivery,authored

Measured-light calculation fixture, not a catalogue calibration: Molina et al. report mu_max = 0.063 /h, I_k = 114.67 umol/m²/s, n = 1.49 and K_a = 0.0369 m²/g for P. tricornutum in their tubular system at about 20 ± 2 °C and pH 7.7. Those numbers can check the equations together; they do not validate a one-sided slab or the Chisti-basis screening biomass. A selected measured mode still requires the user's geometry- and condition-matched source.

  • The slab/Hill result is a necessary photoperiod-average light-growth ceiling. The separate dark-loss mode subtracts one source-qualified scalar first-order loss and enforces a joint source biomass range. The older slab mode has no machine-readable biomass-range guard. Neither mode is an integrated diel trajectory or gross gas model: nighttime O2 demand, daylight O2 peaks, respiratory quotient, reserve use and phase-specific dissolved-gas peaks remain not_evaluated.
  • The finite-gas result uses pure-water Henry constants, molecular dissolved CO2, measured CO2/O2 kLa and an inert dry-air N2 fraction. It refuses each declared inlet molecular CO2 or O2 molality above 0.10 mol/kg measured inlet water. A separate check refuses when the lower bound from declared strong-electrolyte formula molarity exceeds 0.01 mol/L. Passing does not prove total ionic strength is in scope: multivalent contributions, activities and salting corrections remain not_evaluated. Carbonate/pH enhancement, humidity, evaporation, condensation, gas recycle and inferred compression are outside scope. Without an authored O2 ceiling, biological oxygen tolerance is not_evaluated.
  • The complete gas auxiliary and offgas close by species, mass and C/H/O/N/P. Full supplied merchant CO2 is billed once; purchased carrier is billed once from its positive sourced price, while zero-price carrier requires an explicit ambient basis. Absorbed CO2 is not repurchased.
  • The electricity receipt covers the authored circulation screening assumption, optional LED wall power and measured-positive or explicitly passive-zero gas delivery. Phase-aware auxiliary enthalpy is reported separately, but reaction enthalpy, absorbed solar or LED heat, culture cooling and heat rejection remain unresolved. The thermal-scope receipt is not_evaluated and no thermal duty is published.
  • The model refuses missing ammonia, diammonium phosphate or water and requires measured carbon from the selected dissolved-feed or finite-gas mode. It refuses any product other than the declared biomass. Nutrient limitation, mixotrophy, lipid induction and intracellular products remain outside this screen.
  • Industrial purchased and installed capital are unavailable: there is no transferable purchased-cost anchor and scale law for the selected geometry. A vendor quote is required; supported circulation, lighting, gas-delivery and feed-material OPEX remain available.

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
299 g/L
Reactor volume
30,100 L

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

StreamFeedProduct
Flow, L/h1,0001,000
Maltodextrin (DE 10), g/L30029.9
Glucose, g/L–299
V_liquid = Q_charged tau;  V_vessel = 1.25 V_liquid
V_liquid = 1,000 L/h charged x 24 h = 24,100 L;  V_vessel = 1.25 x V_liquid = 30,100 L

Purchased cost: $751k for a 30,100 L vessel (vessel-volume basis, feed 1,000 L/h); $3.76M for a 301,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
99.8 g/L
Reactor volume
105,000 L

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

StreamFeedProduct
Flow, L/h1,0001,000
Cellulose, g/L1009.99
Xylose, g/L5049.9
Lignin, g/L5049.9
Glucose, g/L–99.8
V_liquid = Q tau;  V_vessel = 1.25 V_liquid
V_liquid = 1,000 L/h x 84 h = 84,100 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); $798k 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_charged · 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

Transesterification reactor transesterification

Applies the shared conversion-reactor balance to the declared dry, low-FFA triolein screen: triolein and methanol form methyl oleate and glycerol in a jacketed stirred vessel. Feed-carried methanol offsets the charge, purchased make-up enters once, and excess methanol leaves for downstream recovery.

Worked example Transesterification Reactor · transesterification

Scenario: Base-catalysed triolein conversion with methanol make-up

The feed carries part of the methanol charge. The reactor purchases only the shortfall and sends residual methanol, glycerol and FAME onward; it does not perform methanol recovery or phase separation.

Triolein converted
94 %
Methyl oleate out
697 g/L
Charged reactor volume
295 L

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

StreamFeedProduct
Flow, L/h100118
Triolein, g/L87044.3
Methanol, g/L5084.9
Methyl Oleate, g/L–697
Glycerol, g/L–72.1
V_liquid = Q_charged tau;  V_vessel = 1.25 V_liquid
V_liquid = 118 L/h x 2 h = 236 L;  V_vessel = 1.25 x V_liquid = 295 L

Purchased cost: $21.2k for a 295 L vessel (vessel-volume basis, feed 100 L/h); $106k for a 2,950 L vessel (vessel-volume basis, feed 1,000 L/h).

conversion_reactor_separation, resolve_conversion_reaction, declared_operation_costing · NIOSH methanol, NIOSH sodium hydroxide, molecule-catalogue identities

ParameterDefaultMeaning
reactiontriolein + 3 methanol -> 3 methyl oleate + glycerolcatalogue-declared stoichiometry
conversion0.94fraction of triolein consumed
methanol stoichiometric / charge ratio0.10857 / 0.21714 g/g trioleinconsumed demand / total charged basis
NaOH catalyst10 g/kg trioleinmetered separately at 2.13 kg/L dry-solid density
temperature / pressure60 °C / 1.2 bar absolutejacketed reactor screen
residence / agitation2 h / 0.6 kW/m³kinetic feasibility may lengthen the computed residence
CONSUMED   m_MeOH,stoich = X m_triolein x 0.10857
CHARGED    m_MeOH,charge = m_triolein x 0.21714
MAKE-UP    m_purchase = max(0, m_charge - m_MeOH,in);  excess leaves in the outlet
PRODUCTS   m_FAME = X m_triolein x 1.00456;  m_glycerol = X m_triolein x 0.10401
VOLUME     Q_out = Q_feed + sum(m_purchased,i / rho_i)
SIZING     V_liquid = Q_out tau_computed;  V_vessel = 1.25 V_liquid
DUTY       sensible + reaction heat + 0.6 kW/m³ on liquid working volume
COST       shared conversion-reactor vessel anchor; methanol and catalyst billed separately
  • The screen refuses inlet water or free organic acid above 0.5 wt%. Additive volumes ignore mixing contraction and temperature-dependent density.
  • The reactor does not recover methanol or split FAME, glycerol and catalyst. A decanter, extraction or other downstream separation is still required.

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

Scenario: Anaerobic digestion of thin stillage

COD removed
24.3 kg/h
Methane
7.65 Nm3/h
Methane in the biogas
60.8 vol%
Net heat in the biogas
73.5 kW

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

StreamFeedWasteOff gas
Flow, L/h1,00098714,300
Glycerol, g/L121.75–
Lactic Acid, g/L40.392–
Cell Debris, g/L84.25–
Methane, g/L––0.383
Y_CH4 = (22.414 / 64)(1 - 1.42 Y_x);  CH4 = Y_CH4 x COD_removed
Y_CH4 = (22.414 / 64) x (1 - 1.42 x 0.07) = 0.315 Nm3/kg COD;  CH4 = 0.315 x 24.3 kg/h = 7.65 Nm3/h

Purchased cost: $242k for a 552,000 L vessel (vessel-volume basis, feed 1,000 L/h); $1.46M for a 5,520,000 L vessel (vessel-volume basis, feed 10,000 L/h).

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 CODcut when nitrogen is short
alkalinity_dosingonNaOH to 2 000 mg/L as CaCO₃
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
               biological biomass digests as cells; char (H/C ≤ 0.7) does not
COD, C, N    per gram from the molecule's own formula (the ThOD authority); class fallback,
             a class COD held to what its carbon can form as CH4 + cells
COD removed  = Σ COD_i · destroyed_i  = COD to CH4 + COD to cells;   COD in = effluent + CH4 + cells
Y_x          ≤ N available / (N per g cells · COD removed)     released organic N, then feed ammonium
Y_CH4        = (22.414/64) · (1 − 1.42·Y_x)   Nm³/kg COD
CH4          = Y_CH4 · COD_removed;   CO2 = C_destroyed − C in CH4 − C in new biomass
biomass      = Y_x · COD_removed
CARBONATE    Alk = feed strong-ion excess (SID, to the pH 4.5 end point) − digested N charge + NH₄⁺ released − NH₄⁺ taken up
             HCO₃⁻ = min(CO2, Alk − feed inorganic C);  the rest splits gas / CO2(aq) by Henry's law
             K_H(T) from the CO2 record of the aqueous-gas registry (IAPWS G7-04; 0.0254 mol/(L·atm) at 37 °C),
             p_CO2 = y_CO2·(P − p_H2O,sat)
             digestate pH from the pH engine on its SID (HCO₃⁻ pKa1(T), Plummer–Busenberg 1982: 6.30 at 37 °C, 6.29 at 55 °C; NH₄⁺)
DOSING       Alk < 2 000 mg/L → NaOH to the floor, stopped at pH 7.0 when the CO2 cannot carry it;
             metered and billed as the step's pH duty
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³
  • Refused: pH above 8.5 (free ammonia; warned above 8.0), Na⁺ above 8 g/L after the dose (warned above 3.5), with dosing off a digestate that would sour below pH 6.5, or a temperature outside 5–100 °C, where the CO2 record is not sourced.
  • Warned: COD:SO₄ below 10 (sulfate reduction is not modelled).
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 digester 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 Digester · 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: $575k at 1,000 L/h; $2.82M 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 contact and separation

A leaching contactor transfers an accessible solid-bound solute into its liquid while retaining one slurry outlet. Centrifuges, cake filters and settlers then split a stream into a solids-rich heavy phase and a clarified light phase. For those separators, what matters is how much 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.

Solid–liquid extraction (leaching) solid_liquid_extraction

Agitates suspended solids with fresh water or a declared solvent, releasing the evidenced accessible share of a target into the liquid without pretending the contactor also separates the slurry.

Worked example Solid-Liquid Extraction (Leaching) · solid_liquid_extraction

Scenario: Releasing accessible protein from a plant-fibre slurry into fresh process water

This is the provisional Class 5 aqueous suspended-protein screen. The contactor has one slurry outlet; a downstream separator is still required.

Protein released
36.4 kg/h
Fresh water added
1,500 L/h
Gross contactor volume
1,560 L

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

StreamFeedProduct
Flow, L/h1,0002,500
Suspended protein, g/L5020
Insoluble plant fibre, g/L10040
m_release = F C_s a [1 - exp(-k tau)]
m_release = 1,000 L/h x 50 g/L / 1000 x 0.8 x [1 - exp(-4.8 1/h x 0.5 h)] = 36.4 kg/h

Purchased cost: $183k for a 1,560 L vessel (vessel-volume basis, feed 1,000 L/h); $728k for a 15,600 L vessel (vessel-volume basis, feed 10,000 L/h).

solid_liquid_extraction_separation

ParameterDefaultNote
accessible_fraction a0.80provisional aqueous suspended-protein screen
rate constant k4.8 h⁻¹transferred estimate; not measured stirred-tank kinetics
residence_time_h τ0.5 h0.05–24 h
solvent_ratio_L_per_kg10 L/kg dry solids1–50 L/kg
working_fraction0.800.5–0.9
agitation_kw_per_m30.50 kW/m³0.1–2.0 kW/m³
dry solids       m_s = Q Σ C_solid / 1000
fresh solvent    V_solvent = solvent ratio · m_s
kinetic release  m_release = m_s,target · a · [1 − exp(−kτ)]
partition model  m_liq,∞ = m_exchangeable V_liq / (V_liq + K m_carrier)  when K is declared
aqueous cap      m_liq ≤ C_sat(T, pH) V_liq
working volume   V_work = (Q + V_solvent) τ;   V_gross = V_work / working fraction
agitation        P = (P/V) V_work
outlet           one mass-conserving slurry with the residual solid fraction stamped per target
  • The default profile is limited to water, pH 7–9, 10–20 °C and 5–15 L/kg dry solids.
  • Dissolved-only and unreleased intracellular targets are refused. Other targets require explicit accessibility and rate data.
  • A filter, press or centrifuge downstream is required to split extract liquor from spent solids.
Cost scaling solid_liquid_extraction
C = $160k · (V / 1,250 L)^0.6
Exponent n
0.6
Base cost
$160k at 1,000 L/h
Largest single unit
100,000 L/h
Largest vessel
100,000 L
Repeat-unit exponent
0.9
Anchor grade
food_grade
Installation factor
1.6
Power
0.5 kW per m³/h

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

Scenario: Yeast removal from ethanol beer

The design picks the machine class by solids load: this duty runs one nozzle-discharge separator, part of whose concentrate is recirculated to keep the nozzles full.

Machines in parallel
1
Yeast captured
100 %
Sigma per machine
8,750 m2

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

StreamFeedLight phaseHeavy phase
Flow, L/h1,00090199.5
Yeast (S. cerevisiae), g/L200.000255201
Ethanol, g/L454545.2
Glucose, g/L222.01
Sigma = (2 pi / 3) x N_ch x (omega^2 / g) x (r_o^3 - r_i^3) / tan(theta) x f_corr
Sigma = (2 pi / 3) x 35 x ((2 pi x 8,000 / 60)^2 / 9.81) x (0.113^3 - 0.0374^3) m3 / tan(40 deg) x 1 = 8,750 m2 per machine

Purchased cost: $111k at 1,000 L/h; $310k at 10,000 L/h.

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 %
discharge_modechosen by solids load when not declaredintermittent ejection or continuous (nozzle)
bowl_speed_rpm80003000–12000; lowered to the RCF and rim-speed bounds
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,  ωR ≤ 150 m/s
  search R 0.068–0.305 m ejecting (to 24 in), 0.127–0.377 m nozzle (10–30 in), 30–200 channels;
         each bowl runs at its rated speed (the requested rpm lowered to both bounds)
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²)·min(1.1R, H)·0.55;   wet V_sl/(t_int/60)·u;   dry V_sl·0.35/(t_int/60)·u
               chamber height 1.1R calibrated to vendor ratings (Alfa Laval Brew 20–350), never above one
  machines     smallest N meeting all four limits, smallest bowl envelope
NOZZLE DISCHARGE (continuous class, no sludge chamber)
  q_noz        = n · C_d · (π d²/4) · ω·√(R² − r_i²)     C_d 0.7;  8–24 nozzles of 0.5–2.5 mm
  recirculated = max(0, q_noz,min − net concentrate)    adds to the hydraulic load, not to the Σ load
  gates        concentrate ≤ 22 % DM cellular (35 % rigid dense solids);  heavy outlet ≤ 25 % of feed;
               bore ≥ 5 × coarse particle (d·GSD²)
CLASS         undeclared: both classes designed; fewest machines wins, then the smaller bowl, tie → ejecting
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.
  • A duty past a nozzle gate is not a nozzle duty (the ejecting class, or a decanter above 25 % heavy outlet).
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 = $391.3k · (Q / 1,000 L/h)^0.67
Exponent n
0.67
Base cost
$391.3k 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
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.8 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 / (57.2 kg/m3 x 9.81 m/s2)) = 1.8 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
61.1 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,000913148
Fumaric Acid, g/L1508.21963
W = V_wash / V_liq;  R = 0.01 + 0.99 x exp(-2.0 W)
W = 61.1 / 117 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.5938
Triolein, g/L608985.03
Cell Debris, g/L30–32
unrecovered = residual% x m_heavy;  recovery = 1 - unrecovered / F_oil
recovery = 1 - (0.501 % x 941 kg/h) / 60 kg/h = 0.921

Purchased cost: $618k at 1,000 L/h; $3.32M 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

Screw press screw_press

Continuously dewaters polymer-conditioned anaerobically digested municipal sludge in a slow screw and screen, sending liquor to pressate and captured suspended solids to a wet cake.

Worked example Screw Press · screw_press

Scenario: Dewatering conditioned digested municipal sludge at 2.0 wt% total solids

The feed and default performance values stay inside the source-backed conditioned municipal-sludge envelope. Polymer density, heat capacity, and USD 4/kg-active price remain screening proxies; periodic wash demand and the auxiliary electricity heat split are not evaluated without operator inputs. Motor and auxiliary wall power are screening estimates, and purchased cost is a 2023 Class-5 basis rather than a vendor quote.

Suspended solids captured
95 %
Cake total dry solids
16 %
Selected machines
1
Screening wall power
7.92 kW

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

StreamFeedPressateWet cake
Flow, L/h26,00022,9003,100
Digested sludge solids, g/L201.13159
Water, g/L982999853
Active dewatering polymer, g/L––2.94
L_cake = S (1 - x) / (x - z)
L_cake = 503 kg/h x (1 - 0.16) / (0.16 - 0) = 2,640 kg/h

Purchased cost: $504k at 26,000 L/h; $3.83M at 260,000 L/h (4 units in parallel).

screw_press_balance -> select_screw_press_design; source envelope and limits in project-screw-press

ParameterDefaultNote
solids_capture0.95conditioned sludge source envelope 0.90-0.95
cake_total_dry_fraction0.16total cake dry mass fraction; source envelope 0.154-0.196
polymer_dose_kg_per_tonne_feed_ds17.5active polymer per tonne of total feed dry solids; source envelope 13.95-22.5
BALANCE (phase-authoritative)
  captured suspended solids = capture x feed suspended solids
  active polymer             = feed total dry solids x dose / 1000
  retained cake liquor       = S x (1 - x) / (x - z)
  S = captured suspended solids + active polymer;  x = cake total dry fraction;  z = liquor dry fraction
  dissolved species split with retained liquor; polymer enters as a typed auxiliary inlet
HARDWARE
  each C-Press class has hydraulic and dry-solids ranges; feasible N satisfies both axes
  choose the fewest feasible machines, then declared class-table order
POWER
  drive wall = motor shaft / IE3 efficiency; screw work to material = shaft x 0.96
  auxiliary line power is a screening estimate; total auxiliary heat split is not evaluated without an operator fraction
CAPEX
  per train = $420,000 PEC-equivalent (2023) x max(1, Q/24, DS/408.23)^0.70
  Class-5 basis, shared CEPCI escalation, no vendor quote
  • Defaults apply only to conditioned municipal sludge at 1.7-2.8 wt% feed total solids. Other feeds require explicit capture, cake dryness, polymer dose and performance provenance.
  • Polymer density, heat capacity and USD 4/kg-active price are screening proxies until qualified operator or product data are supplied.
  • Periodic wash water is not evaluated without a volume per cycle and cycles per day.
  • The Class-5 hardware anchor does not distinguish regulatory facility grades or qualify sanitary/GMP materials, documentation or performance; those duties need a vendor basis.
Cost scaling screw_press
C_PEC,2023 = N x USD 420,000 x max(1, (Q/N) / 24 m3/h, (DS/N) / 408.23 kgDS/h)^0.70
Exponent n
0.7
Base cost
USD 420,000 PEC-equivalent per train at 24 m3/h and 408.23 kgDS/h
Largest single unit
96,000 L/h
Repeat-unit exponent
1.0
Anchor grade
chemical (grade-independent)
Installation factor
1.6
Cost basis
2023 Class-5 estimate for standard packaged municipal-sludge hardware; shared CEPCI escalation is applied once by the estimator; no facility-grade distinction or sanitary/GMP qualification
Power
0.3028 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, nutsche → 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, solids_holding_capacity_kg_per_m2 = 0.5

Enzyme recovered in the filtrate
97.1 %
Debris removed
79.7 %

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

StreamFeedFiltrateWaste
Flow, L/h1,0001,00080
Cell Debris, g/L20.40619.9
Amylase, g/L32.911.1
A = max(V / loading, M_solids / holding capacity)   (single-use depth media)
A = max(1,000 L/h / 400 L/m2, 2 g/L x 1,000 L/h / 1000 / 0.5 kg/m2) = 4 m2 of media per hour; 32,000 m2/yr over 8,000 h at $150/m2 = $4.80e+06/yr of media (the solids term governs above 1.25 g/L)

Purchased cost: $104k at 1,000 L/h; $511k 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²band 200–600
solids holding capacity0.5 kg/m²band 0.4–2.25, derived; conservative end
suspended solids ceiling20 g/Labove it the step is refused: clarify first
balance      shared filter balance, no stated capture; the retained outlet is spent media (waste)
area ratio   = clamp(100 LMH / film-theory average flux, 1, 20),  CF = Q/V_r
               capped at 4 for capex only while inlet solids ≤ 20 g/L
thorough     A = (permeate/100)·ratio;  N = ⌈A/200 m²⌉;  price × ratio^0.85
media        A_yr = max(Q·hours / 400 L/m², X_ss·Q·hours / 0.5 kg/m²);  × $150/m²
Cost scaling depth_filtration
C = $104.3k · (Q / 1,000 L/h)^0.6
Exponent n
0.6
Base cost
$104.3k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
food_grade
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 cake area A (A_ref 0.54 m², A_max 15 m² per nutsche); no membrane area ratio, so cake dryness does not move the price
Cost scaling nutsche_filtration
C = $350k · (A / 0.3448 m²)^0.6
Exponent n
0.6
Base cost
$350k at 1,000 L/h
Largest single unit
10,000 L/h
Largest unit area
15 m²
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.68e-04 = 0.89

Purchased cost: $112k at 1,000 L/h; $448k 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: $719k at 1,000 L/h; $3.21M at 10,000 L/h (3 units in parallel).

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 = $260.9k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$260.9k 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
food_grade
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: $391k at 1,000 L/h; $2.25M 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 = $391.3k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$391.3k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
food_grade
Installation factor
2.0
Batch window
8 h
Power
4 kW per m³/h
Cost scaling ultrafiltration_30k
C = $391.3k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$391.3k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
food_grade
Installation factor
2.0
Batch window
8 h
Power
3.5 kW per m³/h
Cost scaling ultrafiltration_100k
C = $391.3k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$391.3k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
food_grade
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
90.8 %
Concentration factor delivered
2.87 x
Membrane area vs nominal
1.68 x

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

StreamFeedPermeateRetentate
Flow, L/h1,000652348
Lactose, g/L486.78125
Salt (NaCl), g/L64.458.9

Purchased cost: $432k at 1,000 L/h; $2.99M 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 = $278.3k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$278.3k at 1,000 L/h
Largest single unit
2,000 L/h
Repeat-unit exponent
0.9
Anchor grade
food_grade
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.2 %
Water recovery
72.4 %
Glucose in the retentate
106 g/L

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

StreamFeedPermeateRetentate
Flow, L/h1,000724276
Glucose, g/L301.14106
Salt (NaCl), g/L20.0767.06

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

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 (3 units in parallel); $4.14M at 10,000 L/h (25 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 = $521.7k · (Q / 1,000 L/h)^0.85
Exponent n
0.85
Base cost
$521.7k at 1,000 L/h
Largest single unit
1,000 L/h
Repeat-unit exponent
0.9
Anchor grade
food_grade
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)
q(pH) = net charge from the stored pKa list;  mobile = min(1, |q(pH)|)
fraction to brine:  salt b;  any solute MW < 500  max(0.02, 0.7·b·mobile);
                    anything MW >= 500 (protein, cells) 0.02;  water by r
  • A fixed-fraction split. There is no stack, current or area model, so capex scales on feed flow alone.
  • The field acts on charge, so a weak acid below its pKa or a zwitterion at its pI stays in the diluate: citric acid at pH 2 sends 3.8 % of its mass to the brine against 53.5 % at pH 5.5, and the product outlet flips with it.
  • A feed that declares no pH is refused when a TARGET's net charge moves by more than 0.3 across pH 3-10, because pH 7 is the most optimistic end of this model rather than a neutral default. Where pH does not decide the split (a salt, a sugar, a protein the membrane excludes on size) it runs at pH 7 and says so.
  • The min(1, |q|) cap is a proxy and is about 20 % optimistic above a polyprotic acid's last pKa (citrate at pH 8: 0.83 on a conductivity-weighted basis against 1.00 here). The MW 500 cut is a cliff, not a curve.
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 · bound_i                         capacity demand, g/h
             bound = on the resin at the end of the load, before elution loss;
             capacity_basis "target" (affinity) counts the target only, "all_bound" every solute
  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 (affinity 2);   T_cv = 20 − 5 + E_cv total CV per cycle
  V_buffer   = E_cv · B
  V_product  = V_buffer + Σ m_i,cut / ρ_i          eluate = buffer + the solution volume it carries
  V_waste    = V_f + (T_cv − E_cv) · B − Σ m_i,cut / ρ_i

PER-COMPONENT SPLIT
  ret        = m_in · retained,   ft = m_in · (1 − retained)
  product    = ret · release + ft · (1 − throwaway) · ft_to_product
               release 100 %;  wash carryover of the unbound share 3 % (affinity 0.1 %; IEX counts its own)
  flow-through  V_product = the liquid that passes the column (the effluent), not a cut of the load

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

Scenario: Protein A capture of an antibody

Antibody recovered
95.9 %
Resin bed
249 L
Buffer pumped
2,820 L/h

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

StreamFeedProductWaste
Flow, L/h1,0003673,460
Monoclonal Antibody (IgG), g/L513.10.0593
Host Cell Protein (HCP), g/L10.009710.288
Y = (1 - L_bt) x eta_el;  L_bt = [ln(1 + e^(n(X - 1))) - ln(1 + e^(-n))] / (n X),  X = 0.70 f,  n = ln 9 / (1 - 0.70)
loaded to f = 0.85 of DBC10: X = 0.70 x 0.85 = 0.595, n = 7.32;  L_bt = 0.0114;  Y = (1 - 0.0114) x 0.97 = 0.959

Purchased cost: $595k for a 249 L bed (bed-volume basis, feed 1,000 L/h); $2.56M for a 2,490 L bed (bed-volume basis, feed 10,000 L/h) (3 units in parallel).

affinity_bound, breakthrough_loss_fraction in chromatography_retention.py

ParameterDefaultNote
capacity_utilization_percent f85design loading, % of DBC10
elution_efficiency target0.97Shukla et al. 2007
kd / ligand_utilization / elution_efficiency, impurity40 g/L / 0.3 / 0.35macromolecules only
wash_carryover_fraction0.001
resin_capacity35 g/Lband 35–80
resin_bed_volumes / elution_buffer_CV5 / 2
TARGET (recovery is loading against DBC, not ligand occupancy)
  X        = f · DBC10/Q_sat,   DBC10/Q_sat = 0.70 (Hahn et al. 2005)
  n        = ln 9 / (1 − 0.70)                       logistic front, C/C0 = 0.1 at X = 0.70
  L_bt     = [ln(1 + e^(n(X − 1))) − ln(1 + e^(−n))] / (n X)     breakthrough loss
  bound    = 1 − L_bt;   retained = bound · 0.97
IMPURITY
  protein or ≥ 5 kDa   bound = C/(40 + C) · 0.3;   retained = bound · 0.35
  small molecule       binds nothing; reaches the pool only as 0.1 % wash carryover
then the shared engine: bind–elute, bed on the target's bound mass (capacity_basis target), 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
93.7 L
Buffer pumped
1,250 L/h

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

StreamFeedProductWaste
Flow, L/h1,0003461,900
Monoclonal Antibody (IgG), g/L513.50.184
Host Cell Protein (HCP), g/L10.08680.509
B = min(V_f / LBV, max(D / (q util), V_f / 100));  bed = B x t_cycle
B = min(1,000 / 10, max(5,000 g/h / 80 g/L, 1,000 / 100)) L/h;  bed = B x 1.5 h = 93.7 L

Purchased cost: $467k for a 93.7 L bed (bed-volume basis, feed 1,000 L/h); $1.01M for a 937 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
26,800 L
Regenerant and rinse pumped
118,000 L/h

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

StreamFeedProductWaste
Flow, L/h10,00019,400109,000
Lactic Acid, g/L6028.20.477
Glucose, g/L50.07730.443
bed_service = max(V_f / 10, E t_run / OC);  bed = bed_service x (t_run + t_regen) / t_run
bed_service = max(10,000 / 10, 6,490 eq/h x 1.5 h / 0.65 eq/L) L;  bed = bed_service x (1.5 + 1.19) h / 1.5 h = 26,800 L

Purchased cost: $904k for a 26,800 L bed (bed-volume basis, feed 10,000 L/h) (6 units in parallel); $7.07M for a 268,000 L bed (bed-volume basis, feed 100,000 L/h) (54 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/Lbuffered regime; a small ion uses the resin class's eq/L
resin_bed_volumes10
resin_classby modeSAC, SBA-I, WBA, WAC; refused when unknown
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

REGIME (bind-elute; chosen from the species' weight, class and charge density, never its name)
  buffered        protein, nucleic acid, anything of 2 kDa or more, an unknown weight, a polyelectrolyte,
                  or a charged species with equivalent weight MW / z_pot above 500 g/eq: the SMA capture,
                  bed and buffer cycle above
  stoichiometric  every other species (a small ion): billed on its equivalents, not on buffer volumes
STOICHIOMETRIC CYCLE (small ion; resin class SAC, SBA-I, WBA or WAC from the resin-class table)
  E          = Σ m_i,bound · |z_i| / MW_i                    equivalents retained, eq/h
  OC         = f_op · total capacity of the resin class      operating capacity, eq/L (SBA-I 0.65)
  bed_service = max(V_f / 10 BV/h,  E · t_run / OC)          t_run = 1.5 h unless the hydraulics bind
  t_regen    = (e · OC · loaded · EW_r / c_r + n_rinse) / BV_regen
  bed        = bed_service · (t_run + t_regen) / t_run        installed bed, the one capital prices
  regenerant = e · E · EW_r / 1000  kg/h  (e = excess over loaded equivalents, SBA-I 3.0; c_r = regenerant strength)
  rinse      = n_rinse · bed / (t_run + t_regen)  L/h          regenerant solution and rinse are water bought once

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

Scenario: HIC polish of a Protein A eluate at 0.9 M ammonium sulfate

Host-cell protein is one pseudo-component with one hydrophobicity, so it either elutes with the antibody or leaves in the strip; a real HCP population clears 0.5-1.5 log on HIC.

Set beyond the catalogue defaults: ammonium_sulfate_load_M = 0.9

Antibody recovered
80.1 %
Resin bed
45 L
Buffer pumped
600 L/h

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

StreamFeedProductWaste
Flow, L/h300170730
Monoclonal Antibody (IgG), g/L1521.31.23
Host Cell Protein (HCP), g/L0.030.001590.012
B = min(V_f / LBV, max(D / (q util), V_f / 100));  bed = B x t_cycle
B = min(300 / 10, max(4,040 g/h / 25 g/L, 300 / 100)) L/h;  bed = B x 1.5 h = 45 L

Purchased cost: $418k for a 45 L bed (bed-volume basis, feed 300 L/h); $731k for a 450 L bed (bed-volume basis, feed 3,000 L/h).

hic_retention, hydrophobicity_index in chromatography_retention.py

ParameterDefaultNote
ammonium_sulfate_load_M M1.5≤ 3.0; flow-through: the salt where the target's k = 0.1
elution_efficiency target / impurity0.90 / 0.85
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(M)   = −5.48 + 10.0·h + 1.86·M          k bounded 10^±4
bound      = k/(1 + k) at the load salt
M_elute    = (5.48 − 10.0·h) / 1.86           salt at k = 1 on the descending gradient
released   = min(1, E_cv / (1 + k(0 M)))
target     retained = bound · released · 0.90
impurity   retained = bound · released · 0.85 · overlap,   overlap = 1 / (1 + ((r − 1)/0.10)²)
           r = ratio of elution salts; an impurity with M_elute ≤ 0 stays bound and leaves in the strip
flow-through  the product passes; what binds is removed
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

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.1070.796
log k = log k_w - S phi;  bed = (V_f / LBV) x t_cycle
loaded at phi = 0.05, eluted by phi = 0.4;  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).

rp_retention, rp_log_d in chromatography_retention.py

ParameterDefaultNote
load_organic_fraction φ_load0.05the strength the column binds at
organic_fraction φ_end0.40where the elution gradient ends
solvent_strength_coeff S3.8
elution_efficiency target / impurity0.90 / 0.85
log k_w    = log D + 0.2                        ≤ 1 kDa with a stored log P (Braumann 1986)
             log D = log P + log10(net-neutral share at the pH), floor −4
           = −0.5 + 3.5·h + 0.2                  otherwise, h = hydrophobicity index (as HIC)
log k(φ)   = log k_w − S·φ                       bounded ±4
bound      = k/(1 + k) at φ_load;   φ_elute = log k_w / S
released   = min(1, E_cv / (1 + k(φ_end)))
target     retained = bound · released · 0.90
impurity   retained = bound · released · 0.85 · overlap   (r = ratio of φ_elute, as HIC)
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
7.83 x
Resin bed cycled
31.6 L/h

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

StreamFeedProductWaste
Flow, L/h1,0001091,030
Chlorogenic Acid, g/L323.50.421
Glucose, g/L100.002189.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

Scenario: Dehydrating azeotropic ethanol to fuel grade

Ethanol recovered
99.5 %
Water removed
38.1 kg/h
Product water
0.5 wt%

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

StreamFeedProductHeavy phase
Flow, L/h1,00096138.7
Ethanol, g/L76078791.9
Water, g/L383.95884
m_cap = W x t_half / (q_work x util)
m_cap = 38.1 kg/h x 8 min / 60 / (0.045 x 0.6) = 188 kg of 3A sieve per bed

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

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)
               × uncharged share at the stream pH (dryers, evaporators): acid 1/(1 + 10^(pH − pKa)), base the mirror;
               an ion does not evaporate, a spent titrant or neutralised residue neither
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 distillate purity target is left at the default 0.99, above the 0.955 azeotrope, so the column sits at the azeotrope with reflux at its minimum; distillate_purity_mass_frac sets a reachable target.

Set beyond the catalogue defaults: n_stages = 40

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

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

StreamFeedLight phaseHeavy phase
Flow, L/h1,00064.3936
Ethanol, g/L507611.07
Glucose, g/L2–2.14

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.

StreamFeedCondensateMagma
Flow, L/h1,000590410
Salt (NaCl), g/L280–683
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
50.7 %
Vapour flow
104 kg/h
Ethanol activity coefficient
5.02

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

StreamFeedLight phaseHeavy phase
Flow, L/h1,000149,000890
Ethanol, g/L500.1727.7
Glucose, g/L2–2.25
Q_v = m_v / rho_v;  D = sqrt(4 Q_v / (pi u_max))
Q_v = 104 kg/h / 0.697 kg/m3;  D = sqrt(4 Q_v / (pi x 4.05 m/s)) = 0.114 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

Scenario: Desolventising hexane miscella from oil extraction

Hexane recovered
98 %
Hexane make-up
10 kg/h
Hexane left in the oil
3,000 ppm

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

StreamFeedProductRecovered solvent
Flow, L/h1,000236764
Hexane, g/L5012.74655
Triolein, g/L215911–
residual = spec x base / (1 - spec)
residual = 0.3 % x 215 kg/h oil / (1 - 0.3 %) = 0.647 kg/h

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

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
stripper whose bottoms carry the product, per target with K_target > 1:
target left    = (residual/solvent_in)^(K_target/K_solvent)   K = γ∞·Psat(T_bottoms)/P
mode           = boil_off if T_b + 10 K ≤ 254 °C (hp steam) else steam_distillation
S_het          = (P − x_s·p_s)/(x_s·p_s) · M_w/M_s   at T_het, where Psat_w + x_s·Psat_s = P
                 x_s = solvent mole fraction of its water-saturated layer
heat per kg    = λ_s (boil_off)  or  S_het·λ_w(T_het) + λ_s (steam_distillation)
cohobation     = S_het · solvent overhead − water overhead     decanted overheads only,
                 billed as reboiler and condenser duty
  • Light outlet = bottoms (the product side), heavy outlet = recovered solvent, a recycle that is never wired.
  • A target that boils below the solvent is refused on an extract whose bottoms deliver it; a step whose bottoms go to waste does not refuse.
  • An extract recovery is placed when its steam costs less per kg than the solvent; a drawn one always runs.
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

Scenario: Lyophilising a formulated antibody

Antibody to the cake
100 %
Dry product out
2.65 kg/h
Residual moisture
2 %

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

StreamFeedCondensateSolid
Flow, L/h2018.21.78
Monoclonal Antibody (IgG), g/L50–562
Trehalose, g/L80–899
product water = rm / (1 - rm) x sum retained
product water = 0.02 / (1 - 0.02) x 2.6 kg/h = 0.0531 kg/h

Purchased cost: $1.79M at 20 L/h; $13M at 200 L/h (8 units in parallel).

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)

A condenser dryer keeps every non-volatile in the dry product; the 1-2 % a real tray heel loses is not modelled.

Crystals to the dry product
100 %
Dry product out
12.6 kg/h
Residual moisture
5 %

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

StreamFeedCondensateSolid
Flow, L/h155.89.2
Ampicillin, g/L800–1,300
Water, g/L4291,00068.6
product water = rm / (1 - rm) x sum retained
product water = 0.05 / (1 - 0.05) x 12 kg/h = 0.632 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_yieldspray 0.97, drum 0.96, fluid bed / rotary 0.95exhaust-air fines loss; not applied on condenser dryers (freeze, vacuum tray)
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          yield = 1 with a condenser: the condensate carries no solute
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 (0.4 kW per L/h)
  capacity    one ~100 m² shelf lyophiliser per 25 L/h (1–2 cm fill, 24–72 h cycle; Tang & Pikal 2004)
  • 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 / 25 L/h)^0.5
Exponent n
0.5
Base cost
$2M at 25 L/h
Largest single unit
25 L/h
Repeat-unit exponent
0.9
Anchor grade
pharma_gmp
Installation factor
3.0
Power
400 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
100 %

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

StreamFeedProduct
Flow, L/h1,0001,000
Glucose, g/L100100
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
            only for a target that can denature: a protein or nucleic acid ≥ 5 kDa;
            a small molecule, lipid, polysaccharide or cell passes intact (with a warning)
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]
target_out     = target_in · (1 − yield_loss)        only for a protein or nucleic acid ≥ 5 kDa
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

Set beyond the catalogue defaults: solvent_recovery = 0.98, raffinate_stripper_recovery = 0.95

Vanillin extracted
98 %
Vanillin in the extract
5.21 g/L
Solvent circulating
902 kg/h
Solvent make-up
20.6 kg/h

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

StreamFeedOrganic phaseHeavy phase
Flow, L/h1,0009401,060
Vanillin, g/L55.210.0943
Glucose, g/L50.002614.71
makeup = m_extract (1 - recovery) + m_raffinate (1 - stripper)
makeup = 818 x (1 - 0.98) + 83.8 x (1 - 0.95) kg/h = 20.6 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; two liquid phases only inside the window below
n_stages N3[1, 10]
extraction_pHinlet pH, else 7.0
solvent_typeethyl_acetate
solvent_recovery / raffinate stripper0.98 / 0.95[0.95, 0.995]; the placed recovery steps carry them
S = R·F·ρ_s,   W = water in the feed,   c = x/(1 − x), x = S_sw/1000,   u = w/(1 − w)
                           S_sw: solvent in the saturated aqueous phase (g/kg),  w: water in the saturated solvent
coupled split              W_E = u(S − c·W)/(1 − u·c),   W_R = W − W_E,   S_R = c·W_R,   S_E = S − S_R
two-phase window           R_min = c·W/(F·ρ_s)  <  R  <  R_max = W/(F·ρ_s·u)
saturated flows            V_E = S_E/ρ_s + W_E/ρ_w  (extract off the feed stage),   V_R = F − W_E/ρ_w + S_R/ρ_s  (raffinate off the solvent stage)
                           between stages:  S_int = S/(1 − u·c),  W_int = W/(1 − u·c)
                           V_org = S_int(1/ρ_s + u/ρ_w),   V_aq = (F − W/ρ_w) + W_int(1/ρ_w + c/ρ_s)
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)
countercurrent stages      stage n:  V_aq a(n−1) + K_D·V_org a(n+1) = (V_aq + K_D·V_org) a(n),  y = K_D·a
                           feed stage organic out V_E, solvent stage aqueous out V_R;  f_org = K_D·V_E·a(1),   ≤ 0.98
                           uniform flows (no mutual solubility) → Kremser (E^(N+1) − E)/(E^(N+1) − 1), E = K_D·R
make-up                    charge = S;  raffinate = S_R  (the same split, on the feed's own water)
                           makeup = S_E(1 − recovery) + S_R(1 − stripper)
thorough sizing            V_stage = F(1 + R)·(10/60)·1.25 per stage, 0.4 kW/m³
  • Outside R_min < R < R_max the mixture is one liquid phase and the step refuses (lle_single_liquid_phase), naming the window; a water-miscible solvent (ethanol, methanol) has no window and refuses the same way.
  • The binaries are solute-free: salting out lowers u (raising R_max), a co-extracted acid raises it (lowering R_max).
  • Placing an extraction places its solvent_recovery steps with it: one on the extract always, a stripper on the raffinate when the solvent dissolves at least 1 g/L in water. A side left without one is bought once-through, and the step says so.
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.1 %
Concentration factor
4.98 x
Forward extraction pH
2.26

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

StreamFeedLight phaseConcentrate
Flow, L/h1,000987179
Penicillin G, g/L302.73149
Glucose, g/L55.060.00384
overall = f_forward x f_back x (1 - degradation)   (forward stages on the saturated flows, Kremser back)
overall = 0.927 x 0.98 x (1 - 0.0198) = 0.891

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, stages(D_fwd, N_fwd,eff))      the extractor's stage solve on the saturated flows of a solvent that returns presaturated (no upper edge); refused below its window
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: $375k at 1,000 L/h; $1.49M 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 / by mechanism4 °C for salting-out or an antisolvent; the feed temperature otherwise (an isoelectric curd is not chilled)
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.
  • An isoelectric curd leaves with a class-default d50 of 5 µm (protein precipitates 1-50 µm, Bell, Hoare & Dunnill 1983; provisional), so a decanter behind it is sized on Sigma. The powder a dryer makes of it is an acid curd: resuspension and neutralisation are not modelled.
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.5
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 · (V / 312.5 L)^0.6
Exponent n
0.6
Base cost
$160k at 1,000 L/h
Largest single unit
100,000 L/h
Largest vessel
31,250 L
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)"
            only for a protein or nucleic acid ≥ 5 kDa; any other target passes intact
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.4 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
106 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 = $521.7k · (Q / 1,000 L/h)^0.7
Exponent n
0.7
Base cost
$521.7k at 1,000 L/h
Largest single unit
5,000 L/h
Repeat-unit exponent
0.9
Anchor grade
food_grade
Installation factor
1.8
Power
52.3 kW per m³/h
Cost scaling bead_mill
C = $347.8k · (Q / 1,000 L/h)^0.65
Exponent n
0.65
Base cost
$347.8k at 1,000 L/h
Largest single unit
2,000 L/h
Repeat-unit exponent
0.9
Anchor grade
food_grade
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: $49.5k at 710 L/h (cost floor); $95.5k 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: $412k at 710 L/h; $2.32M at 7,100 L/h.

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
capex on motor kW (both tiers):  C = base · (kW/kW_ref)^0.75,   N = ⌈kW / kW_max⌉ or the flow ceiling, whichever binds
               kW_ref / kW_max:  ball 235 / 4 900 (Matches 2014, 8 ft mill);  hammer 361 / 750, floor $55k
               a finer grind at the same tonnage buys a bigger drive
  • 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
Cost floor
$55k
Power
32 kW per m³/h
Cost scaling ball_mill
C = $1.02M · (Q / 3,150 L/h)^0.75
Exponent n
0.75
Base cost
$1.02M at 3,150 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
outlet         passes the inlet through (no sludge or off-gas port yet), so the effluent COD is indicative
node cost      $0 on its own row, which names the OSBL wastewater line it is billed in
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