Translated from the author's Korean original. Read the original (한국어)
Four times the speed, still 19.47 degrees — where water depth blows the Kelvin wedge open to 90
Depth, not speed, sets the wake angle: it is pinned at 19.47 degrees in deep water and swings to 90 degrees the moment the depth Froude number reaches one.
The Seine, 1803, and the problem of pushing a boat upstream#
On 9 August 1803 Robert Fulton ran a steamboat on the Seine. The plaque on the riverbank names three men who watched: Bossut, Carnot, Prony. All three were fluid dynamicists.
The steam engine had existed since 1776. Several people had already bolted one onto a boat. One thing kept failing. The boats could not work their way upstream. What Fulton solved was not the engine. It was the resistance.
This article takes one piece of that resistance apart: the geometry of the waves a hull drags behind it. In deep water the wake half-angle refuses to move off 19.47 degrees no matter how hard you push the boat. Drop the depth to 2 m and the same angle opens to 89 degrees. We will follow a single dispersion relation all the way to that number.
Resistance that had to be measured because nobody could compute it#
In 1752 d'Alembert showed that a body in inviscid irrotational flow feels exactly zero drag. Theory and reality had split open. The field lost its tool for predicting resistance.
Bossut filled the gap with towing-tank experiments. He pulled model hulls at fixed speed and read the tension. Prony organised the data. What Fulton inherited was that experimental tradition.
Much of what they measured was not friction. It was energy that the boat's own waves carried away behind it. Start with where those waves can exist.
Drop the depth slider from 500 m toward 2 m and the yellow wedge opens. The speed slider alone leaves the angle where it is.
Push V up with h fixed at “deep”: the yellow wedge never budges from 19.47°. Now drag h down toward 2 m and raise V until Fr_h → 1: the wedge opens to 90°, then closes again once Fr_h > 1.
Move the speed slider alone and the yellow wedge does not twitch. The angle only changes once you drag the depth down from 500 m toward 2 m. Two controls, but only one of them sets the angle.
Only the waves that stand still survive#
In a frame riding with the hull the wake is stationary. To look stationary, a wave's phase speed must match the component of the ship's speed along its own direction of travel.
Let be the angle between the wavenumber vector and the ship's track. The condition reads:
is ship speed, wavenumber, depth, gravity. The right side is the surface-wave dispersion relation.
That one equation carries the whole article. In deep water (), and — depth drops out. In shallow water (), and — wavenumber drops out. Everything interesting lives between those two limits.
Phase speed cannot beat . With a finite bottom, no wave however long can beat that speed. Once the ship exceeds it, there is no way left to balance the left side.
Where the energy actually goes#
Crests travel at the phase speed, but energy travels at the group velocity. In finite depth:
The bracket runs from 1 in deep water to 2 in shallow water, so ranges from up to .
That group velocity builds the wake. Follow a wave component launched seconds ago. The ship has advanced ; the energy has run along the wavenumber direction. Measured from the ship, that component now sits astern and off to the side.
cancels. The direction in which a given component shows up does not depend on its age.
is the ray angle measured from the ship's track. The wedge angle is the maximum of as sweeps from to . Stationary phase selects exactly that direction, energy piles up there, and it shows on the surface as a sharp boundary.
Where 19.47 degrees comes from#
Run the deep-water case. With , the stationary condition gives and . Substitute and cancels outright.
Speed has vanished from the expression. This function peaks at , that is , where it equals . As an angle, .
Two metres per second or eight, the answer is the same. All speed changes is the wavelength. The deep-water transverse wavelength is , quadratic in speed. The shape holds; only the scale grows.
With , and . The numerator is and the denominator is . The ratio is . The arctangent of that is 19.47°. sits in both numerator and denominator and cancels. At , m/s gives m. Quadrupling speed to 8 m/s multiplies by 16 and the wavelength becomes 40.99 m. Doubling speed to 4 m/s multiplies wavelength by 4, and 10.25 / 2.56 = 4. The table rows 2.56, 10.25 and 40.99 are that ratio.
Dropping the depth to 2 m and rerunning the same calculation#
Now keep intact and solve numerically. Bisect the stationary condition for , feed it to the group velocity to build , then sweep for the maximum.
import math
g = 9.81
def c_phase(k, h):
return math.sqrt(g / k * math.tanh(k * h))
def solve_k(v, h):
if v >= math.sqrt(g * h) - 1e-12:
return None
lo, hi = 1e-8, 1.0
while c_phase(hi, h) > v:
hi *= 2.0
if hi > 1e6:
return None
for _ in range(200):
mid = 0.5 * (lo + hi)
if c_phase(mid, h) > v:
lo = mid
else:
hi = mid
return 0.5 * (lo + hi)
def group_velocity(k, h):
kh = k * h
if kh > 20.0:
f = 1.0
else:
f = 1.0 + 2.0 * kh / math.sinh(2.0 * kh)
return 0.5 * c_phase(k, h) * f
def ray_angle(theta, v, h):
k = solve_k(v * math.cos(theta), h)
if k is None:
return None
cg = group_velocity(k, h)
num = cg * math.sin(theta)
den = v - cg * math.cos(theta)
if den <= 0.0:
return 0.5 * math.pi
return math.atan2(num, den)
def wedge_scan(v, h, n=8000):
best, best_t = 0.0, 0.0
for i in range(1, n):
th = 0.5 * math.pi * i / n
a = ray_angle(th, v, h)
if a is not None and a > best:
best, best_t = a, th
return math.degrees(best), math.degrees(best_t)
print(" V[m/s] h[m] Fr_h wedge[deg] theta*[deg] lambda_t[m]")
cases = [(2.0, 500.0), (4.0, 500.0), (8.0, 500.0),
(2.0, 2.0), (3.5, 2.0), (4.0, 2.0), (4.3, 2.0),
(4.43, 2.0), (5.5, 2.0), (8.0, 2.0)]
for v, h in cases:
frh = v / math.sqrt(g * h)
a, t = wedge_scan(v, h)
k0 = solve_k(v, h)
lam = (2 * math.pi / k0) if k0 else float('inf')
ls = f"{lam:10.2f}" if k0 else " inf"
print(f"{v:7.2f} {h:7.1f} {frh:7.3f} {a:11.2f} {t:11.2f} {ls}")
print()
print("supercritical branch vs Mach-like angle arcsin(1/Fr_h)")
print(" Fr_h wedge[deg] asin(1/Fr_h)[deg] diff")
for v, h in [(5.0, 2.0), (5.5, 2.0), (6.5, 2.0), (8.0, 2.0)]:
frh = v / math.sqrt(g * h)
a, _ = wedge_scan(v, h)
m = math.degrees(math.asin(1.0 / frh))
print(f"{frh:7.3f} {a:11.2f} {m:17.2f} {a-m:8.3f}") V[m/s] h[m] Fr_h wedge[deg] theta*[deg] lambda_t[m]
2.00 500.0 0.029 19.47 35.27 2.56
4.00 500.0 0.057 19.47 35.27 10.25
8.00 500.0 0.114 19.47 35.27 40.99
2.00 2.0 0.452 19.47 35.26 2.56
3.50 2.0 0.790 23.74 23.94 8.80
4.00 2.0 0.903 35.13 16.47 14.91
4.30 2.0 0.971 54.46 9.50 29.17
4.43 2.0 1.000 89.08 0.91 inf
5.50 2.0 1.242 53.63 36.36 inf
8.00 2.0 1.806 33.61 56.39 inf
supercritical branch vs Mach-like angle arcsin(1/Fr_h)
Fr_h wedge[deg] asin(1/Fr_h)[deg] diff
1.129 62.35 62.36 -0.007
1.242 53.63 53.64 -0.013
1.467 42.94 42.96 -0.014
1.806 33.61 33.62 -0.015Drag the Fr_h slider from the table's 0.452 toward 1.000 and the peak of leaves , sliding left.
Below Fr_h ≈ 0.7 the peak sits fixed at θ* = 35.27°, α = 19.47°. Drag Fr_h toward 1 and watch θ* slide to zero while α climbs to 90°. Past 1 a forbidden band opens on the left and the peak tracks asin(1/Fr_h).
Between 0.1 and 0.7 the peak stays pinned at 35.27° and the wedge holds 19.47°. Only near 1 does the peak climb toward the table's 89.08°.
The first three rows are deep water. Quadruple the speed and the wedge angle agrees to two decimal places. Only the wavelength moves, from 2.56 m to 40.99 m — a factor of 16.
Row four is the interesting one. Even at m the answer is still 19.47 degrees, with Fr_h = 0.452. A short 2.56 m wave gives , so as far as that wave is concerned the water is deep. What matters is depth relative to wavelength, not depth on its own.
With , m and m give . sits on 1, so the dispersion relation collapses back to the deep-water form. That is why a 2 m bottom still returns 19.47°. At m/s and m, falls to about 0.43. leaves 1 and the table angle is 54.46°. The rows run 23.74° at Fr_h = 0.790, 35.13° at 0.903, 54.46° at 0.971 and 89.08° at 1.000. An angle that refused to move when speed was quadrupled in deep water opens from 23.74° to 89.08° between 4.30 m/s and 4.43 m/s.
Past Fr_h of about 0.79 the angle starts to move: 35.13 degrees at 0.903, 54.46 at 0.971, and 89.08 at 1.000. That last value falls 0.9 degrees short of 90 because the grid is finite. Read it together with , which has collapsed to 0.91 degrees. The peak is converging on .
Above the critical speed the wedge narrows again#
Once Fr_h exceeds 1, only directions satisfying survive — that is, . A forbidden band opens up ahead of the beam. Transverse waves disappear entirely, which is what the inf entries in the column mean.
The wedge built from the surviving divergent waves narrows: 53.63 degrees at 1.242, 33.61 at 1.806. The second table checks those against . All four cases agree to within 0.015 degrees.
This is the same formula as the Mach cone in supersonic flow, with standing in for the sound speed. Transverse waves vanishing once Fr_h passes 1, leaving only divergent waves, is the same split a hydraulic jump in a kitchen sink makes at Froude number 1, between subcritical and supercritical flow.
This is the wall Fulton hit on the Seine. In a 2 m river the critical speed is 4.43 m/s, roughly 8.6 knots. Near it the wake spreads across the full channel width. The waves cannot leave the boat, so the energy pushed into them comes straight back as resistance.
Where this angle decides your CFD grid#
In a free-surface run the domain width is the tangent of the wedge angle. The tangent of 19.47° is 0.354, so one length astern the half-width is . At Fr_h = 0.971 the table angle is 54.46°, and the tangent is near 1.40. The same station becomes , about four times wider. Park the side wall at the deep-water habit of and reflected waves mix into the hull pressure. The resistance coefficient drifts off without a warning.
The wavelength budget moves with it. At Fr_h = 0.971 the transverse wave is 29.17 m. Forty cells per wavelength puts that one wave past a thousand cells. The row m, m/s has m and , so the same 40-cell rule is only about a hundred cells. Same hull, same speed, and the grid line still lengthens once depth pushes toward critical. The deep-water 19.47° does not depend on speed, hull form or viscosity. A narrow angle means the scheme smeared the waves. A wide one means dispersion error got in.
Close the domain before critical and the wake hits the wall#
Fulton had no dispersion relation. The tension gauge in Bossut's tank pointed at first. In 2 m of water that speed is 4.43 m/s, about 8.6 knots. Once Fr_h passes 0.79 the wedge leaves 19.47° and reaches 89.08° at 1.000. If the waves cannot leave the hull, the energy put into them comes back as resistance.
The first question about hull resistance is not the speed itself. It is whether this depth is deep for the wavelength that hull makes. At m and m, and the angle is still 19.47°. On the same depth, once the wavelength stretches to 29.17 m the wedge spreads across the channel. Closing the side wall from the speed number alone is the same mistake as sorting a flow by viscosity alone in where the Reynolds number splits regimes.
Related
Share if you found it helpful.