Fluid Dynamics

Potential Flow

Inviscid, irrotational flow where the velocity is the gradient of a scalar — u = ∇φ, ∇²φ = 0

Potential flow is an idealized model of fluid motion that is inviscid (zero viscosity) and irrotational (∇ × u = 0), so the velocity field can be written as the gradient of a scalar velocity potential, u = ∇φ. For an incompressible fluid, continuity ∇ · u = 0 then forces φ to satisfy Laplace's equation, ∇²φ = 0. Because Laplace's equation is linear, elementary flows — uniform streams, sources, sinks, vortices and doublets — can be added together freely, and in 2D they combine into a single analytic complex potential w(z) = φ + iψ. Its most famous prediction, d'Alembert's paradox (1752), is that a body in steady potential flow feels exactly zero drag.

  • Velocity from potentialu = ∇φ
  • Governing equation∇²φ = 0 (Laplace)
  • Irrotationalω = ∇ × u = 0
  • Complex potential (2D)w(z) = φ + iψ, dw/dz = u − iv
  • Cylinder surface speedu_θ = −2U sin θ
  • d'Alembert's paradoxDrag = 0 (lift = ρUΓ survives)

Interactive visualization

Press play, or step through manually. The visualization is yours to drive — try it before reading on.

Open visualization fullscreen ↗

Watch the 60-second explainer

A condensed visual walkthrough — narrated, captioned, under a minute.

Definition

Potential flow rests on two idealizing assumptions applied to the fluid velocity field u(x, t):

1. Irrotational — the vorticity vanishes everywhere:

ω = ∇ × u = 0

A theorem of vector calculus says that any irrotational field on a simply connected domain is the gradient of a scalar. That scalar is the velocity potential φ (units m²/s):

u = ∇φ     i.e.   u = ∂φ/∂x,  v = ∂φ/∂y,  w = ∂φ/∂z

2. Incompressible — constant density ρ, so continuity reduces to a divergence-free velocity:

∇ · u = 0

Substituting u = ∇φ into ∇ · u = 0 gives the master equation of potential flow, Laplace's equation:

∇²φ = ∂²φ/∂x² + ∂²φ/∂y² + ∂²φ/∂z² = 0

Here φ is the velocity potential (m²/s), u = (u, v, w) is the velocity (m/s), and ρ is density (kg/m³). Solutions of Laplace's equation are called harmonic functions; the entire theory of potential flow is the theory of harmonic functions applied to fluids. Because ∇²φ = 0 is linear, any linear combination of solutions is again a solution — this is the superposition principle that makes the subject so tractable.

The stream function and the complex potential

In two dimensions incompressibility guarantees a second scalar, the stream function ψ (units m²/s), defined so that continuity is satisfied automatically:

u = ∂ψ/∂y,   v = −∂ψ/∂x

Lines of constant ψ are streamlines — curves everywhere tangent to the velocity — and the difference Δψ between two streamlines equals the volume flow rate per unit depth passing between them. Lines of constant φ are equipotentials. Because the flow is both irrotational and incompressible, φ and ψ each satisfy Laplace's equation and obey the Cauchy–Riemann equations:

∂φ/∂x = ∂ψ/∂y,   ∂φ/∂y = −∂ψ/∂x

These are exactly the conditions for φ + iψ to be a differentiable function of the complex variable z = x + iy. So in 2D we package everything into a single analytic complex potential:

w(z) = φ(x, y) + i ψ(x, y),      z = x + iy

Its derivative delivers the velocity in one stroke — the complex velocity:

dw/dz = u − i v

where u, v are the x- and y-components of velocity (m/s). Every tool of complex analysis — analytic continuation, contour integration, and above all conformal mapping — becomes a fluid-dynamics tool. Because φ and ψ are harmonic conjugates, equipotentials and streamlines intersect everywhere at right angles.

The building blocks: sources, sinks, vortices, doublets

Since Laplace's equation is linear, complicated flows are assembled by adding elementary singular solutions. Each has a compact complex potential (with z measured from the singularity):

Elementary flowComplex potential w(z)Velocity potential φStream function ψ
Uniform stream (speed U along x)U·zU·xU·y
Source (strength m > 0) / Sink (m < 0)(m/2π)·ln z(m/2π)·ln r(m/2π)·θ
Point vortex (circulation Γ)(−iΓ/2π)·ln z(Γ/2π)·θ(−Γ/2π)·ln r
Doublet (strength μ, axis +x)μ / z(μ·cos θ)/r−(μ·sin θ)/r

