Guide 08 · September 12, 2026

Keep the domain. Refine the core.

The refined backend now integrates the finite paper-surrogate forcing from rest. Cross-language field checks and a small trajectory pass; fleet runs are testing spatial and temporal sensitivity. These are development results, not a new best movie or a singularity demonstration.

The actual finite forcing is connected

The C++ backend reads the same cubic spline coefficients used by the Python profile, rather than fitting a second approximation. It retains the three finite pulse families, smooth activation, fixed localization, and bounded grid correction. Pointwise potential checks cover 20,480 samples per revision, including shrinking-core spacing through 16,384³-equivalent. The v2 maximum absolute potential difference is below 4.1 × 10−16. Full uniform-grid comparisons at 16³ and 32³ check all velocity and force components at seven times, including activation and t = 0.985; the largest force difference is below 3.8 × 10−9. These checks establish agreement between implementations, not resolution of the finest forcing.

uh = curlh(Abackground + Apulse, corrected);
fh = centered ∂tuh + (uh · centered ∇h)uh − νΔhuh.

A second force check covers 18 local patches, each 12³ cells, at 1024³- and 16,384³-equivalent spacing through t = 0.99983872. The unchanged Python/PhiFlow stencils evaluate padded arrays at the original full-domain coordinates; artificial patch edges are excluded. All velocity and force comparisons pass. These are prescribed-field samples, not evolved high-resolution frames, and do not establish continuum accuracy.

The prescribed force uses the profile, not the evolving solver state. Curl, transport derivatives, viscosity, and the correction are evaluated at each level's own spacing. The force is therefore mesh-dependent: this is the recorded finite surrogate, not a continuum forcing certificate or the proof's infinite all-order construction. Coarse/fine interfaces and weak forcing tails still require convergence checks.

A versioned localization correction

The port exposed a missing fixed cutoff on the core swirl potential. In the old v1 profile, a 128³ sample at t = 0.7 has speed about 0.00104 outside the advertised support, measured more than two cells beyond the cutoff. The new appendix-b-axis-v2-localized revision multiplies the core Az by the fixed radial/axial cutoff. Its exterior term was already localized and is unchanged. The new and old velocity fields agree exactly inside the plateau with stencil clearance; the revised field remains a discrete curl. V1 remains selectable and is still the default for reproducibility. The earlier homepage movies remain archived as v1; the current completed Oliver run uses v2.

From-rest clock and archive checks

The first localized two-level run advances from exact zero through t = 0.62 in 217 steps. All 26 scheduled native frames are present, including the quiescent interval, and all six velocity/force components read back. The saved instantaneous external force has zero measured difference from reevaluation. Peak speed reaches 0.11835 on this coarse test mesh; that value is not a new best result. The forcing-port record retains source identities, cross-checks, and trajectory measurements.

The exported log-phase ceiling now limits every active timestep alongside CFL and the maximum step. Only exactly zero velocity/force CFL before activation permits larger quiescent steps, clipped at activation and each output time. The first archive audit caught an upstream rule that skipped intermediate output times when one step crossed several intervals. The corrected rule stops at the next event; the failed audit is preserved alongside the passing rerun.

Three independent fleet runs use immutable copies of source, executable, and profile tables. Oliver's 32³-base/four-level reference and Kay's finer-time run have reached 0.85. Kay halves both the maximum timestep and phase ceiling. Young doubles the base and every level resolution to 64³, aiming for 0.985. Its finest cube has 512³-equivalent spacing, not a uniform 512³ grid. These layouts are convergence probes, not accepted production meshes. Full native vectors are saved. These earlier probes remain separate from the completed five-level Oliver run now featured on the homepage.

At the same t = 0.65, doubling spatial resolution changes the full velocity field by 6.12% in relative composite L²; halving the time limits changes it by 0.0439%. At 0.85, the temporal difference is 0.0672%. Composite norms exclude covered coarse cells and normalize by the finer reference; the spatial reference is volume-averaged onto the coarse grid. These are two-run sensitivity measurements, not observed convergence orders or accuracy bounds. The fleet sensitivity record retains all 35 temporal events and the five available spatial comparisons.

The longer reference exposed a second output-clock edge case: the writer accepted a frame just below its nominal time, then the clipper took a roughly 2.7 × 10−15 step and wrote that scheduled event again. The next-launch code uses the same event tolerance as the writer without increasing the CFL-limited step. A tighter-step rerun preserves all 26 outputs without duplicate events. The pinned fleet probes are unchanged; their redundant frames and the strict archive audit are retained for inspection.

