How to compute Stokes-Einstein diffusion in Python using UliEngineering
You can easily compute the diffusion coefficient using the Stokes-Einstein equation with the UliEngineering Python library:
from UliEngineering.Physics import stokes_einstein_diffusion
from UliEngineering.EngineerIO import *
# Compute diffusion coefficient for a particle in water at 25°C
D = stokes_einstein_diffusion("1nm", "25°C", "0.89mPa·s")
print(f"Diffusion coefficient (1nm, 25°C, water): {format_value(D, 'm²/s')}")
# Compute diffusion coefficient for a larger particle
D = stokes_einstein_diffusion("5nm", "25°C", "0.89mPa·s")
print(f"Diffusion coefficient (5nm, 25°C, water): {format_value(D, 'm²/s')}")Example output
Diffusion coefficient (1nm, 25°C, water): 4.88e-10 m²/s
Diffusion coefficient (5nm, 25°C, water): 9.76e-11 m²/sThe Stokes-Einstein equation relates the diffusion coefficient of a spherical particle to its size, the temperature, and the viscosity of the fluid. This is fundamental for understanding Brownian motion, particle transport in fluids, and designing separation processes in chemistry and biophysics.
The diffusion coefficient is computed using the formula: $D = \frac{k_B T}{6 \pi \eta r}$, where $D$ is the diffusion coefficient, $k_B$ is the Boltzmann constant, $T$ is the absolute temperature in Kelvin, $\eta$ is the dynamic viscosity, and $r$ is the particle radius. The relationship shows that diffusion increases with temperature and decreases with particle size and viscosity.
The plot above shows how the diffusion coefficient varies with particle radius for particles in water at 25°C. Notice the inverse relationship: smaller particles diffuse much faster than larger ones, which is why nanoscale particles exhibit rapid Brownian motion.
Related posts
- How to compute thermistor B value in Python using UliEngineering
- How to compute thermistor temperature in Python using UliEngineering
- How to convert moles to grams in Python using UliEngineering
Plot generation script
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np
import sys
sys.path.insert(0, '/home/uli/dev/UliEngineering')
from UliEngineering.Chemistry.StokesEinstein import stokes_einstein_diffusion
# Particle radius range for plotting
r = np.linspace(1e-9, 10e-9, 100) # 1 nm to 10 nm
# Create plot
plt.figure(figsize=(10, 6))
# Fixed parameters
temperature = 298.15 # 25°C in Kelvin
viscosity = 0.89e-3 # Pa·s (water at 25°C)
# Calculate diffusion coefficient
D = stokes_einstein_diffusion(r, temperature, viscosity)
plt.plot(r * 1e9, D * 1e12, color='blue', linewidth=2)
plt.xlabel('Particle Radius (nm)', fontsize=12)
plt.ylabel('Diffusion Coefficient (×10⁻¹² m²/s)', fontsize=12)
plt.title('Stokes-Einstein Diffusion vs Particle Radius (25°C, water)', fontsize=14, fontweight='bold')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('stokes_einstein_plot.svg', format='svg', dpi=300)