EN | JP

Chapter 5: Applications and Future

Industrial Processes, Green Technologies, and AI-Driven Catalyst Design

Reading time: 30-35 minutes Difficulty: Intermediate Code examples: 6

Learning Objectives

5.1 Industrial Applications

Scale of Industrial Catalysis

Catalysis drives the modern chemical industry, with 90% of all chemical processes relying on catalysts. The global catalyst market exceeded $35 billion in 2024 and continues to grow.

graph TB subgraph "Industrial Catalysis" A[Petroleum Refining] --> A1[Fluid Catalytic Cracking] A --> A2[Hydroprocessing] A --> A3[Reforming] B[Chemical Production] --> B1[Ammonia Synthesis] B --> B2[Methanol Synthesis] B --> B3[Polymer Production] C[Environmental] --> C1[Auto Exhaust Treatment] C --> C2[Industrial Off-gas] C --> C3[Water Treatment] D[Emerging] --> D1[Green Hydrogen] D --> D2[CO₂ Utilization] D --> D3[Biofuels] end

Key Industrial Processes

Process Catalyst Scale (MT/yr) Market Value
Haber-Bosch Fe/K₂O/Al₂O₃ 180 million $60 billion
FCC Zeolite Y 500+ million bbl $4 billion (catalyst)
Methanol Cu/ZnO/Al₂O₃ 100 million $30 billion
Polyethylene Ziegler-Natta, Metallocene 100 million $150 billion
Sulfuric Acid V₂O₅ 260 million $12 billion

Code Example 1: Industrial Process Economics

"""
Economic analysis of industrial catalytic processes
Compares capital and operating costs across major industries
"""
import numpy as np
import matplotlib.pyplot as plt

# Industrial process data (approximate values)
processes = {
    'Ammonia\n(Haber-Bosch)': {
        'capex': 2000,  # $/ton capacity
        'opex': 300,    # $/ton product
        'catalyst_cost': 5,  # $/ton product
        'energy_frac': 0.75,  # Energy fraction of opex
        'catalyst_life': 15  # years
    },
    'FCC\n(Petroleum)': {
        'capex': 500,
        'opex': 50,
        'catalyst_cost': 2,
        'energy_frac': 0.40,
        'catalyst_life': 0.02  # Continuous replacement
    },
    'Methanol\nSynthesis': {
        'capex': 1500,
        'opex': 200,
        'catalyst_cost': 3,
        'energy_frac': 0.60,
        'catalyst_life': 4
    },
    'Polyethylene\n(Ziegler-Natta)': {
        'capex': 1200,
        'opex': 150,
        'catalyst_cost': 20,  # Higher activity required
        'energy_frac': 0.30,
        'catalyst_life': 0.001  # Single-use
    },
    'Sulfuric\nAcid': {
        'capex': 300,
        'opex': 30,
        'catalyst_cost': 0.5,
        'energy_frac': 0.50,  # Exothermic - energy producer
        'catalyst_life': 10
    }
}

# Create figure
fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# Plot 1: CAPEX comparison
ax1 = axes[0, 0]
names = list(processes.keys())
capex = [processes[p]['capex'] for p in names]
colors = plt.cm.viridis(np.linspace(0.2, 0.8, len(names)))
bars1 = ax1.bar(names, capex, color=colors, edgecolor='black')
ax1.set_ylabel('CAPEX ($/ton capacity)', fontsize=11)
ax1.set_title('Capital Investment Intensity', fontsize=12, fontweight='bold')
ax1.tick_params(axis='x', rotation=0)
for bar, val in zip(bars1, capex):
    ax1.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 30,
             f'${val}', ha='center', fontsize=9)

# Plot 2: Operating cost breakdown
ax2 = axes[0, 1]
x = np.arange(len(names))
width = 0.35

energy_costs = [processes[p]['opex'] * processes[p]['energy_frac'] for p in names]
other_costs = [processes[p]['opex'] * (1 - processes[p]['energy_frac']) for p in names]
catalyst_costs = [processes[p]['catalyst_cost'] for p in names]

ax2.bar(x - width/2, energy_costs, width, label='Energy', color='#ff6b6b')
ax2.bar(x + width/2, other_costs, width, label='Other OPEX', color='#4ecdc4')
ax2.bar(x + width/2, catalyst_costs, width, bottom=other_costs, label='Catalyst', color='#45b7d1')

ax2.set_ylabel('Operating Cost ($/ton product)', fontsize=11)
ax2.set_title('Operating Cost Breakdown', fontsize=12, fontweight='bold')
ax2.set_xticks(x)
ax2.set_xticklabels(names, fontsize=9)
ax2.legend()

# Plot 3: Catalyst cost vs lifetime
ax3 = axes[1, 0]
catalyst_life = [processes[p]['catalyst_life'] for p in names]
cat_costs = [processes[p]['catalyst_cost'] for p in names]

scatter = ax3.scatter(catalyst_life, cat_costs, s=200, c=colors, edgecolors='black')
for i, name in enumerate(names):
    ax3.annotate(name.replace('\n', ' '), (catalyst_life[i], cat_costs[i]),
                 xytext=(5, 5), textcoords='offset points', fontsize=8)

