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, which is non linear. 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).
Two waves meet
Each wave is first rewritten as rotating points, using Post 5's Euler's formula , where denotes the imaginary unit with , the wave's frequency and the position (m). is a point on the unit circle, with as its horizontal and as its vertical coordinate, and as grows it turns anticlockwise (forward). Its mirror image across the horizontal axis, , turns clockwise (backward), like Post 8's spinning clock hand, so a negative frequency means a backward turn. Call each of them a rotating point. Three rules follow:
(5)
Where and denote the frequencies of two rotating points, negative for clockwise. Adding a point and its mirror image cancels the vertical parts and leaves , as in Post 5. Subtracting them cancels the horizontal parts and leaves . Dividing by 2 and by gives the first two lines. The third line is the same post's exponent rule: multiplying two rotating points adds their angles.
Multiply , one operation per line.
Line 1: replace each cosine by its two rotating points (Equation (5)). This says the same thing, written as points:
(6)
Where denote the two points of wave 1 and those of wave 2.
Line 2: collect the constants in front.:
(7)
Line 3: multiply out, every part times every part, following :
(8)
Line 4: each meeting adds angles (Equation (5)). Both anticlockwise: 4 + 6 = 10. Forward 4 and backward 6 leave a net 2 backward: −2. Its mirror: +2. Both clockwise: −10.
(9)
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 (5)), and multiply the in:
(10)
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 the sine line of Equation (5), 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:
(11)
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:
(12)
Where the slope's −4 rides along with the sine's . Constants to the front, then remove from the denominator by multiplying with :
(13)
Where the second line uses . All the constants together are just :
(14)
Where the first bracket is the velocity and the second its slope. Four meetings, with the minus signs tracked:
(15)
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:
(16)
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:
(17)
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. (17)
━ 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. (17)
╌╌ 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 (16):
(18)
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 (11)).
$ 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.
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 and size
A flow has a different speed at every point, so "the same flow, just faster" needs a precise meaning. Split the velocity into a strength and a shape:
(19)
Where denotes the velocity at position (m/s), one representative speed for the whole flow (m/s), here the largest velocity, the of Post 11's Mach number, and the shape: the velocity in units of , a plain number between −1 and 1. All three rows of the table have the shape (1/3, 1, 2/3), with = 1.5, 3 and 30 m/s. "The same flow, just faster" keeps fixed and changes only .
The second ingredient is the size of the pattern: the distance in metres over which the velocity changes, for example the width of a river that is fast in the middle and still at the banks. A velocity that changes by about over about has a slope of about , whatever grid samples it: on a finer grid the neighbours are closer, and their difference is smaller by the same factor. The curvature is the slope of the slope: the slope changes by about over a distance of about , so the curvature is about . Inserted into the two terms:
(20)
Where denotes the kinematic viscosity (m²/s) and means "grows like": each term equals its right-hand side times a shape number, a plain number that depends only on , not on or . Check with the table, whose bump has its three points one pattern size apart, so m, and m²/s. In every row, convection is (0.375, 1.5 and 150) and friction (−0.75, −1.5 and −15). The shape numbers 1/6 and −1 never change, because the shape never changes. So convection grows with and shrinks with , while friction grows with and shrinks with .
Comparing the two terms
Who wins is a question of the ratio of convection to friction:
(21)
Where again 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
Dropping the shape numbers only works if they are moderate, neither huge nor tiny. So must be a speed typical for the flow, such as the largest, which keeps the shape between −1 and 1, and 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. The pipe's length plays no role, because along the pipe the profile is the same everywhere (Post 11). Diameter or radius is a 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 (16)). 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:
(22)
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:
(23)
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:
(24)
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 :
(25)
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
The error is the difference between the true flow and the one a solver or network computes (Post 5). It is never zero, because a solver errs a little at every step and a network never predicts perfectly. Over many steps the heat equation shrinks it and the wave equation keeps its size (Post 6). Turbulence makes it grow until the computed flow has nothing to do with the true one.
A drop of milk stirred into coffee shows how. It does not move around as a drop: it is pulled into a long thin thread that folds and stretches, so two milk particles that started side by side end up far apart. Water cannot be squeezed (Post 11), so where the flow squeezes the drop in one direction, it stretches it in another, as the dyed square there kept its area. 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. This is known behaviour, stated here without derivation. It is why weather forecasts fail beyond about two weeks, however fast the computers are, and why a network rolling out its own predictions (Post 4) amplifies each small mistake it carries forward.
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.