Skip to content
cfd-lab:~/en/posts/2026-06-16-surface-tensi…● online

Translated from the author's Korean original. Read the original (한국어)

NOTE #074DAY TUE 유체역학DATE 2026.06.16UPDATED 2026.10.19READ 6 min read#Multiphase#Surface-Tension#Contact-Angle#Capillarity#Flow-Phenomena

Why Droplets Are Round and Water Climbs the Glass — Surface Tension and Contact Angle

Tilting the wall normal to a set contact angle still lets a static droplet drift when the curvature stays noisy.

In 1881, Agnes Pockels measured the surface tension of water at her kitchen sink, using a button, a thread, and a tin basin. Barred from university, she watched oil films drift across the water while doing dishes and built her own apparatus to relate area to tension. This post follows the physics of that kitchen experiment — surface tension and contact angle — all the way to how CFD reproduces this force on a grid (the CSF model). At the end, we check capillary rise with real numbers.

Moving the contact-angle slider between 30 and 120 degrees lays the same volume flat or stands it up like a ball.

Drop θ\theta below 30 degrees and the droplet flattens; push it past 120 degrees and it rises almost like a ball. The yellow arc at the contact line marks the Young balance.

Surface Tension Is Energy a Molecule Loses at the Edge#

A molecule deep inside a liquid is surrounded by neighbors on all sides. A molecule at the surface has empty space on one side. It is short on bonding energy by exactly that much.

Nature minimizes this penalty by minimizing surface area. That is why a droplet in zero gravity becomes a sphere — the shape with the least surface area for a given volume.

Surface tension σ\sigma (force per unit length, N/m) is the energy cost of stretching the surface. The water–air interface is about σ≈0.072\sigma \approx 0.072 N/m at room temperature.

The world ruled by surface tension is sorted by dimensionless numbers. A small Weber number (inertia/surface tension) We=ρU2L/σWe = \rho U^2 L / \sigma keeps a drop from breaking up. A small Bond number (gravity/surface tension) Bo=ρgL2/σBo = \rho g L^2 / \sigma keeps it round instead of flattened by gravity. In a capillary, both numbers go small.

Young–Laplace — A Curved Surface Presses Inward#

When a surface curves, surface tension produces a net inward force. The result is a pressure jump across the interface.

Δp=σ(1R1+1R2)\Delta p = \sigma\left(\frac{1}{R_1} + \frac{1}{R_2}\right)

Here Δp\Delta p is the pressure excess inside, and R1,R2R_1, R_2 are the two principal radii of curvature. For a spherical drop R1=R2=RR_1 = R_2 = R, so Δp=2σ/R\Delta p = 2\sigma/R.

The key point: the smaller the radius, the higher the inner pressure. The inside of a 5 µm fog droplet is about 29 kPa above ambient. That is why small bubbles get swallowed by large ones.

Contact Angle — A Tug-of-War Between Three Tensions#

When a drop rests on a solid, three interfaces meet along a line: solid–gas (σsg\sigma_{sg}), solid–liquid (σsl\sigma_{sl}), and liquid–gas (σlg\sigma_{lg}). The angle at which they reach horizontal force balance is the contact angle θ\theta.

σsg=σsl+σlgcos⁡θ\sigma_{sg} = \sigma_{sl} + \sigma_{lg}\cos\theta

This is Young's equation. Rearranged, cos⁡θ=(σsg−σsl)/σlg\cos\theta = (\sigma_{sg} - \sigma_{sl})/\sigma_{lg}.

If θ<90∘\theta < 90^\circ, the liquid likes the solid and spreads (wetting, hydrophilic). If θ>90∘\theta > 90^\circ, the drop beads up (non-wetting, hydrophobic). A water drop on a lotus leaf shows θ\theta above 150 degrees.

CSF — Turning a Surface Force Into a Body Force on the Grid#

Here is the CFD problem. Surface tension acts on a surface of zero thickness. But a grid cell has volume. How do we put a force living on a surface into a cell?

Brackbill's CSF (Continuum Surface Force) model converts the surface force into a body force smeared across the interface region.

fsv=σ κ n^ δs\mathbf{f}_{sv} = \sigma\,\kappa\,\hat{\mathbf{n}}\,\delta_s

κ\kappa is the interface curvature, n^\hat{\mathbf{n}} the interface normal, and δs\delta_s a surface delta function that is near 1 only at the interface. The normal and curvature come from a phase indicator cc (for example the VOF volume fraction).

n^=∇c∣∇c∣,κ=−∇⋅n^\hat{\mathbf{n}} = \frac{\nabla c}{|\nabla c|},\qquad \kappa = -\nabla\cdot\hat{\mathbf{n}}