ax3.set_xlabel('Catalyst Lifetime (years)', fontsize=11)
ax3.set_ylabel('Catalyst Cost ($/ton product)', fontsize=11)
ax3.set_title('Catalyst Economics', fontsize=12, fontweight='bold')
ax3.set_xscale('log')
ax3.grid(alpha=0.3)

# Plot 4: Cost per ton analysis
ax4 = axes[1, 1]
# Annualized total cost (simplified: 10-year payback on CAPEX)
total_cost = []
for p in names:
    annual_capex = processes[p]['capex'] / 10
    opex = processes[p]['opex']
    total_cost.append(annual_capex + opex)

bars4 = ax4.barh(names, total_cost, color=colors, edgecolor='black')
ax4.set_xlabel('Total Annualized Cost ($/ton)', fontsize=11)
ax4.set_title('Total Cost Comparison', fontsize=12, fontweight='bold')
for bar, val in zip(bars4, total_cost):
    ax4.text(val + 5, bar.get_y() + bar.get_height()/2,
             f'${val:.0f}', va='center', fontsize=9)

plt.tight_layout()
plt.show()

print("\nIndustrial Process Economics Summary:")
for name, data in processes.items():
    print(f"\n{name.replace(chr(10), ' ')}:")
    print(f"  CAPEX: ${data['capex']}/ton capacity")
    print(f"  OPEX: ${data['opex']}/ton product")
    print(f"  Catalyst contribution: ${data['catalyst_cost']}/ton ({data['catalyst_cost']/data['opex']*100:.1f}%)")

5.2 Environmental Catalysis

Automotive Emission Control

The three-way catalyst (TWC) remains the cornerstone of automotive emission control, simultaneously converting CO, HC, and NOx:

graph LR A[Engine Exhaust] --> B[TWC] B --> C[Clean Exhaust] subgraph "Reactions" D["2CO + O₂ → 2CO₂"] E["CₓHᵧ + O₂ → CO₂ + H₂O"] F["2NOₓ → N₂ + xO₂"] end B --> D B --> E B --> F

Emerging Environmental Technologies

Technology Application Catalyst Efficiency
SCR Diesel NOx reduction V₂O₅-WO₃/TiO₂, Cu-zeolite >95%
DOC Diesel oxidation Pt-Pd/Al₂O₃ >90%
GPF Gasoline particulate filter Pt-Rh/cordierite >99%
VOC Oxidation Industrial off-gas Pt/Al₂O₃, MnO₂ >95%

Code Example 2: Emission Control Analysis

"""
TWC light-off behavior and conversion efficiency analysis
Demonstrates the temperature-dependent performance of automotive catalysts
"""
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def light_off_curve(T, T50, n):
    """
    Sigmoidal light-off curve
    T50: Temperature at 50% conversion
    n: Steepness parameter
    """
    return 100 / (1 + np.exp(-n * (T - T50) / T50))

# Temperature range
T = np.linspace(100, 500, 200)  # °C

# Different pollutants have different light-off temperatures
pollutants = {
    'CO': {'T50': 220, 'n': 15, 'color': 'red'},
    'HC (C₃H₆)': {'T50': 260, 'n': 12, 'color': 'green'},
    'NOx': {'T50': 280, 'n': 10, 'color': 'blue'}
}

# Create figure
fig, axes = plt.subplots(1, 3, figsize=(15, 5))

# Left: Light-off curves
ax1 = axes[0]
for name, params in pollutants.items():
    conversion = light_off_curve(T, params['T50'], params['n'])
    ax1.plot(T, conversion, color=params['color'], linewidth=2.5, label=name)
    ax1.axhline(y=50, color='gray', linestyle='--', alpha=0.5)
    ax1.axvline(x=params['T50'], color=params['color'], linestyle=':', alpha=0.5)

ax1.set_xlabel('Temperature (°C)', fontsize=12)
ax1.set_ylabel('Conversion (%)', fontsize=12)
ax1.set_title('TWC Light-off Curves', fontsize=13, fontweight='bold')
ax1.legend(fontsize=10)
ax1.grid(alpha=0.3)
ax1.set_xlim(100, 500)
ax1.set_ylim(0, 105)
ax1.text(150, 55, 'T₅₀ line', fontsize=9, color='gray')

# Middle: Operating window (Lambda = 1 requirement)
ax2 = axes[1]
lambda_vals = np.linspace(0.95, 1.05, 100)

# Simplified conversion dependencies on lambda
def co_conv(lam):
    return 100 * np.exp(-50 * (lam - 1)**2) * (1 - 0.5 * np.maximum(0, lam - 1))

def hc_conv(lam):
    return 100 * np.exp(-40 * (lam - 1)**2)

def nox_conv(lam):
    return 100 * np.exp(-60 * (lam - 1)**2) * (1 + 0.3 * np.minimum(0, lam - 1))

ax2.plot(lambda_vals, co_conv(lambda_vals), 'r-', linewidth=2.5, label='CO')
ax2.plot(lambda_vals, hc_conv(lambda_vals), 'g-', linewidth=2.5, label='HC')
ax2.plot(lambda_vals, nox_conv(lambda_vals), 'b-', linewidth=2.5, label='NOx')

# Operating window
ax2.axvspan(0.995, 1.005, alpha=0.2, color='yellow', label='Operating window')
ax2.axvline(x=1.0, color='black', linestyle='--', alpha=0.7)

