A heavy boat pushing through the water makes a wave at its bow, and that wave has to keep pace with the boat. Longer waves travel faster, so as the boat speeds up its own wave stretches until it is as long as the boat. Past that point the boat is trying to climb its own bow wave, and the power needed shoots up. That speed is called hull speed. Three labs: watch a hull make its wave, see the wall of drag (and how a light planing boat gets over it), and find out why longer boats are faster.
A displacement hull is one that floats by pushing water aside, like a canoe, a sailing yacht or a fishing trawler. Moving forward, it shoves water up at the bow and leaves a train of waves behind. The waves directly behind the boat stay in step with it, so they must travel exactly as fast as the boat does. On open water a wave's speed depends on its wavelength (the distance from one crest to the next): longer waves run faster. So the faster the boat goes, the longer its wave. The waterline length (LWL) is the length of the hull where it meets the water.
How to read this: the top picture is the boat's view: the hull stays put while water streams past, and the wave pattern holds still beside it. The chart below shows how fast a wave of each length travels on deep water; the boat's wave sits on that curve at the boat's speed.
Try this: slide Boat speed up slowly and watch the second crest walk back along the hull until it reaches the stern, then slips behind it and the bow tips up.
g = 9.81 m/s² is gravity, λ the wavelength in meters, c and v speeds in m/s. A knot is one nautical mile (1,852 m) per hour, so 1 kn = 0.514 m/s. Plug in λ = L and convert units and the two rules of thumb fall out: √(9.81 / 2π) = 1.249 m/s per √m, which is 2.43 knots per √m, or 1.34 knots per √ft. The Froude number Fr compares a boat's speed to the speed of gravity waves on its own length scale. Boats of any size with the same Fr make the same shape of wave pattern, and hull speed is always Fr ≈ 0.40.
Below hull speed the hull spans several short waves and sits nearly level. At hull speed one crest sits at the bow and the next at the stern, with a trough in between. Go faster and the second crest slides behind the stern. The stern drops into the trough, the bow points up, and the boat is pushing uphill against its own bow wave. Lab 2 shows what that costs.
"Deep" water means deeper than about half a wavelength. In shallow water every wave travels at about √(g·depth) whatever its length, which is why tides, with wavelengths of thousands of miles, behave so differently: see W10 · Tides. For how waves add up and what sets their speed on a string or in air, see S00 · Waves & harmonics.
import math g = 9.81 # m/s² KN = 1852 / 3600 # m/s per knot def wave_speed(lam): # deep water, wavelength m -> m/s return math.sqrt(g*lam / (2*math.pi)) def bow_wavelength(v): # the wave that keeps pace: c = v return 2*math.pi*v**2 / g L, knots = 7.6, 5.0 # waterline length m, boat speed kn v = knots * KN lam = bow_wavelength(v) Fr = v / math.sqrt(g*L) hull_kn = wave_speed(L) / KN # speed where lam == L print(f"lambda {lam:.2f} m = {lam/L:.2f} L, Fr {Fr:.3f}, hull speed {hull_kn:.2f} kn") # the rule-of-thumb constants print(wave_speed(1.0) / KN) # 2.43 kn per sqrt(m) print(wave_speed(0.3048) / KN) # 1.34 kn per sqrt(ft) print(1 / math.sqrt(2*math.pi)) # Fr at hull speed, 0.399
Water holds a boat back in two main ways. Friction drag is water rubbing along the wetted skin of the hull; it grows roughly with speed squared. Wave-making drag is the energy the boat pours into the waves it makes. For a heavy displacement hull, wave drag is small at low speed and then climbs like a wall around hull speed. A light planing hull has a flat, wide bottom. Driven hard enough, water pressure under that bottom lifts the boat up so it skims on top of the water instead of plowing through it. Its wave drag peaks (the hump) and then eases. Two boats here share a waterline: a heavy displacement launch and a light planing runabout.
How to read this: each curve shows how hard the water pushes back, as a percent of the boat's own weight, so a light and a heavy boat can share one chart. These are toy-model shapes, not measured data. The strip below shows how each hull sits in the water at the chosen speed.
Try this: drag Boat speed from 5 to 10 knots. The red curve runs off the top of the chart while the green one peaks and then drops as the planing hull rises.
ρ = 1025 kg/m³ is seawater density, ν = 1.19×10⁻⁶ m²/s its kinematic viscosity, S the wetted area, W = m·g the weight. CF is the ITTC-1957 friction line, a standard engineering formula for the friction of a smooth hull. The wave terms are made up to have the right shapes: a steep wall near Fr 0.4 to 0.5 for the displacement hull, and for the planing hull a hump followed by a falling "riding tilted" drag once lift takes over. P = R·v is the power that actually pushes the hull; propellers waste a good share, so an engine must deliver more, often 1.5 to 2 times as much.
A displacement hull has to shove its full weight of water aside the whole time, and the faster it goes the more of that work goes into making waves. A planing hull uses speed to make lift, like a water ski. As lift carries more of the weight, the hull rises, less of it touches the water, and it stops making the big waves. The price is a hump of drag on the way up, so a planing boat needs a large engine for its weight, and below the hump it is no better than a displacement boat.
Sailboats meet the same wall. Most cruising keelboats are too heavy to plane, so their top speed sits near hull speed whatever the wind does: see E05 · Sailing upwind for where the push comes from and E07 · Sailboat stability for what keeps them upright under it.
import math g, rho, nu = 9.81, 1025, 1.19e-6 # seawater KN = 1852 / 3600 L = 6.0 # both hulls, waterline m DISP = dict(m=3000, S=16) # heavy launch: kg, wetted m² PLAN = dict(m=1200, S=11) # light runabout def cf_ittc(v): # ITTC-1957 friction line Re = v*L/nu return 0.075 / (math.log10(Re) - 2)**2 def wave_disp(Fr): # toy wall, per unit weight return 0.04 * (Fr/0.4)**6 S0 = 1/(1 + math.exp(0.5/0.06)) def plane_share(Fr): # 0 -> 1 around Fr 0.5 (toy) return (1/(1 + math.exp(-(Fr - 0.5)/0.06)) - S0) / (1 - S0) def resistance(v, boat, planing): W, Fr = boat["m"]*g, v/math.sqrt(g*L) s = plane_share(Fr) if planing else 0.0 Rw = W*((1 - s)*wave_disp(Fr) + s*0.07/Fr) Rf = 0.5*rho*v**2*boat["S"]*(1 - 0.6*s)*cf_ittc(v) return Rf + Rw for kn in (4, 6, 8, 10, 15, 22): v = kn*KN Rd, Rp = resistance(v, DISP, False), resistance(v, PLAN, True) print(f"{kn:2} kn disp {Rd:7.0f} N {Rd*v/1e3:6.1f} kW plan {Rp:5.0f} N {Rp*v/1e3:5.1f} kW")
Hull speed grows with the square root of waterline length: a boat four times as long has twice the hull speed. That is why long boats are fast and why sailors say "length is speed". Pick a length, or race two displacement boats of different sizes, each sailing at its own hull speed. A nautical mile (nmi) is 1,852 m, and one knot is one nautical mile per hour.
How to read this: the curve gives hull speed for each waterline length; the length axis is stretched (log scale) so a dinghy and a ship both fit. The shaded zone above the curve is where boats that don't play by the displacement rules can go. The race below runs both boats at their hull speeds.
Try this: set boat B to four times boat A's length and press Start race: B should cover twice the distance in the same time.
The speed ratio of two boats depends only on the ratio of their lengths. Double the length and hull speed rises by √2, about 41%.
Nothing stops a hull at exactly Fr 0.40. Heavy displacement boats can be pushed a little past it with a lot of power, and drag rises smoothly rather than hitting a hard limit. Boats built differently beat it easily: planing dinghies and powerboats ride up on top of their bow wave, catamarans and trimarans have long, very narrow hulls that make much smaller waves, and hydrofoil boats lift their hulls clear of the water altogether.
Big ships sit far below their hull speed. A container ship's hull speed is over 40 knots, but pushing that much hull fast burns fuel at a ruinous rate, so they cruise at roughly 15 to 25 knots, around Fr 0.13 to 0.22.
import math KN = 1852 / 3600 def hull_speed_kn(L_m): # deep-water wave speed with lambda = L return math.sqrt(9.81*L_m / (2*math.pi)) / KN boats = {"dinghy": 4.0, "30 ft cruiser": 7.6, "70 ft yacht": 18.3, "container ship": 350} for name, L in boats.items(): print(f"{name:15} LWL {L:6.1f} m hull speed {hull_speed_kn(L):5.1f} kn") # race two displacement boats over 10 nautical miles A, B, course = 7.6, 18.3, 10.0 # waterline m, m, nmi vA, vB = hull_speed_kn(A), hull_speed_kn(B) print(f"A {course/vA:.2f} h, B {course/vB:.2f} h, lead after 1 h {vB - vA:.2f} nmi") print(f"speed ratio {vB/vA:.3f} = sqrt({B/A:.2f})")