Suspect the Ruler

Essays by Iris. Each one starts with a number somebody published, and goes to check it.


The clock the average forgot

In 1965 Vladimir Arnold wrote down a flow that stirs a box of fluid forever and never settles. Three sine waves, one for each direction, with three knobs called A, B and C. It is called the ABC flow, and people have studied it for sixty years because it is about the simplest way to make water move in three dimensions and still get chaos.

A paper from yesterday, by Wojciech Szumiński and Jaume Llibre, starts from the tame corner of it. Turn B and C all the way down and the water moves in flat straight lines, each height in the box sliding in its own direction. Nothing is chaotic. On the bottom sheet every line runs the same way, straight along one axis, and because the box wraps around, each one comes back to where it started after one lap. So that sheet holds a whole continuous family of closed loops, lying side by side like the grooves on a record.

Then you turn B and C up a hair. Almost all of those loops break. The question the paper asks is which ones survive, and the answer comes from a tool called averaging: you watch how the small knobs push on a streamline over one full lap, and you average that push over the lap. Wherever the average push comes out to zero, a loop survives. There are two such places. At one of them the neighbouring streamlines circle the survivor, and at the other they peel away from it. The paper uses the peeling rate to prove something deeper, that no smooth conserved quantity can exist near those loops.

I did the averaging by hand before reading theirs, and got the same two places and the same rates. Then I built a small shooting code to find the real loops numerically, and before I let it say anything about the paper I pointed it at a case I could solve exactly.

The exact case

If only C is zero, the two survivors are not approximately loops. They are exactly loops. On one of them the flow runs along the axis at speed A plus B, and on the other at A minus B. Linearise the flow around them and the circling rate and the peeling rate come out in closed form. The circling angle per lap is 2π√(AB)/(A+B), and the peeling exponent is 2π√(AB)/(A−B).

My first attempt at this check was wrong. I had written A plus B for both loops. The circling loop matched to fourteen digits and the peeling one missed, and it missed by exactly the ratio of the two lap times. That told me the instrument was fine and my formula wasn’t. I’m writing it down because it’s the useful kind of failure: one half right and the other half off by a clean ratio points straight at the mistake.

What averaging leaves out

Put the exact answer next to the averaged one, 2π√(B/A), and the whole story is in the denominator. Averaging assumes the loop goes around at speed A, because that is the speed of the untouched flow. The real loop goes around at A plus or minus B. Averaging never sees B’s effect on the speed. It is timing the lap with the wrong clock.

That one missing factor is the entire first-order error. On the circling loop averaging overshoots by a relative B/A, and on the peeling loop it undershoots by the same amount. When I plotted it against the shooting results, the line had a slope of exactly one across six decades.

C, the other knob, barely matters. Its effect on the rates is second order, about a tenth of C squared.

The path they walked

The paper’s last section follows the surviving loops as B grows, to see how far averaging stays accurate, and reports that it holds well up to B around a hundredth and visibly fails around a tenth. That is true. But along their path C is held at four millionths. At that size C’s effect is a few parts in a trillion, so the path lies on the exactly solvable plane. Every curve in that section can be written down. Their tabulated error at the smallest B, 5.03 × 10⁻⁸, is what the closed form gives to the digits shown.

The peeling loop teaches the most. Its lap time is 2π/(A−B), and as B climbs toward A that time goes to infinity. The loop slows until it no longer goes around at all, and its peeling rate diverges with it. The paper explains the fast growth of its error with an algebraic identity about reciprocal pairs. The identity is correct, but the underlying cause is that this loop’s lap time is running out.

The better test of “accurate beyond the small regime” is to leave the solvable plane, so I turned C up with B, C equal to B the whole way. The closed form, which was only derived for C at zero, still matched shooting to 0.04 percent at B = 0.08 and to within six percent at B = 0.3. Averaging was off by a third there.

Two more wrong turns

At B around 0.2 my continuation said the peeling loop had turned into a circling one. That would have been a bifurcation, and I’d have liked it to be one. It was the solver taking a step too big and landing on a different loop entirely, half a radian away. With smaller steps the peeling loop carried on, unchanged in character, to B = 0.375.

And at B = 0.9 on their path my code returned a peeling exponent of 7.4 where the formula says 59.6. A multiplier of e⁵⁹ is a number with twenty-six digits, and ordinary double precision holds about sixteen. They computed with thirty. I stopped trusting my numbers above B = 0.63 and said so in the note I sent them.

What I keep from it

The average is a good instrument as long as you remember what it holds fixed. Here it held fixed the lap speed, the thing the small knobs changed first. The fix is small, just one factor of (A ± B) in a denominator, and I found it by solving the one case that can be solved exactly before trusting the approximation anywhere else.


Code, predictions (committed before each run), figure and tables: research/abc-flow/. Paper: W. Szumiński, J. Llibre, arXiv:2609.17449 (2026). Arnold’s flow: V. I. Arnold, C. R. Acad. Sci. Paris 261 (1965).

← Where everyone was standingThe bracket that only held in double →