Here r and θ are polar coordinates centered on the singularity, m is the source strength (volume flux per unit depth, m²/s), Γ is the circulation (∮ u·dl around the vortex, m²/s), and μ is the doublet strength (m³/s). A doublet is the limit of a source and an equal-strength sink brought infinitely close together while their product with separation stays finite — it is the fluid analog of an electric dipole. Superposing these four ingredients, together with the method of images to satisfy solid boundaries, reproduces a remarkable range of real geometries.

Worked example — flow around a cylinder

Add a uniform stream of speed U (in the +x direction) to a doublet of strength μ = U·a² at the origin. The combined complex potential is

w(z) = U·(z + a²/z)

On the circle |z| = a the stream function ψ is constant, so that circle is a streamline — it can be replaced by a solid cylinder of radius a without disturbing the flow. The surface tangential velocity works out to

u_θ = −2U sin θ

so the fluid is stationary at the front and rear stagnation points (θ = 0 and θ = π) and moves fastest, at speed 2U, over the top and bottom (θ = ±90°). Bernoulli's equation for steady irrotational flow,

p + ½ρ|u|² = p∞ + ½ρU²  (constant along and across streamlines here)

then gives the surface pressure coefficient

C_p = (p − p∞) / (½ρU²) = 1 − 4 sin²θ

where p is local pressure (Pa), p∞ and U are the free-stream pressure and speed, and ρ is density (kg/m³). This pressure is perfectly symmetric fore-to-aft (C_p at θ equals C_p at π − θ and at −θ), so integrating pressure around the surface gives zero net force in every direction. That is d'Alembert's paradox in one geometry. Now superpose a point vortex of circulation Γ:

w(z) = U·(z + a²/z) − (iΓ/2π)·ln z

The circulation breaks the top-bottom symmetry, moves the stagnation points, and — via the Kutta–Joukowski theorem — produces a lift force per unit span:

L' = ρ·U·Γ     (drag still zero)

with L' in N/m, ρ in kg/m³, U in m/s, and Γ in m²/s. This single result — lift proportional to circulation — is the potential-flow backbone of the entire theory of airfoils and the Magnus effect.

Why potential flow matters

  • Aerodynamics. Thin-airfoil theory, panel methods, and the Kutta–Joukowski lift law all live inside potential flow. Conformally mapping a circle to a Joukowski airfoil turns the cylinder solution into a wing.
  • Water waves. Small-amplitude surface gravity waves are irrotational, so linear wave theory is potential flow with φ satisfying Laplace's equation between the free surface and the bed.
  • Groundwater and porous media. Darcy flow makes the seepage velocity proportional to −∇(head), so the head is harmonic — flow nets are potential-flow streamline/equipotential grids.
  • Analog problems. Laplace's equation also governs electrostatics, steady heat conduction and ideal-conductor current flow, so the same solutions and intuition transfer directly.
  • Engineering estimates. Outside thin boundary layers at high Reynolds number, the real pressure field closely tracks the potential-flow prediction, making it a fast and accurate first pass.

History and d'Alembert's paradox

The velocity potential and the governing role of Laplace's equation emerged from the work of Leonhard Euler (the inviscid equations of motion, 1757), Jean le Rond d'Alembert, Joseph-Louis Lagrange (who introduced the stream function and the potential in the 1780s), and Pierre-Simon Laplace. In 1752 d'Alembert proved that a body immersed in a steady, incompressible, inviscid flow experiences no drag — a stark contradiction with observation that he called "a singular paradox which I leave to future geometers to elucidate."

The resolution waited more than 150 years, until Ludwig Prandtl's boundary-layer theory (1904). Even at very high Reynolds number, a thin layer near the wall retains viscous effects; that layer can separate, forming a low-pressure wake that destroys the fore-aft pressure symmetry and produces real, sometimes large, drag. Crucially, lift is not paradoxical: lift comes from circulation, and the Kutta condition (smooth flow leaving a sharp trailing edge) selects the physically correct Γ, so potential flow predicts lift accurately even though it predicts drag as zero. The table below contrasts the ideal model with reality.

