Definition (Vorticity Field)

A vorticity field is a continous distribution of of vorticity throughout the entire fluid domain. Because velocity varies from point to point in a fluid, the curl varies from point to point. Indeed, it defined as

In 2D, this is a scalar field, while in 3D, this is a vector field.

Imagine we placed a small paddle wheel in the fluid. If the wheel spins, then there is vorticity at that point. In 3D, the vorticity field must be divergence-free. By Stokes Theorem, the circulation along some boundary is the integral of the vorticity over .

By Kelvin’s Circulation Theorem, the flux of vorticity across a surface flowing with fluid is constant in time.

Definition (Vortex Line)

A vortex line is a curve tangential to the vorticity field.

  • We will see that a vorticity field can be viewed as infinitely many threads of infinitesimal vortex lines (these are the “atoms”).
  • The integral of vorticity through a surface is how many vortex lines pass through the surface.
  • Vorticity magnitude is the cross-sectional density of vortex lines. The more vortex lines per unit area, the stronger the vorticity.
  • Vortex lines are passively advected by the flow. This means wrt a fluid particle, the vortex lines move with the particle.
"\\usepackage{tikz}\n\\usetikzlibrary{decorations.markings}\n\n\\begin{document}\n\\begin{tikzpicture}\n\n% --- Color Theme (Tweak RGB values here) ---\n% Surface Gradient\n\\definecolor{surfTop}{RGB}{124, 125, 220}\n\\definecolor{surfBot}{RGB}{160, 90, 40}\n\n% Vector Field Lines (Vibrant Blue for high visibility in dark/light modes)\n\\definecolor{vecColor}{RGB}{50, 120, 220}\n\n% --- Surface (\\Sigma) and Boundary (C) ---\n% Drawn first as the background layer. \n% The decoration places the directional arrow exactly on the path.\n\\draw[thick, top color=surfTop, bottom color=surfBot,\n decoration={markings, mark=at position 0.68 with {\\arrow[scale=1.5]{>}}},\n postaction={decorate}]\n plot [smooth cycle, tension=0.7] coordinates {\n (-4, 0)\n (-2, 1)\n (1, 0.5)\n (4, -0.5)\n (4.5, -2)\n (2, -3)\n (0, -2)\n (-2, -1.5)\n };\n\n% --- Surface Label ---\n\\node[font=\\Large] at (-2, -0.2) {$\\Sigma$};\n\n% --- Boundary Label ---\n% Placed near the arrow mark\n\\node[font=\\Large] at (0.5, -3) {$C$};\n\n% --- Vector Field Lines (w) ---\n% Drawn mid-ground, originating from inside the surface\n\\draw[->, >=stealth, very thick, color=vecColor] (-2.5, -0.2) to[out=80, in=210] (-1, 2.5);\n\\draw[->, >=stealth, very thick, color=vecColor] (-1, -0.5) to[out=80, in=210] (0.5, 2.8);\n\\draw[->, >=stealth, very thick, color=vecColor] (1, -1) to[out=75, in=210] (3, 2.2);\n\\draw[->, >=stealth, very thick, color=vecColor] (2.5, -1.8) to[out=75, in=210] (4.2, 0.8);\n\n% --- Vector Label ---\n\\node[text=vecColor, font=\\Large] at (1, 3.2) {$\\mathbf{w}$};\n\n\\end{tikzpicture}\n\\end{document}"§Cw
source code

We can think of vortex lines as picking some arbitrary point in the fluid, and tracing out the curve that is always tangential to the vorticity field, by following the direction of the vorticity vector at each point. Tracing these points for infinitely many points gives us our curve.

Preservation of Vortex Lines / Helmholtz’s Theorem

If a curve or surface is tangential to the vorticity field, and flows with the fluid, then the curve or surface remains tangential to the vorticity field over time.

Intuition & Proof:

  • The Surface Case: Being tangential to the vorticity field means no vortex lines cross or pierce the surface. Mathematically, this means the vorticity flux across the surface is exactly zero.
  • The Conservation: By Kelvin’s Circulation Theorem, the vorticity flux across any material surface is constant over time. Since the flux starts at zero, it must remain zero forever. Therefore, the surface never crosses a vortex line and remains permanently tangential.
  • The Curve Case: A single 1D vortex line (curve) can be defined locally as the geometric intersection of two 2D tangential surfaces. Because both surfaces perfectly follow the fluid motion without crossing vortex lines, their intersection is permanently glued to the fluid particles.

Definition (Vortex Tube)

