125 lines
8.0 KiB
Plaintext
125 lines
8.0 KiB
Plaintext
Local-stress observable v1 — Horsea review and single-run handoff
|
||
2026-10-13, Asia/Shanghai. Observation-only; reference unchanged.
|
||
|
||
Actual result
|
||
Exactly one execution of the delivered script: 7 runs x 32 coarse steps, exit 0.
|
||
Original 22 Boolean hard checks plus 7 stress-finite checks: all 29 pass.
|
||
Both ALL_HARD_CHECKS_PASS_V02 and ALL_HARD_CHECKS_PASS_WITH_STRESS are True.
|
||
No retries, added cases, modified formulas, relaxed tolerances or new R thresholds.
|
||
|
||
Review status (separate from numerical results)
|
||
Grok authored the implementation and ran it in an independent environment.
|
||
The coordinating root reported an independent static review with no substantive
|
||
issue. Claude's implementation-code review is paused due to an API error and
|
||
has NOT completed. Claude's earlier specification discussion and the table's
|
||
"implicit-definition checks" do not constitute a completed code review.
|
||
Horsea read all 902 script lines, original stdout, table and manifest, reviewed
|
||
the related reference paths and local reference sources below, and found no
|
||
substantive numerical objection blocking this bounded diagnostic rerun.
|
||
|
||
Scope and static review
|
||
Applied .github/skills/lbm-ref-architecture-guard/SKILL.md and its reference/
|
||
architecture checklists. No applicable ancestor AGENTS.md was found.
|
||
The incoming script is standalone NumPy+stdlib, with no runtime dependency on
|
||
the previous shear script. Its original bytes are preserved. Architecture:
|
||
main -> run_uniform(B/C) / run_composite(A/A_T) -> arrival populations ->
|
||
sigma_xy_cell -> level-specific sigma restriction -> Fourier R and profiles.
|
||
The composite advance uses the existing CPUREF-0.3 API without wrapping or
|
||
changing its algorithm. The external recorder pins the reference before import;
|
||
the diagnostic's printed REF_SHA_MATCH alone would not enforce that pin.
|
||
|
||
Reference findings (read-only, no imported reference packages)
|
||
1. ref/lbmpy/src/lbmpy/macroscopic_value_kernels.py, strain_rate_tensor_getter:
|
||
the second moment is formed from f minus equilibrium; S=-3*omega*Pi/(2*rho).
|
||
2. ref/OpenLB/src/functors/lattice/latticePhysStrainRate2D.hh independently uses
|
||
the negative nonequilibrium-moment sign and omega/(2*rho*cs^2*dt) conversion.
|
||
3. ref/lbmpy/src/lbmpy/relaxationrates.py gives nu=(tau-.5)/3. Combining
|
||
sigma=2*rho*nu*S yields -(1-1/(2*tau))*Pi_neq in lattice units.
|
||
4. ref/OpenLB/src/core/unitConverter.h converts viscosity by dx^2/dt and
|
||
pressure/stress by density*(dx/dt)^2. Here dx/dt=1 on both levels and density
|
||
units match, so no additional scale factor belongs in this observation.
|
||
5. Existing cpu_reference.py: paired D2Q9 ordering, physical patch offset,
|
||
acoustic tau scaling, arrival_f input/output, tick increment 2, and owned
|
||
leaf-cell masks. The pinned full reference was reviewed in the prior round;
|
||
this review reread its maps, collision/explosion, leaf totals and advance path.
|
||
|
||
Verified definitions
|
||
Initialization remains equilibrium of the exact cell-average sine velocity,
|
||
not exact cell averages of nonlinear f_eq. Fine coordinates include patch offset.
|
||
All final observations use coarse step 32: composite arrival_f tick=64,
|
||
uniform B after 64 collide-stream substeps and C after 32. No extra collision.
|
||
Pi_xy^neq=sum(cx*cy*f)-rho*ux*uy is evaluated per owned cell. Each level applies
|
||
its own tau to obtain sigma BEFORE 2x2 volume averaging. Covered coarse values
|
||
and fine ghosts are excluded. Velocity restriction averages rho/j before u=j/rho.
|
||
R uses a_u=(2/256)*sum(u*sin) from the same run and final arrival state, not an
|
||
analytic decay amplitude. This raw Fourier coefficient includes the cell-average
|
||
sinc factor; the old decay fit amplitude uses its sinc-normalized template.
|
||
The cosine stress projection and velocity projection use a common 16x16 grid.
|
||
Signed horizontal profiles average columns 4:12 and retain all 16 rows; rows
|
||
3,4,11,12 flank the patch faces. The transposed case reports R only, no profile.
|
||
|
||
Runtime evidence
|
||
Existing Python 3.10.13 / NumPy 1.26.4, CPU only. run_once.py is a standalone
|
||
stdlib recorder derived from the previous recorder; it does not execute or
|
||
import the prior diagnostic. It checks all four delivered file hashes, the tar
|
||
hash and reference hash before launch, and refuses existing logs/results.
|
||
Parent and child both used /usr/bin/prlimit with soft=hard bounds:
|
||
--as=268435456 --fsize=2097152 --core=0
|
||
Process-only OPENBLAS_NUM_THREADS=1, PYTHONDONTWRITEBYTECODE=1,
|
||
PYTHONNOUSERSITE=1, PYTHONOPTIMIZE=0; PYTHONPATH is only the current multigrid
|
||
directory. CPU_REFERENCE_PATH explicitly selects its cpu_reference.py.
|
||
results_horsea.json and stdout_horsea.txt retain full argv, environment, cwd,
|
||
preflight SHA values, versions, times, exit status and measured RSS.
|
||
UTC start/end: 2026-10-13 06:01:08.222086 / 06:01:10.671541
|
||
Local start/end: 14:01:08 / 14:01:10 Asia/Shanghai.
|
||
Child elapsed 2.435032 s; peak RSS 38.41796875 MiB; parent peak 18.75 MiB.
|
||
Combined stdout/stderr with recorder metadata: 17091 bytes, below 2 MiB.
|
||
|
||
Grok and prior-result comparison
|
||
comparison.json parses each of the 29 Boolean checks, the original 22 names,
|
||
both all-pass markers, R values, ratios and every profile value. HARD CHECKS,
|
||
STRESS FINITE CHECKS, SUMMARY_LINES and DECAY FITS blocks all match Grok
|
||
exactly at printed precision. All recorded numeric differences are zero.
|
||
The ten profile rows in SUMMARY_LINES contain 160 scalar entries total.
|
||
Six current lambda values also match the prior local shear output at 8 decimal
|
||
places (the precision emitted by this script). Prior 10-decimal values are
|
||
retained in the comparison for provenance, not claimed freshly measured here.
|
||
Full stdout hashes need not match across machines; paths, runtime and recorder
|
||
metadata differ. Printed equality is not full-precision field equality.
|
||
|
||
R at coarse step 32 (diagnostic only):
|
||
phi0: A=1.011774619306 B=.998555854025 C=1.008383635570
|
||
phiPi/2: A=1.011850480751 B=.998555854025 C=1.008383635570
|
||
A_T: 1.011850480751
|
||
|
||
Interpretation limits (separate from pass/fail checks)
|
||
The retained transpose assertion covers u/rho, not stress. R_A_T agreeing with
|
||
R_A at phiPi/2 is a reported observation, NOT a new stress-transpose hard test.
|
||
Seven finite-stress checks do not establish local stress accuracy, convergence,
|
||
interface stress-transfer correctness or any causal mechanism. One resolution,
|
||
tau pair, patch and short window remain in scope. Composite conservation uses
|
||
the reference leaf-total helper; this is not a new independent conservation
|
||
oracle. Time-held ghosts and unscaled nonequilibrium transfer remain candidate,
|
||
non-exhaustive explanations. No time-interpolated ghosts were implemented.
|
||
|
||
Frozen state and handoff
|
||
baseline.json froze HEAD, Git status and 292 old-file hashes, including all
|
||
previous CPUREF/shear evidence. Its stated hash scope excludes the read-only
|
||
ref tree, symlinks and bytecode. Final manifest.json verifies the frozen files,
|
||
original inputs and reference, and lists new paths/bytes/SHA256; its own SHA is
|
||
reported in the handoff. Only this evidence directory and the delivered
|
||
local_stress_observable_v1.py were added. No production imports, GPU/solver
|
||
runs, installs, environment/SSH/system changes, DynamisLab access, commit or push.
|
||
Stopped here for joint acceptance; Claude code review remains outstanding.
|
||
|
||
User authorization evidence, verbatim as relayed by the coordinating thread
|
||
<transcript_evidence>
|
||
assistant(Sentinel_65ef50edab8c819194404548b6b8e469): 新增的局部剪切应力观测已在 Grok 那边跑通,但同步到 Horsea 又被拦住:审查把上次许可限定为那一份文件。
|
||
|
||
你是否允许本轮 AMR 协作后续的代码、测试、日志和报告,经现有 SSH 同步到 Horsea,并只在 CelerisLab/tests/validation/multigrid 内审阅和运行小型 CPU 验证?包含这次新观测;每次仍限 256 MiB 内存、2 MiB 输出,不改环境或生产代码。
|
||
user(Sentinel_d0d3a42b2c088191aa8aebc105fb1b27): 允许,你用GPU验证都行
|
||
</transcript_evidence>
|
||
The coordinating instruction narrows this run to CPU observation-only. Future
|
||
GPU work was not performed or specified here; this is not unrestricted remote
|
||
operation authorization. Input transfer was already complete when received.
|