Swimming

Rowing and sailing drag a hull through water. Swimming is the sport that cares where the body is: a swimmer at the free surface makes waves, and the energy in that wave train is drag they have to pay for. A swimmer deep enough makes none. This is a race in which that difference is the whole game — and the fifteen metre rule is what stops it from being free.

 

Controls

Space — go, at the signal. Before it and you are disqualified under Art. 4.4.
↓ or S — hold to stay under. Let go and you start coming up, and coming up takes about 4.7 metres of pool for every metre of depth. Release too late and your head clears the water past fifteen metres, which is a disqualification in freestyle, backstroke and butterfly.
← → or A D — one stroke cycle each. Find the cadence; the efficiency band is narrow.
Space at the wall — start the turn. In butterfly and breaststroke that is the two-hand touch, and a badly timed one arrives with one hand on the wall.
Esc — back to the menu. R — restart.
On a phone or with a mouse, the four buttons under the pool do the same: Go / Turn is Space, Hold under is ↓, and the two Stroke buttons are ← and →.

Your times in this browser

Nothing recorded yet.

The mechanism: a body at a free surface makes waves

A body moving through deep water pays skin friction and a pressure (form) drag wherever it is. A body moving at or near the free surface pays a third term as well. It drags a system of gravity waves along with it, and the energy carried away in that wave train has to come from somewhere: it is drag. Nothing about it is optional, and a boat cannot escape it. A swimmer can, by going deep, and that is the asymmetry the whole of this app is built on.

The size of the escape is not a matter of opinion. A body travelling at speed U drags waves that travel with it, so their phase speed is U; for a deep-water gravity wave c2 = g/k, so the wavenumber of the system it makes is k = g/U2 and its wavelength is λ = 2πU2/g. A deep-water wave field falls off as exp(−kz) with depth, and wave-making resistance goes as the square of the disturbance amplitude. So:

Rwave(h) / Rwave(0) = exp(−2gh/U2)

which is Havelock's 1917 result for a submerged singularity. This app does not quote it — it derives it, and then checks the derivation against a source that derives it too (an open 2018 PhD thesis on wave-making resistance of submerged bodies, which reproduces Havelock's exact solution and validates a numerical scheme against it to better than 0.2%). Havelock's own papers were not opened.

Two consequences fall straight out, and they are the interesting part:

In this model, at 2.0 m/s, 24.0% of a surface swimmer's total drag is wave-making. At one metre down — the median depth elite swimmers actually hold — it is 0.55%.

The headline: is fifteen metres where the advantage runs out?

No. It is either far short of fifteen metres or exactly at it, and almost never in between. The saving from staying under has no interior maximum at all once the underwater phase is faster than the surface one — so for the swimmers the rule is aimed at, there is no distance at which the advantage “runs out”. Fifteen metres is a cap on an unbounded optimum, which is the only form a rule can take when the thing it restrains has no natural stopping point.

The argument is short enough to write down. Two swimmers leave the same wall at the same speed; one stays under and kicks, one surfaces and strokes. The time the first one saves over the first X metres is

saving(X) = ∫0X [ 1/vsurf(x) − 1/vuw(x) ] dx

which is stationary exactly where the two instantaneous speeds are equal. So the optimal breakout is the crossover point, and not one metre further. But if the underwater swimmer's steady speed exceeds the surface swimmer's, the integrand never changes sign, the integral never turns over, and there is no crossover to find.

The idealised comparison, where the answer is exact

Integrating both swimmers against distance, so every comparison is made at matched x, with no ascent and no rule:

Two swimmers off the same wall at 3.05 m/s. The surface stroke holds 2.092 m/s indefinitely; the underwater column is what that kick would hold. “Saving at the optimum” is measured over the first forty metres.
underwater kickits steady speedcrossoversaving at the optimumsaving at 15 m
as calibrated (×1.0, 179 W)1.670 m/s2.12 m0.019 s−1.223 s
×1.5 (268 W)1.9143.54 m0.057 s−0.359 s
×1.745 (312 W)2.092the two steady speeds are equal — above this line there is no crossover at any distance
×2.0 (358 W)2.105never0.272 s+0.199 s
×2.5 (447 W)2.263never1.503 s+0.598 s
×3.0 (537 W)2.400never2.429 s+0.898 s