ax2.set_xlabel('Air/Fuel Ratio (λ)', fontsize=12)
ax2.set_ylabel('Conversion (%)', fontsize=12)
ax2.set_title('Lambda Window', fontsize=13, fontweight='bold')
ax2.legend(fontsize=9, loc='lower left')
ax2.grid(alpha=0.3)
ax2.set_xlim(0.95, 1.05)
ax2.set_ylim(0, 105)

# Right: Emission standards progression
ax3 = axes[2]
standards = ['Euro 1\n(1992)', 'Euro 3\n(2000)', 'Euro 5\n(2009)', 'Euro 6d\n(2020)', 'Euro 7\n(2025)']
co_limits = [2.72, 0.64, 0.50, 0.50, 0.30]  # g/km for gasoline
hc_limits = [0.97, 0.20, 0.10, 0.10, 0.05]
nox_limits = [0.97, 0.15, 0.06, 0.06, 0.03]

x = np.arange(len(standards))
width = 0.25

ax3.bar(x - width, co_limits, width, label='CO', color='red', alpha=0.8)
ax3.bar(x, [h*5 for h in hc_limits], width, label='HC (×5)', color='green', alpha=0.8)
ax3.bar(x + width, [n*5 for n in nox_limits], width, label='NOx (×5)', color='blue', alpha=0.8)

ax3.set_xlabel('Emission Standard', fontsize=12)
ax3.set_ylabel('Emission Limit (g/km)', fontsize=12)
ax3.set_title('Evolution of Emission Standards', fontsize=13, fontweight='bold')
ax3.set_xticks(x)
ax3.set_xticklabels(standards, fontsize=9)
ax3.legend(fontsize=9)
ax3.set_yscale('log')

plt.tight_layout()
plt.show()

print("\nEmission Control Analysis:")
print(f"• CO light-off (T₅₀): 220°C")
print(f"• HC light-off (T₅₀): 260°C")
print(f"• NOx light-off (T₅₀): 280°C")
print(f"• Operating window: λ = 0.995-1.005 (±0.5%)")
print(f"• Euro 7 reduction vs Euro 1: CO 89%, HC 95%, NOx 97%")

5.3 Green Hydrogen Production

2025-2026: Green Hydrogen Revolution

Green hydrogen (from water electrolysis using renewable energy) is central to decarbonization. Current costs: $3.8-11.9/kg. Target for 2030: <$2/kg. Catalyst development is critical to achieving these targets.

Water Electrolysis Technologies

Technology Electrolyte Catalyst (Cathode/Anode) Efficiency Cost Target
Alkaline (AWE) KOH/NaOH Ni/Ni-Fe 60-70% $200/kW
PEM Nafion membrane Pt/IrO₂ 70-80% $400/kW
AEM Anion membrane Non-PGM 65-75% $150/kW
SOEC Ceramic (YSZ) Ni-YSZ/LSM 80-90% $300/kW

Electrocatalyst Design Principles

Efficient hydrogen evolution reaction (HER) and oxygen evolution reaction (OER) catalysts follow specific design principles:

Code Example 3: Green Hydrogen Economics

"""
Techno-economic analysis of green hydrogen production
Compares different electrolysis technologies and cost projections
"""
import numpy as np
import matplotlib.pyplot as plt

# Current and projected costs ($/kg H2)
years = np.array([2020, 2022, 2024, 2026, 2028, 2030, 2035, 2040])

# Cost trajectories by technology
technologies = {
    'PEM Electrolysis': {
        'costs': [8.0, 6.5, 5.5, 4.5, 3.5, 2.5, 1.8, 1.5],
        'color': '#2196F3',
        'marker': 'o'
    },
    'Alkaline Electrolysis': {
        'costs': [6.0, 5.0, 4.2, 3.5, 2.8, 2.2, 1.6, 1.3],
        'color': '#4CAF50',
        'marker': 's'
    },
    'AEM Electrolysis': {
        'costs': [10.0, 7.5, 5.5, 4.0, 3.0, 2.0, 1.4, 1.1],
        'color': '#FF9800',
        'marker': '^'
    },
    'SOEC (High-T)': {
        'costs': [12.0, 9.0, 6.5, 4.5, 3.2, 2.2, 1.5, 1.0],
        'color': '#9C27B0',
        'marker': 'D'
    }
}

# Comparison benchmarks
gray_h2_cost = 1.5  # Steam methane reforming
blue_h2_cost = 2.5  # SMR + CCS

# Create figure
fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# Plot 1: Cost trajectory
ax1 = axes[0, 0]
for name, data in technologies.items():
    ax1.plot(years, data['costs'], marker=data['marker'], color=data['color'],
             linewidth=2, markersize=8, label=name)

ax1.axhline(y=gray_h2_cost, color='gray', linestyle='--', label='Gray H₂ (SMR)')
ax1.axhline(y=blue_h2_cost, color='steelblue', linestyle='--', label='Blue H₂ (SMR+CCS)')
ax1.axhline(y=2.0, color='green', linestyle=':', linewidth=2, label='DOE Target ($2/kg)')

