The Verification Venue · pointed at the angle every textbook prints

The Wake That Broke Nineteen Degrees

Every textbook gives 19.47 degrees for the V behind a boat and derives it without ever mentioning the boat. The derivation is right about where waves can be and silent about where they are bright. This page integrates the full wave spectrum behind a moving pressure patch, live, in your browser, and shows the brightest arms folding inside the Kelvin wedge past a threshold it locates, while the wedge itself stays exactly where the dispersion relation put it: the brightest angle measured here never leaves it, at any speed.

Behind a hull moving steadily over deep water there are only two ingredients: the dispersion relation ω² = g k, and geometry. Steadiness forces every wave to keep pace with the boat, ω = U k cosθ, so each wave direction θ carries exactly one wavenumber, k = sec²θ/L with L = U²/g. Summing those waves, and asking where their crests bunch, hands you the famous angle with no boat in it anywhere: the ray map tanψ = t/(1+2t²), with t = tanθ, peaks at t = 1/√2 and gives tanψ = 1/√8, which is 19.4712°. The textbook stops there. The map does not: past θ = 35.26° the ray angle folds back toward the track, so waves excited at still larger angles arrive inside the wedge. Whether any of those waves exist is not geometry's business. It is the boat's.

A disturbance of stated size σ cannot excite every wavelength. Modelled as a pressure patch with leading excess and trailing deficit (zero net mass), its spectrum weights each wave by W = (s k)² e-(s k)²/2 with s = σ/L = σg/U²: a band-pass centred on k ≈ 1/σ. As the boat speeds up, L grows, s falls, and the band's centre sweeps to shorter waves, larger θ, until it crosses the fold at s = 2√2/3 = 0.9428. Past that threshold the brightest excited waves are on the folded branch, and their ray angle slides back down inside the wedge as speed rises. That is the computation below, and it is where the computation and the closed form agree. On the slow side of the threshold the two part company, because there the transverse system is the brightest thing in the picture and the folded branch is not what you are looking at.

Two controls, one honest degeneracy

Below about 3.1 m/s (at σ = 2 m) you are under the threshold. The bright arms do not sit on the Kelvin lines there either: the filter is nearly flat across the transverse range, the waves that run with the boat outshine the folded ones, and the measured locus collapses back toward the track (16.2° at s = 0.6, 13.6° at s = 1.1, 7.6° at s = 1.5, no arms at all by s = 2.0). Past the threshold, and only past it, the locus follows the folded branch inward as speed rises.

In deep water the pattern depends on the combination s = σg/U² only. Moving this slider moves the pattern exactly as moving the speed slider does, in the opposite direction. The page will not pretend otherwise.

wake extends left, boat at right edgecoarse live pattern

Dimensionless size s = σg/U²

threshold 0.9428

Dominant length L = U²/g

transverse wavelength 2πL

Predicted bright ray (folded)

from the spectral peak, closed form

Measured bright arms (full run)

locus criterion, median over columns

Read the two dashed families on the canvas separately. The pale dashed lines are the Kelvin wedge at ±19.4712°, drawn from the exact value, fixed, unmoved, at every speed. The amber dashed lines are the closed-form prediction for where the filtered spectral peak's rays land, folding inside the wedge past the threshold. The shaded field is the actual integrated surface. After a full run the solid amber curves are the stationary-phase crest lines laid over the computation: two methods, one picture.

not started
chunks done
inner-loop steps (counted)
elapsed
workers in use

The check — run in front of you

Before any headline number is shown, the compiled engine and a slow, deliberately obvious JavaScript reference are run over five small instances and must agree fingerprint for fingerprint. The reproducible-build check (rebuilding engine.c under the pinned clang and comparing bytes) cannot run in a browser; it runs offline: node research/the-wake-that-broke-nineteen-degrees/verify-the-wake-that-broke-nineteen-degrees.mjs.

battery instanceengine fingerprintreference fingerprintmatch

running… agreement of both implementations on every row

The control on the control: press to break the reference on purpose (its dispersion exponent moves from 2 to 2.04) and watch the comparison go red. A check that has never failed is a claim about the code, not evidence about it.

not yet run

Full-size checks, run when you launch the full computation:

The binary this page fetched:

checking…

What none of this rules out: two decompositions agreeing rules out a boundary or partition error and very little else; the battery rules out implementation faults, not a shared misunderstanding of the physics, because both implementations necessarily share their quadrature; and the filtering mechanism offered for the narrowing is an interpretation, contested in the literature by decompositions that split the same pattern into transverse and divergent systems and apportion the narrowing differently. The narrowing is computed. The mechanism is not.

The cost — counted, not estimated

inner-loop steps, summed from the engines' own counters
wall time, full sequence
workers, and why that number
factor vs main-thread JavaScript

The speed factor is measured on a slice of the job and scaled, and the slice fraction is printed beside it because it is an extrapolation, not a boast.

What's exact here, what's modelled, and what's assumed

Exactly true. The Kelvin angle 19.4712°, the fold of the ray map, the threshold s* = 2√2/3 = 0.9428, the 2πL transverse wavelength, and the evanescence of the field beyond the wedge all follow from ω² = g k plus geometry alone. Evanescent is not the same as absent, and this page will not round one into the other: outside the wedge there is no stationary-phase point, so the field there dies with distance, but at any radius a finite grid can reach it is not zero. Measured between 4.8 and 30 L, the ten-percent contour sits at 27.4°, 23.9°, 21.6° and 20.1° for s = 1.5, 0.6, 0.3 and 0.15, every one of them outside 19.4712°. What the check asserts is the part that is true: the share of energy beyond the wedge falls with every ring outward, and the angular energy maximum never leaves the wedge. The symmetry of the computed pattern is exact in the mathematics and is checked pointwise on independently integrated mirror points.

Modelled. The hull is a Laplacian-of-Gaussian pressure patch: the lowest-order local profile with zero net mass, chosen because a real hull pushes water down at the bow and lets it up at the stern. Linearised, inviscid, irrotational theory; the disturbance steady in its own frame; the quadrature truncated where the filter has fallen below e-9 and sampled past the Nyquist bound of the fastest phase. The criteria (locus, centroid, 10-percent envelope) are definitions, stated because the answer depends on them. This page used to predict that a raw argmax of binned energy would always land on the caustic; measured, it does not, and the prediction has been withdrawn rather than repeated. The argmax sits at 1.6°, 16.9°, 15.9° and 11.6° for s = 1.5, 0.6, 0.3 and 0.15: inside the wedge every time, and nowhere near the caustic at three of the four.

Assumed, and stated. Deep water everywhere unless a run names a depth. No observed angle from any photograph or paper appears on this page; every figure is derived from the stated rules. The interpretation that the disturbance's spectral filter causes the narrowing is one account among competing decompositions, and this page does not adjudicate between them.