With the kick calibrated on published undulatory-swimming velocities, the crossover is at 2.12 metres, and staying under to fifteen costs 1.22 seconds at every wall. Raise the kick past 312 W and the crossover ceases to exist: the swimmer should stay down as long as anybody lets them.

The full race, where it is messier and more interesting

Put the ascent back in — a swimmer a metre down spends about 4.7 metres of pool coming up, with their wave drag growing the whole way — along with the measured glide before the first kick, fatigue, and the fact that a turn has to be timed, and sweep the breakout over a whole 100 m freestyle:

Optimal surfacing point in a 100 m long-course freestyle. 7.93 m is not a choice: it is the earliest a diving swimmer can physically be back at the surface.
underwater kicksteady speedoptimal surfacing pointrace time
×1.82.118 m/s7.93 m — as early as possible41.82 s
×2.02.2068.27 m41.91 s
×2.32.3278.28 m41.72 s
×2.52.4018.52 m41.62 s
×2.62.43713.28 m41.53 s
×3.02.56914.77 m41.14 s
×3.22.63114.77 m40.95 s

A four per cent change in underwater power moves the best breakout by nearly five metres, from 8.5 to 13.3. Between about ten and thirteen metres is never the answer at any setting tested. The threshold sits higher than the idealised 1.745 because the ascent toll and the glide before the first kick are both paid only by the swimmer who stays down.

But the objective is shallow, and that is a result too. At ×2.3 the entire range from eight to fifteen metres spans 0.17 s of a 42 s race — four tenths of one per cent, comparable with the jitter from where the turn happens to fall. Near the threshold the two branches are local minima of almost equal depth and the model genuinely cannot tell you which to take. If elite swimmers sit near that threshold, then coaches disagreeing about breakout distance is not confusion; it is a correct reading of a flat landscape.

Two things this build will not bury. First, its calibrated kick sits well below the threshold, yet the measured elite practice is a breakout at 10.1 to 15.5 metres with the faster swimmers further out. Either elite underwater kicking is about two and a half times as powerful as the national-level figures this model was calibrated on, or the model is wrong about something. Second, the same defect appears somewhere with no ambiguity at all: this model makes a short-course 200 freestyle slower than a long-course one, where the real sport has it faster. The prediction is falsifiable and this is where to aim.

What the model says without hedging is that the rule is doing real work. Lift the fifteen metre limit and a swimmer just past the threshold swims thirty-two metres of a fifty metre length underwater; at ×3.0 they swim forty-five and gain 1.56 s over 100 m. That is not a hypothetical. It is what David Berkoff did at Seoul in 1988 and what Denis Pankratov did at Atlanta in 1996, and it is why the rule exists in the shape it does.

What the published drag data actually says, and what this model got

This is the part the model was fitted to, and the part it was then tested against.

Fitted: forty national swimmers on a tow line

Lyttle and Blanksby towed 40 national male swimmers prone at 0.6 m and measured the drag: 58.1 N at 1.6 m/s, 80.4 at 1.9, 109.4 at 2.2, 140.5 at 2.5 and 204.1 at 3.1. The same group reported that gliding at about 0.4 m gives a 15 to 18% reduction in total drag compared with swimming at the surface, at every velocity above 1.9 m/s. Both reach this app through West et al.'s 2022 systematic review, which reproduces the original tables; Lyttle's own conference paper could not be opened. The model's four free drag coefficients were fitted to those two things together, and it returns 16.3%, 17.2% and 15.8% at 1.9, 2.2 and 2.5 m/s.

Held out, and the strongest result here: eight swimmers and four swimsuits

Keul, Bieder and Wahl towed eight national-league swimmers at the surface and at 0.5 m with a semi-tethered machine, in four different suits. Nothing from this study was used in the fit.

