Files
CelerisLab/research/j3-lag-2026-10-12/REVIEW.md
T

11 KiB
Raw Blame History

J3 单轨迹 lag 诊断:运行前冻结计划

2026-10-12。重新核对当前工作树并记录baseline.json准确哈希。仅新增独立诊断脚本和本目录证据,root唯一写入/计算者;不改任何生产公式、旧脚本、旧结果或环境。J3原验收失败保持。本次不是新验收,不调整任何门槛。

固定状态与步数

同NX48/NY35/H32/W16、nu=.1、U=0、rho0=1、A=+.002、D2Q9/SRT/FP32/unshifted/double-buffer、top_wall_bc=reservoir,无物体/力/LES。同make_sim、初始化g(0)=局部feq、pull→arrival重建→collision→postcollision g(t)。仅此正例。

先40次各519步,到t0=20760;复用原完整场计算,保存重放40间隔历史并与原J3终态macros/history比较,不从macros重建DDF。不跑J1/J2/default回归。立即持久保存start-20760.h5,包含真实DDF、temp、flags/domain_flags、step_count、config、runtime_params及分布阶段说明。用新Simulation无时间推进load,按字节比较DDF/temp/flags,比较count、配置和运行参数;失败立即停止,不进入诊断。文件记录SHA256。

然后只沿一个轨迹推进520步,记录n=0..520共521帧(t=20760..21280)。结束保存end-21280.h5及SHA256,同样无时间推进核验恢复。不删除这些唯一状态。所有统计覆盖固定完整窗口,不事后挑选窗口。

场与统计定义

统计格点为所有流体平面节点x=0..47、y=1..33,共1584点,含底slot、零速flanks和top,不含ghost y=0/34。用实际FP32 postcollision DDF在CPU float64求rho/u/v,分析精度不等于新增FP64运行支持。速度归一固定.002,密度归一rho0=1。

  • lag L=1/16/519:起点n=0..520−L,共520/505/2个合法起点;绝对起点t0+n。逐起点记录du=u[n+L]−u[n]、dv同理的空间RMS、max绝对值、空间有符号均值;向量记录sqrt(mean(du²+dv²))及max sqrt(du²+dv²),同时保留两个有符号分量。汇总每种lag的均值/最小/最大,并给/.002归一结果。样本相互重叠;尤其519只有两个起点,不能声称大量独立样本。
  • 时间均值:521帧等权平均(含两端),保存完整平均rho/u/v场。记录每帧偏离时间均值的分量RMS/max、有符号空间均值、向量指标,以及全时间/空间汇总。
  • 有符号漂移:保存完整首末差u[520]−u[0]、v同理;平均每步漂移场=首末差/520(等于逐步差的时间均值)。报告每个分量的空间有符号均值、最小/最大,以及双分量向量均值;不只报非负RMS或范数。各lag另报告有符号空间均值/L,不能用u的对称抵消掩盖局部变化。
  • 每帧记录总质量M、全部y截面的实际宏观Σrho*v与Σv、顶rho/u/v和完整rho/u/v场。以单个压缩trajectory.h5保留原始完整场、逐步账和汇总数组,results.json保存可读摘要及文件哈希,不拆多份场文本。

同一520步的真实population账

不能调用原population_budget(会额外跑普通/审计轨迹)。只复用它已验证的AUDIT源码与临时构建注入方式,520步全部使用这一审计OneStep,不另跑普通轨迹。记录器仅用FP64累加已计算的FP32 populations,无生产公式改动。

逐步保存所有底/顶节点实际incoming、由前一g(t)计算的outgoing,以及每个节点真实collision前后质量差。分账覆盖slot、全部零目标flanks和整个top,核对ΔM=边界净交换+collision舍入。另列未扣舍入的物理残差。目标Q仅作为记录,不用于填补预算。

该临时源码SHA须匹配原J3已通过普通/审计逐值对照的源码SHA;同一诊断轨迹的前16步真实账与原J3既有16步记录比较,不增加步数。不会声称新做了520步普通/审计双轨迹对照。若源码或恢复状态不一致、发现明确阻塞,停止解释。