A vortex tube is taking a surface nowhere tangent to the vorticity field, and collecting all vortex lines extending from .

Idea

If a single vortex line is a thread, then a vortex tube is a bundle of threads (or a solid cable). We are essentially tracing infinitely many tubes.

Also they really do look like tubes.

Theorem (Circulation is Constant)

If are two closed curves encircling the tube, then . In other words, the circulation around any closed curve encircling the tube is the same.

Proof: Apply Divergence Theorem on vorticity field in , the region enclosed. Note that vorticity has no divergence, so .

In , the walls of the tube are tangential to the vorticity field, so no vortex lines cross . Therefore, the flux of vorticity across is zero. The flux across and must be conserved, so they are equal.

Definition (Strength of a Vortex Tube)

Call this circulation the strength of the vortex tube.

Theorem (Vortex Strength is Constant)

As the vortex tube is flowing with the fluid, the vortex strength is constant over time.

Vortex Branches

In case the tube branches, the strength of from each branch adds up since vorticity cannot be created or destroyed out of nowhere (divergence-free). The circulation of the main trunk will always equal to the sum of the circulations of its branches.

"\\usepackage{tikz}\n\\usetikzlibrary{decorations.markings}\n\n\\begin{document}\n\\begin{tikzpicture}\n\n% --- Color Theme ---\n% Left Face (Surface S)\n\\definecolor{faceFill}{RGB}{60, 70, 85}\n\\definecolor{faceBorder}{RGB}{230, 230, 230}\n\n% Vortex Lines & Point P\n\\definecolor{vortexLine}{RGB}{255, 140, 0}\n\n% Loops (C1, C2)\n\\definecolor{loopColor}{RGB}{50, 180, 255}\n\n% --- Left Cap (Surface S) ---\n\\fill[faceFill] (-4.5, 0) ellipse (0.4 and 1.5);\n\\draw[faceBorder, thick, dashed] (-4.5, 1.5) arc (90:-90:0.4 and 1.5);\n\\draw[faceBorder, thick, postaction={decorate, decoration={markings, mark=at position 0.5 with {\\arrow[scale=1.5]{stealth}}}}] \n (-4.5, 1.5) arc (90:270:0.4 and 1.5);\n\n% --- Main Tube Outlines ---\n% Top boundary\n\\draw[thick] plot [smooth, tension=0.7] coordinates {(-4.5, 1.5) (-1, 1.7) (4.5, 2.8)};\n% Bottom boundary\n\\draw[thick] plot [smooth, tension=0.7] coordinates {(-4.5, -1.5) (-1, -1.7) (4.5, -2.8)};\n% Inner split (Crotch of the bifurcation)\n\\draw[thick] plot [smooth, tension=0.8] coordinates {(4.5, 1.2) (2.5, 0.5) (0.8, 0) (2.5, -0.5) (4.5, -1.2)};\n\n% --- Right Caps (Open ends of the split tubes) ---\n% Top Branch Cap\n\\begin{scope}[shift={(4.5, 2.0)}, rotate=15]\n \\draw[thick] (0,0) ellipse (0.3 and 0.85);\n\\end{scope}\n% Bottom Branch Cap\n\\begin{scope}[shift={(4.5, -2.0)}, rotate=-15]\n \\draw[thick] (0,0) ellipse (0.3 and 0.85);\n\\end{scope}\n\n% --- Internal Vortex Lines ---\n% Main trunk line ending at P (Branch lines removed)\n\\draw[vortexLine, thick] (-4.5, 0) -- (0.8,0);\n\n% Point P (Zero of w)\n\\fill[vortexLine] (0.8,0) circle (0.08);\n\n% --- Boundary Loops (C1, C2) ---\n% Loop C1 \n\\draw[loopColor, thick, dashed, postaction={decorate, decoration={markings, mark=at position 0.5 with {\\arrow[scale=1.5]{stealth}}}}] \n (-2, 0.05) ellipse (0.5 and 1.6);\n\n% Loop C2 Top (Re-centered to y=1.45 to fit inside branch boundaries)\n\\begin{scope}[shift={(2.5, 1.45)}, rotate=15]\n \\draw[loopColor, thick, postaction={decorate, decoration={markings, mark=at position 0.5 with {\\arrow[scale=1.5]{stealth}}}}] \n (0,0) ellipse (0.2 and 0.75);\n\\end{scope}\n\n% Loop C2 Bottom (Re-centered to y=-1.45 to fit inside branch boundaries)\n\\begin{scope}[shift={(2.5, -1.45)}, rotate=-15]\n \\draw[loopColor, thick, postaction={decorate, decoration={markings, mark=at position 0.5 with {\\arrow[scale=1.5]{stealth}}}}] \n (0,0) ellipse (0.2 and 0.75);\n\\end{scope}\n\n% --- Labels and Pointers ---\n\\node[font=\\Large] at (-5.3, -0.5) {$S$};\n\\node[font=\\Large] at (-5.1, 0.9) {$C$};\n\\node[font=\\Large] at (-1.1, 0.6) {$C_1$};\n\\node[font=\\Large] (c2label) at (1.5, 0) {$C_2$};\n\n% Pointers for C2 adjusted to new loop centers\n\\draw[thin] (c2label.east) -- (2.3, 1.25);\n\\draw[thin] (c2label.east) -- (2.3, -1.25);\n\n% Point P\n\\node[font=\\Large] at (0.7, -0.3) {$P$};\n\n% \"a zero of w\"\n\\node[font=\\large] (zeroLabel) at (0.4, 2.6) {a zero of $\\mathbf{w}$};\n\\draw[thin] (zeroLabel.south) -- (0.8, 0.15);\n\n% \"this vortex line ends at P\"\n\\node[font=\\large] (vLineLabel) at (-2, -2.5) {this vortex line ends at $P$};\n\\draw[thin] (vLineLabel.north) -- (-2, -0.1);\n\n\\end{tikzpicture}\n\\end{document}"SCC1C2PazeroofwthisvortexlineendsatP
source code

