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

76 lines
8.7 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.
# 分块存储未完成验收项复核
日期:2026-09-15。复核对象:[结果分块存储验证报告](结果分块存储验证-2026-09-15.md)。
## 结论
原报告的“全量未通过”表示测试套件未全部完成,不表示高级摩擦尚未实现。MECMAS21 静摩擦保持、高级摩擦和 Stribeck 已在 9 月 13 日补齐;LSTP00A 几何接触/零剪切模量、PNL 多方指数范围与两半独立换热也有相应实现和 Amesim 对照。[当时的功能补齐报告](Amesim摩擦与管路功能补齐验证-2026-09-13.md)与当前源代码一致。
本次没有修改组件物理方程或放宽已有数值断言。修正了过时的元数据测试、依赖纳秒级文件时间戳的缓存测试,并为原有摩擦回归增加跨块完整性检查。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 类有连接/执行行为的组件,另两类介质通过气体注册与介质选择使用。[覆盖清单](../../test/chunk-storage/component-audit-20260915/coverage-inventory.json)。
## 缓存失败的可复现原因
测试原先给两个目录设置 `1000000001 ns` 和 `1000000002 ns` 的 mtime。本机 Windows 实际读回均为 `1000000000 ns`,导致排序从预期的年龄顺序变为键名顺序:先删除另一目录就已满足配额,因此 `skippedInUse` 为 0。锁保护目录保留、另一目录删除两项断言仍然通过,符合原报告现象。
已改为相隔 1 秒的年龄,并增加两个前置断言:碰撞项确实较旧,且其独占锁确实被另一个共享租约阻止。原来的 `skippedInUse == 1` 断言保留并通过,没有修改生产缓存的统计或淘汰逻辑。[原始时间戳证据](../../test/chunk-storage/component-audit-20260915/cache-timestamp-evidence.json)。元数据与缓存合计 31 项:28 通过,3 项因本机无符号链接权限而跳过。[日志](../../test/chunk-storage/component-audit-20260915/metadata-cache.log)。
## 分块后的完整曲线复核
重新运行当前平台 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²。完整最大差保留在结果中,仅这两条曲线另外列出“除该已知切换点外”的误差;没有删除原始点或将两版宣称为逐点相同。
[完整对照统计](../../test/chunk-storage/component-audit-20260915/full-grid-summary.json)、[执行日志](../../test/chunk-storage/component-audit-20260915/full-grid.log)、[复现脚本](../../test/chunk-storage/component-audit-20260915/run-full-grid.py)。另外,持久化的 `tests/test_native_friction.py` 已增加状态/输出跨块检查,8 个冻结算例、10 次积分(其中两例覆盖 RK45/BDF)通过;原有乱序回放检查保留。[专项日志](../../test/chunk-storage/component-audit-20260915/friction.log)。
## 本次组件回归汇总
采用分模块独立 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`,但不能将其标记为已修复。
[汇总](../../test/chunk-storage/component-audit-20260915/audit-summary.json)、[逐模块结果](../../test/chunk-storage/component-audit-20260915/component-suite-summary.json)、[PNCH012 诊断复跑](../../test/chunk-storage/component-audit-20260915/pnch012-diagnostic.log)、[UD00 日志](../../test/chunk-storage/component-audit-20260915/test_amesim_ud00_xml.log)、[目录回归日志](../../test/chunk-storage/component-audit-20260915/test_native_catalog.log)。这些是组件及相关存储问题的本次专项复核,不是整个仓库全部测试的一次性全绿声明。
## 仍需区分的边界
- “全量曲线”仅指上述 13 个既定算例的全部常规采样点,不是 27 类组件任意参数和任意连接组合的穷举验证。
- 多质量刚性同速组的欠定静摩擦反力分配,仍不在这 13 个 Amesim 对照算例的逐元件验证范围内。
- 本机符号链接权限相关用例、Linux 实机验收仍未补足,不能记作通过。
- 原全量 Python 进程 `0xC0000005` 的根因仍未由现有日志确定。分模块运行和重试通过只能确认相应用例本次能够完成,不能证明历史异常的根因已修复。