2026-10-14 — 静止圆局部表面吹吸，实施与验证

A 已完成当前受限增量。新增 SurfaceActuation(angle, half_width, normal_velocity)，
由 Simulation.add_body('circle', ..., surface_actuation={...}) 或 cylinder body config
设置。角度为弧度，正速度沿 solid→fluid 法向；采用 (1-s²)² 平滑孔口剖面。
范围：D2Q9 / FP32 / unshifted / double_buffer，圆保持静止。

实现路径与简洁性
- 不改原八列 cut-link 几何、packer 或 geometry SHA。由已有真实 hit−center
  得到圆法向及孔口角度；不使用流体节点角度或被截断的 q 重建命中点。
- 独立 Nx2 表面速度 → CurvedBoundaryKernel → 现有 BFL 两分支/halfway fallback。
  不占用 omega 控制槽。未开启时不分配两个新 GPU 缓冲；零速度保留原算式路径。
- read_surface_exchange(id) 返回最后一步 wall/aperture 的 (Fx,Fy,Tz)。这是
  离散边界动量交换，不是喷嘴总推力，也不输出质量流率；同步/恢复后清零。
- 规格不可变，禁止非静止状态及不支持的模式；无有效孔口/重复写者/非流体接收
  节点在同步或恢复写入之前拒绝。同步复制规格，释放/重建相应缓冲。
- 带规格（包括零振幅）checkpoint 保存为 v4，旧 reader 会拒绝，避免静默按
  普通固壁恢复；无驱动仍保存 v3。新 loader 接收 v1–v4，严格核对几何和规格，
  恢复前拒绝非零 saved vx/vy/omega 或 applied omega。

本次相对开始时工作树：9 个生产文件 +222/−27（净 +195），2 个新测试文件
共 479 行。incremental.diff 仅包含本次变化，不混入历史未提交修改。
baseline.json 记录 HEAD、当时 status、380 个 src/tests/examples 文件哈希；
manifest.json 确认除本次 9 个生产文件之外的 371 个基线文件不变。
未修改 refinement、既有 jet 案例、DynamisLab；未安装依赖、提交或推送。

验证（现有 pycuda_3_10 环境，显式 PYTHONPATH=/home/frank14f/CelerisLab/src）
- 初始相关回归：44 passed，1.60s，exit 0，见 cpu_initial.txt。
- 新 CPU 规格/恢复/内存生命周期测试：31 passed，0.41s，exit 0。
- checkpoint 版本调整后的针对性回归：30 passed，0.63s，exit 0。
  这 30 项属于此前 44 项的重测，不重复计入不同测试数。
- 新 GPU 测试：6 passed，19.80s，exit 0。独立 FP64 解析检查正负驱动、
  q=.2/.5/.8 和 fallback；真实圆的 incoming populations、质量/动量账本、
  力矩及 wall/aperture 分区；零驱动与旧路径逐元素完全相等；实际 checkpoint
  恢复后 2 步续算与原运行逐元素完全相等。未声称包括正负零符号的逐字节等同。
- GPU 前置预检：设备 0 UUID GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c，
  占用 5 MiB、利用率 0、无计算进程；设备 1 未运行任务。
  进程组峰值 RSS 397094912 bytes，VRAM 最小空闲 15826 MiB，
  RAM 最小空闲 63571013632 bytes，本次相关临时空间采样峰值 3579568 bytes。
  无固定 RSS/address-space 上限；按实际余量保留 RAM/VRAM、120s 时间界限、
  2GB 本次临时空间界限。采样监测不是 OS 硬资源隔离。原始命令/环境见 gpu_run.json。
- git diff --check 与增量 patch 反向可应用检查通过。

参考依据（算法对照，未复制外部代码）
OpenLB fb62326f260bf0c5ec2666fc5e055c0813ff50a9：
1. ref/OpenLB/src/boundary/defineU2D.hh:74–79 在真实 intersection 上取完整速度。
2. ref/OpenLB/src/boundary/offBoundaryPostProcessors2D.hh:115–127,153–155
   的两段速度修正与现有 BFL 方向约定对照；本库方向为 fluid→solid，故负号。
3. 本库沿用自身 rho_wall 约定及 fallback；未直接搬用外部 dynamics 密度约定。
4. 原 apply_bouzidi_link 的 c_i*(f_toward+f_reflected) 动量交换保持不变；
   新诊断仅保留逐链接结果后按孔口分区，力矩使用原真实 lever arm。
OpenLB 为 GPL-2.0-or-later，仅作来源对照。

B 独立分析见 ../wall_seam_pulse_20261014/。
三个单位 population 脉冲表明，在该脚本明确限定的候选运输假设下，单改 BB/
coalescence 优先级或排除 solid-source 记录仍产生 ±0.25 权重残差。
prestream 与 postpull BB 两次 fine hop 等价，且目的 slot 唯一写者并不足以
保证每个初始 packet 只有一个全局所有者。没有碰撞、GPU 或生产 refinement
修改，不能称为现存 backend 或外部库的 bug。一次真实执行 exit 0；随后仅
删除固定 AS 上限且未重跑，执行版/当前版哈希和原始输出保持可追踪。

限制与停点
GPU 验证使用 SRT；未开展长时稳定性、空间收敛、真实质量流率标定、性能基准，
也未据此宣称 MRT/TRT 的物理精度或多层网格交界正确。当前只是静止圆的局部
表面吹吸，没有移动物体/喷嘴内部，也没有将该边界接入 refinement。
本步已停止扩展，留待独立审查；B 的交界所有权方案仍需重新设计与验证。
