Chapter 7

Bioprocess Engineering

Fermentation, bioreactors, and downstream processing.

Bioprocess Engineering

Bioprocess engineering is the application of engineering principles to design, develop, and optimize processes involving biological systems. It encompasses upstream processes (cell culture and fermentation) and downstream processes (separation and purification) to produce biologics, pharmaceuticals, chemicals, and other bio-based products.

Introduction to Bioprocesses

Process Overview

SubstrateCells/EnzymesProduct+Byproducts+Biomass\text{Substrate} \xrightarrow{\text{Cells/Enzymes}} \text{Product} + \text{Byproducts} + \text{Biomass} Bioprocess=Upstream+Downstream+Supporting operations\text{Bioprocess} = \text{Upstream} + \text{Downstream} + \text{Supporting operations}

Types of Bioprocesses

Based on Process Duration

  • Batch: Single feed, single harvest
  • Fed-batch: Multiple feeds, single harvest
  • Continuous: Continuous feed and harvest

Based on Aeration

  • Aerobic: Requires oxygen
  • Anaerobic: No oxygen required
  • Microaerophilic: Low oxygen requirements

Bioreactor Design and Operation

Bioreactor Types

Stirred Tank Reactor (STR)

Volume=πr2h\text{Volume} = \pi r^2 h Power number:NP=Pρn3D5\text{Power number}: N_P = \frac{P}{\rho n^3 D^5}

Where PP is power input, ρ\rho is fluid density, nn is impeller speed, and DD is impeller diameter.

Design Considerations
  • Impeller configuration: Rushton turbines, marine propellers, or hydrofoils
  • Baffles: Prevent vortex formation and improve mixing
  • Spargers: For gas dispersion and mass transfer
  • Aspect ratio: Typically 3:1 height-to-diameter ratio

Bubble Column Reactor

Gas holdup:εG=VGVG+VL\text{Gas holdup}: \varepsilon_G = \frac{V_G}{V_G + V_L} Superficial gas velocity:uG=QGA\text{Superficial gas velocity}: u_G = \frac{Q_G}{A}

Where QGQ_G is gas flow rate and AA is cross-sectional area.

Packed Bed Reactor

Bed porosity:ε=VvoidVtotal\text{Bed porosity}: \varepsilon = \frac{V_{void}}{V_{total}} Pressure drop:ΔPL=150μ(1ε)2Dp2ε3v+1.75ρ(1ε)Dpε3v2\text{Pressure drop}: \frac{\Delta P}{L} = \frac{150\mu(1-\varepsilon)^2}{D_p^2\varepsilon^3}v + \frac{1.75\rho(1-\varepsilon)}{D_p\varepsilon^3}v^2

(Dutta formula for packed beds)

Mass Transfer

Oxygen Transfer

KLa=kLavolumetric mass transfer coefficient\text{KLa} = k_L a_{\text{volumetric mass transfer coefficient}} \frac{dC_L}{dt} = KLa(C_L^* - C_L) - r_O_2

Where CLC_L is dissolved oxygen concentration, CLC_L^* is saturation concentration, and rO2r_{O_2} is oxygen consumption rate.

Aeration Strategies

  • Surface aeration: Mechanical agitation
  • Subsurface aeration: Sparged gas
  • Membrane aeration: Gas-permeable membranes

Mixing

Mixing Time Correlations

tMtC=0.17(PρV)2/3(DT)4/3\frac{t_M}{t_C} = 0.17 \left(\frac{P}{\rho V}\right)^{-2/3} \left(\frac{D}{T}\right)^{4/3}

Where tMt_M is mixing time, tCt_C is circulation time, TT is tank diameter.

Power Consumption

P=PMρn3D5P = P_M \rho n^3 D^5

Where PMP_M is the mixing power number.

Heat Transfer

Q=UAΔTLMQ = UA\Delta T_{LM} ΔTLM=ΔT1ΔT2ln(ΔT1/ΔT2)\Delta T_{LM} = \frac{\Delta T_1 - \Delta T_2}{\ln(\Delta T_1/\Delta T_2)}

Where UU is the overall heat transfer coefficient, AA is area, and ΔTLM\Delta T_{LM} is log mean temperature difference.

