Nonlinearity and the Reynolds Number in the Navier–Stokes Equations
Navier–Stokes, part 5: why the convective term lets patterns create finer patterns, what the Reynolds number measures, and where turbulence begins
navier-stokes
nonlinearity
convective term
burgers equation
reynolds number
turbulence
fluid dynamics
pde
physics simulation
Posts 10–13 built one full update of the flow: solve the pressure Poisson equation, then take an Euler step. The logical next step is to understand how the velocity field changes under that update.
For the Wave- and Heatequations, we showed in post 5 and 6, how the field of interest at each step can be split into individual Fourier modes, each of which evolves independently. That is what linearity buys: no mode ever creates another. The convective term of the Navier–Stokes equations is nonlinear, so that guarantee is lost.
Stir a box of water with one big, slow swirl, and soon smaller eddies appear that nobody put in. In Navier–Stokes, patterns create new, finer patterns. That makes fluids hard to simulate and hard to learn, because a FNO throws away the fine modes (Post 9) and networks learn fine detail last (spectral bias, Post 7). The catch for the NSE is a single term, Post 10's convective term. It is nonlinear because the flow transports itself: the velocity is both the thing being carried and the thing doing the carrying. Every other term of the momentum equation is linear.
However, a single update is still a fixed calculation, so it stays predictable. What is lost is the ability to understand it one mode at a time, and the guarantee that no new frequencies appear.
What linear means
A function or "machinery" such as the heat stencil is linear if it passes two checks, together called the superposition principle. Doubling (homogeneity): a field twice as tall gives an output exactly twice as tall. Adding (additivity): two fields added together give the two separate outputs added together.
(1)
Where denotes the machine, any operation that takes a field and returns a field. and are two test fields, added point by point, and is an ordinary number such as 2.
Test it on the stencil , where denotes the value at grid point and the grid spacing, at three neighbouring points whose values are simply numbers:
Field
Stencil output
(1, 3, 2)
2 − 6 + 1 = −3
(2, 6, 4)
4 − 12 + 2 = −6 = 2 · (−3) ✓
(0, 1, 0)
0 − 2 + 0 = −2
(1, 4, 2)
2 − 8 + 1 = −5 = −3 + (−2) ✓
It passes because the stencil only multiplies each value by a fixed weight (1, −2, 1) and adds. It never multiplies one value of the field by another.
What additivity buys. The heat and wave equations both use this linear second-derivative stencil. That lets us split the input into individual clean waves of different frequency, apply the stencil to each one individually, and add the outputs, getting the same result as applying it to the summed signal. This is exactly what Post 5 did, and it is why each frequency gets one fixed number, the growth factor of wavenumber , describing how it develops at every step without knowing about the other frequencies. No other frequencies can come into existence.
The convective term fails the doubling test
From here on, is the velocity along a line (m/s), as in Post 10's 1D derivation. The convective term is velocity times the slope of velocity:
(2)
Where denotes the convective term as a function of the velocity field (m/s²), the position (m) and its value at grid point , computed with Post 11's central difference for the slope.
If the convective term had a fixed growth factor , it would act like , and doubling the input would double the output. Instead:
(3)
The convective term quadruples, not doubles, so it fails the doubling test.
Physically: make a river that speeds up downstream twice as strong. The velocity differences double, so there is twice the speed-up per metre, and parcels travel twice as fast, covering twice the metres per second. Twice per metre times twice the metres per second is four times the change per second.
No fixed number exists
A growth factor means output = fixed number × input, so the doubling test really asks whether one fixed number can describe what the term does to a pattern. Output ÷ input at the middle point:
Pattern
Input
Convective output
Ratio
Heat stencil ratio
(1, 3, 2)
3
1.5
0.5
−3/3 = −1
(2, 6, 4)
6
6
1.0
−6/6 = −1
The convective "factor" jumped just because the pattern got taller, while the heat stencil keeps the same number no matter how tall the pattern is.
The convective term fails the adding test
Additivity would mean that each field develops on its own, independently. The same two fields:
Field
Values
Velocity
Slope
Output
(1, 3, 2)
3
0.5
1.5
(0, 1, 0)
1
0
0
(1, 4, 2)
4
0.5
2.0
The separate outputs add to 1.5, the sum gives 2.0: a leftover of 0.5.
Multiplying out the bracket
The slope on its own is additive, being a fixed-weight stencil (0.5 + 0 = 0.5 in the table). So the summed field's convective term is total velocity times total slope. Multiply out, every part times every part:
(4)
Where and denote the two fields' slopes. Two of the four products are the separate outputs. The bracket holds the cross terms, which exist only when both fields are present together. In numbers: 3 · 0.5 = 1.5, 1 · 0 = 0, cross terms 3 · 0 + 1 · 0.5 = 0.5, total 2.0 ✓. From that follows, that different patterns of velocity constantly interact with each other.
Who carries whom
Post 10 gave the two factors of two roles: the drift speed in front is the carrier, and the slope belongs to the carried pattern. So reads " carries ", and reads " carries ".
Picture pattern A, a river that speeds up downstream (it has a slope), and pattern B, a uniform extra push (no slope). Alone, B changes nothing: water drifting through a uniform flow never meets a different speed. Added to A, the extra drift from B carries the water across A's speed-up zone faster, so it picks up A's speed-up faster. That is "B carries A". "A carries B" is zero because B has no slope, so only one cross term survives, as at the table's middle point (1 · 0.5). If both patterns had slopes, both cross terms would act, each on the other. After adding, there is still just one body of water with one velocity at each point. The carrier wording describes the terms of the formula, not two separate waters.
Two warm spots on a rod, even overlapping, spread as if the other were not there. In a fluid, one pattern changes how fast the water travels through the other, so the two can't be computed separately.
The other terms are linear
The rule: a term is linear when the field appears once, multiplied only by fixed numbers, and nonlinear when the field multiplies the field. Being a derivative is not the criterion: on a grid every derivative is a fixed-weight stencil, the convective term's included.
Friction: the heat stencil times the fixed number . With : (1, 3, 2) → −1.5, doubled → −3 ✓.
The time derivative: on a grid (new − old)/, fixed weights . With : 3 → 3.2 gives 2, doubled 6 → 6.4 gives 4 ✓. A second field 1 → 1.1 gives 1, and the sum 4 → 4.3 gives 3 = 2 + 1 ✓.
The no-pile-up rule: a fixed-weight stencil (Post 11).
The 3D convective term: pieces like , where denote components of the 3D velocity : one component times the slope of another. Nonlinear.
Pressure is computed from the convective term at every step, through Post 13's , where denotes the pressure and the density. It is the brake that stops pile-ups, and pile-ups come from delivery, so when the convective term grows 4× under a doubled velocity, pressure has to grow 4× to keep up. In Post 13's channel flowing into a wall, water arriving twice as fast overfills the region in front of the wall four times as strongly, so the brake must push four times as hard. The term is linear in, but grows with the square of . The convective term is the only source of nonlinearity, and pressure merely inherits it.
Why look at frequencies at all
Describing a field as a sum of frequencies is always allowed: Post 8's recipe lists the ingredients of any snapshot. Predicting each frequency separately and adding the results is what nonlinearity breaks. So the question becomes: how does the convective term change the recipe, and which frequencies come out that weren't in? For the heat stencil the same frequencies always came back out again, only scaled.
While it is meaningless to split the field into individual modes to see how each one individually evolves, it still makes it easier to understand what happens if we take a simple velocity field with a manageable number of Fourier modes and see how they act on each other. The goal is to show that multiplying waves creates frequencies that were not there. With simple inputs we can watch a single "meeting" of two waves, whereas in a real field every pair meets at once. The convective term is such a product: if the velocity is a wave, its slope is a wave too, so is (wave) × (wave).
Where denotes the imaginary unit with (not , which is the grid index), an angle on the unit circle in radians, as in Post 3 (not the network parameters), and a point on the circle of radius 1. is that point's horizontal coordinate, not itself a point on the circle: as the point rotates, it slides back and forth between −1 and 1. is the vertical coordinate. Call the horizontal axis the real axis, not "the x axis", since is position. Checks: gives 1, gives , gives −1. One radian is the angle swept by walking a distance along a circle of radius , so a full turn is .
Negative frequencies
In the angle decreases, so the point turns clockwise. It mirrors across the horizontal axis, with the same horizontal coordinate and a flipped vertical one, because and . So .
A real wave as two rotating points
Adding a point and its mirror image cancels the vertical parts, and subtracting them cancels the horizontal ones:
(7)
Where both points are written with Equation (5) at . The cancel, and dividing by 2 gives the second line.
(8)
Where the minus sign flips both parts of the mirror point, so the cosines cancel and appears twice. Dividing by gives the second line. Any frequency works in place of 4. So a real wave is two points rotating in opposite directions whose vertical parts always cancel. That is why a real signal has matching negative frequencies, and why Post 9's RFFT stores only one of each pair.
Two waves meet
Multiply , one operation per line.
Line 1: replace each cosine by its two rotating points (Equation (7)). This says the same thing, written as points:
(9)
Where denote the two points of wave 1 and those of wave 2.
Line 2: collect the constants in front.:
(10)
Line 3: multiply out, every part times every part, following :
(11)
Line 4: each meeting adds angles (Equation (6)). Both anticlockwise: 4 + 6 = 10. Forward 4 and backward 6 leave a net 2 backward: −2. Its mirror: +2. Both clockwise: −10.
(12)
Where each exponent is the sum of the two meeting angles. Same direction gives the sum, opposite directions give the difference.
Line 5: regroup into mirror pairs, turn each pair into (Equation (7)), and multiply the in:
(13)
Where nothing imaginary is left. 4 and 6 go in, and 10 and 2 come out, neither of which was in the input. 10 repeats every ≈ 0.63 m, which is finer than either input (≈ 1.57 m and ≈ 1.05 m), while 2 repeats every ≈ 3.14 m, which is coarser.
Existing frequencies change in amount. The sum and difference are always produced. With , 4 and 6 produce 2 and 10: the 2 strengthens or weakens the existing 2, and only the 10 is new.
Cosine meets sine. The convective term multiplies the velocity by its slope, and the slope of a cosine is a sine. So in the real term, cosines meet sines, not cosines. This changes nothing about which frequencies come out: the same five lines, with Equation (8) for the sine, give . That is again 10 and 2, the sum and the difference. The only change is that the result is made of sines instead of cosines. When taking the slope, keep its frequency factor:
(14)
Where denotes the wave's frequency. A wave packed times as tightly rises and falls times as steeply.
A wave meets its own slope
One wave, , has slope . Its frequency is 4 because a wave's slope repeats exactly as often as the wave, and the factor in front is 4 because tighter packing makes the wave steeper. With both factors as rotating points, the convective term is:
(15)
Where the slope's −4 rides along with the sine's . Constants to the front, then remove from the denominator by multiplying with :
(16)
Where the second line uses . All the constants together are just :
(17)
Where the first bracket is the velocity and the second its slope. Four meetings, with the minus signs tracked:
(18)
Where the four terms are, in order: both points anticlockwise (8), forward times minus backward (0), backward times forward (0), and both clockwise with the minus (−8). Since , the frequency-0 parts are −1 and +1, and they cancel:
(19)
Frequency 4 goes in, frequency 8 comes out, and nothing at frequency 4: the same-direction meetings gave ±8, the opposite-direction ones gave 0, which cancelled. So even a single wave, completely alone, does not come back as "itself times a number", the way it did with . The convective term moves frequency 4's content to frequency 8, twice as fine: a wave interacting with itself makes a finer wave. cannot be at all, because the output is a different frequency.
Steepening
Burgers' equation as a toy model
To see the new frequencies in space, isolate the convective term in 1D. We keep the term exactly as it is and only drop the pressure and the no-pile-up rule, because real 1D water can't change speed along a pipe (Post 11) and has nowhere to go sideways:
(21)
This is Burgers' equation. So the only force a parcel experiences in this case is due to friction. If friction is zero: every parcel keeps its own speed and just coasts.
$ press play: every parcel keeps its speed, the sensor reads whoever arrives
// eq. (21)
━ u now● parcel at its own speed● next to arrive│ sensor: drag itstrip: ● start speed of each passing parcel
sensor reads u
1.50 m/s
change ∂u/∂t
+1.50 m/s²
delivery −u ∂u/∂x
+1.50 m/s²
friction ν ∂²u/∂x²
0.00 m/s²
no friction: change = delivery, ∂u/∂t + u ∂u/∂x = 0. the sensor only reads speeds the parcels already had.
trails: last 0.15 s · time runs at ¼ speed · ν is made up (water: 0.000001 m²/s)
Coasting parcels
Three parcels on a velocity bump:
Parcel
Start
Speed
After 0.5 s
After 1 s
back foot
−1 m
1 m/s
−0.5 m
0 m
top
0 m
2 m/s
1 m
2 m
front foot
1 m
1 m/s
1.5 m
2 m
At the front, the gap between top and front foot shrinks from 1 m to 0.5 m to 0 m: the same speed drop is squeezed into less space, so the front gets steeper, until after 1 s it is a jump and the slope becomes infinite - the equation breaks. At the back, the gap grows from 1 m to 2 m, so it gets flatter. Essentially like cars catching up with slower cars ahead. The side that steepens is the front, the side the water moves towards.
The figure below draws the table. Both views plot the velocity over the position at 0, 0.5 and 1 s and mark the three parcels on every curve. With friction off, each parcel slides sideways at its own height: the top moves 2 m, the feet 1 m, and the front closes into a jump. With friction on, using a made-up kinematic viscosity m²/s, the top slows down and the front foot speeds up on the way, so the gap between them never closes and the front stays steep but smooth.
$ fast parcels catch up with slow ones
// eq. (21)
╌╌ 0 s── 0.5 s━━ 1 s● parcel and its path● speed changed by frictionreadouts 0 s → 1 s · ν made up (water: 10⁻⁶ m²/s)
top parcel · off
2.00 → 2.00 m/s
steepest front · off
−1.0 → −∞ 1/s
top parcel · on
2.00 → 1.77 m/s
steepest front · on
−1.0 → −3.6 1/s
without friction no parcel changes speed, so the front closes into a jump; friction slows the top and speeds up the front foot, so the gap stays open (0.20 m) and the front stays smooth.
One Euler step
With , the rate is , which for is by Equation (19):
(22)
Where is the current field and s, exaggerated so the change is visible.
Near the peak the velocity is positive, so the water moves right, and the front is the downhill side right of the peak. On its upper half, between the peak and the midpoint at m, lifts the wave, and on its lower half, pushes it down. The drop happens over a shorter stretch.
Steep fronts need high frequencies. In frequency space, the same event shows up as new, higher frequencies being added. "The front sharpens" and "high frequencies appear" are one statement, because a steep front needs waves with large slopes, and a wave's slope grows with its frequency (Equation (14)).
$ press play: fast water catches up with slow water
━ u now┄ start● parcels at their own speed u▒ −Δt·C(u), Δt = 0.05 s: lifts ↑ / lowers ↓▮ in the start▮ new, made by C(u)▬ amount at the start
// a sharper front = new, finer frequencies: one event, seen in space and in frequency
steepest slope
−4.0 /s
new frequencies
0
finest frequency
4 rad/m
start
convective term C(u)
ν ≥ 0.01 m²/s: a thinner front would be finer than the grid.
In real 2D and 3D water, pressure prevents the steepening/pile-up by pushing the water sideways, so instead of a jump, existing swirls get stretched into ever thinner bands. A gas however, which can be squeezed, really can form these jumps.
In short: linear terms pass the doubling and adding tests, so each frequency keeps one fixed growth factor. The convective term fails both because the velocity multiplies itself, so every pair of frequencies produces its sum and difference, and fronts steepen. The convective term steepens and creates finer detail, friction smooths it away, and the Reynolds number measures which of the two wins.
The Reynolds number
Which of the two wins decides what a flow looks like and how hard it is to simulate. Friction pulls each parcel's speed toward its neighbours' average, the heat equation's smoothing (Post 12). If it wins, the flow stays smooth and orderly, like honey poured from a spoon, with few frequencies that a solver or an FNO handles easily. If convection wins, fine detail is made faster than friction can erase it, and swirls inside swirls appear at every size. That is turbulence, as in a river or the air behind a car.
The Reynolds number measures in one number how big the convective term is compared to friction. It grows with the flow's speed and size and shrinks with the viscosity. It is built in three steps:
Two things set how strong convection and friction are: the speed of the flow and the physical distance over which the velocity changes.
Each is pulled out of its formula: the slope for convection, the curvature for friction.
Comparing the two terms gives the Reynolds number.
The same flow, just faster
Friction in 1D, , is the heat stencil times , with the made-up used above, which makes both terms equally big for (1, 3, 2). With , friction is 0.5 · (2 − 6 + 1)/1² = −1.5 and convection 3 · (2 − 1)/(2 · 1) = 1.5. The table drops the /1² and writes 2 · 1 as 2. The same flow, just faster means every velocity multiplied by the same number:
Velocities
Friction: × heat stencil
Convective: × slope
Bigger
(0.5, 1.5, 1): every velocity × ½
0.5 · (1 − 3 + 0.5) = −0.75
1.5 · (1 − 0.5)/2 = 0.375
friction, 2×
(1, 3, 2): the pattern from above
0.5 · (2 − 6 + 1) = −1.5
3 · (2 − 1)/2 = 1.5
equal
(10, 30, 20): every velocity × 10
0.5 · (20 − 60 + 10) = −15
30 · (20 − 10)/2 = 150
convection, 10×
Friction changes by the same factor as the velocities (½, 1, 10), convection by that factor squared (¼, 1, 100).
Speed: strength times shape
The Reynolds number should settle who wins with one number per flow, but a flow has a different speed at every point. What do "how fast is this flow" and "the same flow, just faster" mean?
Split the velocity field into a strength and a shape. In a river that is fast in the middle and slow near the banks, "the middle is three times faster than the left edge" is the shape, and how fast the whole river runs is the strength:
(23)
Where denotes the velocity at grid point (m/s), one representative speed for the whole flow (m/s), the of Post 11's Mach number, here chosen as the largest velocity, and the shape at point : the velocity in units of , a plain number without units.
Velocities
Strength
Shape
(0.5, 1.5, 1)
1.5
(1/3, 1, 2/3)
(1, 3, 2)
3
(1/3, 1, 2/3)
(10, 30, 20)
30
(1/3, 1, 2/3)
The shape column is identical: "the same flow, just faster" means keeping fixed and changing only . Inserting Equation (23) into friction, with kept as a symbol, isolates the speed:
(24)
Where every velocity carries one , so is a common factor, and the rest depends only on the shape and . Likewise for the convective term of Equation (2):
(25)
Where one comes from the carrier in front and one from the slope of the carried pattern. Friction is times a fixed number, convection times one, as in the table.
Distance: the size of the pattern
Both formulas still contain . Does the result depend on how finely the grid is laid? Measure the slope of a velocity rising evenly from 1 m/s to 3 m/s over 1 m with the central difference on two grids:
Grid spacing
Values (m/s)
Neighbour difference
Slope ((m/s)/m)
0.5 m
1, 2, 3
3 − 1 = 2
2/(2 · 0.5) = 2
0.1 m
1, 1.2, …, 3
1.4 − 1.0 = 0.4
0.4/(2 · 0.1) = 2
On the finer grid the neighbours are closer, so their difference is smaller too, and the two cancel. The slope is 2 (m/s)/m either way: a speed change of 2 m/s over 1 m. The same rise over 2 m gives half the slope, 1. What matters is the distance over which the velocity changes, called the size of the pattern and measured in metres.
only seemed to matter because the bump (1, 3, 2) is a whole pattern squeezed onto three points. There the grid spacing is the width of the pattern, and changing would secretly stretch the bump.
Pulling out speed and size
Now each term is split into (only speed and size) × (only the shape). For the convective term, one operation per line:
(26)
Where because the points of the three-point bump are exactly one pattern size apart. After pulling out , the line reads (only speed and size) × (only the shape). The shape part, 1 · (2/3 − 1/3)/2 = 1/6, has no , no and no units: a fixed number for this shape. Check: m/s and m give 9/6 = 1.5, as in the table. Friction works the same way:
(27)
Where is inserted into Equation (24) and the shape part is 2/3 − 2 + 1/3 = −1. With , and this gives −1.5, as in the table.
So the convective term goes like: a fixed number from the shape, times . That number never changes for the same shape, so how a term reacts to speed and size sits entirely in and . It is called the shape number and dropped from here on. Convection grows with and shrinks with , friction grows with and shrinks with .
Comparing the two terms
Who wins is a question of the ratio of convection to friction:
(28)
Where means "grows like", because the shape numbers are dropped. , and denote the typical speed (m/s), the size of the pattern (m) and the kinematic viscosity (m²/s), and the Reynolds number. The top, , holds what strengthens convection: speed and size. The bottom, , is the strength of friction. Doubling the speed or the size doubles , and a fluid twice as viscous halves it. The units cancel, , so is a plain number, and honey and air share one scale.
Choosing U and L
is a choice, so could any be chosen? Write a made-up field (3000, 20, 400) m/s with m/s, so . That is mathematically allowed, but comes from dropping the shape numbers, and the 3000 now hides in the shape: would keep a meaningless 1 m/s. must be a speed actually typical for the flow, for example the largest, so the speed lives entirely in and the shape stays between −1 and 1: here 3000 m/s.
Likewise, must be the distance over which the velocity actually changes. In a pipe, water clings to the wall at speed zero (Post 12) and is fastest in the centre, so the velocity changes across the pipe, over about its diameter. Along the pipe the profile is the same everywhere (Post 11), so the length plays no role. A 2 cm pipe with 1 m/s in the centre has a real slope of about 100 (m/s)/m, and m would estimate 0.001, wrong by a factor of 100 000 for the shape number to absorb, as with m/s. Diameter or radius is convention, since the factor 2 is a shape number, but measured thresholds use the diameter. Even where calm and swirling regions sit side by side, as behind a stone in a river, one , built from the incoming speed and the stone's diameter, labels the whole setup: somewhere in it, convection can beat friction.
Reynolds numbers of real flows
Water has m²/s (Post 12), honey about 0.007 m²/s and air about m²/s.
Flow
Who wins
Honey dripping off a spoon
0.01 m/s
0.01 m (stream width)
≈ 0.01
friction, by far
Stirring coffee
0.1 m/s
0.05 m (cup)
≈ 5000
convection
River
1 m/s
2 m (depth)
≈ 2 · 10⁶
convection, by far
Air around a car
30 m/s
4 m (car length)
≈ 8 · 10⁶
convection, by far
The range runs from 0.01 to millions. Picture water flowing through a long, straight pipe. In this setup, is the average speed of the water and the diameter of the pipe. Below the flow is smooth and orderly, and above it, it breaks up into swirls: turbulence.
Turbulence
Turbulence is what a flow looks like at large , when convection creates fine detail much faster than friction can erase it. Three things then happen at once: swirls of every size coexist, as big swirls break into smaller ones down to a size where friction wins. The flow never settles into a fixed pattern. And tiny differences grow.
Big swirls make smaller swirls
Start with , one big, slow swirl, and apply the sum-and-difference rule at every Euler step. Step 1: 4 meets 4 and gives 8 (Equation (19)). Step 2: 4 and 4 give 8, 4 and 8 give 12 and 4, and 8 and 8 give 16. Step 3 reaches 32. The finest frequency roughly doubles every step: 4, 8, 16, 32. Frequency 32 repeats every 0.2 m, the original every 1.57 m. Differences also refill coarser frequencies, but the fine end keeps moving out, and nobody put it there. This handing down to ever smaller swirls is the cascade.
A swirl of size, where denotes a length in metres, is the part of the flow where the velocity changes over about . In 1D, a 1 cm swirl corresponds to waves repeating about every centimetre. Real spinning swirls exist only in 2D and 3D, but along a line through one the velocity again changes over about its size, and this pattern counts.
Where the cascade stops
Friction is still there, so at some swirl size it must win. Applied to one swirl size, the Reynolds number is:
(29)
Where denotes the size of one swirl (m), the typical speed of swirls of that size (m/s) and their Reynolds number. Smaller swirls have a smaller and are also slower, though only a little, because each carries only a small share of the motion, so drops with every generation. At the cascade stops: such swirls are smoothed away before they can break up, and their motion ends as a tiny bit of heat.
How small the smallest swirls get
The Russian mathematician Andrey Kolmogorov found in 1941 how small the smallest swirls get. His rule is stated without derivation, like Post 11's Mach rule of thumb:
(30)
Where denotes the size of the smallest swirls (m) and the Reynolds number of the whole flow. The exponent means "divide by ": the larger , the smaller the smallest swirls. For the river, , so 2 m/53 000 ≈ 0.04 mm, 50 000 times smaller than the river's depth.
appears twice, in front and inside , so seems to depend strongly on . Writing out:
(31)
Where the last line flips the fraction to make its power positive. So grows only with the fourth root of : at equal speed and viscosity, a flow 10 000 times bigger has smallest swirls only 10 times bigger.
Take an ocean 100 km across and, since the rule is for 3D flow, with some depth. is the size of the biggest motions, the currents spanning it, so 100 km: the motions set , not the container. is their typical speed, say 0.1 m/s, not the average of all velocities, which could be near zero if water flows both ways. Then and 3 mm. Swirls keep breaking up while , and water's is only m²/s, so "swirl speed × swirl size" must shrink all the way to that value. Both shrink only slowly per generation, so even a 100 km current ends in millimetre swirls.
Hard to simulate: the grid
A solver only sees swirls larger than its grid spacing, because smaller ones fall between the points. So must be about while the grid still covers :
(32)
Where denotes the number of grid points per direction. cancels, and dividing by is multiplying by . At 16 bytes per point, three velocity components plus pressure at 4 bytes each:
Flow
Points per direction
Points in 3D,
One snapshot
Stirring coffee
5000
≈ 600
≈ 2 · 10⁸
≈ 3 GB
Air around a car
8 · 10⁶
≈ 1.5 · 10⁵
≈ 3 · 10¹⁵
≈ 50 000 TB
The math per step is not harder: it is the update loop of Post 13. But it runs on vastly more points and with smaller time steps, because a finer grid forces a smaller (the logic of the CFL condition, Post 6). The heat equation never creates finer detail than it starts with, so a moderate grid suffices for it. High- simulations therefore compute only the large swirls and estimate the effect of the small ones, and making that estimate learnable is one place neural networks come in.
Hard to simulate: errors grow
Imagine two copies of the same flow, the true one and the one a solver or network computes. They start almost identical, but a solver errs a little at every step and a network never predicts perfectly. Their difference is the error (Post 5). Over many steps the heat equation shrinks it, because smoothing flattens an error bump, and the wave equation keeps its size (marginal stability, Post 6). Turbulence makes it grow until the computed flow has nothing to do with the true one. That is why weather forecasts fail beyond about two weeks: tiny measurement errors grow, however fast the computers are. A network rolling out its own predictions (Post 4) carries each small mistake forward to be amplified.
Write the computed velocity as , where denotes the error (m/s), the computed minus the true velocity. Its convective term is the adding test with and , so Equation (4) gives four pieces:
(33)
Where the four pieces mean:
is the true flow alone, unrelated to the error.
is tiny times tiny: an error of 0.001 with a slope of about 0.001 gives about 0.000001, so it is ignored.
: the true flow carries the error like a river carries a leaf, which moves but doesn't grow. With water flowing right through true velocities 3 | 2 | 5 | 1 m/s and 3.001 computed at the first point, the error slides to the next point, split as 0.0005 and 0.0005 halfway, and arrives as 0.001. The total is unchanged.
: the error carries the true flow, as pattern B carried pattern A above. The water drifts a bit too fast or too slow and so crosses the true flow's speed changes too fast or too slow. Only this piece changes the error's size.
Let the water flow right and speed up downstream, a positive slope, and picture the error as a small bell-shaped bump around a point B. A fixed point shows whatever water arrives there (Posts 10 and 13).
Positive error. The water around B, also just upstream of it, is too fast, so B is fed from further upstream than it should be. With a positive slope that water is slower, which partly cancels the "too fast": the error shrinks. The too-fast water also leaves B too far downstream, but what B shows is what arrives.
Negative error. The water is too slow, so B is fed from not far enough upstream, closer to B, where the water is faster. That partly cancels the "too slow": this error shrinks too.
Negative slope, the water slowing downstream: everything flips, and the error grows in both cases.
The sign of the slope decides, not the sign of the error. Twice the error means twice the extra drift and twice the change, so the error grows in proportion to its own size. The bump does both at once: it is carried downstream, while its height shrinks where the true flow speeds up and grows where it slows down.
Why the errors don't cancel
Errors ride with the water through speed-up and slow-down regions alike, so shouldn't the effects cancel? For one piece of error passing through equally strong regions in turn they roughly do, as in a 1D flow. The real runaway needs 2D or 3D.
A drop of milk stirred into coffee does not move around as a drop: it is pulled into a long thin thread that folds and stretches and never gathers back, so two milk particles that started side by side end up far apart. The reason comes from Post 11: water cannot be squeezed, so where the flow squeezes it in one direction, it stretches it in another, as the dyed square kept its area. Squeezing thins the drop, stretching lengthens it, and the long direction keeps growing. The true and the computed flow are like two such particles: the error is how far apart they drift, and stirring at every swirl size pulls them apart. Like the weather, this is known behaviour, stated without derivation.
Hard to simulate: high frequencies
These fine swirls are the high frequencies an FNO truncates (Post 9) and networks learn last (spectral bias, Post 7), and in turbulence the cascade keeps refilling them down to .
Looking back
The convective term is the one nonlinear term of the Navier–Stokes equations. It makes patterns create finer patterns, friction smooths them away, and the Reynolds number says which wins. At large the result is turbulence, hard to simulate because of the grid, growing errors and high frequencies. "Re = 1000" in a paper now means something concrete: speed times size is a thousand times the viscosity, and a threshold like the pipe's 2300 says whether to expect swirls. These difficulties are why learned models and training through solvers are interesting.
The Navier–Stokes series ends here. The next posts turn to differentiable physics: a solver is a chain of simple, differentiable steps, so gradients can flow through it like through network layers.