Skip to content
cfd-lab:~/en/posts/2026-05-26-jet-in-crossf…online
NOTE #055DAY TUE 유체역학DATE 2026.05.26READ 6 min readWORDS 1,132#Jet-in-Crossflow#Vortex#Wake#Strouhal#유동현상

Why Smokestack Plumes Curl Up Instead of Lying Flat — The Jet in Crossflow and Its Counter-Rotating Vortex Pair

Why a jet fired across a wind folds into a kidney-shaped vortex pair.

Picture the plume from a power-plant smokestack on a cold morning. It climbs straight up at first. Then, at some height, it tips sideways. Slice that column crosswise and you find neither a donut nor a circle, but a pair of swirls shaped like two kidneys. This post follows why a jet fired across a wind — a jet in crossflow (JICF) — behaves this way. The handle on its trajectory turns out to be not the Reynolds number but the velocity ratio rr; four distinct kinds of vortices are born at a single nozzle; the star of the show, the counter-rotating vortex pair (CVP), sculpts that kidney cross-section; and its wake sheds vortices at a slower beat than a solid cylinder does. At the end, a short NumPy snippet prints out the trajectory and the vortex pair's induced field.

Why Smokestack Plumes Curl Up Instead of Lying Flat#

A jet injected into a crosswind is everywhere around us. Smokestack plumes, fuel injection in a gas-turbine combustor, film cooling that shields a turbine blade, a river pouring into the sea, volcanic ash columns, the lift jets of a VTOL aircraft — all the same problem.

The heart of it is a contest between two momenta. Close to the nozzle the jet's momentum wins, so the column rises nearly vertically. As it climbs, the crosswind keeps shoving. Past some point the wind wins. The column tips over and eventually lies along the wind.

But it does not simply lie down. Its cross-section deforms. A round jet curls into a kidney. Hidden inside that curl is a pair of swirls turning in opposite directions.

Four Kinds of Vortices Live at One Nozzle#

A JICF does not produce a single kind of vortex. Fric and Roshko (1994) sorted them into four distinct systems.

  • Jet shear-layer vortices: rings formed just above the nozzle as the cylindrical shear layer at the jet's edge rolls up. They appear first.
  • Counter-rotating vortex pair (CVP): the star that dominates the cross-section far downstream — the identity behind the kidney/mushroom.
  • Horseshoe vortex: a horseshoe wrapped around the base of the jet column where it meets the wall, exactly as the boundary layer wraps around a wall-mounted obstacle.
  • Wake vortices: upright vortices running from behind the jet down to the wall. They are easily confused with the street behind a solid cylinder, but Fric and Roshko showed they originate from separation of the wall boundary layer, not from the jet.

That all four live at once is what sets a JICF decisively apart from a plain cylinder wake.

The Real Handle Is Not Reynolds — Velocity Ratio r and Momentum Flux Ratio J#

What sets how deep the jet punches in is not the viscosity ratio, the Reynolds number. The governing variable is the velocity ratio.

r=vjur = \frac{v_j}{u_\infty}

Here vjv_j is the jet exit velocity and uu_\infty is the crosswind speed. When the two fluids differ in density, the better measure is the momentum flux ratio.

J=ρjvj2ρu2J = \frac{\rho_j\, v_j^2}{\rho_\infty\, u_\infty^2}

Here ρj\rho_j and ρ\rho_\infty are the densities of jet and crosswind. With matched density, J=r2J = r^2. The Reynolds number only fixes the details — when the shear layer trips to turbulence, how finely the vortices crinkle — while the big picture, the trajectory and the penetration depth, is held by rr (or JJ).

The Trajectory Measures Itself in rd#

Countless experiments converge on one conclusion. The mean trajectory of the jet centerline follows a power law.

zrd=A(xrd)B\frac{z}{r d} = A \left( \frac{x}{r d} \right)^{B}

Here xx is the streamwise distance, zz the height, and dd the nozzle diameter. The coefficient clusters at A1.62.1A \approx 1.6\text{–}2.1 and the exponent at B0.280.34B \approx 0.28\text{–}0.34 across experiments (Pratte–Baines 1967, Margason 1993). The decisive thing is the ruler. Measure length not by dd alone but by rdr d, and trajectories for different velocity ratios collapse onto one curve. A larger velocity ratio climbs higher at the same x/dx/d.

Try the simulation below.

The natural length scale is r·d, not d alone. Raise r and the plume punches higher before the crossflow bends it; the three pink ghosts are the trajectories for r = 2, 6, 10.

Raise r from 2 to 10 and the jet punches far higher before bending. The three pink ghost curves are the trajectories for r=2,6,10r = 2, 6, 10. Change B to compare how the bend curls.

The Counter-Rotating Vortex Pair — How the Mushroom Cross-Section Forms#