Measured steady towing velocity at 0.5 m depth, against what this model predicts from the surface velocity alone, under a constant-force protocol. The published abstract does not state whether the machine held force or power constant; under constant power the model predicts +6.5 to +6.8% instead.
suitsurfaceat 0.5 m, measuredthis modelerror
conventional1.87 m/s2.02 m/s2.047 m/s+1.3%
Arena R-Evolution1.912.092.095 m/s+0.2%
blueseventy nero comp1.912.102.095 m/s−0.2%
Speedo LZR Racer1.952.142.143 m/s+0.1%

A drag model fitted to one laboratory's force measurements predicts another laboratory's velocity measurements, on different swimmers, by a different method, to within one and a half percent. That is the best evidence on this page that the depth physics is right.

One measured input worth naming: the glide before the first kick

Elite swimmers do not kick from the instant they enter. The median horizontal distance covered before the first kick is 5.14 m, and Houel and Elipot put the same decision at about six metres off a turn. A model that kicks from entry decelerates too slowly over the first few metres and then too quickly afterwards, and the residual pattern against the split table says so plainly: adding the measured glide cut the fit error by a factor of six. It is also why the maximum depth the model uses is 1.00 m — the elite median, with the faster swimmers going deeper, from 0.73 m at the third percentile to 1.33 m at the ninety-seventh.

Held out: the elite start

An instrumented starting block under 136 Swiss national-team swimmers, including Olympic medallists and a world-record holder, gives median freestyle splits of 1.58 s at 5 m, 2.73 s at 7.5 m, 4.18 s at 10 m and 7.04 s at 15 m, with a median breakout at 5.15 s. The model's entry velocity and reference breakout were fitted to those five; it reproduces them to within 5.5%, best at 7.5 m (0.0%) and worst at 5 m (+5.5%).

Held out and never fitted: stroke length

Stroke rate is a documented input to this model — the Athens 2004 200 m semi-finalists' measured cadences are used directly as each stroke's economical rate. Stroke length was never used for anything. Over a simulated 200 m the model produces 2.29, 2.93, 2.60 and 2.77 m per stroke for butterfly, backstroke, breaststroke and freestyle, against a measured 1.83, 2.19, 2.15 and 2.21. The magnitudes are 20 to 34% high, entirely because the only elite stroke-length table that could be opened is female and this model is calibrated to men's world records; the model's velocities run 20 to 25% above that cohort's for the same reason. Normalised by the velocity ratio the stroke lengths agree to within 7%, and the model gets the ordering right except that it puts backstroke ahead of freestyle where the measurement has them level.

Where this model fails, stated plainly

1. The drag exponent is wrong, and it shows up twice. Fitted to the towed table, this model's drag rises as v2.18 over 1.6 to 3.1 m/s. The measured table rises as v1.90. The consequence is visible in the residuals: the model is 7.5% low at 1.6 m/s and 11.4% high at 3.1 m/s. And the defect is structural, not a fitting failure. With ITTC friction (which rises about as v1.85) and quadratic pressure drag, the blended exponent is 2 − 0.15f where f is the friction share — so reaching 1.90 would need friction to be 67% of total drag, against the 14% the analytical literature gives and the 29 to 35% the towed-suit literature gives. No allocation between the two terms can produce the measured exponent. Something in the real velocity dependence is not in this model.

The same defect surfaces independently in the underwater phase. Calibrating the kick on the steady undulatory velocity asks for 179 W; calibrating it on the published velocity decay between 5.5 m and 7.5 m asks for 126 to 142 W. The two disagree by 26 to 42%, because the modelled glide sheds speed too fast at the top of the range and the two datasets weight the velocity range differently. One defect, two symptoms.

