🫧 Viscous Fingering

Saffman-Taylor viscous fingering

When a thin, runny fluid is forced into a thick one inside the narrow gap of a Hele-Shaw cell, the boundary between them refuses to stay smooth. Tiny protrusions race ahead, branch, and split into a tree of fingers. Drag the sliders above to move between a few broad fingers (strong surface tension) and a dense fractal thicket (high capillary number).

Frequently asked questions

What is the Saffman-Taylor instability?

It is a hydrodynamic instability that occurs when a less viscous fluid pushes against a more viscous one in a confined gap. The flat interface cannot stay flat: small bumps grow into elongated "fingers" that penetrate the thick fluid. It was first analysed by Philip Saffman and G. I. Taylor in 1958.

What is a Hele-Shaw cell?

A Hele-Shaw cell is two flat plates separated by a very thin gap. Fluid trapped between them flows in an almost two-dimensional sheet, and its averaged velocity is proportional to the pressure gradient — exactly like flow through a porous medium. This makes the cell a clean laboratory for Darcy-law physics and viscous fingering.

Why does the interface form fingers instead of advancing smoothly?

A bump that pokes forward into the viscous fluid sits where the pressure gradient is steeper, so it moves even faster, and the bump grows. This positive feedback is the instability. Surface tension fights back by penalising sharp curvature, which sets the smallest finger width; below that scale perturbations are smoothed out.

What is the capillary number?

The capillary number Ca = μU/σ compares viscous forces (viscosity μ times velocity U) to surface tension σ. High Ca means viscosity dominates, surface tension is weak, and you get many thin, branching DLA-like fingers. Low Ca means surface tension dominates and you get a few wide, smooth fingers.

How does the viscosity ratio change the pattern?

The mobility (viscosity) contrast between the two fluids controls how unstable the interface is. A large contrast — injecting water into thick oil — gives vigorous fingering. When the two viscosities are similar the displacement is nearly stable and the interface stays compact.

What does the pressure (Laplace) field do here?

In the viscous fluid the pressure obeys Laplace's equation. The simulation relaxes a pressure field on a grid each frame; the interface advances along the local pressure gradient (Darcy velocity). Curvature lowers the interface pressure via surface tension, which is the Gibbs-Thomson boundary condition that stabilises the tips.

Why does low surface tension look like DLA?

Both Saffman-Taylor fingering at low surface tension and diffusion-limited aggregation are Laplacian growth processes: the boundary advances at a rate set by the gradient of a harmonic field. Without surface tension to smooth small scales, tips screen their neighbours and the structure becomes a self-similar branching fractal.

Is this a fractal?

At high capillary number the viscous fingering pattern is statistically self-similar over a range of scales, with a fractal dimension close to 1.7 in radial geometry — the same value measured for diffusion-limited aggregation. Raising surface tension imposes a cut-off length and the pattern stops being fractal below it.

Where does viscous fingering matter in the real world?

It limits oil recovery (water injected to push oil fingers through instead of sweeping it), shapes carbon-dioxide storage in aquifers, governs filtration and chromatography, and even appears when glue or paint is pulled apart between two surfaces. Understanding and suppressing fingering improves all of these.

How can I make fewer, wider fingers in the simulation?

Lower the capillary number: reduce the injection rate or raise the surface tension slider. Both strengthen surface tension relative to viscous forces, widening the most-unstable wavelength so a few broad, rounded fingers dominate instead of a dense branching tree.

About this simulation

Written by MySimulator Team · Reviewed by MySimulator Editorial Review

Last updated: 9 July 2026

This simulation models viscous fingering in a Hele-Shaw cell (two flat plates separated by a thin gap) with a Darcy-law grid model. Each frame it relaxes a pressure field so that it satisfies Laplace's equation (∇²p = 0) in the untouched viscous fluid, then grows the injected low-viscosity fluid outward at a rate set by the local pressure gradient — the Darcy velocity u = -(k/μ)∇p. Surface tension lowers pressure at sharp, convex tips (the Gibbs-Thomson condition), damping small bumps; turn it down and growth becomes Laplacian and DLA-like, producing a branching fractal.

🔬 What it shows

A low-viscosity fluid, seeded as a small disc at the centre of the grid, is pushed outward into a surrounding high-viscosity fluid confined between two close plates (a Hele-Shaw cell). The interface refuses to stay smooth: convex tips race ahead of flatter regions and split into branching viscous fingers, whose shape depends on the balance of viscous and surface-tension forces.

🎮 How to use it

Drag Capillary number to move from a few wide fingers (low Ca) to a dense branching fractal (high Ca). Viscosity ratio sets the contrast between the two fluids; Surface tension controls how strongly curvature is penalised; Injection rate scales how many cells fill per frame. Pause/Play freezes the animation, Reset reseeds the central disc, and clicking or tapping the canvas injects extra fluid at that point. The ? button opens a help panel with the equations.

💡 Did you know?

At high capillary number the radial fingering pattern is statistically self-similar with a fractal dimension close to 1.7 — the same value long measured for diffusion-limited aggregation (DLA) clusters, because both processes are governed by growth along the gradient of a harmonic (Laplace) field.

Frequently asked questions

What is the Saffman-Taylor instability simulated here?

The Saffman-Taylor instability is what happens when a low-viscosity fluid is forced into a high-viscosity fluid inside a narrow gap: the flat interface between them cannot advance smoothly and instead breaks into branching fingers. This simulation reproduces it numerically by relaxing a pressure field each frame and growing the interface fastest where the pressure gradient is steepest — exactly the mechanism identified by Philip Saffman and Geoffrey Taylor in 1958.

What is a Hele-Shaw cell and why does it matter here?

A Hele-Shaw cell is two flat plates separated by a very thin gap; fluid squeezed between them behaves like a two-dimensional version of flow through a porous medium, obeying Darcy's law u = -(k/μ)∇p. The simulation's grid represents this cell from above: filled cells are the injected fluid, empty cells are the viscous fluid whose pressure the code solves for with a grid relaxation of Laplace's equation every frame.

What do the Capillary number, Viscosity ratio, and Surface tension sliders actually control in the code?

Capillary number scales how strongly a cell's growth chance depends on the local pressure drop, raised to the power 1/Ca — lower Ca means only the steepest gradients grow, giving wide fingers. Viscosity ratio multiplies that same growth chance directly, so a bigger contrast between the fluids speeds up fingering overall. Surface tension both lowers the pressure assigned to convex, filled tip-cells (Gibbs-Thomson) and subtracts extra growth chance from concave dimples, which smooths the interface and sets the minimum finger width.

Why does lowering surface tension make the pattern look like DLA?

With surface tension near zero the code stops damping sharp tips, so growth is governed purely by the pressure gradient of a Laplace field — the same rule that drives diffusion-limited aggregation (DLA), where particles stick where a diffusing field's gradient is steepest. Both processes are examples of Laplacian growth, so at low surface tension the simulation produces the same kind of self-similar branching fractal that DLA clusters show, with a fractal dimension near 1.7.

Why does the simulation occasionally reset itself?

Every 30 frames the code checks how many grid cells near the top and bottom edges have been filled by the injected fluid. If more than a quarter of the cells along those edges are filled, it calls the same seed() function used by the Reset button, clearing the grid and starting a fresh disc at the centre — this keeps the pattern from growing into an uninteresting solid block that has hit the boundary of the simulated cell.