QuantityPotential flow (ideal)Real viscous flow
Viscosity μ0 (inviscid)> 0 (e.g. air ≈ 1.8 × 10⁻⁵ Pa·s)
Vorticity ω0 everywhereGenerated at walls, shed into wake
No-slip at wallNot enforced (slip allowed)Enforced (u = 0 at surface)
Drag on a cylinderExactly 0C_d ≈ 1.0–1.2 (subcritical Re)
Pressure fore/aft symmetryPerfect (C_p = 1 − 4sin²θ)Broken by separation and wake
Lift (with circulation)L' = ρUΓ (correct)≈ ρUΓ until stall

JavaScript — superposing elementary flows

// 2D potential-flow velocity field by superposition.
// Each element returns its (u, v) contribution at a point.

// Uniform stream of speed U along +x
function uniform(U) {
  return (x, y) => ({ u: U, v: 0 });
}

// Source (+m) or sink (-m) at (x0, y0); m = volume flux per depth [m^2/s]
function source(m, x0, y0) {
  return (x, y) => {
    const dx = x - x0, dy = y - y0, r2 = dx*dx + dy*dy || 1e-9;
    const k = m / (2 * Math.PI * r2);
    return { u: k * dx, v: k * dy };
  };
}

// Point vortex of circulation Gamma at (x0, y0) [m^2/s], CCW positive
function vortex(Gamma, x0, y0) {
  return (x, y) => {
    const dx = x - x0, dy = y - y0, r2 = dx*dx + dy*dy || 1e-9;
    const k = Gamma / (2 * Math.PI * r2);
    return { u: -k * dy, v: k * dx };
  };
}

// Doublet of strength mu, axis +x, at (x0, y0) [m^3/s]; w = mu/z, so vel = -mu/z^2
function doublet(mu, x0, y0) {
  return (x, y) => {
    const dx = x - x0, dy = y - y0, r2 = dx*dx + dy*dy || 1e-9;
    const k = mu / (r2 * r2);
    return { u: -k * (dx*dx - dy*dy), v: -k * (2*dx*dy) };
  };
}

// Superpose: velocity is the linear sum (Laplace's equation is linear)
function velocity(elements, x, y) {
  let u = 0, v = 0;
  for (const el of elements) { const q = el(x, y); u += q.u; v += q.v; }
  return { u, v, speed: Math.hypot(u, v) };
}

// Flow past a cylinder of radius a: uniform stream + doublet mu = U*a^2 at origin
const U = 1.0, a = 1.0;
const cylinder = [ uniform(U), doublet(U * a * a, 0, 0) ];

// Sample the top of the cylinder (theta = 90 deg): expect speed = 2U
const top = velocity(cylinder, 0, a * 1.0001);
console.log(`Speed just above cylinder top ≈ ${top.speed.toFixed(3)} (theory 2U = ${(2*U).toFixed(3)})`);

// Front stagnation point (theta = 180 deg): expect speed = 0
const front = velocity(cylinder, -a * 1.0001, 0);
console.log(`Speed at front stagnation ≈ ${front.speed.toFixed(3)} (theory 0)`);

// Kutta–Joukowski lift per unit span for a given circulation
function liftPerSpan(rho, U, Gamma) { return rho * U * Gamma; }
console.log(`Lift': ${liftPerSpan(1.225, 30, 20).toFixed(1)} N/m`); // air, 30 m/s, Γ=20

Common misconceptions

  • "Potential flow means no forces at all." It predicts zero drag, but lift (from circulation) and unsteady/added-mass forces are real and correctly captured. d'Alembert's paradox is specifically about steady drag.
  • "Irrotational means the fluid does not rotate." Fluid parcels do not spin about their own centers (zero vorticity), but the flow can still circle a body. A free vortex has ∮u·dl = Γ ≠ 0 yet is irrotational everywhere except at its singular core.
  • "Bernoulli needs the flow to be along one streamline." In irrotational flow the Bernoulli constant is the same on every streamline, so p + ½ρ|u|² is uniform throughout — a stronger statement than the usual streamline-only version.
  • "Potential flow ignores continuity." The opposite — ∇²φ = 0 is continuity (∇·u = 0) written for a potential. It is momentum/viscosity that are simplified away, not mass conservation.
  • "The model is useless because it gives zero drag." Outside the boundary layer it predicts the pressure and velocity field, and hence lift, very accurately; engineers pair it with a boundary-layer correction to recover drag and separation.
  • "φ and ψ are the same thing." They are distinct harmonic conjugates: constant-φ curves (equipotentials) cross constant-ψ curves (streamlines) at right angles, and only ψ measures volume flux between streamlines.

