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

56 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# J1 两平面吹吸:限定实施与验收
2026-10-12。以下门槛在本包第一次数值测试前写定。唯一写入者root;保留起点工作树,`baseline.json`及`baseline-status.txt`为证。仅独立CelerisLab,使用既有pycuda_3_10解释器和进程级PYTHONPATH;先查GPU0/1空闲,仅占用空闲获准设备。不提交或推送。
## 模型与时序
D2Q9/SRT/FP32/unshifted/double-buffer,无对象、体积力、LES。新on-site模式默认关闭,x周期,物理平面y=1与NY−2,H=NY−3;下壁(0,V),上壁(U,V)。上下helper只补poststream未知方向,不碰撞或存储;融合核顺序为pull到t+dt、重建到达时刻速度、同节点碰撞、存postcollision g(t+dt)。初态为rho0、线性u、常量v=V的局部平衡,边界初态满足目标;后续不以解析指数场初始化来回避收敛。
参考:`research/design-2026-10-09/jet-study.md`中Zou–He/Ho scheme A原文核对与矩公式;本地`ref/OpenLB/src/boundary/zouHeDynamics.hh`的missing population重建;现有paired D2Q9方向表和pull时序为地址依据。连续解v=V,u=U*expm1(Vy/nu)/expm1(VH/nu),V=0取线性极限。连续解不是精确离散LBM解;预期小Ma下有截断误差与FP32舍入,若不满足下列候选门槛须报告失败,不能静默放宽。
## 预先固定的有界验证
- 主案例NX=16、H=32、nu=.1、U=.02、rho0=1,V依次0、+.001、−.001、+.01、−.01;Re_U=6.4,最大Ma约.039。先不铺网格矩阵,也不声称证明二阶收敛。
- 采样间隔ceil(.5*H²/(pi²*nu))=519步,最多40个间隔=20760步/案例。至少8个间隔后才允许判稳;连续4个间隔的u剖面RMS变化/U≤2e−5、v剖面RMS变化≤2e−7,且每间隔质量相对变化≤2e−6。最后4间隔质量相对跨度≤6e−6。不能把持续质量增长作为gauge freedom接受。
- H32内部u连续解析剖面相对L2≤1e−3;v最大绝对误差≤2e−6;非零V内部三个独立截面的实测Σrho*v相对rho_bar*V*NX误差≤1e−3,V=0用绝对平均速度≤2e−6。不使用重建节点的赋值验证通量。
- 全域质量统计仅含y=1..NY−2,不含ghost。末态相对初态质量偏移≤1e−3,另以上述增量/跨度独立约束漂移;记录全部采样质量和剖面残差,不能仅记录最终密度范围。
- 实际population跨界收支:测试临时CUDA构建在真实SRT调用前记录边界重建后的未知incoming,以及collision前后质量差;结合旧postcollision outgoing,核对16个连续步的ΔM=入−出+collision舍入。纯周期x对消;全局每步预算残差/M≤2e−7,另报告未加collision舍入的物理残差,不将记录器加进生产kernel。
- helper上下方向、V正/负/零及非平衡已知分布:未知方向外逐值不变,独立质量/动量矩误差≤3e−7(rho O(1));平衡保持同容差。
- 关闭模式:与本包起点源码同参数、同初值的短默认通道结果逐值相同;同时运行受影响配置/恢复回归。不声明全部旧工况或性能已重新验证。
完整执行命令、原始日志、结果和本包增量将在本目录追加;任何门槛变化必须显式记录,当前未运行数值测试。
## 完成记录(以上为运行前冻结记录)
本包限定实现完成,门槛未改。生产代码新增75行、删除5行;配置说明新增15行;测试/验证新增364行。`incremental.diff`相对于本包起点的脏工作树生成,不是相对于HEAD。未提交、推送、安装依赖或修改DynamisLab。新增模式没有额外生产kernel启动;未进行性能基准,因此不声称已证明性能无回退。
CPU针对性回归77 passed、13 subtests passed(1.30秒);checkpoint GPU回归10 passed、8 deselected(34.31秒)。五个J1案例全部通过,包括独立内部截面通量、末段质量变化与实际population预算。默认关闭模式的7步场和flags与本包起点逐值相同。只读architecture复核通过,没有发现限定范围内必须修复的项。
| V | 收敛步数 | u相对L2 | v最大绝对误差 | 相对初态质量偏移 | 末4间隔质量相对跨度 | 内部通量误差 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| 0 | 4152 | 1.66909e-5 | 8.00937e-8 | 2.98475e-7 | 1.33772e-8 | 4.84288e-8(绝对平均速度) |
| +.001 | 7785 | 7.27898e-4 | 2.53653e-7 | 5.01238e-5 | 3.51193e-7 | 2.53631e-4(相对) |
| −.001 | 7785 | 6.86307e-4 | 1.72778e-7 | 4.90631e-5 | 2.53997e-9 | 1.61564e-4(相对) |
| +.01 | 9342 | 1.73175e-4 | 1.63549e-7 | 6.19301e-5 | 2.08842e-9 | 8.44460e-6(相对) |
| −.01 | 8304 | 2.44096e-4 | 1.76794e-7 | 4.90692e-5 | 4.40262e-9 | 9.94338e-6(相对) |
每例末态再审计16步,审计版与普通版逐值一致。独立记录实际collision舍入后,预算残差均为0;这是用双精度累加已记录FP32 populations所得的离散收支一致性,不代表连续物理误差为0。不扣除collision舍入时,最大相对物理收支残差为7.733e-9。完整内部实测通量、质量历史、剖面及逐步预算见`results.json`。
本包只实现全平面固定速度边界,限定D2Q9/SRT/FP32/unshifted/double_buffer、无对象/体积力/LES。尚不是有限slot Jet;未扩展曲面、多层网格、AMR,也未证明网格收敛阶。
## 执行与原始证据
所有命令工作目录均为`/home/frank14f/CelerisLab`;解释器、Python导入和CUDA源码位置已校验,见`baseline.json`与`results.json`。每次GPU运行前检查物理GPU0/1空闲;实际仅用GPU0。执行命令如下:
```bash
env PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/unit/test_planar_velocity.py tests/unit/test_build_contracts.py tests/unit/test_state_regressions.py tests/unit/test_simulation_lifecycle.py -q --tb=short -p no:cacheprovider > research/j1-2026-10-12/cpu.log 2>&1
env CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python tests/validation/run_j1.py --output research/j1-2026-10-12/results.json --baseline-kernels /tmp/celeris-j1-before/src/CelerisLab/lbm/kernels > research/j1-2026-10-12/gpu-validation.log 2>&1
env CUDA_VISIBLE_DEVICES=0 PYTHONPATH=/home/frank14f/CelerisLab/src PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /home/frank14f/anaconda3/envs/pycuda_3_10/bin/python -m pytest tests/integration/test_state_gpu.py -k checkpoint -q --tb=short -p no:cacheprovider > research/j1-2026-10-12/checkpoint-gpu.log 2>&1
```
第一次J1执行在V=0数值计算后因NumPy bool不能序列化JSON而退出,原始记录保留为`gpu.log`。只将输出的steady转为Python bool后,按同一门槛完整重跑;成功记录为`gpu-validation.log`。完成数值验证后将`--baseline-kernels`改为可选,便于日后只重跑五例;省略时旧模式比较明确记录为null,不视为已通过该比较。此CLI变动通过`--help`检查,数值路径未改动。
## 保存与清理
所有起点manifest文件仍存在,只有diff列出的9个已有文件发生本包修改,另新增4个实现/测试文件。四份config头文件及`tests/postproc/experiment.ipynb`均与起点SHA256一致。`git diff --check`通过,增量补丁反向适用检查通过。保留本目录原始成功/失败日志;临时审计构建自动清除。起点副本可由当前源码和增量补丁反向重建,临时重复备份在完成核验后清除。停在此步,等待主线程复核。