2. The power the model needs is not credible. Calibrated to the 50, 100 and 200 m freestyle world records — which it reproduces to 1.5%, 1.4% and 0.1% — the reference swimmer spends 535 W of mechanical power at the economical cadence and up to 858 W in a 50 m sprint, overcoming about 156 N of drag at race speed. That is roughly two to three times what swimming energetics supports. The reason is not a tuning error: it is that the passive-drag towing literature and the active-drag literature are mutually inconsistent. Towed passive drag at the surface is around 130 N at 2.1 m/s; the MAD system says a swimmer working their limbs at the same speed experiences 89 N, which is less than being towed rigid, and cannot be true of the same body. This model follows the towing data and the power bill comes with it. Nothing here can satisfy both, and the app does not pretend otherwise.

3. Short course comes out backwards, and it is the same defect. In the real sport a 25 m pool is worth two to three per cent over the same distance, because a turn and its push-off are faster than swimming. This model simulates a 200 m freestyle in 112.4 s short course against 102.0 s long course — it makes the shorter pool 10% slower. The mechanism is exactly the breakout result: in this model the underwater phase is slower than the surface stroke, so doubling the number of walls doubles the time spent in the slow phase. It is the clearest single piece of evidence that the model's underwater propulsion is under-powered relative to the real sport, and it points the same way the elite breakout data does.

4. Distance events run slow. A single-reservoir critical-power model fitted on 21 to 102 seconds does not extrapolate. The held-out 400 m individual medley comes out 2.0% slow, which is fine; the 800 and 1500 freestyle come out around 7 to 8% slow, which is not.

5. The most important paper on this subject could not be opened. Vennell, Pease and Wilson (2006), Wave drag on human swimmers, is closed access, has no repository copy, and was not read. Everything attributed to it here is second-hand. The figure that reaches this app through two citing papers — that wave drag is negligible below about 1.8 chest depths at 0.9 m/s and 2.8 chest depths at 2.0 m/s — this model does not reproduce. Havelock's exponential makes the required depth scale as U2, so a 2.2× increase in speed should demand a 4.9× increase in depth, taking 1.8 chest depths to about 8.9, not 2.8. Adding the reported U4 growth of surface wave drag does not rescue it: solving for a constant relative threshold gives a negative depth at the lower speed, which is impossible. So either the secondary figure is a garbled version of what Vennell measured, or a swimmer is too unlike a point singularity for the simple scaling to hold. I could not check, because I could not open the paper, and I am not going to assert which.

Where the published literature disagrees with itself

This is not a settled field, and an app that presented it as one would be lying.

Corrections

Each of these says whose claim is being corrected, because that matters.

Correcting common assumptions about the rules

A widely repeated claim is that a relay take-over has a 0.03 s tolerance, to be probed to the microsecond either side. There is no 0.03 second boundary. The string “0.03” occurs exactly once in the 558 pages of the February 2026 Competition Regulations, in Art. 15.8.2, and it is a length: the depth of a grip cut-out in a starting platform. Art. 10.4.5 is binary and carries no tolerance at all — the feet of the Athlete… must remain in contact with the starting platform until the incoming athlete touches. The only time near it is Art. 15.16.6.3, which sets the equipment's resolution at one hundredth of a second. This app therefore judges the take-over at zero and models the hundredth separately, and it will show you a take-over that breaks the rule and still reads 0.00 on the board.

Another is that lanes are assigned by timing to 1/1000. The current regulations do the opposite: Art. 11.2.3.1 says that where averaging two watches produces a thousandth, the final digit will not be recorded. Ties at a hundredth are official ties (Art. 11.1.2), broken by an actual swim-off or by adding outer lanes, never by a hidden digit.

And the usual framing of the question — is 15 m near where the advantage actually runs out? — presupposes that there is a distance where it runs out. For the swimmers the rule is aimed at, there is not one. That is the finding, and it is a correction to the question rather than an answer to it.

Correcting common folklore, and a lot of coaching material

The single butterfly kick in a breaststroke pull-down is very widely stated to be allowed during the first arm stroke. That was the old FINA wording. The current Art. 7.1 permits it at any time prior to the first Breaststroke kick after the start and after each turn, which is materially more permissive — the only way to get the timing wrong now is to take it after the first breaststroke kick. This app implements the current rule, and its independently written adjudicator implements it from the same text.