Oliver's original archive status remains failed: it contains 41 files for 35 scheduled events. A separate audit finds every scheduled event, lists all six redundant files, and measures at most 2.44 × 10−14 velocity difference within a redundant pair. No files were deleted and no original status was rewritten. Kay has all 35 events and passes its original audit.

python -m navier_stokes_sim.amrex_profile --config backends/amrex/paper-reference.json --output outputs/profile.tbl
python -m scripts.paper_run --table outputs/profile.tbl --output outputs/paper-smoke \
  --base-n 16 --widths 0.5 --end 0.62 --max-dt 0.0005 --frame-dt 0.025

The full integrator now runs

Paired refinement: Oliver completed, Kay continuing

Oliver has completed all 280 native states through 0.995 and passed the full archive audit. It is now the homepage's best completed run; its completion record is separate from the immutable launch snapshot below. Kay's higher-resolution run continues under the runtime policy recorded here.

On September 12, 2026, Kay launched the 128³-base, five-level run from exact rest. The full periodic domain remains [−1,1]³; fixed nested half-widths are 0.5, 0.25, 0.125, and 0.0625. This gives 10,485,760 stored cells and 2048³-equivalent spacing only in the innermost cube. Increasing the base resolution improves the moving forcing region as well as the final core. Oliver launched a paired 64³-base/five-level reference with identical refinement regions, profile, binary, and time limits: its core spacing is 1024³-equivalent. The launch record is a timestamped verification snapshot, not a live progress counter or a completed result.

The first full-size preflight used about 6.8 GiB peak RSS, but its audit caught an upstream tiny-step fallback overriding activation and endpoint clipping. That failure is retained. The corrected full-size repeat reached 0.552 in 19 steps, preserved all three requested native outputs, and passed force readback with zero measured difference. Peak RSS was 7.02 GiB. This clears the launch/resource check, not a late-time accuracy test. Oliver also passed the destination threading check; its first detached launch failed before initialization because the sleep-prevention wrapper dropped a loader setting. Applying that per-process setting after the wrapper fixed the launch without changing the binary or global libraries.

Both runs target 0.995, with maximum integration step 0.00025 and forcing-phase ceiling 0.0375. A separate, predefined output schedule limits phase change between saved states to 0.75 and physical-time gaps to 0.025. It contains 280 native states with all three velocity and all three forcing components. Kay's raw double-precision fields require about 131.25 GiB before headers and checkpoints; Oliver's require 16.41 GiB. Both use four solver/four force threads and a 20 GiB free-disk reserve. Kay launched with a 48-hour solver wall limit and an 11.5 GiB solver-RSS stop threshold; Oliver launched with 24 hours and 3 GiB. These are stop limits, not completion-time estimates. Resource thresholds are sampled every five seconds, not operating-system hard memory limits.

On September 13, Kay's wall-clock cutoff was removed at the operator's request. A verified supervisor handoff retained the same running solver process and in-memory fields; no restart, checkpoint rollback, or numerical-setting change occurred. The 11.5 GiB solver-RSS threshold, 20 GiB free-disk reserve, five-second resource checks, sleep prevention, and 0.995 endpoint remain in place. Kernel exit-status tracking and the full history/native-field completion audit are retained. The runtime policy record preserves the original limits, source hashes, validation evidence, and a verified timestep after handoff. The original launch snapshot remains unchanged.

Resolution remains the main uncertainty. Across 96 overlapping local source sensors, halving spacing changes sampled velocity by about 0.65–0.89% and force by 13.5–23.2%, using the recorded sensor aggregation. A further halving reduces those changes. These are not global norms: the sensors deliberately include difficult annulus edges, and include the full background force rather than discarding small pulse envelopes. This supports a controlled refinement experiment, not an accepted fully resolved forcing or a blowup claim.

The nonuniform output clock passes 13 native checks and a one-/two-thread comparison of all 33 saved states from rest through 0.62, with maximum velocity difference below 2 × 10−16. Its output events only tighten the existing integration limits. An intentional low-RSS test stops the owned child and records failure without deleting data. Existing comparison jobs and old movies are unchanged.

Bounded CPU threading is available

The AMReX backend now has opt-in OpenMP for the solver and a separate cap on concurrent forcing boxes. Double precision, force stencils, and the two-time cache are unchanged; cache mutation and diagnostic sums remain serial. On the combined clock-fix build, one versus two threads differs by at most 1.39 × 10−16 across all 26 native frames from rest through 0.62; one versus four differs by 1.67 × 10−16. The production profile table is used, with force-difference window 2 × 10−7 and phase cap 0.0375. Late-time standalone source comparisons have zero measured difference. These are correctness checks, not measured speedups.