Smoke rings (closed-loop vortex tubes) are a common example of vortex tubes. They are stable because an isolated vortex tube cannot just end; it must either

  • form a closed loop
  • extend to the boundaries of the fluid domain
  • branch infinitely

Definition (Vortex Filaments/Sheets)

Vortex filaments are concentrated vortex tubes. It is the limit of a vortex tube as its cross-sectional area shrinks to zero with finite strength. We can think of it as squeezing vortex tubes until they become infinitely thin (1D curves) while keeping the strength constant.

Vortex Sheets are vortex tubes that are squished completely flat into a 2D surface. It represents a severe, discontinuous jump in the fluid’s velocity field. For example, if we have wind blowing the opposite direction over another gust of wind, the boundary between the two layers of air is a vortex sheet.

Vorticity Equation

In 3D, the vorticity field is transported by the flow

One can show that

The physical interpretation of the left side is that vorticity is being advected by the flow (carried by the flow)1. The right side is the vortex stretching term, which is unique to 3D. It represents how the vorticity can be amplified by the flow.

For example, imagine we have a thick vortex tube spinning in the fluid

Going back to the literal water vortex analogy, we have a many vortex lines bundled together in a tube.

What happens when the velocity field of the fluid pulls the top and bottom of that tube, stretching it out?

The literal vortex will grow because the movement of water is increasing the literal vortex size.

Because the fluid is incompressible, the cross-sectional area of the tube must shrink to keep the same strength, by Theorem (Vortex Strength is Constant). By conservation of angular momentum, the tube must spin faster to compensate for the smaller cross-sectional area.

Like an ice skater pulling in their arms to spin faster, the vortex tube must spin faster to maintain the same strength.

This deformation of the tube is expressed mathematically with (note the time ). It shows how a tiny, perfect cube of fluid gets squished, stretched, and tilted as it flows through space over time.

2D Case

In 2D, the vorticity field is a scalar function transported by the flow:

Reconstructing Velocity from Vorticity

If we decide to simulate a fluid by tracking its vorticity instead of its velocity, we encounter an obvious problem: we still need the velocity to actually move the fluid particles.

Biot-Savart Law

In electromagnetism, the Biot-Savart law states that a wire carrying an electric current produces a magnetic field. In fluid dynamics, the Biot-Savart law states that a vortex tube produces a velocity field.

Biot-Savart Integral

Let be the vorticity field in the fluid. If the fluid domain is the entire , then there is a unique divergence-free velocity field which decays to zero at infinity.

where

  • is the velocity at point in the fluid
  • is the vorticity at point in the fluid
  • The cross product guarantees that the velocity field is always perpendicular to the vorticity field.
  • The denominator ensures that the influence of vorticity at on the velocity at decays with distance, following the Inverse Square Law in 3D.
  • The is the Support of the vorticity function , the set of points in the domain where the function’s value is not zero. It is the points in our domain where the fluid is actually swirling.

For 2D, the Biot-Savart law is

where is the 90 degree rotation matrix and .

