2026-10-14 — 固定加密区内静止圆表面吹吸:受限整合交付 状态:当前代码与验证完成,停在独立审查点。A 的单层静止圆功能保持;本次只 把完整边界 stencil 位于 fine active 的圆接入 FixedPatchStepper。未增加 checkpoint、forcing、运动刚体、喷嘴内部、墙穿接口、blockforest 或临时 ledger。 所有 B 反例与既有证据保留。 入口与单位 FixedPatchStepper(cfg, bounds, context=context, fine_objects=[obj])。 obj 是现有 SimObject/CircleGeometry;中心/半径用 coarse 物理坐标,速度沿用 coarse lattice 单位(当前 dx=dt=1)。构造独立 fine-local 副本,不修改调用方对象。 C_local=(C_phys-origin)/dx-.5,R_local=R_phys/dx,U_local=U_phys*dt/dx。 真实 hit 反变换为 origin+dx*(hit_local+.5),lever arm 乘 dx,角度/q 不变。 维持 D2Q9/SRT/FP32/unshifted/double_buffer、无 LES/forcing 的原 backend 范围。 生产改动:5 个现有文件 + 1 个共享文件,+300/−71,净 +229 行。 - refinement.py:FineBoundary2D、prepare_fine_boundary;纯 CPU 建图和拒绝检查。 - refinement_stepper.py:固定 fine 对象、flags/SoA 管理、两个 BFL 子步、solid 叶掩码、初始化与释放;不接完整 Simulation/ObjectManager。 - aux_kernels.cu → step/curved_double.cu:原 action_omega/CurvedBoundaryKernel 代码块逐字相同,只抽取共享位置并增加 include guard,已比对确认。 - refinement.cu:包含共享 BFL,PatchFineStep 接 flags;solid 不 pull/collide, 输出 NaN;所有 Python launch 传完整参数。 - 原 lbm/stepper.py:allocation 显式 is not None;驱动缓冲缺失报错。 数据/所有权 explosion → BFL(current) → fine pull+collision → BFL(spare) → fine pull+collision → coarse pull/coalescence+collision。active fluid 每 coarse 步碰撞两次;solid 与 ghost 不碰撞。BFL 只填当前输入的 solid source 反射槽,下一子步重新填充。 下载仅发布流体叶节点,coarse covered、fine solid/ghost 均 NaN。 flags/level/transfer arrays 归 stepper._allocations;SoA 的列及速度/交换缓冲只 归 SoA,未重复登记。initialize 清空最新交换缓存。无对象不创建这些新缓冲。 内部交换缓冲仅代表最后一个 fine 子步,未新增公共 coarse 累计诊断。 测试账本分别读取四个 fine 子步的实际 population,按面积 1/4 求和;不是用 latest 值冒称区间总量,也不是喷嘴总推力。 有限依赖规则 plan.transfer_reads 保存 (hop, direction, cell),从实际 coalesce_fine 的 hop 2 源槽反向两次 pull;遇 active collision 展开全部 9 个输入,hop 0 停止。 transfer_fine_cells 加入全部 ghost_fine/explosion 写集;coarse 集合包含实际 ghost_coarse donors 与 coalesce_coarse targets。ghost 可以合法参与运输; outer ghost 的各阶段有效性仍按原 kernel 判断。 逐条检查 r active fluid、s=r+c active solid、反射写槽唯一、q<.5 的 r−c 仍在 active;不可用 fallback 掩盖跨层 donor。同层真实 solid 阻挡的原 fallback 语义不改。逆查所有 active-fluid→solid 邻接,确保与 cut links 完全一致。 整个 solid 集合及 r/s/donor stencil 均不得碰到上述 transfer footprint。 coarse donors/targets 必须 uncovered bulk;slot 模式另外拒绝其真实壁面 reconstruction pull stencil。无对象旧 slot 模式保持原规则。 CPU 结果(原始 command/stdout/exit 见同目录) - 新建图/单位/边界覆盖/拒绝检查:15 passed,最终代码复测 15 passed,exit 0。 同行补充的非对角圆心、origin=(2,2)、四子格平均等于 coarse I+.5 也通过。 - 旧 maps:9 passed、23 subtests;共享 actual CUDA-header CPU 回归:1 passed。 - 旧生命周期/边界模式:5 passed、5 subtests。 - 新缺失驱动缓冲拒绝:2 passed,exit 0;同步失败后释放且不重复释放:通过。 - 指定 donor 反例通过构造器检查,context.activate/mem_alloc 均未调用:1 passed。 真实 GPU 结果与首次批次失败说明 使用现有 pycuda_3_10、显式 PYTHONPATH=/home/frank14f/CelerisLab/src;stdout 首先打印并断言实际包来源。设备 0 UUID GPU-e8853ae7-a302-6a17-bcfa-aa767e9ed20c, 开始时占用 5 MiB、util=0、无计算进程;未用其他设备。 运行批次真实 exit=1:5 项 GPU 检查和 1 项 CPU cleanup 检查通过,另 2 项 CPU 缺失缓冲夹具失败,因为夹具未提供新增前置检查所需的 fluid_idx_gpu 字段。 仅补齐夹具后,定向 CPU 重测这 2 项 exit=0;原日志/exit=1 保留,未重跑 GPU。 5 项 GPU 检查: 1–3. speed=0,+.002,−.002 的批准小案例,各 2 coarse/4 fine 步。 coarse24²,patch[4,20)²,fine40²,origin(2,2),dx=dt=.5;物理圆心 (12.25,12.25)、R2.15 → local(20,20)、R4.3;angle.7/half_width.85; nu_phys=.05,tau_c=.65/tau_f=.8,rho1/u0/G=feq。 三个驱动使用私有 audit build 验证 fine fluid 碰撞4次、coarse fluid2次, solid/ghost0次。零驱动另与正常 production build 的 same-solid/no-actuation 路径逐元素相等。参考采用正常 A build 的48²、dx=dt=.5、circle local(24,24), 对齐真实物理位置与时间(4 fine步=物理时间2),不是跨分辨率逐元素比较。 4. 旧无对象 periodic 非居中矩形 normal build:1 coarse步,最大人口误差 1.14050047e−7,通过。 5. 旧无对象 slot/reservoir normal build:8 coarse步,最大人口误差 1.78241457e−7、最大BC误差2.21654773e−7,通过。 主要数值: speed max |BFL误差| max |累计质量/动量账本残差| 预定FP32预算 0 7.4505806e−9 1.6049482e−5 0.00221051117 +.002 9.7307344e−9 1.5977304e−5 0.00221052543 −.002 7.4505806e−9 1.6636681e−5 0.00221049693 BFL阈值1e−7;同细分辨率、未触接口的圆周ROI人口atol3e−6、局部矩2e−5均通过。 账本预算为8*eps32*实际参与加权population绝对值总和,未放宽。喷吸附加质量 分别约+0.00620033871/−0.00618575338,符号正确。该短例净transfer项为0; 仍逐项统计真实非零出入人口,但喷吸扰动尚未触达接口。 拒绝证据 - physical C=(5.05,12.25),R=.7 → fine C=(5.6,20),R=1.4:r=(4,20),c=(1,0), hit=(4.2,20),q≈.2,donor=(3,20)为ghost,构造在任何CUDA调用前拒绝。 - physical C=(6.05,12.25),R=.7:全部直接r/s/donor都active,仍因与真实 两hop transfer footprint相交而拒绝。说明通过边界检查不能仅靠包围盒或边距。 资源与记录 GPU批次外部耗时25.395s;进程组RSS峰值386883584 bytes,RAM最小空闲 63638339584 bytes,VRAM最小空闲15826 MiB,相关临时空间采样峰值3585985 bytes。 按实际余量保护,无固定RSS/AS上限;120s与2GB本次临时量约束未触发。监测是 采样方式,不是OS硬资源隔离。编译临时目录已清理;不会清理其他任务或旧证据。 baseline.json保存382个src/tests/examples文件哈希;其中377个保持不变。 manifest.json和incremental.diff只描述本轮;共享kernel抽取相等与反向patch检查通过。 GPU执行后仅将建图时的孔口预检输入改成与实际八列完全一致的FP32 lever arm, 避免极窄孔口在分配前后得到不同覆盖判断;最终CPU15项复测通过。GPU算子、上传 数组生成方式、步序和测试数值部分未变。gpu_test_run1.py/gpu_preparation_run1.py 是按GPU运行中已记录的SHA256逐项核对后的执行版快照,保留首次运行的精确来源。 参考与边界 直接复用A已接受BFL。ref/OpenLB/src/boundary/defineU2D.hh:74–79用于真实hit 速度投影对照,offBoundaryPostProcessors2D.hh:115–127用于两分支stencil对照; OpenLB commit fb62326f260bf0c5ec2666fc5e055c0813ff50a9,仅算法对照、未复制代码。 现有CPUREF-0.3与实际refinement kernel的ghost不碰撞、两hop/每层tau、incoming 替换后coarse碰撞保持不变,未移植任何B候选。 不声称喷流穿粗细接口精度、长时稳定性、空间收敛或性能已验证。设备free()自身 抛错时沿用既有close限制,不保证完整释放或重试;上下文激活失败可保留资源重试。