Files
SystemSimulationApp/docs/other/分块存储未完成验收项复核-2026-09-15.md
T

8.7 KiB
Raw Blame History

分块存储未完成验收项复核

日期:2026-09-15。复核对象:结果分块存储验证报告。

结论

原报告的“全量未通过”表示测试套件未全部完成,不表示高级摩擦尚未实现。MECMAS21 静摩擦保持、高级摩擦和 Stribeck 已在 9 月 13 日补齐;LSTP00A 几何接触/零剪切模量、PNL 多方指数范围与两半独立换热也有相应实现和 Amesim 对照。当时的功能补齐报告与当前源代码一致。

本次没有修改组件物理方程或放宽已有数值断言。修正了过时的元数据测试、依赖纳秒级文件时间戳的缓存测试,并为原有摩擦回归增加跨块完整性检查。13 个补齐算例已使用当前平台重新运行完整曲线对照。

逐项定位

报告/排查中涉及的项目 当前情况与证据 本次处理
MECMAS21 高级摩擦、Stribeck C 内核 native_dry_friction 包含保持反力和指数过渡;生成器保存 _friction_mode,高级模式使用 dvel 和 0.1% 脱离滞环 旧测试还要求描述含“尚未实现”,与已实现功能相反。改为验证低速保持区间、指数过渡及原 Amesim 编码;完整数值回归通过
LSTP00A 几何模式、G=0 有几何刚度公式,G=0 时保留阻尼 几何接触、零剪切模量和机械联合系统完整对照通过
PNL0001/2 多方指数 已允许 k>0,含 k=2.5 的实现/验证 两个独立管路及联合系统完整对照通过
PNL0003 两半换热 各半使用自己的温度 非对称换热与联合系统完整对照通过
PNCH012 旧组件测试文件 tests/test_amesim_pnch012_component.py 只剩 setUp,没有 test 方法 不能把“0 个测试”当成已验证;其执行覆盖由 XML 测试、test_native_node_conservation.py 和原生目录提供
PNL0002/3 旧组件测试文件 tests/test_amesim_pnl0002_pnl0003_component.py 同样没有 test 方法 执行覆盖在 XML、原生语义、管路物理及目录测试;本次另有完整 Amesim 曲线验证
UD00 原全量进程最后输出的测试涉及 UD00,但没有足够证据把异常退出归因于信号组件 保留历史异常记录,单独复核 XML 入口;摩擦算例还完整运行其多段信号驱动
缓存锁冲突测试 缓存淘汰逻辑未发现错误,测试时间戳在 Windows 上发生舍入 修正测试时间间隔,并直接检查锁冲突和年龄顺序

两份空测试文件来自 3b38f73(2026-09-10,Python 数值内核退役);该提交从这两个文件删除了原 Python 数值测试。不能据文件名称推断里面还有可运行用例,也不能据它们为空推断 C 实现缺失。原生目录包含 27 类注册模型;50 个历史网络包含 25 类有连接/执行行为的组件,另两类介质通过气体注册与介质选择使用。覆盖清单。

缓存失败的可复现原因

测试原先给两个目录设置 1000000001 ns 和 1000000002 ns 的 mtime。本机 Windows 实际读回均为 1000000000 ns,导致排序从预期的年龄顺序变为键名顺序:先删除另一目录就已满足配额,因此 skippedInUse 为 0。锁保护目录保留、另一目录删除两项断言仍然通过,符合原报告现象。

已改为相隔 1 秒的年龄,并增加两个前置断言:碰撞项确实较旧,且其独占锁确实被另一个共享租约阻止。原来的 skippedInUse == 1 断言保留并通过,没有修改生产缓存的统计或淘汰逻辑。原始时间戳证据。元数据与缓存合计 31 项:28 通过,3 项因本机无符号链接权限而跳过。日志。

分块后的完整曲线复核

重新运行当前平台 BDF:0–3 s,rtol=1e-9,最大步长 0.002 s,采样间隔 0.001 s。参考使用 9 月 13 日已经实际运行并保存的 Amesim 2404 原始 .results,核对源哈希;本次没有重新启动 Amesim,亦未改写原参考数据。