All twelve combined CTests pass. A separate two-thread coupled suite also passes all fourteen evolution cases and native restart equality. The threading record distinguishes the source and binary identities of those checks. Runtime thread limits are explicit and recorded; a serial or misconfigured binary is rejected before evolution. This shares work within one Mac. MPI and cross-machine domain decomposition remain disabled. The existing fleet comparison jobs are unchanged; their results will inform the next mesh and threaded launch.

Native spatial comparisons now volume-average an aligned finer reference onto the comparison grid, preserving the physical domain and refinement regions. An independent analytic initial-field check verifies the restriction and its composite norm; it does not evolve a new flow. This provides a like-for-like full-vector comparison when the two spatial runs reach matching saved times.

The backend builds the established AMReX-Fluids/incflo integrator at immutable commit 7491eea4d69bb, using the same pinned AMReX and AMReX-Hydro libraries as the operator pilots. It supplies nonlinear transport, implicit diffusion, MAC and nodal pressure projections, coarse/fine interpolation, and synchronization. A small, checked source overlay adds stage-aware external forcing, predefined refinement regions, diagnostics, and timestep safeguards. The upstream archive is not edited.

Fourteen evolution cases check exact rest, time refinement under both MOL and Godunov, spatial refinement of a fully three-dimensional manufactured flow, a translating/decaying Taylor vortex, and box-decomposition invariance. Composite norms exclude covered coarse cells. Halving the timestep reduces oscillatory-test error by approximately . For the three-level nonlinear spatial test, doubling the base grid gives error ratios 3.884 and 5.018; the uniform Taylor-vortex control gives 4.715 and 4.855. These are smooth manufactured tests, not validation of the paper-surrogate forcing. The coupled validation record retains the measurements and source identities.

u = t (sin πy, sin πz, sin πx),   ∇·u = 0;
f = ∂tu + (u·∇)u − νΔu,   p = 0.

The spatial test uses this continuous force, independent of grid spacing, and starts from exact rest. The time test uses spatially uniform oscillatory acceleration so that spatial truncation does not hide the time-integration error. MOL uses old-time forcing in its predictor and endpoint-averaged forcing in its corrector; Godunov uses a midpoint force in the velocity update. Pressure retains the upstream projection treatment.

The integration audit also caught a from-rest issue: the upstream zero-CFL fallback repeatedly halves the timestep while velocity and forcing vanish. With an explicit ns.max_dt ceiling, the adapter can advance the quiescent interval without that collapse while retaining CFL, output-time, and final-time limits. The upstream fixed-step override is rejected with this ceiling. The actual pulse-dependent phase clock is now connected as described above.

Native vectors survive saving and restart

A separate round-trip check reads every native cell on every level in five consecutive frames, starting at zero. Each stores all three velocity components and all three instantaneous external-force components. Saved forcing excludes the pressure correction and reads back with zero measured error in this test. Restarting from the middle checkpoint reproduces the uninterrupted final velocity field with zero measured full-field difference. This establishes the native archive path, not the refined-grid web renderer.

An additional eight-level coupled test has completed from rest. Those archived measurements use serial CPU; the fleet machines ran independent verification and capacity jobs, not sharing one simulation's domain. Deep refinement alone is still not an accepted production mesh, and the manufactured sources below are not the actual pulse/correction hierarchy.

A larger four-level test with a 96³ base stored 3.54 million cells and reached its endpoint using 3,128 MiB peak RSS (3.05 GiB). It exposed a diagnostic roundoff issue: adding millions of small cell volumes returned 8.00000000051 instead of 8, failing the existing tolerance. Volume accounting now uses integer active-cell counts per level; the same non-binary mesh passes an exact-rest regression without relaxing the tolerance. The record preserves the original failed capacity check and the corrected regression separately. The fourteen-case suite is tied to source commit ec253643b31d; CI repeats it on the updated source.

python -m scripts.coupled_pilot --output outputs/coupled-check

Next milestone: ten times the peak

The first design target is ten times the completed run's peak speed; a hundredfold increase is a stretch target. These are model units, not Mach numbers. Anchor the implemented similarity exponent to U₀ = 4.179807916 at τ₀ = 0.015. With h = 0.008, the conditional forecast is:

U ∝ τ−0.508;   R ∝ τ0.5;   H ∝ τ0.492.
For speed multiplier m: τ(m) = 0.015 m−1/0.508;   t = 1 − τ.
MilestonePeak speedTimeRadial scale
Current4.180.9850.0637
10× forecast41.80.999838720.00660
100× forecast4180.999998270.000685

These are extrapolations, not new simulated frames. The reference peak is spatially unvalidated; pulse gates, changing shape, and grid error can alter its growth. The radial column is a characteristic similarity length, not a measured vortex boundary. No physical fluid or acoustic transition is implied.