ax1.set_xlabel('Year', fontsize=12)
ax1.set_ylabel('Hydrogen Cost ($/kg)', fontsize=12)
ax1.set_title('Green Hydrogen Cost Projections', fontsize=13, fontweight='bold')
ax1.legend(fontsize=9, loc='upper right')
ax1.grid(alpha=0.3)
ax1.set_xlim(2020, 2040)
ax1.set_ylim(0, 13)

# Plot 2: Cost breakdown (2024)
ax2 = axes[0, 1]
components = ['Electricity', 'CAPEX\n(Stack)', 'CAPEX\n(BoP)', 'O&M', 'Catalyst']
pem_breakdown = [2.5, 1.2, 0.8, 0.6, 0.4]  # $/kg
alk_breakdown = [2.3, 0.8, 0.6, 0.3, 0.2]

x = np.arange(len(components))
width = 0.35

bars1 = ax2.bar(x - width/2, pem_breakdown, width, label='PEM', color='#2196F3')
bars2 = ax2.bar(x + width/2, alk_breakdown, width, label='Alkaline', color='#4CAF50')

ax2.set_xlabel('Cost Component', fontsize=12)
ax2.set_ylabel('Cost Contribution ($/kg H₂)', fontsize=12)
ax2.set_title('Cost Breakdown (2024)', fontsize=13, fontweight='bold')
ax2.set_xticks(x)
ax2.set_xticklabels(components, fontsize=10)
ax2.legend()

# Plot 3: Efficiency comparison
ax3 = axes[1, 0]
techs = ['AWE', 'PEM', 'AEM', 'SOEC']
current_eff = [65, 75, 70, 85]
projected_eff = [75, 85, 82, 95]

x = np.arange(len(techs))
width = 0.35

ax3.bar(x - width/2, current_eff, width, label='2024', color='#90CAF9')
ax3.bar(x + width/2, projected_eff, width, label='2030 Target', color='#1565C0')

ax3.set_xlabel('Technology', fontsize=12)
ax3.set_ylabel('System Efficiency (%)', fontsize=12)
ax3.set_title('Electrolysis Efficiency', fontsize=13, fontweight='bold')
ax3.set_xticks(x)
ax3.set_xticklabels(techs)
ax3.legend()
ax3.set_ylim(0, 100)
ax3.axhline(y=80, color='green', linestyle='--', alpha=0.5, label='Target')

# Plot 4: Catalyst cost reduction impact
ax4 = axes[1, 1]
catalyst_reduction = np.linspace(0, 90, 50)  # % reduction in Ir/Pt loading

# Impact on system cost
def cost_impact(reduction_pct, base_catalyst_cost=0.4, total_cost=5.5):
    catalyst_savings = base_catalyst_cost * reduction_pct / 100
    return total_cost - catalyst_savings

pem_cost_traj = [cost_impact(r, 0.4, 5.5) for r in catalyst_reduction]

ax4.plot(catalyst_reduction, pem_cost_traj, 'b-', linewidth=2.5, label='PEM System Cost')
ax4.fill_between(catalyst_reduction, pem_cost_traj, 5.5, alpha=0.3, color='green')
ax4.axhline(y=2.0, color='red', linestyle='--', label='$2/kg target')

# Annotate milestones
ax4.annotate('50% Ir reduction\n(Toyota/Panasonic 2025)',
             xy=(50, cost_impact(50)), xytext=(60, 4.5),
             arrowprops=dict(arrowstyle='->', color='black'),
             fontsize=9)

ax4.set_xlabel('Catalyst Loading Reduction (%)', fontsize=12)
ax4.set_ylabel('H₂ Production Cost ($/kg)', fontsize=12)
ax4.set_title('Impact of Catalyst Innovation', fontsize=13, fontweight='bold')
ax4.legend(fontsize=9)
ax4.grid(alpha=0.3)

plt.tight_layout()
plt.show()

print("\nGreen Hydrogen Economics Summary:")
print(f"• 2024 PEM cost: $5.5/kg (Electricity 45%, CAPEX 36%, O&M 11%, Catalyst 7%)")
print(f"• 2030 target: <$2/kg")
print(f"• Efficiency gains needed: 75% → 85%")
print(f"• Catalyst cost reduction potential: 50-90% through SAC and non-PGM designs")

5.4 CO₂ Utilization

Carbon Capture and Utilization (CCU)

Converting CO₂ to valuable products addresses both climate change and chemical feedstock challenges. Key products include methanol, formic acid, CO (for syngas), and hydrocarbons.

CO₂ Conversion Pathways

graph TB CO2[CO₂] --> |"Hydrogenation"| A[Methanol] CO2 --> |"Electrochemical"| B[CO + O₂] CO2 --> |"Electrochemical"| C[Formic Acid] CO2 --> |"Fischer-Tropsch"| D[Hydrocarbons] CO2 --> |"Dry Reforming"| E[Syngas] A --> A1["Fuel additive\nChemical feedstock"] B --> B1["Syngas\nSteel production"] C --> C1["H₂ carrier\nChemical synthesis"] D --> D1["Sustainable fuels\nPlastics"]

Electrochemical CO₂ Reduction

Product Catalyst Faradaic Efficiency Energy Efficiency
CO Ag, Au, Zn >95% ~70%
Formate Sn, Bi, Pb, In >90% ~65%
Methanol Cu-based ~50% ~40%
Ethylene Cu nanocubes ~70% ~35%