The CVP is born as the jet's cylindrical shear layer tilts and folds in the crosswind. The shear layers on the two sides of the jet reorganize into two oppositely spinning vortices in the cross-section. Between them fluid rises; on the outside it folds back down. The result is the kidney/mushroom cross-section.

Its strength scales with the jet's circulation, Γjvjd\Gamma_j \propto v_j d — a faster jet means a stronger pair. And as the source notes, the CVP is generated very close to the nozzle exit and weakens downstream as its vorticity diffuses.

Try the simulation below.

Left vortex spins counter-clockwise (+Γ), right clockwise (−Γ): between them the dye is pumped upward and folds outward into the kidney-shaped mushroom. Push the downstream slider toward 1 and diffusion saps Γ — the mushroom stalls, just as the real CVP weakens far from the exit.

The left vortex turns counter-clockwise (+Γ+\Gamma), the right clockwise (Γ-\Gamma). The dye in the middle rises and folds outward, growing the mushroom. Push the downstream slider toward 1 and diffusion eats away at Γ\Gamma until the mushroom stalls — exactly as the real CVP fades far from the exit.

A Lazier Beat Than a Cylinder — The Strouhal Number of a JICF#

The frequency ff at which wake vortices shed is collected into the dimensionless Strouhal number.

St=fduSt = \frac{f\, d}{u_\infty}

Here ff is the shedding frequency and dd the nozzle diameter. Behind a solid circular cylinder, St0.21St \approx 0.21 holds almost constant over a wide Reynolds range. Yet the JICF wake that Hester and colleagues (1971) measured in a subsonic wind tunnel showed a Strouhal number less than half that of a cylinder of comparable size.

Why so lazy? A cylinder separates cleanly off a rigid wall and sheds on a single beat. The "obstacle" of a JICF is not a rigid wall but a wobbling fluid column the crosswind can seep into. On top of that, the roots of the wake vortices lie in the wall boundary layer, not in the jet itself. A soft effective obstacle sheds on a slower beat.

Python — Trajectory and the CVP Induced Field#

import numpy as np
 
def jet_trajectory(x, r, d=1.0, A=1.6, B=0.33):
    """Mean jet-in-crossflow trajectory: z/(rd) = A (x/(rd))^B, x>=0."""
    rd = r * d
    x = np.asarray(x, dtype=float)
    return np.where(x > 0, A * rd * (x / rd) ** B, 0.0)
 
def cvp_velocity(y, z, gamma, b, zc=2.0, core=0.15):
    """Velocity (u_y, u_z) induced at (y, z) by the counter-rotating pair.
    Left +Γ (CCW), right -Γ (CW) -> flow rises in the middle."""
    def one(y0, z0, g):
        dy, dz = y - y0, z - z0
        r2 = dy**2 + dz**2 + core**2
        return -g / (2 * np.pi) * dz / r2, g / (2 * np.pi) * dy / r2
    uy1, uz1 = one(-b / 2, zc, +gamma)
    uy2, uz2 = one(+b / 2, zc, -gamma)
    return uy1 + uy2, uz1 + uz2
 
if __name__ == "__main__":
    # 1) For the same nozzle, a larger velocity ratio r punches higher
    for r in (2, 4, 8):
        print(f"r={r:>2}: z(x=10d) = {jet_trajectory(10.0, r):.2f} d")
 
    # 2) The centerline between the vortices rises, the edge sinks (mushroom)
    _, uz_c = cvp_velocity(0.0, 2.0, gamma=3.0, b=1.5)
    _, uz_e = cvp_velocity(1.5, 2.0, gamma=3.0, b=1.5)
    print(f"center (y=0): u_z = {uz_c:+.3f}  (>0 -> rises)")
    print(f"edge   (y=b): u_z = {uz_e:+.3f}  (<0 -> sinks)")

Running it prints:

r= 2: z(x=10d) = 5.44 d
r= 4: z(x=10d) = 8.66 d
r= 8: z(x=10d) = 13.78 d
center (y=0): u_z = +1.224  (>0 -> rises)
edge   (y=b): u_z = -0.401  (<0 -> sinks)

Double or quadruple the velocity ratio and the jet punches higher at the same downstream distance. And the middle of the pair rises while its edge sinks — the arithmetic of a growing mushroom, in plain numbers.

Next Time You See a Smokestack Plume#

  • The handle on a JICF trajectory is not Reynolds but the velocity ratio r=vj/ur = v_j/u_\infty (or the momentum flux ratio JJ). Measure length in rdrd and the trajectories of different jets collapse onto one curve.
  • Four vortices (shear-layer rings, CVP, horseshoe, wake) are born at a single nozzle, and the one that dominates the cross-section far downstream is the counter-rotating pair that scoops the middle upward.
  • A JICF wake sheds at less than half the Strouhal number of a cylinder because its effective obstacle is not a rigid wall but a soft fluid column the crosswind seeps into.

Share if you found it helpful.