At the 10× endpoint, eight points across a doubled radial phase at the inner half-height of the bump require about 11,564³-equivalent local spacing. A binary hierarchy suggests a 16,384³-equivalent core as a starting design. The current phase ceiling gives Δt ≈ 1.42 × 10−7 there and about 5,161 additional phase-only steps beyond t = 0.985, before other limits and output events. Preserving the old force-difference window relative to τ would reduce it to 2.15 × 10−9; that window still needs an independent error check.

Deep central refinement is not enough

The new audit samples the radial, angular, and axial gradients of the implemented potential phases across the support's entire active-time path. For α log X + mθ + βη, use q = τ/(1 − η²), D = 0.492, and L = 1 − 2hη²:

kᵣ = 2α/r;   kθ = m/r;
kz = [−2αη + β(1 − η²)] / [0.52 qDL].

The screen uses 257 logarithmic times, 25 samples in each similarity coordinate, and nine azimuths: about 1.44 million samples inside the localization support. It requires eight points across twice the largest phase-gradient norm and two fine-cell widths of interface clearance. All retained families are checked even while their gates are off, without excluding weak tails. This is a conservative sampled phase screen, not an accuracy certificate; envelopes, Cartesian-basis variation, corrections, background and taper remain separate requirements. Cartesian finite-difference tests verify the gradient formula.

At the proposed endpoint the original four-level mesh has only 0.55 sampled points across this doubled-phase scale. Extending the cubes to eight levels improves the minimum to just 2.82 despite 16,384³-equivalent central spacing: the limiting sample is on the coarse level near t = 0.9014. Wider cube candidates also failed the eight-point screen. The design record retains each candidate and its worst sampled location. These layouts have not been launched as flow runs. Refinement must cover the forcing region throughout its motion, not only the final core; weak-tail amplitudes and derivatives also need examination before treating this conservative screen as a resource requirement.

Implicit diffusion passes time-evolution checks

Applying the old global explicit diffusion rule to fixed 16,384³-equivalent spacing would require at least 2.5 million active steps. This extrapolates the old rule; it is not a derived AMR stability limit. The new C++ pilot advances three diffusion components using Crank–Nicolson and the established AMReX composite Helmholtz solver:

(I − νΔt Δh/2) vⁿ⁺¹ = (I + νΔt Δh/2) vⁿ + Δt(fⁿ + fⁿ⁺¹)/2.

All eleven cases pass: exact rest, constant preservation, unforced energy decay, component-integral balance against applied forcing, decomposition invariance, spatial/time refinement, and an eight-level evolution smoke test. Forced cases start at zero. Time convergence is isolated with v = a(t)ψh, a = [1 − cos(10t)]/2, and semidiscrete force f = a′ψh − νaΔhψh, constructed independently of the timestep. Halving the timestep gives error ratios 4.00076 and 4.00019. The separate continuous-source spatial test uses v = tψ and gives ratios 3.563 and 3.834 under base-grid doubling.

The largest component-integral balance defect is below 8 × 10−14; the JSON calls this mass_balance_defect, but it is not a density calculation. The diffusion record includes all measurements and source hashes. This component test validates vector diffusion alone; the coupled checks above exercise the incompressible integrator. Actual project forcing, stiff-transient damping under that forcing, and refined-grid visualization remain open. Implicit stability does not eliminate temporal-accuracy or advective-CFL constraints.

python -m scripts.diffusion_pilot --output outputs/diffusion-check
python -m navier_stokes_sim.refinement_design \
  --reference outputs/reference.json --output outputs/tenfold-design.json

Use fresh output paths. The design command accepts a JSON object containing the run's config and final diagnostics; those inputs are preserved under reference in the published design record.

The numerical bottleneck

The completed 192³ run preserves all 487 saved states from rest through t = 0.985. Its finest retained radial velocity phase has only about three cells per wavelength at the annulus midpoint there. Smaller timesteps cannot recover spatial structure that the grid does not resolve. Uniform refinement is expensive because its memory grows cubically.

The new backend uses the established AMReX-Hydro MAC projection and AMReX multilevel multigrid. The projection couples the levels across their interfaces. This does not stretch the coordinates of the existing FFT solver, impose axisymmetry, or change the original periodic box. The earlier published movies showed the completed 192³ calculation; the homepage now features Oliver's completed five-level native run.

A measured fixed-mesh prototype

Each refined cube halves the previous cube's side length and cell spacing. At base resolution N = 128, every level stores 128³ cells. The four levels are fixed throughout each operator test.