Code Example 4: CO₂ Conversion Economics

"""
Techno-economic analysis of CO₂ conversion pathways
Compares different products and their market potential
"""
import numpy as np
import matplotlib.pyplot as plt

# CO2 conversion products
products = {
    'Methanol': {
        'market_size': 100,  # Billion $/year
        'price': 450,  # $/ton
        'co2_utilization': 1.37,  # ton CO2/ton product
        'energy_req': 10.5,  # MWh/ton product
        'trl': 9  # Technology Readiness Level
    },
    'Formic Acid': {
        'market_size': 1,
        'price': 800,
        'co2_utilization': 0.96,
        'energy_req': 5.0,
        'trl': 7
    },
    'CO (Syngas)': {
        'market_size': 10,
        'price': 150,
        'co2_utilization': 1.57,
        'energy_req': 3.5,
        'trl': 8
    },
    'Ethylene': {
        'market_size': 200,
        'price': 1200,
        'co2_utilization': 3.14,
        'energy_req': 25.0,
        'trl': 5
    },
    'Jet Fuel': {
        'market_size': 300,
        'price': 800,
        'co2_utilization': 3.5,
        'energy_req': 30.0,
        'trl': 4
    }
}

# Calculate derived metrics
for name, data in products.items():
    # CO2 cost at $50/ton
    data['co2_cost'] = 50 * data['co2_utilization']
    # Energy cost at $50/MWh
    data['energy_cost'] = 50 * data['energy_req']
    # Production cost (simplified)
    data['prod_cost'] = data['co2_cost'] + data['energy_cost'] + 100  # +100 for CAPEX/OPEX
    # Margin
    data['margin'] = data['price'] - data['prod_cost']
    # CO2 abatement cost
    data['abatement_cost'] = max(0, -data['margin']) / data['co2_utilization'] if data['margin'] < 0 else 0

# Create figure
fig, axes = plt.subplots(2, 2, figsize=(14, 10))

names = list(products.keys())
colors = plt.cm.Set2(np.linspace(0, 1, len(names)))

# Plot 1: Market size vs CO2 utilization
ax1 = axes[0, 0]
market_sizes = [products[p]['market_size'] for p in names]
co2_util = [products[p]['co2_utilization'] for p in names]
trls = [products[p]['trl'] for p in names]

scatter = ax1.scatter(co2_util, market_sizes, s=[t**2 * 15 for t in trls],
                      c=colors, edgecolors='black', alpha=0.7)

for i, name in enumerate(names):
    ax1.annotate(name, (co2_util[i], market_sizes[i]),
                 xytext=(5, 5), textcoords='offset points', fontsize=9)

ax1.set_xlabel('CO₂ Utilization (ton CO₂/ton product)', fontsize=12)
ax1.set_ylabel('Market Size (Billion $/year)', fontsize=12)
ax1.set_title('Market Opportunity vs CO₂ Intensity', fontsize=13, fontweight='bold')
ax1.set_yscale('log')
ax1.grid(alpha=0.3)
ax1.text(0.05, 0.95, 'Bubble size = TRL', transform=ax1.transAxes, fontsize=9)

# Plot 2: Cost breakdown
ax2 = axes[0, 1]
x = np.arange(len(names))
width = 0.6

co2_costs = [products[p]['co2_cost'] for p in names]
energy_costs = [products[p]['energy_cost'] for p in names]
other_costs = [100] * len(names)
prices = [products[p]['price'] for p in names]

ax2.bar(x, co2_costs, width, label='CO₂', color='#ff6b6b')
ax2.bar(x, energy_costs, width, bottom=co2_costs, label='Energy', color='#ffd93d')
ax2.bar(x, other_costs, width, bottom=[c+e for c, e in zip(co2_costs, energy_costs)],
        label='Other', color='#6bcb77')
ax2.scatter(x, prices, s=100, c='black', marker='_', linewidths=3, label='Market price', zorder=5)

ax2.set_xlabel('Product', fontsize=12)
ax2.set_ylabel('Cost / Price ($/ton)', fontsize=12)
ax2.set_title('Production Cost vs Market Price', fontsize=13, fontweight='bold')
ax2.set_xticks(x)
ax2.set_xticklabels(names, rotation=45, ha='right', fontsize=9)
ax2.legend(fontsize=9)

# Plot 3: Technology readiness
ax3 = axes[1, 0]
trls = [products[p]['trl'] for p in names]
colors_trl = ['green' if t >= 7 else 'yellow' if t >= 5 else 'red' for t in trls]

bars = ax3.barh(names, trls, color=colors_trl, edgecolor='black')
ax3.axvline(x=7, color='green', linestyle='--', alpha=0.5, label='Commercial ready')
ax3.axvline(x=5, color='orange', linestyle='--', alpha=0.5, label='Demonstration')

ax3.set_xlabel('Technology Readiness Level', fontsize=12)
ax3.set_title('Technology Maturity', fontsize=13, fontweight='bold')
ax3.set_xlim(0, 10)
ax3.legend(fontsize=9)

for bar, trl in zip(bars, trls):
    ax3.text(trl + 0.1, bar.get_y() + bar.get_height()/2,
             f'TRL {trl}', va='center', fontsize=10)