Curvature accuracy decides this model's fate. Using ∇c\nabla c raw injects noise into the curvature and produces parasitic currents. So we smooth the normal — by distance-weighted interpolation or a least-squares plane fit — before computing curvature.

Wall Adhesion Forces the Contact Angle#

An interface touching a wall gets one extra condition: the contact angle at the wall must equal the θ\theta we prescribe.

CSF enforces this by tilting the normal in near-wall cells. Using the wall normal n^w\hat{\mathbf{n}}_w and tangent t^w\hat{\mathbf{t}}_w, we rewrite the interface normal.

n^=n^wcos⁡θ+t^wsin⁡θ\hat{\mathbf{n}} = \hat{\mathbf{n}}_w\cos\theta + \hat{\mathbf{t}}_w\sin\theta

Tilting the normal changes the curvature, and that curvature then generates surface tension that drags the drop toward the prescribed angle. This is the wall adhesion model. Handling the motion of the three-phase contact line needs additional modeling.

Python — Checking Jurin's Law With Numbers#

Dip a thin tube in water and the water climbs on its own. That is capillary rise. The equilibrium height comes from balancing Young–Laplace against hydrostatic pressure.

h=2σcos⁡θρgrh = \frac{2\sigma\cos\theta}{\rho g r}

rr is the tube radius and θ\theta the contact angle. The thinner the tube (smaller rr), the higher the climb.

import numpy as np
 
SIGMA = 0.072    # N/m, water-air (room temperature)
RHO   = 1000.0   # kg/m^3
G     = 9.81     # m/s^2
 
def young_laplace_dp(sigma, R1, R2):
    """Pressure jump across a curved interface dp = sigma*(1/R1 + 1/R2)."""
    return sigma * (1.0 / R1 + 1.0 / R2)
 
def jurin_capillary_rise(r, theta_deg, sigma=SIGMA, rho=RHO, g=G):
    """Equilibrium rise height (m) in a capillary of radius r."""
    theta = np.radians(theta_deg)
    return 2.0 * sigma * np.cos(theta) / (rho * g * r)
 
# Spherical drop (R1=R2=R): smaller radius means higher inner pressure
for R_um in (5, 50, 500):
    R = R_um * 1e-6
    print(f"R={R_um:4d} um -> dp = {young_laplace_dp(SIGMA, R, R):8.1f} Pa")
 
# Jurin's law: a thinner tube lifts the water higher
print()
for r_mm in (0.1, 0.5, 1.0):
    h = jurin_capillary_rise(r_mm * 1e-3, theta_deg=30)
    print(f"r={r_mm:.1f} mm -> h = {h*1000:6.1f} mm")

Output:

R=   5 um -> dp =  28800.0 Pa
R=  50 um -> dp =   2880.0 Pa
R= 500 um -> dp =    288.0 Pa
 
r=0.1 mm -> h =  127.1 mm
r=0.5 mm -> h =   25.4 mm
r=1.0 mm -> h =   12.7 mm

Changing tube radius and contact angle moves the column through the printed heights 127.1 mm, 25.4 mm, and 12.7 mm.

Push the contact angle past 90 degrees and cos⁡θ\cos\theta turns negative, so the level drops instead. That is exactly how mercury is pushed down in a glass tube (a convex meniscus).

Shrink the radius tenfold and both the pressure jump and the rise height grow tenfold. It is one piece of how plants pull water tens of meters up through capillaries and transpiration.

The three lines are Δp=2σ/R\Delta p = 2\sigma/R at 0.072 N/m. 5 µm is 28800 Pa, 50 µm is 2880 Pa, 500 µm is 288 Pa. 28800/288 is 100, same as 500 µm over 5 µm. The 29 kPa line is 28800 Pa rounded.

Jurin, same constants. At 30 degrees the heights are 127.1 mm, 25.4 mm, and 12.7 mm. 127.1/5 is 25.42, rounding to 25.4. 127.1/10 is 12.71, rounding to 12.7. At 150 degrees the cosine flips, so 0.1 mm reads 127.1 mm downward. Bo=ρgL2/σBo = \rho g L^2 / \sigma is about 0.00136 at 0.1 mm and 0.136 at 1 mm. Both are below 1.

Skip CSF when the only question is the equilibrium height#

Tube radius and contact angle are enough for Jurin. 0.1 mm, 30 degrees, 127.1 mm. Those numbers do not need a curvature on the grid. CSF only adds noise when the question is the equilibrium height.

The calculation changes once a droplet spreads on a wall and merges. Wall adhesion only tilts the normal to the prescribed angle, and a rough curvature still lets a static droplet drift. The next limit is the surface-tension time step, not the contact-angle slider. That is the implicit window on the capillary time step.

Share if you found it helpful.