When vorticity is concentrated into codimension-22 geometry (vortex filament in 3D or point vortex in 2D), the Biot-Savart law simplifies significantly.

First, since the filament must be closed, with a fixed strength

such that

where

  • is the curve representing the vortex filament,
  • is the unit tangent vector. Because the filament is infinitely thin, the complex 3D vorticity vector is perfectly replaced by just the direction the curve is pointing multiplied by the strength ,
  • is the line element along the curve , which accounts for the length of the curve segment at .

Idea

We now no longer need to simulate the fluid as a 3D field. Instead, we can just track the 1D curve of the vortex filament and its strength. This is a huge simplification that allows us to simulate fluids with less computational resources.

In 2D,

Because a 0D point has no length, we only need to sum over the discrete set of point vortices.

Biot-Savart Integral: Obstacle Treatment

The fatal flaw of the Biot-Savart integral is that it only works for infinite domains. It assumes the domain is infinitely large and completely empty. An obstacle (like a rock in a river) will calculate the velocity field that flows through the rock, which is (obviously) physically impossible.

Therefore we must modify the Biot-Savart field with a gradient field (i.e. a pressure projection).

  • Solve the Laplace problen in the outer domain with Neumann boundary condition
  • Classically done with boundary element method
  • Or by Kelvin Transformation.

Stream Function

Instead of an Biot-Savart integral, we can solve the PDE to find the velocity. Consider the followingn ansatz:

where is the vector potential in 3D and is the scalar stream function in 2D. The first equation ensures the incompressibility condition is automatically satisfied. We can plug this ansatz into the definition of vorticity to get

and get (not sure how to derive this)

In 2D, this is just with on the boundary.

Beware the result could be incorrect if there are multiple boundary components, or that the domain is non-simply-connected.

Paper

Helmholtz-Hodge-Morrey-Friedrichs

In general, we have the following orthogonal decomposition

with normal to the boundary and zero on the boundary.

Vortex Methods

We want to discretize the fluid by tracking its vorticity instead of its velocity. This is called the vortex particle method. In 3D, vorticity is done by measuring its vortex filaments

and in 2D its point vortices

The vortex particle method makes little sense in 3D, because the vorticity must be divergence free, all vortex lines must form a closed loop or extend infinitely to the boundaries of our fluid domain. Otherwise, we have fluid flowing from one place to another and stopping (creating a sink)3.

2D Vortex Particle Algorithm

We can turn the problem into a discrete body physics problem. Instead of a fluid, imagine we have a handful of active particles.

Each particle has a fixed vorticity strength which can be positive or negative. The 2D position of each particle is described by

Then, we evaluate velocity for any passively advected smoke/dye by

then solve the ODE by RK4.

3D Vortex Filament Algorithm

This is extremely hard. Filaments stretch, twist, grow exponentially, need reconnection…

Recall the continuous PDE for 3D vorticity:

Most papers solve this by splittng advection and stretching into two separate steps. This is unstable since the stretching step is calculated as an explicit addition, causing errors to accumulate. A better approach is to “do a semi-Lagrangian pullback for 2-form”.

The original velocity-based semi-Lagrangian approaches typically did

where is the traceback to find the old velocity at the past location . This ignores deformation.

Instead, we need to change what velocity physically represents. Instead of it being a vector (form), it needs to be a covector (form), a measurement of flow along a line segment. That way, if the fluid deforms at some segment, the velocity measurement scale to conserve energy.

Then, we can do a semi-Lagrangian pullback for 1-form:

Then velocity is transported as a covector. In particular, the Kelvin’s Circulation Theorem holds.

Additional Conservation Laws

There are more invariants of the flow besides circulation.

Theorem (Generalized Kelvin’s Circulation Theorem)

We can generalize Theorem (Kelvin’s Circulation Theorem). If is a velocity field and is any divergence-free vector field transported by the fluid, then

is constant.

Definition (Helicity)

Theorem (Helicity is Constant)

Helicity is a constant of time.

Theorem (Vortex Line Area Conservation)

In fluids, the total area of vortex lines is conserved. Vortex lines are twisted and bent curves. In , if we project them onto the planes, we describe the area vector, . The total area vector of all vortex lines is conserved.

Airplane Example

This theorem explains why airplanes can fly.

Footnotes

  1. Think of a literal water vortex in a fast moving river being carried downstream.

  2. In a 3D fluid simulation, codimension-2 means the vortex filament is a 1D curve (). In a 2D fluid simulation, codimension-2 means the point vortex is a 0D point ().

  3. Apparently this is like the magnetic monopole problem in electromagnetism.