RMS对lag的形状只提供相关性/漂移线索,既不证明噪声,也不证明FP32平台;不以约1e−7量级改判J3。保留其原40间隔非单调变化及末段下降。压力库下仍独立记录collision舍入,不推论其消失。

固定cwd=/home/frank14f/CelerisLab、解释器/home/frank14f/anaconda3/envs/pycuda_3_10/bin/python、进程PYTHONPATH=/home/frank14f/CelerisLab/src;执行时核对解释器、Python/CUDA实际来源及所有起点源哈希。GPU先核对获准0/1空闲;不杀其他作业,不改网络/全局环境/依赖,不提交推送。完成后停止。当前尚未执行重放或诊断。

完成结果

以上为运行前冻结计划。实际仅重放20760步一次,然后沿同一轨迹推进520步,末步21280,程序退出0。没有第二条520步轨迹或其他案例。重放40间隔历史及20760末态完整rho/u/v与原J3逐值一致;原非单调历史、末段下降及失败结论均保留,没有改判。

两个真实checkpoint均通过无推进恢复:分别从GPU直接下载DDF/temp/flags,与HDF5数据按字节核对,再加载到新Simulation核对三块缓冲、步数、配置和运行参数。未由macros重建平衡分布。临时审计源码SHA与原J3一致,同一轨迹前16步的质量/边界/舍入账与原J3记录完全匹配;未另跑普通轨迹。

多lag变化与有符号漂移

下表RMS为各合法起点的空间RMS再作算术平均;max为所有起点/格点中的最大绝对分量差。数值均为未归一绝对速度;归一结果除以.002,逐起点数据与全部mean/min/max见trajectory.h5及results.json。

lag 合法起点数 u平均RMS v平均RMS u最大绝对差 v最大绝对差
1 520 4.02775e−8 1.34694e−7 2.19793e−7 8.40133e−7
16 505 4.25738e−8 4.92469e−8 2.10493e−7 5.14083e−7
519 2 5.32746e−8 1.32336e−7 2.23534e−7 5.84936e−7

lag519两个实际起点为20760、20761,对应v RMS为1.32748121e−7与1.31923248e−7;不能当作大量独立样本。u/v平均RMS除以.002分别为:lag1 (2.01388e−5,6.73470e−5),lag16 (2.12869e−5,2.46235e−5),lag519 (2.66373e−5,6.61678e−5)。向量RMS均值分别1.40599e−7、6.51399e−8、1.42657e−7;其双分量有符号均值在下表。

量 u分量 v分量
lag1平均有符号空间变化 +1.56269e−12 −7.51472e−12
lag16平均有符号空间变化 −1.43409e−11 −2.77115e−10
lag519平均有符号空间变化 +8.47311e−10 −5.50534e−9
首末变化的空间有符号均值 +8.12599e−10 −3.90766e−9
平均每步有符号漂移 +1.56269e−12 −7.51472e−12
首末局部变化最小值 −1.62008e−7 −2.55195e−7
首末局部变化最大值 +1.34117e−7 +2.57095e−7

完整首末变化与每步平均漂移向量场分别保存在end_minus_start_uv、mean_drift_per_step_uv,分量顺序u/v。不能因全域平均很小而忽略局部变化。相对521帧等权时间均值的全时空RMS为u=3.36455e−8、v=7.37527e−8,最大绝对偏差为u=1.79551e−7、v=4.99302e−7;完整均值场和逐帧偏差统计均保留。

解释限度:v在lag16下的差异小于lag1与lag519,提示时间相关/相位结构的线索,不支持仅凭量级宣布独立噪声或FP32平台。不能排除更慢漂移或离散波动。lag519的新两个样本没有延续原J3末段单调下降的简单外推;原40间隔的非单调变化仍须一起看。本包既不修改原519间隔收敛判据,也不把选择较小的lag16当成通过依据。

质量、宏观流量与真实账

M从1583.999700639397变为1583.9996760860085,净变化−2.45534e−5,相对净变化−1.55009e−8;521帧相对质量跨度6.43318e−8。逐帧M及每步有符号ΔM完整保留,没有只报非负变化。