Fermentation Kinetics

Growth Kinetics

Monod Model

μ=μmaxSKS+S\mu = \frac{\mu_{\max} S}{K_S + S}

Where μ\mu is specific growth rate, μmax\mu_{max} is maximum growth rate, SS is substrate concentration, and KSK_S is saturation constant.

Substrate Utilization

rS=1YX/SdXdtmSXr_S = -\frac{1}{Y_{X/S}} \frac{dX}{dt} - m_S X

Where YX/SY_{X/S} is yield coefficient for biomass, and mSm_S is maintenance coefficient.

Product Formation

Luedeking-Piret model:rP=αμX+βX\text{Luedeking-Piret model}: r_P = \alpha \mu X + \beta X

Where α\alpha and β\beta are constants for growth-associated and non-growth-associated product formation.

Batch Fermentation

Material Balances

dXdt=μX\frac{dX}{dt} = \mu X dSdt=1YX/SμXmSX\frac{dS}{dt} = -\frac{1}{Y_{X/S}} \mu X - m_S X dPdt=αμX+βX\frac{dP}{dt} = \alpha \mu X + \beta X

For batch systems with no inflow/outflow.

Fed-Batch Operation

dXdt=μXFVX\frac{dX}{dt} = \mu X - \frac{F}{V}X dVdt=F\frac{dV}{dt} = F dSdt=F(SFS)V1YX/SμXmSX\frac{dS}{dt} = \frac{F(S_F - S)}{V} - \frac{1}{Y_{X/S}} \mu X - m_S X

Where FF is feed flow rate and SFS_F is feed substrate concentration.

Downstream Processing

Recovery and Separation

Primary Recovery

  • Cell disruption: Mechanical, enzymatic, or chemical
  • Solid-liquid separation: Centrifugation, filtration, flocculation
  • Phase partitioning: Aqueous-two-phase systems

Product Isolation

Liquid-Liquid Extraction
Distribution coefficient:K=CorgCaq\text{Distribution coefficient}: K = \frac{C_{org}}{C_{aq}} Extraction efficiency:E=1(1+KR)n1+(1+KR)n\text{Extraction efficiency}: E = \frac{1 - (1 + K \cdot R)^{-n}}{1 + (1 + K \cdot R)^{-n}}

Where RR is the ratio of solvent volumes and nn is the number of extractions.

Purification Methods

Chromatography
Retention time:tR=tM+mk\text{Retention time}: t_R = t_M + \frac{m}{k} Resolution:Rs=2(tR2tR1)W1+W2\text{Resolution}: R_s = \frac{2(t_{R2} - t_{R1})}{W_1 + W_2}

Where tMt_M is mobile phase retention time, kk is retention factor, and WW is peak width.

Types of Chromatography
  • Ion Exchange: Separation by charge
  • Size Exclusion: Separation by molecular size
  • Affinity: Separation by specific binding
  • Hydrophobic Interaction: Separation by hydrophobicity
