Loading
A ten-unit run lost 5.115% of its dye. Keep the failed observation, change the transport method, measure again.
Explore the recorded preview
0707 / 10The vortex kept its shape. The frames were plausible. After ten model-time units, the 128-grid run had lost 5.115% of its dye.
The declared budget was 2%. The run failed.
That observation is more useful than a polished success story, because it separates two things that visual work makes easy to confuse: an image that continues to persuade, and a numerical method that continues to satisfy its contract.
For a passive dye in a periodic incompressible domain, with no continuing source and no diffusion-induced boundary flux, total dye mass should be conserved by the continuum transport model. A discrete method introduces error. The check therefore used a finite tolerance and a defined duration, rather than demanding an impossible bit-exact continuum result.
The measured quantity was the absolute relative change from the run's own initial mass:
mass drift (%) = 100 × |M(t) / M(0) − 1|A brightness average is not automatically that mass. The diagnostic must use the physical concentration representation and the cell measure, before the lighting and palette have made the field easier to see.
Absolute mass drift (%) at the selected model time
| Method / grid | Drift | Sampled maximum |
|---|---|---|
| Original · 128² | 5.115171% | 5.115171% |
| Corrected · 128² | 0.002808% | 0.002808% |
| Corrected · 256² | 0.005503% | 0.005503% |
Domain [0,1]², area 1. L and T are model length and time. Velocity: L/T; ν and κ: L²/T. Recorded E = ½Σ|u_cell|²ΔA is an area integral (L⁴/T²); the bars show its area mean Ē = E/area (L²/T²), numerically equal here. Density is omitted. Dye amount M = ΣcΔA has units concentration × L²; drift is a dimensionless percentage. No physical mass or joule calibration is implied.
Download the four measured records (JSON)Absolute mass drift from each run’s own initial mass. Original128: solid; corrected128: dashed. Samples at integer model times, not all ticks. Zoom shows only corrected128 on a labeled 0–0.01% axis; the unchanged gate is 2%.
The original curve is preserved. The corrected curves are not drawn by smoothing the old curve or adjusting its final value. They come from separate stored runs with distinct numerical versions and source identities.
The earlier tracer transport sampled an old concentration field at backtraced locations. This family of semi-Lagrangian methods is attractive for interactive work, but an interpolation-based sampling step is not automatically a conservative exchange between neighboring cells. The picture can remain stable while the sum changes.
The repair changed the transport method. Neighboring cells now share canonical face fluxes: what crosses one face leaves one cell and enters the next with the opposite sign. Limited reconstruction controls the face values; a two-stage SSPRK2 update and three common scalar subcycles advance the tracer. Diffusion uses a separate immutable right-hand side.
There is no final mass renormalization and no clipping step designed to force the reported mass back to its target. Such a patch could make the number look right without repairing the local transport account.
| Recorded method | Grid | Maximum sampled mass drift over ten units |
|---|---|---|
| Original periodic v1 | 128² | 5.115171% |
| Conservative periodic v2 | 128² | 0.002808% |
| Conservative periodic v2 | 256² | 0.005503% |
The maximum is taken over the stored integer-time samples. It is not an all-tick theorem. The fine-grid result is not smaller here, so the table should not be sold as a clean monotone convergence study. Both corrected cases pass the unchanged 2% budget; much narrower claims are justified than “the solver is now universally accurate.”
The two numerical methods were compared at fixed named conditions. This is not the viscosity-only A/B experiment from Part 4. Here, the method itself is the intervention. The historical public recording remains a v1 recording and must keep that identity.
The focused evidence includes 22 current periodic cases, eight baseline transport/copy/replay cases, and nine GPU tracer cases covering 18 Runge–Kutta stages. Those are different scopes, not interchangeable votes in one approval score.
The stage fixture compares the GPU path with independently accumulated FP64 face fluxes. Uniform preservation, sharp periodic seams, bounds and mass are checked. Equal-copy and replay cases test different properties. A final mass close to its starting value would not by itself reveal a wrong intermediate stage that happened to cancel later.
The downloadable measurements identify the method, recipe, timestep, resolution and evidence hash for the plotted runs. The compact file contains measurements, not a hidden replacement solver. Full general-engine qualification, physical-device work and human expert signatures remain separate.
The important repair was not a smaller number. It was a transport account that explains why neighboring cells should agree, followed by checks capable of disagreeing with the implementation.
Next: what happens when the neighbors at the edge are walls, an inlet or the other side of the world.
More to read
Four faces, one balance sheet. Why velocities live between cells, and why pressure is a global correction.
A world that wraps is not a wind tunnel. Following a parcel through periodic, closed and channel domains.
The fastest part of a shear flow can have zero local vorticity. Read the same field through three different questions.