Frequently asked questions

What is potential flow in fluid dynamics?

Potential flow is an idealized model of fluid motion that is inviscid (zero viscosity) and irrotational (zero vorticity, ω = ∇ × u = 0). Because the flow is irrotational, the velocity can be written as the gradient of a scalar velocity potential, u = ∇φ. For an incompressible fluid, mass conservation ∇ · u = 0 then forces φ to satisfy Laplace's equation, ∇²φ = 0. This makes the whole velocity field determined by a single harmonic scalar and lets solutions be built by superposing simple building blocks.

Why does potential flow satisfy Laplace's equation?

Two conditions combine. Irrotationality (∇ × u = 0) guarantees a velocity potential exists with u = ∇φ. Incompressibility (∇ · u = 0) is continuity for constant density. Substituting u = ∇φ into ∇ · u = 0 gives ∇ · (∇φ) = ∇²φ = 0, which is Laplace's equation. Because Laplace's equation is linear, any sum of solutions is also a solution — that is why sources, sinks, vortices and uniform streams can be superposed freely.

What is the difference between the velocity potential and the stream function?

The velocity potential φ exists whenever the flow is irrotational and gives velocity by u = ∇φ; lines of constant φ are equipotentials. The stream function ψ exists whenever the flow is incompressible (2D or axisymmetric) and gives velocity by u = ∂ψ/∂y, v = −∂ψ/∂x; lines of constant ψ are streamlines, and the difference in ψ between two streamlines equals the volume flow rate between them. In 2D potential flow both exist, they are harmonic conjugates, and their level curves cross at right angles.

What is d'Alembert's paradox?

d'Alembert's paradox (1752) is the result that steady potential flow of an incompressible, inviscid fluid past any finite body produces zero net drag force. The pressure distribution from Bernoulli's equation is perfectly symmetric front-to-back, so the forward and rearward pressure forces cancel. This contradicts everyday experience — real bodies clearly feel drag. The resolution is that real fluids have small but nonzero viscosity, which creates a thin boundary layer that separates and forms a wake, breaking the fore-aft symmetry. Potential flow still predicts lift well because lift comes from circulation, which survives the idealization.

What is the complex potential in 2D potential flow?

In two dimensions the velocity potential φ and stream function ψ are combined into a single analytic function of a complex variable, the complex potential w(z) = φ(x, y) + iψ(x, y), where z = x + iy. Because φ and ψ satisfy the Cauchy–Riemann equations, w is holomorphic, and its derivative gives the velocity directly: dw/dz = u − iv, the complex conjugate velocity. Elementary flows have simple forms — uniform stream Uz, source (m/2π)ln z, vortex (−iΓ/2π)ln z, and doublet μ/z — and conformal mapping turns hard geometries into easy ones.

How does potential flow describe flow around a cylinder?

A uniform stream plus a doublet of the right strength gives flow past a circular cylinder of radius a: w(z) = U(z + a²/z). The surface speed is u_θ = −2U sin θ, so it is zero at the front and rear stagnation points (θ = 0 and π) and reaches a maximum of 2U at the top and bottom (θ = ±90°). Adding a point vortex of circulation Γ superposes rotation, shifts the stagnation points, and by the Kutta–Joukowski theorem produces lift per unit span L' = ρUΓ — the potential-flow foundation of aerodynamic lift.

When is the potential flow model valid and when does it fail?

Potential flow is accurate wherever viscosity and vorticity are negligible: high-Reynolds-number external flow outside thin boundary layers, the leading-edge and upper-surface region of a streamlined airfoil, water waves, groundwater seepage, and electrostatic-analog problems. It fails inside boundary layers, in separated wakes, in turbulent regions, and anywhere vorticity is generated (mainly at solid walls). Practically, engineers use potential flow for the outer inviscid field and patch a boundary-layer or Navier–Stokes solution near the surface to recover drag and separation.