Filtration
Darcy’s law:J=ΔPμRt\text{Darcy's law}: J = \frac{\Delta P}{\mu R_t}

Where JJ is flux, ΔP\Delta P is pressure difference, μ\mu is viscosity, and RtR_t is total resistance.

Buffer Systems and pH Control

Henderson-Hasselbalch:pH=pKa+log[A][HA]\text{Henderson-Hasselbalch}: pH = pK_a + \log \frac{[A^-]}{[HA]} Buffer capacity:β=dnd(pH)\text{Buffer capacity}: \beta = \frac{dn}{d(pH)}

Concentration and Formulation

Membrane Separation

Osmotic pressure:Π=iMRT\text{Osmotic pressure}: \Pi = iMRT Flux through membrane:J=A(ΔPΔΠ)\text{Flux through membrane}: J = A(\Delta P - \Delta \Pi)

Where AA is permeability coefficient.

Protein Stabilization

Stability equation:ΔGunfold=RTlnKfold\text{Stability equation}: \Delta G_{unfold} = RT \ln K_{fold}

Where KfoldK_{fold} is the folding equilibrium constant.

Process Integration and Control

Process Economics

Operating cost=(material costs)+(utility costs)+(labor costs)\text{Operating cost} = \sum (\text{material costs}) + \sum (\text{utility costs}) + \sum (\text{labor costs}) Product cost=Operating cost+Capital costProduction rate\text{Product cost} = \frac{\text{Operating cost} + \text{Capital cost}}{\text{Production rate}}

Process Control Systems

Feedback control:CO=Kc(e)+R(t)\text{Feedback control}: CO = K_c(e) + R(t)

Where COCO is controller output, KcK_c is controller gain, ee is error, and R(t)R(t) is reset term.

Controlled Variables (CVs)

  • Dissolved oxygen
  • pH
  • Temperature
  • Agitation rate
  • Feed rate

Manipulated Variables (MVs)

  • Air flow rate
  • Agitation speed
  • Coolant flow
  • Acid/base flow
  • Feed pumps

Downstream Processing Design

Process Flow Diagrams

Yield=Product recoveredProduct fed×100%\text{Yield} = \frac{\text{Product recovered}}{\text{Product fed}} \times 100\% Purity=Target proteinTotal protein×100%\text{Purity} = \frac{\text{Target protein}}{\text{Total protein}} \times 100\%

Unit Operations Selection

Criteria for Selection

  • Product stability: Consider pH, temperature, shear stress
  • Feed characteristics: Viscosity, particulates, concentration
  • Product properties: Size, charge, hydrophobicity, stability
  • Required purity: Clinical vs. industrial grade
  • Throughput: Batch vs. continuous operation

Membrane Processes

Ultrafiltration

J=1μRmΔPJ = \frac{1}{\mu R_m} \Delta P

Where RmR_m is membrane resistance.

Microfiltration

J=1μRmΔP(for clean solutions)J = \frac{1}{\mu R_m} \Delta P \quad (\text{for clean solutions})

Nanofiltration and Reverse Osmosis

Jw=A(ΔPΔΠ)andJs=B(ΔC)J_w = A(\Delta P - \Delta \Pi) \quad \text{and} \quad J_s = B(\Delta C)

Where JwJ_w is water flux, JsJ_s is solute flux, AA is water permeability, and BB is solute permeability.

Equipment Considerations

Vessel Design

Aspect ratio:H:D=f(process requirements)\text{Aspect ratio}: H:D = f(\text{process requirements}) Wall thickness:t=PRSE0.6P\text{Wall thickness}: t = \frac{PR}{SE - 0.6P}

Where PP is pressure, RR is radius, SS is allowable stress, and EE is joint efficiency.

Sterilization

Sterility Assurance Level (SAL)=106\text{Sterility Assurance Level (SAL)} = 10^{-6} D-value:Time to reduce population by 90%\text{D-value}: \text{Time to reduce population by 90\%} Z-value:Temperature change for 10x change in D-value\text{Z-value}: \text{Temperature change for 10x change in D-value}

Scale-Up Considerations

Constant Parameters

  • Power per volume: P/V=constantP/V = \text{constant}
  • Volumetric mass transfer: KLa=constantKLa = \text{constant}
  • Tip speed: ND=constantND = \text{constant}

Geometric Scaling

DimpellerDtank=constant\frac{D_{impeller}}{D_{tank}} = \text{constant} HD=constant\frac{H}{D} = \text{constant}

Regulatory Considerations

Good Manufacturing Practice (GMP)

  • Process validation: Demonstrate reproducible quality
  • Change control: Document all modifications
  • Documentation: Maintain detailed records
  • Contamination control: Prevent cross-contamination

Quality by Design (QbD)

Critical Quality Attributes (CQAs)=f(Critical Process Parameters (CPPs))\text{Critical Quality Attributes (CQAs)} = f(\text{Critical Process Parameters (CPPs)}) Design space:Region of CPP values demonstrating QbD\text{Design space}: \text{Region of CPP values demonstrating QbD}

Real-World Application: Monoclonal Antibody Production

Monoclonal antibody production through mammalian cell culture is a complex bioprocess that demonstrates multiple bioprocess engineering principles.

Antibody Production Process

# Mammalian cell culture for monoclonal antibody production
process_params = {
    'cell_line': 'CHO (Chinese Hamster Ovary)',
    'vessel_size': 2000,     # Liters (production bioreactor)
    'operation_mode': 'fed_batch',
    'culture_duration': 14,  # Days
    'inoculum_density': 0.3, # x10^6 cells/mL
    'target_titer': 3.5,     # g/L
    'viability_goal': 85,    # % (at harvest)
    'osmolality': 320,       # mOsm/kg
    'pH_target': 7.1,        # pH
    'temperature': 37.0      # °C
}

# Calculate culture kinetics
initial_cells = process_params['inoculum_density'] * 1e6 * process_params['vessel_size']  # cells
target_growth = 10  # cells/cell (typical fold increase in fed-batch)
final_cell_density = process_params['inoculum_density'] * target_growth  # x10^6 cells/mL
total_cells_harvest = final_cell_density * 1e6 * process_params['vessel_size']  # cells

# Calculate productivity
antibody_titer = process_params['target_titer']  # g/L
total_antibody = antibody_titer * process_params['vessel_size']  # g

# Mass transfer requirements
kla_target = 15  # 1/hr (typical for CHO cultures)
oxygen_demand = 1.5e-12  # mol/cell/hour (for mammalian cells)
cell_density_max = 20  # x10^6 cells/mL (typical maximum)
max_oxygen_consumption = oxygen_demand * cell_density_max * 1e6  # mol/L/hour

# Calculate required oxygen transfer rate
rotor_diameter = (process_params['vessel_size'] * 0.2 / math.pi)**(1/3)  # m (estimate for 20% filling factor
impeller_speed = 150  # RPM (typical for large vessels)

# Power consumption estimation (for mixing)
density_medium = 1020  # kg/m³
power_number = 5  # typical for Rushton turbines
impeller_diameter = rotor_diameter  # assume 1:1 ratio
power_input = power_number * density_medium * ((impeller_speed/60)**3) * (impeller_diameter**5)  # Watts

# Calculate energy consumption
culture_time_hrs = process_params['culture_duration'] * 24
energy_consumption = power_input * culture_time_hrs / 1000  # kWh

print(f"Mammalian cell culture for monoclonal antibody production:")
print(f"  Bioreactor size: {process_params['vessel_size']:,} L")
print(f"  Cell line: {process_params['cell_line']}")
print(f"  Culture duration: {process_params['culture_duration']} days")
print(f"  Target titer: {process_params['target_titer']} g/L")
print(f"  Initial cell density: {process_params['inoculum_density']} x10⁶ cells/mL")
print(f"  Estimated final cell density: {final_cell_density:.1f} x10⁶ cells/mL")
print(f"  Total antibody production: {total_antibody:.0f} g")
print(f"  Required KLa: {kla_target} hr⁻¹")
print(f"  Estimated power input: {power_input:.0f} W")
print(f"  Estimated energy consumption: {energy_consumption:.0f} kWh")

# Downstream processing estimation
capture_efficiency = 0.95  # 95% for Protein A chromatography
polish_efficiency = 0.85   # 85% for ion exchange chromatography
total_recovery = capture_efficiency * polish_efficiency  # Overall recovery

final_product = total_antibody * total_recovery  # g (accounting for losses)
print(f"  Estimated final product: {final_product:.0f} g")
print(f"  Overall process recovery: {total_recovery*100:.1f}%")

# Economic implications
antibody_value = 100  # $/g (simplified for example)
revenue_potential = final_product * antibody_value
print(f"  Revenue potential: ${revenue_potential:,.0f}")

# Scale considerations
if process_params['vessel_size'] > 1000:
    scale_category = "Large-scale manufacturing"
else:
    scale_category = "Clinical or pilot scale"
    
print(f"  Scale category: {scale_category}")

Manufacturing Considerations

Optimization of cell culture for therapeutic protein production.


Your Challenge: Fermentation Process Design

Design a fermentation process for producing a recombinant protein and optimize the key process parameters for maximum yield.

Goal: Engineer a complete fermentation process with optimal operating conditions.

Process Design Parameters

import math

# Fermentation design for recombinant protein production
fermentation_design = {
    'product': 'Recombinant human insulin',
    'host_organism': 'E. coli BL21(DE3)',
    'bioreactor_volume': 500,  # liters
    'target_productivity': 2.0, # g/L/day
    'substrate_glucose': 20,   # g/L initial concentration
    'initial_od600': 0.1,     # Optical density at start
    'target_od600': 50,       # Maximum optical density
    'temperature': 37,        # °C
    'ph_target': 7.0,         # pH
    'dissolved_oxygen': 30,   # % air saturation
    'agitation_rate': 300,    # RPM
    'aeration_rate': 1.0      #vvm (volume of air per volume of medium per minute)
}

# Calculate fermentation parameters
initial_cell_mass = fermentation_design['initial_od600'] * 0.3  # g/L (assuming 0.3 g/L per OD unit)
target_cell_mass = fermentation_design['target_od600'] * 0.3    # g/L

# Growth rate calculations
# For E. coli under optimal conditions
mu_max = 0.7  # hr⁻¹ (maximum specific growth rate for E. coli)
substrate_saturation_const = 0.2  # g/L (Ks for glucose)

# Calculate specific growth rate using Monod model
specific_growth_rate = mu_max * fermentation_design['substrate_glucose'] / (substrate_saturation_const + fermentation_design['substrate_glucose'])

# Calculate growth time to reach target density
growth_time = math.log(target_cell_mass / initial_cell_mass) / specific_growth_rate  # hours

# Calculate substrate consumption
maintenance_coefficient = 0.1  # g glucose/g biomass/h
yield_coefficient = 0.5  # g biomass/g glucose

substrate_consumed = target_cell_mass / yield_coefficient  # g/L consumed
substrate_remaining = fermentation_design['substrate_glucose'] - substrate_consumed  # g/L remaining if not fed

# Calculate oxygen demand
oxygen_req = 2.0  # g O₂/g biomass  (stoichiometric requirement)
oxygen_demand = target_cell_mass * oxygen_req  # g/L oxygen needed

# Calculate mass transfer requirements
kla_required = (oxygen_demand * specific_growth_rate) / (0.05 * 32)  # Simplified mass transfer requirement
# Assuming we need to supply oxygen at the rate it's consumed

# Calculate power requirements for mixing and aeration
# Power number for Rushton turbine: P = Np * ρ * N³ * D⁵
power_number = 5
density = 1000  # kg/m³ (density of medium)
impeller_diameter = (fermentation_design['bioreactor_volume'] / math.pi)**(1/3) * 0.3  # Approximate impeller size
rpm = fermentation_design['agitation_rate'] / 60  # Convert to rev/sec

theoretical_power = power_number * density * (rpm**3) * (impeller_diameter**5)  # Watts

# Calculate fed-batch requirements
if substrate_remaining < 0:
    # Need fed-batch operation
    feed_rate_needed = abs(substrate_remaining) / growth_time  # g/L/hour
    feed_solution_concentration = 400  # g/L (concentrated glucose solution)
    volumetric_feed_rate = (feed_rate_needed * fermentation_design['bioreactor_volume']) / feed_solution_concentration  # L/hour
    total_media_addition = volumetric_feed_rate * growth_time  # L
else:
    # Batch operation possible
    feed_rate_needed = 0
    total_media_addition = 0

# Estimate product formation
product_yield_per_biomass = 0.1  # g product/g biomass
estimated_product = target_cell_mass * product_yield_per_biomass  # g/L

# Calculate overall process metrics
reactor_utilization = growth_time / 24  # Assume 24h turnaround time
productivity = estimated_product / (growth_time / 24)  # g/L/day

Design and optimize a fermentation process for maximum recombinant protein yield.

Hint:

  • Calculate growth kinetics using Monod model
  • Consider oxygen transfer requirements
  • Optimize feeding strategy for substrate limitation
  • Evaluate power and energy requirements
# TODO: Calculate fermentation process parameters
specific_growth_rate = 0  # hr⁻¹ (growth rate constant)
substrate_utilization_rate = 0  # g/L/hr (substrate consumption rate)
oxygen_transfer_rate = 0  # mmol/L/hr (oxygen consumption rate)
biomass_yield = 0  # g biomass/g substrate (yield coefficient)
productivity_index = 0  # g/L/day (overall process productivity)
process_efficiency = 0  # fraction (0-1) of substrate converted to product

# Calculate specific growth rate using Monod model
substrate_constant = 0.2  # g/L (glucose saturation constant for E. coli)
mu_max_ecoli = 0.7  # hr⁻¹ (maximum growth rate)
specific_growth_rate = mu_max_ecoli * fermentation_design['substrate_glucose'] / (substrate_constant + fermentation_design['substrate_glucose'])

# Calculate substrate utilization rate (considering maintenance)
maintenance_coeff = 0.05  # g glucose/g biomass/hr
biomass_concentration = target_cell_mass  # g/L
substrate_utilization_rate = (specific_growth_rate / yield_coefficient) * biomass_concentration + maintenance_coeff

# Calculate oxygen transfer rate
oxygen_demand_coeff = 2.0  # g O₂/g biomass
oxygen_transfer_rate = oxygen_demand_coeff * biomass_concentration * specific_growth_rate * 32000  # Convert to mmol/L/hr

# Calculate biomass yield coefficient
biomass_yield = yield_coefficient  # g biomass/g substrate

# Calculate overall productivity
process_duration = growth_time + 2  # Add 2 hours for inoculation and harvest
productivity_index = estimated_product / (process_duration / 24)  # g/L/day

# Calculate process efficiency
total_substrate_used = substrate_consumed
theoretical_product_yield = total_substrate_used * yield_coefficient * product_yield_per_biomass
process_efficiency = estimated_product / theoretical_product_yield if theoretical_product_yield > 0 else 0

# Print results
print(f"Specific growth rate: {specific_growth_rate:.3f} hr⁻¹")
print(f"Substrate utilization rate: {substrate_utilization_rate:.3f} g/L/hr")
print(f"Oxygen transfer rate: {oxygen_transfer_rate:.1f} mmol/L/hr")
print(f"Biomass yield: {biomass_yield:.3f} g/g substrate")
print(f"Process productivity: {productivity_index:.2f} g/L/day")
print(f"Process efficiency: {process_efficiency:.3f}")

# Process optimization assessment
if productivity_index > fermentation_design['target_productivity']:
    optimization_status = "Meets target productivity"
elif productivity_index > fermentation_design['target_productivity'] * 0.8:
    optimization_status = "Approaching target - minor optimizations needed"
else:
    optimization_status = "Below target - significant process improvements required"

print(f"Optimization status: {optimization_status}")

# Suggested improvements
improvement_suggestions = []
if specific_growth_rate < 0.5:
    improvement_suggestions.append("Increase temperature or optimize medium")
if substrate_utilization_rate > 2.0:
    improvement_suggestions.append("Consider fed-batch to avoid substrate inhibition")
if oxygen_transfer_rate > 100:
    improvement_suggestions.append("Increase aeration/agitation or consider oxygen-enriched air")
if process_efficiency < 0.7:
    improvement_suggestions.append("Optimize maintenance energy requirements")

print(f"Suggested improvements: {improvement_suggestions}")

How would you modify your fermentation process design if you wanted to minimize the overall operating costs while maintaining the required product titer?

ELI10 Explanation

Simple analogy for better understanding

Think of bioprocess engineering like being a master brewmaster who designs and optimizes the largest, most sophisticated breweries in the world - except instead of beer, these 'breweries' (bioreactors) produce life-saving medications, vitamins, enzymes, antibiotics, and other important biological products. Just like a brewmaster carefully controls temperature, nutrients, oxygen, and timing to make the perfect beer, bioprocess engineers control all the conditions in bioreactors where living cells are grown to produce valuable products. They design the 'vats' (bioreactors) where cells grow, optimize the 'recipe' (growth media and conditions), and figure out how to extract and purify the final product from the mixture at the end. It's like having a PhD in both microbiology and engineering, using science to design manufacturing processes that work with living organisms instead of machines.

Self-Examination

Q1.

What are the key design considerations for bioreactor systems used in fermentation?

Q2.

How do you optimize fermentation conditions for maximum product yield?

Q3.

What are the main unit operations in downstream processing and how are they selected?