The Mullins–Herring (MH) Model is a theoretical framework used in surface science and materials physics to describe surface diffusion and the smoothing of interfaces. Developed to analyze the kinetics of surface morphological changes, the model applies to scenarios such as crystal growth, thin film deposition, and annealing processes. It operates by considering how atoms migrate across a surface to reduce surface free energy, predicting the evolution of features like ripples and mounds over time. The MH Model emphasizes the importance of curvature-driven diffusion, explaining how atoms move from high-curvature regions to lower-curvature areas, leading to the gradual flattening of surfaces.
The Mullins–Herring (MH) model is a higher-order SPDE often used to describe surface diffusion during growth processes. It models the surface evolution with fourth-order spatial derivatives, which is a step up in complexity from the KPZ equation. The MH equation can be expressed as:
$$ \frac{\partial h(x, t)}{\partial t} = -\nu \nabla^4 h(x, t) + \eta(x, t), $$
where:
Here's a basic MATLAB script to simulate the Mullins–Herring model:
% Parameters
N = 100; % Number of spatial points
L = 10; % Length of the domain
dx = L / N; % Spatial step size
dt = 0.01; % Time step size
nu = 1.0; % Diffusion coefficient
total_time = 1.0; % Total simulation time
noise_strength = 0.1; % Strength of the noise
% Grid setup
x = linspace(0, L, N);
h = zeros(1, N); % Initial height function
% Noise generator
rng(0); % Set random seed for reproducibility
% Pre-compute indices for finite differences
indices = 1:N;
ip1 = mod(indices, N) + 1; % i+1 with periodic boundary
im1 = mod(indices - 2, N) + 1; % i-1 with periodic boundary
ip2 = mod(indices + 1, N) + 1; % i+2 with periodic boundary
im2 = mod(indices - 3, N) + 1; % i-2 with periodic boundary
% Time evolution loop
num_steps = total_time / dt;
for t = 1:num_steps
% Compute the biharmonic term using fourth-order finite differences
laplacian2 = (-h(im2) + 4*h(im1) - 6*h(indices) + 4*h(ip1) - h(ip2)) / (dx^4);
% Add noise term
noise = noise_strength * sqrt(dt) * randn(1, N);
% Update rule (Euler-Maruyama step)
h = h + dt * (-nu * laplacian2) + noise;
% Optional: Plot every few steps to visualize
if mod(t, 100) == 0
plot(x, h, 'b');
xlabel('x');
ylabel('Height h(x)');
title(['Time step: ', num2str(t * dt)]);
drawnow;
end
end
mod
ensures that the grid wraps around at the boundaries.