# Plot 4: CO2 abatement potential
ax4 = axes[1, 1]
# Scenario: 1 Gt CO2/year utilization by 2040
target_co2 = 1000  # Mt CO2/year

potential_utilization = {}
for name, data in products.items():
    # Max utilization based on current market × 3 growth
    max_output = data['market_size'] * 3 * 1e9 / data['price']  # tons/year
    co2_captured = max_output * data['co2_utilization'] / 1e6  # Mt CO2/year
    potential_utilization[name] = min(co2_captured, 500)  # Cap at 500 Mt

util_values = [potential_utilization[p] for p in names]
ax4.barh(names, util_values, color=colors, edgecolor='black')
ax4.axvline(x=100, color='red', linestyle='--', linewidth=2, label='100 Mt CO₂/year')
ax4.set_xlabel('CO₂ Utilization Potential (Mt/year)', fontsize=12)
ax4.set_title('CO₂ Capture Potential (2040)', fontsize=13, fontweight='bold')
ax4.legend(fontsize=9)

plt.tight_layout()
plt.show()

print("\nCO₂ Conversion Analysis:")
for name, data in products.items():
    status = "Profitable" if data['margin'] > 0 else f"Gap: ${-data['margin']:.0f}/ton"
    print(f"\n{name}:")
    print(f"  Production cost: ${data['prod_cost']:.0f}/ton")
    print(f"  Market price: ${data['price']}/ton")
    print(f"  Status: {status}")
    print(f"  TRL: {data['trl']}")

5.5 AI-Driven Catalyst Design

2025-2026: Machine Learning Revolution in Catalysis

AI is transforming catalyst discovery, achieving 30-50% reduction in experimental cycles and enabling design of catalysts with unprecedented properties. Key advances include graph neural networks for activity prediction and generative models for novel catalyst structures.

ML Applications in Catalysis

Application Method Achievement
Activity Prediction GNN, DFT-ML MAE < 0.1 eV for adsorption energies
Catalyst Screening High-throughput + ML 19,000+ SAC structures evaluated
Reaction Optimization Bayesian optimization 72% → 89% efficiency (CO₂RR)
Stability Prediction Active learning Predict deactivation in hours vs. weeks
Mechanistic Understanding Explainable AI Identify rate-determining steps

Code Example 5: ML-Assisted Catalyst Screening

"""
ML-assisted catalyst screening using descriptor-based approach
Demonstrates feature engineering and model training for catalyst activity prediction
"""
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error, r2_score
from sklearn.preprocessing import StandardScaler

# Simulated catalyst dataset
np.random.seed(42)
n_samples = 500

# Features (catalyst descriptors)
features = {
    'd_band_center': np.random.uniform(-4, 0, n_samples),  # eV
    'work_function': np.random.uniform(4, 6, n_samples),   # eV
    'coordination_number': np.random.randint(4, 12, n_samples),
    'electronegativity': np.random.uniform(1.5, 2.5, n_samples),
    'atomic_radius': np.random.uniform(1.2, 2.0, n_samples),  # Angstrom
    'surface_energy': np.random.uniform(1, 3, n_samples),     # J/m²
}

X = np.column_stack(list(features.values()))
feature_names = list(features.keys())

# Target: HER activity (simulated based on Sabatier principle)
# Activity peaks at optimal d-band center (~-2 eV)
def activity_function(d_band, work_fn, coord_num, eneg, radius, surf_e):
    # Volcano-like dependence on d-band
    d_band_term = -0.5 * (d_band + 2)**2
    # Work function contribution
    wf_term = -0.1 * (work_fn - 5)**2
    # Coordination effect
    coord_term = 0.05 * coord_num
    # Noise
    noise = np.random.normal(0, 0.3)
    return 2.0 + d_band_term + wf_term + coord_term + noise

y = np.array([activity_function(*X[i]) for i in range(n_samples)])
y = np.clip(y, 0, 3)  # Log(i0) in reasonable range

# Split data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Scale features
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# Train model
model = GradientBoostingRegressor(n_estimators=100, max_depth=4, random_state=42)
model.fit(X_train_scaled, y_train)

# Predictions
y_pred_train = model.predict(X_train_scaled)
y_pred_test = model.predict(X_test_scaled)

# Create figure
fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# Plot 1: Parity plot
ax1 = axes[0, 0]
ax1.scatter(y_train, y_pred_train, alpha=0.5, s=30, c='blue', label='Train')
ax1.scatter(y_test, y_pred_test, alpha=0.7, s=50, c='red', label='Test')
ax1.plot([0, 3], [0, 3], 'k--', linewidth=2)

mae_test = mean_absolute_error(y_test, y_pred_test)
r2_test = r2_score(y_test, y_pred_test)

ax1.set_xlabel('Actual Activity (log i₀)', fontsize=12)
ax1.set_ylabel('Predicted Activity (log i₀)', fontsize=12)
ax1.set_title('ML Model Performance', fontsize=13, fontweight='bold')
ax1.legend()
ax1.text(0.05, 0.95, f'MAE = {mae_test:.3f}\nR² = {r2_test:.3f}',
         transform=ax1.transAxes, fontsize=11, verticalalignment='top',
         bbox=dict(boxstyle='round', facecolor='wheat'))

