116 lines
7.1 KiB
Plaintext
116 lines
7.1 KiB
Plaintext
Shear diagnostic v0.2 — Horsea review and single bounded run
|
|
2026-10-13 (Asia/Shanghai); completed 13:02:45 local time.
|
|
|
|
Result: exit 0; N_BOOLEAN_HARD_CHECKS=22; ALL_HARD_CHECKS_PASS=True.
|
|
The delivered script ran exactly once: 7 runs, 32 coarse steps each. No extra
|
|
cases, tests, retries, algorithm edits or tolerance changes were performed.
|
|
The original script, Grok output, joint report and source manifest are retained
|
|
byte-for-byte. The reference remains the pinned CPUREF-0.3 original.
|
|
|
|
Review before execution
|
|
Read the complete 790-line script, joint report, Grok output, input manifest
|
|
and existing reference. Followed .github/skills/lbm-ref-architecture-guard/
|
|
SKILL.md and its discovery/architecture checklists. No applicable AGENTS.md
|
|
was found on the workspace/test-directory ancestor chain. No numerical issue
|
|
blocks this fixed-scope rerun; this is Horsea's own review, not the Mac review.
|
|
|
|
Reference findings (local files read only; no external package execution):
|
|
1. ref/lbmpy/src/lbmpy/relaxationrates.py: lattice nu=(tau-1/2)/3.
|
|
2. ref/OpenLB/src/core/unitConverter.h: physical nu=lattice nu*dx^2/dt.
|
|
With dx_f=dt_f=1/2, tau_c=.8 and tau_f=1.1 both give physical nu=.1;
|
|
the lattice velocity conversion is unchanged and B needs two fine steps.
|
|
3. ref/lbmpy/tests/full_scenarios/shear_wave/scenario_shear_wave.py:
|
|
periodic modes decay as exp(-nu*|k|^2*t); log-amplitude fits estimate
|
|
decay. This supports the diagnostic, not an accuracy threshold here.
|
|
4. ref/lbmpy/tests/test_shear_flow.py: the second moment needs the convective
|
|
contribution and relaxation correction considered before stress comparison.
|
|
The supplied global Pi_xy mean is not used as stress evidence.
|
|
5. Existing cpu_reference.py: arrival_f input/output, tick advances by 2,
|
|
two fine hops, one coarse ghost explosion, closed-corner coalescence.
|
|
Reviewed full source and confirmed the unchanged hash before execution.
|
|
|
|
Architecture/scope: script main -> run_uniform(B/C), run_composite(A/A_T) ->
|
|
reference advance_coarse_once -> existing collision/hops/coalescence. Observation
|
|
restricts rho and j to the same 16x16 coarse cells before dividing to obtain u.
|
|
All observations are arrival_f. Exact cell-average sine velocity includes sinc
|
|
and the patch coordinate offset; equilibrium of that velocity is not the exact
|
|
cell average of nonlinear equilibrium populations. Fit 4..32 means coarse steps
|
|
(reference ticks 8..64), despite the legacy PER-TICK table heading.
|
|
Only the new script and this evidence directory are in scope. No src, existing
|
|
test, strategy document, old evidence, reference or DynamisLab changes.
|
|
|
|
Nonblocking limits: composite conservation uses the reference's _leaf_totals;
|
|
this diagnostic is not a fresh independent conservation implementation. The
|
|
uniform solver has an unused intermediate equilibrium calculation; it does not
|
|
change its returned values. Retained both without cleanup to preserve delivery
|
|
bytes. The explicit CPU_REFERENCE_PATH is required in this layout because the
|
|
script's default filename is cpu_reference_v0.3.py.
|
|
|
|
Execution evidence
|
|
results_horsea.json records the exact complete parent/child argv, cwd, process
|
|
environment, versions, timestamps, hard limits, exit code and measured memory.
|
|
run_once.py is the stdlib-only recorder, not another numerical test. It refuses
|
|
existing execution logs/results and checks the script/reference hashes and hard
|
|
limits before launching. Both it and the child ran through existing prlimit:
|
|
address space 268435456 bytes (soft=hard)
|
|
file size 2097152 bytes (soft=hard), core 0
|
|
OPENBLAS_NUM_THREADS=1, PYTHONDONTWRITEBYTECODE=1, PYTHONNOUSERSITE=1.
|
|
PYTHONPATH is this exact multigrid directory; CPU_REFERENCE_PATH is its exact
|
|
cpu_reference.py. PYTHONOPTIMIZE=0 keeps assertions enabled. No global changes.
|
|
Existing Python 3.10.13 / NumPy 1.26.4; no dependency installation.
|
|
Start/end UTC: 05:02:42.804589 / 05:02:45.056308 on 2026-10-13.
|
|
Child wall time 2.237032 s; peak child RSS 37.69140625 MiB, parent 18.75 MiB.
|
|
Combined stdout/stderr plus recorder metadata: 11421 bytes, below 2 MiB.
|
|
No CelerisLab, Simulation or pycuda imports; no production/GPU/SSH/system work.
|
|
|
|
Comparison with Grok
|
|
HARD CHECKS and SUMMARY_LINES blocks match exactly at printed precision.
|
|
All 22 individual Boolean values were parsed and matched, and checked against
|
|
the printed list of 22 names. All 33 summary values match; all printed numeric
|
|
differences in these two blocks are zero. See comparison.json for each value.
|
|
This is not a claim of full-precision field or whole-stdout byte equality;
|
|
reference path, runtime and recorder metadata are environment-specific.
|
|
|
|
lambda per coarse step:
|
|
A phi0 0.0158522189
|
|
A phi(pi/2) 0.0158419175
|
|
B both 0.0153991657
|
|
C both 0.0155497331
|
|
analytic 0.0154212569
|
|
Conservation mass drift <=8.242e-13, momentum drift <=1.690e-13, versus
|
|
unchanged mass-scaled tolerance 2.560e-10. Transpose error 6.661338e-16
|
|
passes 1e-15. Initial matches and all finite-state checks pass unchanged.
|
|
|
|
Interpretation qualifications to the preserved joint report
|
|
The ~2.94% / ~2.88% excess decay relative to B is a diagnostic observation
|
|
over this fixed window, not a hard-threshold failure. A good exponential fit
|
|
over steps 4..32 does not establish longer-time persistence or exclude all
|
|
initialization effects. Symmetry cancels the global Pi mean; it is not stress
|
|
transfer evidence. Time-held ghost supply and unscaled nonequilibrium copying
|
|
are candidate explanations, not an exhaustive set or an identified mechanism.
|
|
In particular, a negative time-interpolation result would not establish the
|
|
other candidate by elimination. Original joint_report.md remains unchanged.
|
|
|
|
Next minimal verification — specification only, not implemented or run
|
|
First specify a phase- and unit-matched local shear observation on the same
|
|
7-run/32-step setup: arrival_f Pi_xy^neq=sum(cx*cy*f)-rho*ux*uy, restricted
|
|
with consistent volume weighting and the appropriate relaxation/unit conversion.
|
|
Measure a cosine shear-mode projection and signed profiles on both sides of
|
|
the patch faces, with B/C as controls; avoid cancellation by a domain mean.
|
|
Keep all 22 checks, initialization and fit window fixed. Report differences
|
|
without inventing a pass/fail stress threshold. This can test localization and
|
|
phase structure, but does not alone prove causation.
|
|
Before any later time-interpolated-ghost variant, jointly specify the available
|
|
donor time levels, arrival_f/postcollision_g phase, interpolation order and flux
|
|
accounting. Coarse g(t+1) is unavailable before the present fine hops; silently
|
|
reordering the step or using unspecified future data would confound that test.
|
|
No such variant, new observation code or reference continuation is part of this run.
|
|
|
|
Audit
|
|
baseline.json freezes HEAD, Git status and 281 existing file hashes before any
|
|
input extraction. Its scope includes tracked/nonignored project files and the
|
|
prior baseline's ignored records; excludes the read-only ref tree and bytecode.
|
|
manifest.json records final old-file/input/reference verification and every new
|
|
file's path, bytes and SHA256, except its own hash reported in the handoff.
|
|
No commit or push. Stopped for joint acceptance.
|