13 个算例、98 条映射曲线,每条比较全部 3001 个 Amesim 常规采样点。平台同时保存自己的事件点,再插值到 Amesim 常规网格。每例状态/输出均保存为 3 个有效块,没有截断或 CRC 错误。保留原有绝对误差限:压力 1 Pa、温度 0.001 K、加速度及干摩擦/限位/接触力 0.002(对应 SI 单位)、其余 3e-6;不把这组验收等同于所有变量逐点相对误差小于 5%。

算例 本次主要最大绝对差
friction_simple v:3.78e-9 m/s;x:5.47e-9 m;瞬时切换的力差另列
friction_advanced v:3.78e-9 m/s;x:8.68e-9 m
friction_stribeck v:5.30e-8 m/s;干摩擦:3.00e-6 N
friction_elastic v:6.88e-8 m/s;干摩擦:2.90e-6 N
friction_ideal v:1.72e-8 m/s;干摩擦:4.85e-7 N
friction_band v:8.74e-9 m/s;x:2.10e-9 m
joint_mechanical 接触力:4.30e-5 N
joint_pneumatic 通过原有逐变量绝对误差限,详见 JSON
contact_geometry 接触力:6.70e-8 N
contact_zero_G 接触力:2.88e-8 N
pipe1_poly 管内压力:0.02045 Pa;温度:1.85e-5 K
pipe2_poly 管内压力:0.14171 Pa;温度:1.28e-4 K
pipe3_heat 两半最大压力:0.0001684 Pa;温度:8.41e-7 K

简单摩擦在 t=0.15 s 的切换点仍存在左右取值差异:干摩擦最大差约 2 N,加速度约 2 m/s²。完整最大差保留在结果中,仅这两条曲线另外列出“除该已知切换点外”的误差;没有删除原始点或将两版宣称为逐点相同。

完整对照统计、执行日志、复现脚本。另外,持久化的 tests/test_native_friction.py 已增加状态/输出跨块检查,8 个冻结算例、10 次积分(其中两例覆盖 RK45/BDF)通过;原有乱序回放检查保留。专项日志。

本次组件回归汇总

采用分模块独立 Python 进程运行,避免把某个模块的进程中断误报成后续所有组件的失败;每个模块设 300 s 外层超时,保留所有原始日志。

  • 组件/介质相关 128 项测试最终通过,其中包含原生目录的 4 项测试、全部 27 类注册模型的版本合同、50 个历史网络。50 个网络中的 3 个旧输入存在启用干摩擦时 fcoul > fstick,按当前契约验证明确拒绝;不能把拒绝非法输入记为高级摩擦未实现。
  • 元数据/缓存 31 项中 28 通过、3 项因 Windows 符号链接权限跳过;摩擦专项 1 项内的 8 个算例、10 次积分通过。
  • 合计 160 项测试方法:157 通过、3 跳过。两份没有用例的遗留文件不计为通过测试,单独执行返回 NO TESTS RAN。
  • 本轮 PNCH012 XML 模块首次在 300 s 外层限制下超时,未得到内部错误栈;随后开启 faulthandler 的独立运行在 4.961 s 完成,2 项均通过。这是重试后的覆盖结果,不是一次运行全绿,也未确认首次超时的根因。
  • UD00 XML 2 项在独立进程中通过(约 5.64 s);原生组件语义 11 项通过;目录回归 4 项通过(约 229.24 s)。未复现原报告的 0xC0000005,但不能将其标记为已修复。

汇总、逐模块结果、PNCH012 诊断复跑、UD00 日志、目录回归日志。这些是组件及相关存储问题的本次专项复核,不是整个仓库全部测试的一次性全绿声明。

仍需区分的边界

  • “全量曲线”仅指上述 13 个既定算例的全部常规采样点,不是 27 类组件任意参数和任意连接组合的穷举验证。
  • 多质量刚性同速组的欠定静摩擦反力分配,仍不在这 13 个 Amesim 对照算例的逐元件验证范围内。
  • 本机符号链接权限相关用例、Linux 实机验收仍未补足,不能记作通过。
  • 原全量 Python 进程 0xC0000005 的根因仍未由现有日志确定。分模块运行和重试通过只能确认相应用例本次能够完成,不能证明历史异常的根因已修复。