# Plot 2: Feature importance
ax2 = axes[0, 1]
importance = model.feature_importances_
sorted_idx = np.argsort(importance)
ax2.barh([feature_names[i] for i in sorted_idx], importance[sorted_idx],
         color='steelblue', edgecolor='black')
ax2.set_xlabel('Feature Importance', fontsize=12)
ax2.set_title('Catalyst Descriptor Importance', fontsize=13, fontweight='bold')

# Plot 3: d-band center vs activity (volcano plot)
ax3 = axes[1, 0]
d_band_all = X[:, 0]
scatter = ax3.scatter(d_band_all, y, c=X[:, 2], cmap='viridis', alpha=0.6, s=30)
plt.colorbar(scatter, ax=ax3, label='Coordination Number')

# Fit polynomial for volcano
d_band_sorted = np.linspace(-4, 0, 100)
poly_fit = np.polyfit(d_band_all, y, 2)
y_fit = np.polyval(poly_fit, d_band_sorted)
ax3.plot(d_band_sorted, y_fit, 'r-', linewidth=2, label='Volcano fit')

ax3.axvline(x=-2, color='green', linestyle='--', alpha=0.5, label='Optimal d-band')
ax3.set_xlabel('d-band Center (eV)', fontsize=12)
ax3.set_ylabel('HER Activity (log i₀)', fontsize=12)
ax3.set_title('Sabatier Volcano Relationship', fontsize=13, fontweight='bold')
ax3.legend(fontsize=9)

# Plot 4: Screening results
ax4 = axes[1, 1]
# Generate new candidates
n_candidates = 1000
X_new = np.column_stack([
    np.random.uniform(-4, 0, n_candidates),
    np.random.uniform(4, 6, n_candidates),
    np.random.randint(4, 12, n_candidates),
    np.random.uniform(1.5, 2.5, n_candidates),
    np.random.uniform(1.2, 2.0, n_candidates),
    np.random.uniform(1, 3, n_candidates),
])
X_new_scaled = scaler.transform(X_new)
y_new_pred = model.predict(X_new_scaled)

# Histogram of predicted activities
ax4.hist(y_new_pred, bins=30, color='steelblue', edgecolor='black', alpha=0.7)
ax4.axvline(x=np.percentile(y_new_pred, 90), color='red', linestyle='--',
            linewidth=2, label=f'Top 10% threshold: {np.percentile(y_new_pred, 90):.2f}')

top_10_pct = np.sum(y_new_pred > np.percentile(y_new_pred, 90))
ax4.set_xlabel('Predicted Activity (log i₀)', fontsize=12)
ax4.set_ylabel('Count', fontsize=12)
ax4.set_title('Virtual Screening Results', fontsize=13, fontweight='bold')
ax4.legend(fontsize=9)
ax4.text(0.05, 0.95, f'Candidates screened: {n_candidates}\nTop performers: {top_10_pct}',
         transform=ax4.transAxes, fontsize=11, verticalalignment='top')

plt.tight_layout()
plt.show()

print("\nML Catalyst Screening Results:")
print(f"• Training samples: {len(y_train)}")
print(f"• Test MAE: {mae_test:.3f} log(i₀)")
print(f"• Test R²: {r2_test:.3f}")
print(f"• Most important feature: {feature_names[np.argmax(importance)]}")
print(f"• Candidates screened: {n_candidates}")
print(f"• Top 10% activity threshold: {np.percentile(y_new_pred, 90):.2f}")

5.6 Artificial Enzymes and De Novo Design

AI-Designed Enzymes: 2025 Breakthrough

AI systems can now design artificial enzymes from scratch with only 31% sequence similarity to natural enzymes. These de novo catalysts enable reactions not found in nature, including carbon-silicon bond formation and asymmetric cyclopropanation.

Artificial Enzyme Categories

Type Design Approach Applications
Directed Evolution Iterative mutation + selection Improved natural reactions
Computational Design Rosetta, RosettaMatch Novel active sites
AI De Novo AlphaFold, RFDiffusion Entirely new folds + functions
Hybrid AI design + directed evolution Optimized performance

Key Achievements

5.7 Future Directions

Emerging Technologies

Self-Healing Catalysts

Catalysts that can autonomously regenerate their active sites during operation:

Quantum Effects in Catalysis

Exploiting quantum tunneling and coherence for enhanced selectivity:

Code Example 6: Technology Roadmap

