Files
CelerisLab/research/fine_surface_20261014/report.txt
T

116 lines
8.2 KiB
Plaintext
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.
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限制,不保证完整释放或重试;上下文激活失败可保留资源重试。