实际520步平均账 每步数值
底slot incoming / outgoing 2.67535507278 / 2.65829271536
底flanks incoming / outgoing 5.33318304943 / 5.33317602280
顶全平面 incoming / outgoing 7.99146266776 / 8.00854370598
全边界净交换 −1.16541802597e−5
collision舍入 +1.16069622051e−5
全域ΔM −4.72180545330e−8

逐步预算残差最大值为0;未扣collision时最大相对物理预算残差1.15957e−8。压力库净排出与正collision舍入在这段轨迹中大部分抵消,舍入没有消失。slot/flanks/top的incoming/outgoing全节点数组及每节点collision差均保留,未遗漏零目标flanks;分段population账不直接等于该段宏观穿壁通量。

底请求Q仍为.01706689453125。521帧平均宏观底/顶质量流量为.01706952701/.01708118459,平均宏观体积流量为.01706692824/.01708118487。顶rho全窗口范围[.9999996405094862,1.0000003930181265],顶Cartesian v范围[.0002521053106847591,.0004627742200818292]。请求量、宏观面流量和分布交换分别记录,不互相自证。

持久可恢复状态与数据

所有文件均位于本目录,不在TemporaryDirectory中:

  • start-20760.h5,SHA256 6c4cba5928c77566c2afc32231311a3986831c18fea766faadebb101243399e2。
  • end-21280.h5,SHA256 19a94e9e8db6dd9ac981effe06032c351992250b58768d9c090409193893d588。
  • trajectory.h5(约17MiB),SHA256 2b51f8ec5e0cc8ca72c73ac1b51dd611158368e6d6de791d85150fa111ea1986。

checkpoint版本仍为3,额外diagnostic属性只记录分布阶段和诊断脚本SHA。两块分布缓冲均为真实FP32状态;当前ddf是postcollision g(t),不是到达态f,也不是由均值场生成的feq。配置与运行参数保存在原checkpoint属性中。未来使用同一make_sim参数后load_checkpoint即可恢复;继续推进需要另行明确下一工作包,不能以本次诊断授权追加计算。

trajectory.h5存储521×33×48的rho/u/v、逐帧全y截面宏观流量、520×2×48边界incoming/outgoing、520×35×48实际collision差、完整逐步预算和lag/均值/漂移汇总。step数组给出绝对步数,recorded_samples=521;字段first_16_match_j3为true。results.json记录可读统计、重放历史、源/数据哈希和两个checkpoint核验结果。

执行、检查与文件保留

GPU启动前nvidia-smi -i 0,1显示两卡无计算任务(各5MiB,只有Xorg);原始输出在gpu-availability.log。仅使用GPU0。科研命令只运行一次,实际命令为:

env CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/diagnose_j3_lags.py --output-dir research/j3-lag-2026-10-12 > research/j3-lag-2026-10-12/gpu-diagnostic.log 2>&1

cwd为/home/frank14f/CelerisLab。脚本启动核对sys.executable、CelerisLab.file、kernel_v2.cu路径以及全部224个起点文件SHA。正式运行前用同一解释器和PYTHONPATH做了两次无CUDA初始化的主机解析fixture检查:u(n)=n×1e−8、v(n)=−2n×1e−8、n=0..520,独立核对lag起点数、RMS、带符号漂移、521帧时间均值偏差和归一化汇总;日志保存在host-check.log。fixture临时文件已自动清理。

只读复核指出的两项主机侧完善均在GPU前完成:三块缓冲直接GPU下载;各lag全部指标的mean/min/max及/.002汇总完整保存。没有生产更改、额外GPU验收矩阵或重复轨迹。

所有224个原有文件哈希保持不变,包括J1/J2/J3原结果、旧脚本、四个配置头及notebook。仅新增diagnose_j3_lags.py和本目录资料;incremental.diff为该独立脚本补丁。git diff --check及新增脚本补丁反向校验通过,唯一checkpoint和原始数据全部保留;无提交、推送或依赖/环境修改。任务到此停止,J3原失败结论不变。