"""
Technology roadmap visualization for future catalyst development
Shows timelines and expected breakthroughs
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

# Technology roadmap data
technologies = {
    'Single-Atom Catalysts': {
        'start': 2020, 'current_trl': 7, 'target_trl': 9, 'target_year': 2028,
        'category': 'Materials'
    },
    'MOF Catalysts': {
        'start': 2015, 'current_trl': 6, 'target_trl': 9, 'target_year': 2030,
        'category': 'Materials'
    },
    'AI Catalyst Design': {
        'start': 2022, 'current_trl': 5, 'target_trl': 8, 'target_year': 2030,
        'category': 'Digital'
    },
    'Self-Healing Catalysts': {
        'start': 2024, 'current_trl': 3, 'target_trl': 7, 'target_year': 2035,
        'category': 'Emerging'
    },
    'Artificial Enzymes': {
        'start': 2018, 'current_trl': 4, 'target_trl': 8, 'target_year': 2032,
        'category': 'Bio-inspired'
    },
    'Green H₂ (<$2/kg)': {
        'start': 2020, 'current_trl': 6, 'target_trl': 9, 'target_year': 2030,
        'category': 'Energy'
    },
    'CO₂ to Fuels': {
        'start': 2018, 'current_trl': 5, 'target_trl': 8, 'target_year': 2035,
        'category': 'Energy'
    },
    'Quantum Catalysis': {
        'start': 2025, 'current_trl': 2, 'target_trl': 5, 'target_year': 2040,
        'category': 'Emerging'
    }
}

# Category colors
category_colors = {
    'Materials': '#2196F3',
    'Digital': '#9C27B0',
    'Emerging': '#FF5722',
    'Bio-inspired': '#4CAF50',
    'Energy': '#FFC107'
}

# Create figure
fig, axes = plt.subplots(1, 2, figsize=(16, 8))

# Left: Timeline (Gantt-like)
ax1 = axes[0]
y_positions = list(range(len(technologies)))
tech_names = list(technologies.keys())

for i, (name, data) in enumerate(technologies.items()):
    color = category_colors[data['category']]

    # Current progress
    ax1.barh(i, 2026 - data['start'], left=data['start'], height=0.4,
             color=color, alpha=0.7, edgecolor='black')

    # Future projection
    ax1.barh(i, data['target_year'] - 2026, left=2026, height=0.4,
             color=color, alpha=0.3, hatch='//', edgecolor='black')

    # TRL markers
    ax1.scatter(2026, i, s=100, c='white', edgecolors='black', zorder=5)
    ax1.text(2026, i, str(data['current_trl']), ha='center', va='center', fontsize=8)

ax1.set_yticks(y_positions)
ax1.set_yticklabels(tech_names, fontsize=10)
ax1.set_xlabel('Year', fontsize=12)
ax1.set_title('Catalyst Technology Roadmap', fontsize=14, fontweight='bold')
ax1.axvline(x=2026, color='red', linestyle='--', linewidth=2, label='Current (2026)')
ax1.set_xlim(2015, 2042)
ax1.legend(loc='lower right')

# Legend for categories
legend_patches = [mpatches.Patch(color=c, label=cat) for cat, c in category_colors.items()]
ax1.legend(handles=legend_patches, loc='upper left', fontsize=9)

# Right: TRL progression
ax2 = axes[1]

for name, data in technologies.items():
    color = category_colors[data['category']]
    years = [data['start'], 2026, data['target_year']]
    trls = [1, data['current_trl'], data['target_trl']]
    ax2.plot(years, trls, 'o-', color=color, linewidth=2, markersize=8, label=name)

ax2.set_xlabel('Year', fontsize=12)
ax2.set_ylabel('Technology Readiness Level', fontsize=12)
ax2.set_title('TRL Progression', fontsize=14, fontweight='bold')
ax2.set_xlim(2015, 2042)
ax2.set_ylim(0, 10)
ax2.axhline(y=7, color='green', linestyle='--', alpha=0.5, label='Commercial ready')
ax2.axhline(y=9, color='darkgreen', linestyle='--', alpha=0.5, label='Mature')
ax2.axvline(x=2026, color='red', linestyle='--', alpha=0.5)
ax2.legend(fontsize=8, loc='lower right', ncol=2)
ax2.grid(alpha=0.3)

plt.tight_layout()
plt.show()

# Summary table
print("\nCatalyst Technology Roadmap Summary:")
print("-" * 70)
print(f"{'Technology':<25} {'Current TRL':>12} {'Target TRL':>12} {'Target Year':>12}")
print("-" * 70)
for name, data in technologies.items():
    print(f"{name:<25} {data['current_trl']:>12} {data['target_trl']:>12} {data['target_year']:>12}")

print("\n2030 Targets:")
print("• Green hydrogen: <$2/kg (current: $4-6/kg)")
print("• SAC commercial deployment in fuel cells")
print("• AI-designed catalysts in production")
print("• MOF-based CO₂ capture at Mt/year scale")

5.8 Chapter Summary

Key Takeaways

  1. Industrial catalysis underpins 90% of chemical processes with $35B+ market
  2. Environmental catalysis continues to evolve with Euro 7 and beyond
  3. Green hydrogen targets <$2/kg by 2030 through catalyst innovation
  4. CO₂ utilization offers climate mitigation with economic potential
  5. AI/ML accelerates catalyst discovery by 30-50%
  6. Artificial enzymes enable reactions not found in nature
  7. Emerging technologies: self-healing, quantum effects, de novo design

Exercises

Exercise 1: Economic Analysis

Calculate the break-even electricity price for green hydrogen at $2/kg assuming 75% system efficiency and $500/kW electrolyzer cost (10-year lifetime, 8000 hours/year operation).

Exercise 2: CO₂ Conversion

A CO₂-to-methanol plant produces 1000 tons/day with 80% carbon efficiency. Calculate annual CO₂ utilization and compare with a 500 MW coal power plant's emissions.

Exercise 3: ML Catalyst Design

Design a feature set for predicting oxygen evolution reaction (OER) activity. What descriptors would you include beyond d-band center and work function?

Disclaimer