Almost every summary of the underwater rules omits the five metre finish allowance. Arts. 5.4, 6.5 and 8.6 all say that once some part of the head has passed the 5 m mark before the finish wall, the athlete may be completely submerged again. It is implemented here, and it is the reason the app does not disqualify you for diving into the last touch.

Citing the swimming rules as “SW 5.3” is quoting a retired edition. World Aquatics has dropped the FINA SW and FR letter prefixes entirely; the current document is organised as Part One / Part Two / … with plain decimal articles. Everything this app prints is cited as Part Two, Art. N of the Competition Regulations in force from February 2026.

Correcting my own first attempts

Three modelling errors were caught by the harnesses rather than by me, and they are worth naming because each of them looked right:

Where the rules did not decide, and this app had to

Sources that could not be opened

Named, because a citation to something nobody read is worse than no citation.

Provenance

Every constant this app runs on is tagged, and the page harness recounts the tally from the shipped file so the number below cannot drift away from the register.

194constants registered
78documented — 40.2%
50measured — 25.8%
16derived — 8.2%
13calibrated — 6.7%
37reconstructed — 19.1%

40.2% documented is lower than one might expect, and the reason is the composition of the sport rather than laxity. Competitive swimming has an unusually large and unusually precise rules layer — 78 articles of it are implemented here — sitting on top of a propulsion problem that is not codified anywhere at all. Nobody has written down how fast a human swims. So the honest figure to quote is not the documented share on its own but the sourced share: 128 of 194 entries, or 66.0%, are either rule text that was read or a published measurement. A further 8.2% are derived here by algebra from those, and 6.7% are calibrated against a named observable. The remaining 19.1% are reconstructed, and almost all of them are in one place: the shape of human propulsion and the geometry of a dive.

No entry in the documented class is a general reference value rather than a rule; the register carries a flag for that case and it is unused.

What is enforced

The app's judge reads a log of observations — what a stroke judge, a turn judge or the automatic equipment could actually see — and returns a verdict. A second adjudicator, written independently from the same rule text with no shared code and its own separately typed article numbers, reads the same log. The two are diffed over randomised races on the verdict, the disqualification code and the article, and the diff must be empty.

Ties are not broken (Art. 11.1.2): two athletes with equal times are “determined to have equal placing”, so two swimmers whose official times to a hundredth are the same share a place, and the results table says so rather than quietly ordering one above the other.

About this build

Swimming is a sport, not a product, and there is no original to reimplement and no author to credit for inventing it. What this build owes a debt to is a rulebook and a small pile of papers, all named above and all listed in CREDITS.txt.

Faithful: the pool, down to the lane rope colours, the red floats over the last five metres, the distinctly coloured fifteen metre float, the cross line on the lane marking and the flags at five metres and 1.8 m up. The four strokes' legality conditions, the medley orders, the turn and finish touches, the relay take-over, the start, the racing rules and the tie rule, all from the World Aquatics Competition Regulations in force from February 2026, Part Two. The programme of events. The wave-drag depth law, which is Havelock's and is derived here rather than quoted.

Mine, and labelled: every part of how a human swims. The propulsor, the fatigue model, the pacing, the dive geometry, the ascent angle, the turn timing, and the shape of the wave-drag hump. The drag coefficients are fitted to published towing data and the power constants to world records; the targets are named in the register but the numbers are not documented constants and this app never says they are.

Not modelled: the partial-emergence effect that Novais et al.'s CFD says dominates at the true surface; intra-cycle velocity fluctuation, which is real and is about three times larger in breaststroke than in front crawl; lane rope wash and the wake of the swimmer in the next lane; water temperature as anything but a constant; and everything to do with officiating other than the rules listed above.

This page is a single self-contained bundle: no framework, no CDN, no external script, stylesheet, font or image. The renderer is hand-written WebGL2. No part of it calls a model, a server or an API.