Path: blob/main/latex-templates/templates/chemical-engineering/mass_transfer.tex
51 views
unlisted
\documentclass[11pt,a4paper]{article}1\usepackage[utf8]{inputenc}2\usepackage[T1]{fontenc}3\usepackage{amsmath,amssymb}4\usepackage{graphicx}5\usepackage{booktabs}6\usepackage{siunitx}7\usepackage{geometry}8\geometry{margin=1in}9\usepackage{pythontex}10\usepackage{hyperref}11\usepackage{float}1213\title{Mass Transfer\\Diffusion and Convective Transport}14\author{Chemical Engineering Research Group}15\date{\today}1617\begin{document}18\maketitle1920\begin{abstract}21Mass transfer describes the movement of chemical species due to concentration gradients (diffusion) and bulk fluid motion (convection). This computational analysis examines Fick's laws of diffusion, film theory mass transfer coefficients, and packed column design for gas-liquid absorption. Applications include chemical reactors, separation processes, and biological systems. We present transient diffusion solutions, dimensionless correlations for mass transfer coefficients, and design calculations for industrial absorption columns.22\end{abstract}2324\section{Introduction}2526Mass transfer is fundamental to chemical engineering unit operations including distillation, absorption, extraction, adsorption, and membrane separation. The driving force for mass transfer is the chemical potential gradient, which for ideal systems reduces to a concentration gradient. Transport occurs by molecular diffusion (random thermal motion) and convective diffusion (bulk fluid motion enhancing contact). This analysis presents:2728\begin{itemize}29\item Fick's first and second laws for steady and transient diffusion30\item Film theory and two-resistance model for interfacial mass transfer31\item Dimensionless correlations for liquid and gas-phase coefficients32\item Packed column design using transfer unit concepts (NTU-HTU method)33\item Transient diffusion solutions using error function and similarity variables34\end{itemize}3536These computational tools enable design of separation equipment, prediction of mass transfer rates, and optimization of process conditions for enhanced transport.3738\begin{pycode}3940import numpy as np41import matplotlib.pyplot as plt42from scipy.integrate import odeint43from scipy.optimize import fsolve44from scipy.special import erfc45import scipy.stats as stats46plt.rcParams['text.usetex'] = True47plt.rcParams['font.family'] = 'serif'4849\end{pycode}5051\section{Fick's Law of Diffusion}5253Fick's first law relates molar flux $J_A$ to the concentration gradient:54\begin{equation}55J_A = -D_{AB} \frac{dC_A}{dx}56\end{equation}57where $D_{AB}$ is the binary diffusivity (\si{m^2/s}). For steady-state diffusion through a stagnant film:5859\begin{pycode}60# Fick's law: steady-state diffusion through film61L = 0.01 # film thickness (m)62x = np.linspace(0, L, 100) # distance coordinate63D_AB = 1.5e-9 # diffusivity of solute in water (m²/s)64C_0 = 1000 # concentration at x=0 (mol/m³)65C_L = 100 # concentration at x=L (mol/m³)6667# Linear concentration profile (steady-state)68C = C_0 - (C_0 - C_L) * (x / L)6970# Molar flux (constant in steady state)71J_A = -D_AB * (C_L - C_0) / L # mol/(m²·s)7273# Store for inline reporting74avg_C = np.mean(C)75J_A_value = abs(J_A)7677fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))7879# Concentration profile80ax1.plot(x * 1e3, C, 'b-', linewidth=2.5, label='Steady-state profile')81ax1.axhline(C_0, color='r', linestyle='--', alpha=0.5, label='$C_0$')82ax1.axhline(C_L, color='g', linestyle='--', alpha=0.5, label='$C_L$')83ax1.set_xlabel('Distance (mm)', fontsize=12)84ax1.set_ylabel('Concentration (mol/m$^3$)', fontsize=12)85ax1.set_title("Fick's First Law: Steady Diffusion", fontsize=13, weight='bold')86ax1.legend()87ax1.grid(True, alpha=0.3)8889# Flux visualization (constant)90ax2.axhline(J_A_value * 1e6, color='purple', linewidth=3, label=f'$J_A$ = {J_A_value*1e6:.3f} µmol/(m²·s)')91ax2.fill_between(x * 1e3, 0, J_A_value * 1e6, alpha=0.3, color='purple')92ax2.set_xlabel('Distance (mm)', fontsize=12)93ax2.set_ylabel('Molar Flux (µmol/(m²·s))', fontsize=12)94ax2.set_title('Constant Flux in Steady State', fontsize=13, weight='bold')95ax2.legend()96ax2.grid(True, alpha=0.3)9798plt.tight_layout()99plt.savefig('mass_transfer_plot1.pdf', dpi=150, bbox_inches='tight')100plt.close()101\end{pycode}102103\begin{figure}[H]104\centering105\includegraphics[width=0.95\textwidth]{mass_transfer_plot1.pdf}106\caption{Fick's first law for steady-state diffusion through a stagnant liquid film. Left: linear concentration profile from \py{f'{C_0:.0f}'} to \py{f'{C_L:.0f}'} mol/m³ over \py{f'{L*1e3:.1f}'} mm. Right: constant molar flux of \py{f'{J_A_value*1e6:.3f}'} µmol/(m²·s). The gradient $dC/dx$ is constant, resulting in uniform flux throughout the film. This model applies to absorption of sparingly soluble gases into liquids.}107\end{figure}108109\section{Transient Diffusion: Fick's Second Law}110111Fick's second law describes unsteady diffusion:112\begin{equation}113\frac{\partial C_A}{\partial t} = D_{AB} \frac{\partial^2 C_A}{\partial x^2}114\end{equation}115116For semi-infinite medium with constant surface concentration, the solution involves the error function:117\begin{equation}118\frac{C_A - C_0}{C_s - C_0} = \text{erfc}\left(\frac{x}{2\sqrt{D_{AB}t}}\right)119\end{equation}120121\begin{pycode}122# Transient diffusion into semi-infinite medium123x_trans = np.linspace(0, 0.05, 200) # distance (m)124D_AB = 1.5e-9 # diffusivity (m²/s)125C_0 = 0 # initial concentration (mol/m³)126C_s = 1000 # surface concentration (mol/m³)127128# Time snapshots129times = [60, 300, 900, 3600, 14400] # seconds130colors = ['blue', 'green', 'orange', 'red', 'purple']131132fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))133134# Concentration profiles at different times135for t, color in zip(times, colors):136eta = x_trans / (2 * np.sqrt(D_AB * t)) # similarity variable137C = C_0 + (C_s - C_0) * erfc(eta)138ax1.plot(x_trans * 1e3, C, color=color, linewidth=2.5,139label=f't = {t/60:.1f} min' if t < 3600 else f't = {t/3600:.1f} hr')140141ax1.set_xlabel('Distance from surface (mm)', fontsize=12)142ax1.set_ylabel('Concentration (mol/m$^3$)', fontsize=12)143ax1.set_title("Transient Diffusion Profiles", fontsize=13, weight='bold')144ax1.legend()145ax1.grid(True, alpha=0.3)146ax1.set_xlim([0, 50])147148# Penetration depth (distance to 1% of surface concentration)149penetration = []150for t in times:151# erfc(eta) = 0.01 when eta ≈ 1.82152depth = 1.82 * 2 * np.sqrt(D_AB * t)153penetration.append(depth * 1e3) # convert to mm154155ax2.plot(np.array(times)/60, penetration, 'o-', color='darkblue',156linewidth=2.5, markersize=8, label='Penetration depth')157ax2.set_xlabel('Time (min)', fontsize=12)158ax2.set_ylabel('Penetration depth (mm)', fontsize=12)159ax2.set_title('Diffusion Penetration (99\% criterion)', fontsize=13, weight='bold')160ax2.grid(True, alpha=0.3)161ax2.legend()162163# Store for reporting164max_penetration = penetration[-1]165max_time = times[-1] / 3600166167plt.tight_layout()168plt.savefig('mass_transfer_plot2.pdf', dpi=150, bbox_inches='tight')169plt.close()170\end{pycode}171172\begin{figure}[H]173\centering174\includegraphics[width=0.95\textwidth]{mass_transfer_plot2.pdf}175\caption{Transient diffusion governed by Fick's second law with error function solution. Left: concentration profiles evolving from uniform initial state ($C_0$ = \py{f'{C_0:.0f}'} mol/m³) toward surface concentration ($C_s$ = \py{f'{C_s:.0f}'} mol/m³). Right: penetration depth grows as $\sqrt{t}$, reaching \py{f'{max_penetration:.2f}'} mm after \py{f'{max_time:.1f}'} hours. This analysis applies to drug diffusion in tissue, gas absorption in polymers, and contaminant transport in soil.}176\end{figure}177178\section{Film Theory and Mass Transfer Coefficients}179180The two-film theory models interfacial mass transfer as diffusion through stagnant films on each side of the interface. Mass transfer coefficients are defined as:181\begin{equation}182k_L = \frac{D_{AB}}{\delta_L} \quad \text{(liquid)}, \quad k_G = \frac{D_{AB}}{\delta_G} \quad \text{(gas)}183\end{equation}184185For gas-liquid systems with Henry's law equilibrium ($y^* = m x$), the overall coefficient is:186\begin{equation}187\frac{1}{K_{OG}} = \frac{1}{k_G} + \frac{m}{k_L}188\end{equation}189190\begin{pycode}191# Film theory: mass transfer coefficients192# Physical properties for CO2 absorption in water at 25°C193D_L = 1.92e-9 # CO2 diffusivity in water (m²/s)194D_G = 1.64e-5 # CO2 diffusivity in air (m²/s)195m = 0.83 # Henry's law constant (dimensionless)196197# Film thicknesses (varied)198delta_L_range = np.linspace(10e-6, 500e-6, 100) # 10-500 microns199delta_G = 100e-6 # fixed gas film (100 microns)200201# Mass transfer coefficients202k_L = D_L / delta_L_range # liquid-phase coefficient (m/s)203k_G = D_G / delta_G * np.ones_like(delta_L_range) # gas-phase (constant)204205# Overall coefficient (gas-phase basis)206K_OG = 1 / (1/k_G + m/k_L)207208# Resistance fractions209R_gas = (1/k_G) / (1/k_G + m/k_L) # gas-side resistance fraction210R_liq = (m/k_L) / (1/k_G + m/k_L) # liquid-side resistance fraction211212fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))213214# Mass transfer coefficients215ax1.plot(delta_L_range * 1e6, k_L * 1e5, 'b-', linewidth=2.5, label='$k_L$ (liquid)')216ax1.plot(delta_L_range * 1e6, k_G * 1e5, 'r--', linewidth=2.5, label='$k_G$ (gas)')217ax1.plot(delta_L_range * 1e6, K_OG * 1e5, 'g-', linewidth=3, label='$K_{OG}$ (overall)')218ax1.set_xlabel('Liquid film thickness (µm)', fontsize=12)219ax1.set_ylabel('Mass transfer coefficient (cm/s)', fontsize=12)220ax1.set_title('Film Theory Coefficients', fontsize=13, weight='bold')221ax1.legend()222ax1.grid(True, alpha=0.3)223ax1.set_yscale('log')224225# Resistance distribution226ax2.plot(delta_L_range * 1e6, R_gas * 100, 'r-', linewidth=2.5, label='Gas-side')227ax2.plot(delta_L_range * 1e6, R_liq * 100, 'b-', linewidth=2.5, label='Liquid-side')228ax2.axhline(50, color='gray', linestyle='--', alpha=0.5)229ax2.set_xlabel('Liquid film thickness (µm)', fontsize=12)230ax2.set_ylabel('Resistance fraction (\%)', fontsize=12)231ax2.set_title('Controlling Resistance Analysis', fontsize=13, weight='bold')232ax2.legend()233ax2.grid(True, alpha=0.3)234ax2.set_ylim([0, 100])235236# Store for reporting237k_L_ref = D_L / (100e-6) # at 100 micron film238K_OG_ref = 1 / (1/k_G[0] + m/k_L_ref)239240plt.tight_layout()241plt.savefig('mass_transfer_plot3.pdf', dpi=150, bbox_inches='tight')242plt.close()243\end{pycode}244245\begin{figure}[H]246\centering247\includegraphics[width=0.95\textwidth]{mass_transfer_plot3.pdf}248\caption{Film theory analysis for CO$_2$ absorption in water at 25°C. Left: mass transfer coefficients versus liquid film thickness. Gas-phase coefficient $k_G$ = \py{f'{k_G[0]*1e5:.3f}'} cm/s is constant, while liquid-phase $k_L$ varies inversely with $\delta_L$. Overall coefficient $K_{OG}$ = \py{f'{K_OG_ref*1e5:.3f}'} cm/s at 100 µm film. Right: resistance distribution shows transition from liquid-controlled (thick films) to gas-controlled (thin films). For sparingly soluble gases like CO$_2$, liquid-side resistance dominates.}249\end{figure}250251\section{Packed Column Design: NTU-HTU Method}252253Absorption column design uses the transfer unit concept. Number of transfer units (NTU):254\begin{equation}255N_{OG} = \int_{y_2}^{y_1} \frac{dy}{y - y^*} = \frac{1}{1 - m/A} \ln\left[\frac{y_1 - mx_2}{y_2 - mx_2}\left(1 - \frac{m}{A}\right) + \frac{m}{A}\right]256\end{equation}257258Height of transfer unit (HTU):259\begin{equation}260H_{OG} = \frac{G}{K_{OG} a P}261\end{equation}262263Column height: $Z = N_{OG} \times H_{OG}$264265\begin{pycode}266# Packed column design for CO2 absorption267# Design conditions268y1 = 0.10 # inlet gas mole fraction CO2269y2 = 0.01 # outlet gas mole fraction CO2270x2 = 0.0 # inlet liquid mole fraction (pure water)271m = 0.83 # Henry's law slope272A = 1.5 # absorption factor L/(mG)273274# Number of transfer units (Kremser equation)275if abs(A - m) > 0.01:276N_OG = (1/(1 - m/A)) * np.log((y1 - m*x2)/(y2 - m*x2) * (1 - m/A) + m/A)277else:278N_OG = (y1 - y2) / (y2 - m*x2) # simplified for A ≈ m279280# Operating conditions281G = 1.5 # gas velocity (kmol/(m²·s))282P = 101325 # total pressure (Pa)283K_OG_design = 0.05 # overall coefficient (kmol/(m²·s))284a = 200 # specific area (m²/m³)285286# Height of transfer unit287H_OG = G / (K_OG_design * a * P) * 1e3 # convert to m288289# Column height290Z = N_OG * H_OG291292# Operating line and equilibrium293x_op = np.linspace(x2, x2 + (y1 - y2)/(A*m), 100)294y_op = y2 + A * m * (x_op - x2)295y_eq = m * x_op296297fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))298299# McCabe-Thiele diagram300ax1.plot(x_op, y_op, 'b-', linewidth=2.5, label=f'Operating line (A={A:.1f})')301ax1.plot(x_op, y_eq, 'r--', linewidth=2.5, label=f'Equilibrium ($y^* = {m:.2f}x$)')302ax1.plot([x2, x2], [y2, y1], 'go', markersize=10, label='Terminal points')303ax1.fill_between(x_op, y_op, y_eq, where=(y_op >= y_eq), alpha=0.2, color='green', label='Driving force')304ax1.set_xlabel('Liquid mole fraction (x)', fontsize=12)305ax1.set_ylabel('Gas mole fraction (y)', fontsize=12)306ax1.set_title('McCabe-Thiele Diagram', fontsize=13, weight='bold')307ax1.legend()308ax1.grid(True, alpha=0.3)309ax1.set_xlim([0, max(x_op)*1.1])310ax1.set_ylim([0, y1*1.1])311312# Column profile (gas composition vs height)313z_profile = np.linspace(0, Z, 50)314# Approximate exponential profile315y_profile = y2 + (y1 - y2) * np.exp(-z_profile / (Z/N_OG))316317ax2.plot(y_profile * 100, z_profile, 'b-', linewidth=2.5)318ax2.axhline(Z, color='r', linestyle='--', linewidth=2, label=f'Total height = {Z:.2f} m')319ax2.axhline(H_OG, color='g', linestyle='--', linewidth=2, label=f'$H_{{OG}}$ = {H_OG:.2f} m')320ax2.set_xlabel('CO$_2$ concentration (\%)', fontsize=12)321ax2.set_ylabel('Height (m)', fontsize=12)322ax2.set_title('Axial Concentration Profile', fontsize=13, weight='bold')323ax2.legend()324ax2.grid(True, alpha=0.3)325ax2.invert_yaxis()326327plt.tight_layout()328plt.savefig('mass_transfer_plot4.pdf', dpi=150, bbox_inches='tight')329plt.close()330\end{pycode}331332\begin{figure}[H]333\centering334\includegraphics[width=0.95\textwidth]{mass_transfer_plot4.pdf}335\caption{Packed column design for CO$_2$ absorption using NTU-HTU method. Left: McCabe-Thiele diagram showing operating line (absorption factor $A$ = \py{f'{A:.1f}'}) and equilibrium curve. Green shaded area represents driving force $(y - y^*)$. Right: axial concentration profile showing CO$_2$ removal from \py{f'{y1*100:.1f}'}\% to \py{f'{y2*100:.1f}'}\%. Column requires $N_{OG}$ = \py{f'{N_OG:.2f}'} transfer units with $H_{OG}$ = \py{f'{H_OG:.2f}'} m, yielding total height $Z$ = \py{f'{Z:.2f}'} m.}336\end{figure}337338\section{Dimensionless Correlations for Mass Transfer}339340Empirical correlations predict mass transfer coefficients from dimensionless groups. Sherwood number:341\begin{equation}342Sh = \frac{k_L d}{D_{AB}} = a \cdot Re^b \cdot Sc^c343\end{equation}344where $Re = \rho u d / \mu$ (Reynolds), $Sc = \mu / (\rho D_{AB})$ (Schmidt).345346For flow past spheres (Frossling correlation):347\begin{equation}348Sh = 2 + 0.6 Re^{1/2} Sc^{1/3}349\end{equation}350351\begin{pycode}352# Dimensionless correlations: flow past spheres353# Physical properties (water at 25°C)354rho = 997 # density (kg/m³)355mu = 8.9e-4 # viscosity (Pa·s)356D_AB_corr = 1.5e-9 # diffusivity (m²/s)357358Sc = mu / (rho * D_AB_corr) # Schmidt number359360# Particle diameter and velocity ranges361d_particle = 1e-3 # particle diameter (1 mm)362u_range = np.logspace(-3, 0, 50) # velocity 0.001 to 1 m/s363364# Reynolds and Sherwood numbers365Re = rho * u_range * d_particle / mu366Sh = 2 + 0.6 * Re**0.5 * Sc**(1/3) # Frossling correlation367368# Mass transfer coefficient369k_L_corr = Sh * D_AB_corr / d_particle370371# Compare to stagnant case372k_L_stagnant = 2 * D_AB_corr / d_particle # Sh = 2373374fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))375376# Sherwood vs Reynolds377ax1.loglog(Re, Sh, 'b-', linewidth=2.5, label='Frossling correlation')378ax1.axhline(2, color='r', linestyle='--', linewidth=2, label='Stagnant limit (Sh=2)')379ax1.set_xlabel('Reynolds number (Re)', fontsize=12)380ax1.set_ylabel('Sherwood number (Sh)', fontsize=12)381ax1.set_title('Dimensionless Mass Transfer Correlation', fontsize=13, weight='bold')382ax1.legend()383ax1.grid(True, alpha=0.3, which='both')384ax1.text(0.05, 0.95, f'Sc = {Sc:.0f}', transform=ax1.transAxes,385fontsize=11, verticalalignment='top',386bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))387388# Enhancement factor vs velocity389enhancement = k_L_corr / k_L_stagnant390ax2.semilogx(u_range, enhancement, 'g-', linewidth=2.5)391ax2.set_xlabel('Velocity (m/s)', fontsize=12)392ax2.set_ylabel('Enhancement factor ($k_L / k_{L,stagnant}$)', fontsize=12)393ax2.set_title('Convection Enhancement over Diffusion', fontsize=13, weight='bold')394ax2.grid(True, alpha=0.3)395ax2.axhline(1, color='r', linestyle='--', alpha=0.5)396397# Store for reporting398Re_ref = rho * 0.1 * d_particle / mu399Sh_ref = 2 + 0.6 * Re_ref**0.5 * Sc**(1/3)400enhancement_ref = Sh_ref / 2401402plt.tight_layout()403plt.savefig('mass_transfer_plot5.pdf', dpi=150, bbox_inches='tight')404plt.close()405\end{pycode}406407\begin{figure}[H]408\centering409\includegraphics[width=0.95\textwidth]{mass_transfer_plot5.pdf}410\caption{Frossling correlation for mass transfer to spherical particles in water (Schmidt number $Sc$ = \py{f'{Sc:.0f}'}). Left: Sherwood number versus Reynolds number showing deviation from stagnant limit ($Sh = 2$) as convection intensifies. Right: enhancement factor quantifies improvement over pure diffusion. At $u$ = 0.1 m/s ($Re$ = \py{f'{Re_ref:.1f}'}), convection enhances mass transfer by \py{f'{enhancement_ref:.1f}'}× relative to stagnant conditions. This analysis applies to dissolution, crystallization, and heterogeneous catalysis.}411\end{figure}412413\section{Batch Absorption: Time-Dependent Uptake}414415For gas absorption into a well-mixed liquid batch with first-order reaction:416\begin{equation}417\frac{dC_L}{dt} = k_L a (C^* - C_L) - k_1 C_L418\end{equation}419where $k_L a$ is volumetric mass transfer coefficient and $k_1$ is reaction rate constant.420421\begin{pycode}422# Batch absorption with chemical reaction423def batch_absorption(C, t, k_L_a, C_star, k_rxn):424"""ODE for batch gas absorption with first-order reaction"""425dCdt = k_L_a * (C_star - C) - k_rxn * C426return dCdt427428# Parameters429k_L_a = 0.01 # volumetric coefficient (1/s)430C_star = 50 # saturation concentration (mol/m³)431k_rxn_values = [0, 0.005, 0.01, 0.02] # reaction rates (1/s)432C_0 = 0 # initial concentration433434# Time span435t_batch = np.linspace(0, 600, 500) # 0-600 seconds436437fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))438439colors_rxn = ['blue', 'green', 'orange', 'red']440for k_rxn, color in zip(k_rxn_values, colors_rxn):441C_batch = odeint(batch_absorption, C_0, t_batch, args=(k_L_a, C_star, k_rxn))442443label = 'Physical absorption' if k_rxn == 0 else f'$k_1$ = {k_rxn} s$^{{-1}}$'444ax1.plot(t_batch/60, C_batch, color=color, linewidth=2.5, label=label)445446ax1.axhline(C_star, color='gray', linestyle='--', linewidth=2, alpha=0.5, label='$C^*$ (saturation)')447ax1.set_xlabel('Time (min)', fontsize=12)448ax1.set_ylabel('Liquid concentration (mol/m$^3$)', fontsize=12)449ax1.set_title('Batch Absorption with Reaction', fontsize=13, weight='bold')450ax1.legend()451ax1.grid(True, alpha=0.3)452453# Enhancement factor vs reaction rate454k_rxn_range = np.logspace(-3, -1, 50)455# Hatta number: sqrt(k_rxn * D_AB) / k_L456D_AB_batch = 1.5e-9457delta_L_batch = 100e-6458k_L_batch = D_AB_batch / delta_L_batch459Ha = np.sqrt(k_rxn_range * D_AB_batch) / k_L_batch460461# Enhancement factor (simplified for fast reaction)462E = np.where(Ha < 0.3, 1 + Ha**2/2, Ha) # asymptotic limits463464ax2.loglog(Ha, E, 'b-', linewidth=2.5)465ax2.axhline(1, color='r', linestyle='--', linewidth=2, label='No enhancement')466ax2.set_xlabel('Hatta number (Ha)', fontsize=12)467ax2.set_ylabel('Enhancement factor (E)', fontsize=12)468ax2.set_title('Chemical Reaction Enhancement', fontsize=13, weight='bold')469ax2.legend()470ax2.grid(True, alpha=0.3, which='both')471ax2.text(0.05, 0.95, 'Slow rxn: $E \\approx 1$\nFast rxn: $E \\approx Ha$',472transform=ax2.transAxes, fontsize=10, verticalalignment='top',473bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))474475# Store for reporting476steady_state_physical = C_star477steady_state_reactive = C_star * k_L_a / (k_L_a + k_rxn_values[-1])478479plt.tight_layout()480plt.savefig('mass_transfer_plot6.pdf', dpi=150, bbox_inches='tight')481plt.close()482\end{pycode}483484\begin{figure}[H]485\centering486\includegraphics[width=0.95\textwidth]{mass_transfer_plot6.pdf}487\caption{Batch gas absorption with simultaneous chemical reaction. Left: liquid concentration evolution for different reaction rates. Physical absorption approaches saturation ($C^*$ = \py{f'{C_star:.0f}'} mol/m³), while reactive absorption reaches lower steady state due to consumption. At $k_1$ = \py{f'{k_rxn_values[-1]}'} s$^{-1}$, equilibrium drops to \py{f'{steady_state_reactive:.1f}'} mol/m³. Right: Hatta number analysis shows transition from diffusion-limited (Ha $<$ 0.3) to reaction-limited (Ha $>$ 3) regimes. Chemical reaction enhances effective mass transfer.}488\end{figure}489490\section{Results Summary}491492\begin{pycode}493results = [494['Fick diffusivity $D_{AB}$', f'{D_AB*1e9:.2f}', 'nm$^2$/s'],495['Film thickness $\\delta_L$', f'{L*1e3:.1f}', 'mm'],496['Molar flux $J_A$', f'{J_A_value*1e6:.3f}', r'$\mu$mol/(m$^2$$\cdot$s)'],497['Liquid coefficient $k_L$', f'{k_L_ref*1e5:.3f}', 'cm/s'],498['Gas coefficient $k_G$', f'{k_G[0]*1e5:.3f}', 'cm/s'],499['Overall coefficient $K_{OG}$', f'{K_OG_ref*1e5:.3f}', 'cm/s'],500['Schmidt number $Sc$', f'{Sc:.0f}', '--'],501['Transfer units $N_{OG}$', f'{N_OG:.2f}', '--'],502['HTU $H_{OG}$', f'{H_OG:.2f}', 'm'],503['Column height $Z$', f'{Z:.2f}', 'm'],504]505506print(r'\begin{table}[H]')507print(r'\centering')508print(r'\caption{Summary of Mass Transfer Calculations}')509print(r'\begin{tabular}{@{}lcc@{}}')510print(r'\toprule')511print(r'Parameter & Value & Unit \\')512print(r'\midrule')513for row in results:514print(f"{row[0]} & {row[1]} & {row[2]} \\\\")515print(r'\bottomrule')516print(r'\end{tabular}')517print(r'\end{table}')518\end{pycode}519520\section{Conclusions}521522This computational analysis demonstrates fundamental mass transfer phenomena relevant to chemical process design:523524\begin{itemize}525\item \textbf{Fick's laws:} Steady-state diffusion through a \py{f'{L*1e3:.1f}'} mm film yields constant flux of \py{f'{J_A_value*1e6:.3f}'} µmol/(m²·s). Transient diffusion exhibits characteristic $\sqrt{Dt}$ penetration depth, critical for design of batch processes and unsteady operations.526527\item \textbf{Film theory:} Two-resistance model identifies controlling regime. For CO$_2$-water system, liquid-side resistance dominates ($k_L$ = \py{f'{k_L_ref*1e5:.3f}'} cm/s $<$ $k_G$ = \py{f'{k_G[0]*1e5:.3f}'} cm/s), motivating liquid-phase intensification strategies.528529\item \textbf{Dimensionless correlations:} Frossling correlation predicts enhancement from convection. At Reynolds number \py{f'{Re_ref:.1f}'}, Sherwood number reaches \py{f'{Sh_ref:.2f}'}, representing \py{f'{enhancement_ref:.1f}'}× improvement over stagnant diffusion.530531\item \textbf{Packed column design:} NTU-HTU method yields \py{f'{Z:.2f}'} m column height for 90\% CO$_2$ removal (\py{f'{N_OG:.2f}'} transfer units, $H_{OG}$ = \py{f'{H_OG:.2f}'} m). McCabe-Thiele analysis reveals driving force distribution along column height.532533\item \textbf{Reactive absorption:} Chemical reaction enhances mass transfer via Hatta number mechanism. Fast reactions shift regime from diffusion-limited to reaction-limited, enabling process intensification through chemistry rather than hydrodynamics.534\end{itemize}535536These computational methods enable rapid screening of operating conditions, equipment sizing, and process optimization without extensive pilot-plant trials. The Python-based framework integrates transport theory, thermodynamic equilibrium, and chemical kinetics for comprehensive mass transfer analysis.537538\begin{thebibliography}{99}539540\bibitem{bird2007}541R.B. Bird, W.E. Stewart, E.N. Lightfoot, \textit{Transport Phenomena}, 2nd ed., Wiley (2007).542543\bibitem{treybal1980}544R.E. Treybal, \textit{Mass Transfer Operations}, 3rd ed., McGraw-Hill (1980).545546\bibitem{cussler2009}547E.L. Cussler, \textit{Diffusion: Mass Transfer in Fluid Systems}, 3rd ed., Cambridge University Press (2009).548549\bibitem{sherwood1975}550T.K. Sherwood, R.L. Pigford, C.R. Wilke, \textit{Mass Transfer}, McGraw-Hill (1975).551552\bibitem{geankoplis2003}553C.J. Geankoplis, \textit{Transport Processes and Separation Process Principles}, 4th ed., Prentice Hall (2003).554555\bibitem{seader2016}556J.D. Seader, E.J. Henley, D.K. Roper, \textit{Separation Process Principles}, 4th ed., Wiley (2016).557558\bibitem{incropera2007}559F.P. Incropera, D.P. DeWitt, T.L. Bergman, A.S. Lavine, \textit{Fundamentals of Heat and Mass Transfer}, 6th ed., Wiley (2007).560561\bibitem{deen2012}562W.M. Deen, \textit{Analysis of Transport Phenomena}, 2nd ed., Oxford University Press (2012).563564\bibitem{welty2008}565J.R. Welty, C.E. Wicks, R.E. Wilson, G.L. Rorrer, \textit{Fundamentals of Momentum, Heat, and Mass Transfer}, 5th ed., Wiley (2008).566567\bibitem{benitez2009}568J. Benitez, \textit{Principles and Modern Applications of Mass Transfer Operations}, 2nd ed., Wiley (2009).569570\bibitem{higbie1935}571R. Higbie, ``The rate of absorption of a pure gas into a still liquid during short periods of exposure,'' Trans. AIChE \textbf{31}, 365-389 (1935).572573\bibitem{danckwerts1951}574P.V. Danckwerts, ``Significance of liquid-film coefficients in gas absorption,'' Ind. Eng. Chem. \textbf{43}, 1460-1467 (1951).575576\bibitem{astarita1967}577G. Astarita, \textit{Mass Transfer with Chemical Reaction}, Elsevier (1967).578579\bibitem{taylor1993}580R. Taylor, R. Krishna, \textit{Multicomponent Mass Transfer}, Wiley (1993).581582\bibitem{poling2001}583B.E. Poling, J.M. Prausnitz, J.P. O'Connell, \textit{The Properties of Gases and Liquids}, 5th ed., McGraw-Hill (2001).584585\bibitem{wilke1955}586C.R. Wilke, C.Y. Lee, ``Estimation of diffusion coefficients for gases and vapors,'' Ind. Eng. Chem. \textbf{47}, 1253-1257 (1955).587588\bibitem{onda1968}589K. Onda, H. Takeuchi, Y. Okumoto, ``Mass transfer coefficients between gas and liquid phases in packed columns,'' J. Chem. Eng. Japan \textbf{1}, 56-62 (1968).590591\bibitem{frossling1938}592N. Frossling, ``Uber die Verdunstung fallender Tropfen,'' Gerlands Beitr. Geophys. \textbf{52}, 170-216 (1938).593594\bibitem{vankrevelen1948}595D.W. van Krevelen, P.J. Hoftijzer, ``Kinetics of gas-liquid reactions,'' Rec. Trav. Chim. Pays-Bas \textbf{67}, 563-586 (1948).596597\bibitem{westerterp1984}598K.R. Westerterp, W.P.M. van Swaaij, A.A.C.M. Beenackers, \textit{Chemical Reactor Design and Operation}, Wiley (1984).599600\end{thebibliography}601602\end{document}603604605