高温氦气物性补全;三通四通能量计算bug修正

This commit is contained in:
ljz committed 2026-09-15 17:57:20 +08:00
1 parent 6fc9afe41d
commit 2b07d996cf
133 files changed
+5230 -253310

No files matched your search

@@ -0,0 +1,52 @@
# 结果分块存储交付与验证
日期:2026-09-15。
## 已实现
- 项目根目录 `simresults/` 保存每次运行的状态块、输出块和清单,默认总配额 1 GiB。通过 `SIMULATION_RESULT_STORAGE_MB` 调整,单位 MiB。
- 每块写入前,为状态及未来输出一起预留容量;跨进程锁串行分配配额。优先淘汰最早结束且未被使用的档案;保护活动运行、仍存活的孤儿工作进程和用户额外放入的文件。无法腾出空间时返回部分结果及 `storage-quota`。
- 原生采样采用固定大小缓冲和同步批量写入,磁盘慢时等待;无无限增长的异步队列。求解器必要状态及事件定位数据不受影响。
- 求解结束后按原有顺序分块计算输出,保留原有数值编码。相同时间戳在块边界仍使用原有后值替换规则。
- 正常取消及求解失败补写不满块。CRC32 和提交标记支持识别异常退出后的有效前缀;强制终止时不伪造尚未计算的输出。
- Windows/Linux 共用小端 Float64 格式和 64 位偏移;纯代数模型内部占位状态有明确列标记。I/O 错误、配额耗尽和控制进程断开分别报告。
详细配置、文件格式和行为边界见 [C 后端说明](../../native/README.md#仿真结果分块存储)。本阶段的 Python/HTTP 返回和浏览器仍使用完整结果;按变量、时间范围读取及浏览器按需加载尚未实现。
## Windows 实际验证
环境:项目 `.venv-win`,Python 3.12、MinGW GCC 8.1、SUNDIALS 7.4.0。
专项命令:
```text
python -W error::ResourceWarning -m unittest tests.test_result_storage tests.test_native_sample_storage tests.test_native_result_transport tests.test_native_json_writer tests.test_native_worker_control tests.test_native_solver_control -v
```
结果:38 项,37 通过、1 跳过。跳过的是依赖 Linux `/dev/full` 的真实延迟写入失败测试。新增测试覆盖固定缓冲、跨块同时间替换、负零位模式、完整尾块、纯代数模型、并发容量预留、跨进程保护、旧档案清理、未知文件保护、截断与损坏识别、配额耗尽、I/O 失败及强制终止后的状态块保留。
数值基线使用改造前保存的 `native-skill-test.xml`(终止时间 0.15 秒,采样间隔 0.0001 秒),与分块版本的 RK45、BDF 分别比较。每种方法均比较 1502 个采样、176 个序列列,共 264,539 个数值及 25 项元数据;原始 Float64 位模式(含负零)、事件样本和求解统计全部一致。
本地日志和基线位于 Git 忽略目录 `test/chunk-storage/`:`final-regression.log`、`parity-RK45.json`、`parity-BDF.json`。
## 首次验收未通过项(后续复核见补充报告)
2026-09-15 后续复核:高级摩擦已经在 9 月 13 日实现;下列第 1 项是过时测试断言,第 2 项是 Windows 时间戳精度造成的测试排序问题,两项均已修正。高级摩擦等 13 个补齐算例已使用分块存储重新检查完整曲线。具体组件、覆盖入口、实际结果及仍未定因的进程问题见 [未完成验收项复核](分块存储未完成验收项复核-2026-09-15.md)。以下保留首次验收的历史结果,不代表组件当前尚未实现。
首次验收没有宣称全量测试通过:
1. 机械参数测试 `test_mecmas21_choice_metadata_preserves_amesim_codes` 仍要求“尚未实现”的高级摩擦描述,与当前组件说明不一致。该测试单独复测仍失败;本次未修改机械组件或该断言。
2. 扩展回归 34 项中,30 通过、3 项因 Windows 符号链接权限跳过,另有未修改的缓存测试 `test_lock_shards_are_bounded_and_collisions_only_defer_eviction` 失败:`skippedInUse` 期望 1、实际 0;对活动项保留和另一旧项删除的断言已通过。单独运行该缓存测试同样失败。
3. 全量发现测试的长进程运行出现 Python 异常退出,退出码 `0xC0000005`,未取得完整汇总。最后执行的 UD00 模型测试另行运行通过;没有据此判定异常退出原因。
相关日志:`test/chunk-storage/full-regression.log`、`test/chunk-storage/extended-regression.log`。
## Linux 状态
已检查 POSIX 文件偏移、文件锁、路径及统一二进制格式,并将新增测试接入现有 `native-linux` CI 作业。本机仅有 Docker Desktop 的 WSL 发行环境且 Docker 服务未运行,未取得实际 Linux 工具链执行结果;Linux 实机验收仍待执行。
## 项目路径迁移补充验证
清单的目录引用已改为 `simresults/run-<id>`,相对于项目根目录。读取使用结果 ID 与当前安装位置计算路径,兼容旧清单中的过期绝对目录提示。原生进程执行时接收的绝对路径仍由当前位置即时生成。
Windows 实际执行 `tests.test_result_storage`、`tests.test_native_sample_storage`、`tests.test_native_result_transport`,23 项全部通过。新增测试将包含存储模块和结果档案的测试项目改名移动到含中文、空格的新目录,确保原目录已不存在,再从无关工作目录启动新 Python 进程;旧块读取与新档案创建均成功。日志为 `test/chunk-storage/relative-path-regression.log`。移动项目需先停止应用,移动后重新启动;未承诺运行中的目录迁移。