LevelPhysical cubeSpacingFull-box equivalent
0[−1, 1]³1/64128³
1[−0.5, 0.5]³1/128256³
2[−0.25, 0.25]³1/256512³
3[−0.125, 0.125]³1/5121024³
Stored cells = L N³.   Uncovered cells = N³ [1 + 7(L − 1)/8].

The largest test stores 8,388,608 cells across its levels. Composite diagnostics count 7,602,176 uncovered cells and recover the original box volume of 8 exactly. Covered coarse cells are excluded from norms. The finest core spacing is 5.33 times smaller than the previous 192³ grid spacing; it is not a uniform 1024³ simulation.

On the local 16 GiB Apple-silicon Mac, the largest case used 1,590 MiB peak process RSS (1.55 GiB) and took 6.12 seconds for allocation, two projections, and diagnostic passes in a serial, double-precision Release build. This is a measured operator cost, not a timestep benchmark or the memory requirement of a full forced-flow solver. Momentum, diffusion, forcing, ghost cells, and output will add costs. RSS and macOS physical footprint are different measurements.

What the checks establish

The mixed test starts from the exact face averages of the divergence-free field below, plus the face-averaged gradient of a known scalar. The analytic answer is independent of the numerical projection.

u = (sin πx cos πy cos πz, cos πx sin πy cos πz, −2 cos πx cos πy sin πz)
ψ = 0.05 cos πx cos 2πy cos 3πz;   uinput = u + ∇ψ.

Distinct wave numbers expose truncation error on the uniform control as well as on the nested mesh. Errors use volume-weighted, cell-centered averages of the face field over uncovered cells. They are measured against analytic face averages, not against an assumed-exact finest numerical grid.

Base NCore equivalentAbsolute L² errorPrevious / current
32256³1.71270 × 10−3
64512³4.33333 × 10−43.952
1281024³1.08455 × 10−43.995

The finest pair gives observed order 1.998. The single-level control also approaches order two. Refinement here doubles the base grid and every nested level together; this is not a claim that adding levels alone makes the whole-domain error decrease by four.

All nine cases passed. Exact rest remained exactly zero; an already solenoidal field changed by about 1.8 × 10−17 in L². The largest mixed case reduced divergence from 6.91 to 2.45 × 10−11, had zero measured coarse/fine face-average mismatch, and changed by 2.87 × 10−14 on a repeated projection. Changing the maximum box size from 32 to 16 cells preserved the mixed-case error within the 10−10 gate. These checks alone exercise pressure coupling; the coupled tests above also exercise nonlinear momentum transport.

The mesh is not yet a production design

The convenient nested cubes are manufactured-test geometry. They have not passed a phase-resolution audit of the forcing's entire support from rest. The off-midplane annulus extends beyond the innermost cube; a fine central spacing alone is insufficient. The pulse support, background, fixed exterior taper, axis, and axial/angular phase gradients all need coverage at their required spacing.

The radial-wave estimate gives about 15.9 cells per velocity wavelength at the midplane annulus midpoint at t = 0.985 if that point lies on the finest level. Quadratic terms can halve that count, and smaller-radius locations are more demanding. None of these counts is a convergence certificate or permission to approach t = 1 without further tests.

Next, compare the new paired trajectories at matching saved times and extend the earlier spatial comparison. Native AMR slices now export to perpendicular velocity/forcing GIFs using the finest containing cell, fixed scales, and every validated saved event; an analytic three-level initial-field check verifies all three orientations and level selection. No intermediate time frames or spatial smoothing are invented. Interactive 3D refined-grid web export remains open. A late restart can test throughput, but cannot recover spatial information lost earlier in the trajectory.

Reproduce the operator test

python3 -m venv .venv-amrex
.venv-amrex/bin/python -m pip install -r backends/amrex/requirements-build.txt
.venv-amrex/bin/cmake -S backends/amrex -B build/amrex -DCMAKE_BUILD_TYPE=Release
.venv-amrex/bin/cmake --build build/amrex --parallel 2
.venv-amrex/bin/ctest --test-dir build/amrex --output-on-failure
.venv-amrex/bin/python -m scripts.refinement_pilot \
  --levels 4 --resolutions 32 64 128 --output outputs/projection-32-128

Use a fresh output directory. A C++20 compiler and Python 3.11+ are required. CMake fetches AMReX source e60cdc18711c and AMReX-Hydro source e49df248aabd from immutable commits and verifies the archive hashes. The complete machine-readable record includes all cases, convergence ratios, commands, pilot-source and executable hashes, timing, memory, and failure status. The dedicated CI job builds the actual C++ backend and repeats the smaller four-level suite.