修复循环信号与事件采样并接入 LSTP 接触定位,补充八路验证及复用实验

相较上一版 Jacobian 确定性复用更新,本次补齐事件边界一致性、结果两侧采样及接触事件定位;保留已有物性复用和组件力学公式。

- 统一 UD00 信号求值与下一事件查询的绝对时间边界,修复循环边界浮点舍入导致的阶段错位、重复或漏报,并覆盖零时长、多阶段及长周期场景。
- 引入原生输出语义 v2:保留规则网格真实时间,补充内部时间事件和状态事件的左邻及事件后采样,按保存时间、状态和离散模式重放结果。
- 两条代码生成路径均发出 LSTP 接触描述,默认定位间隙过零及非负力模式的力截断;仅在接受事件时更新防重复记录,增加 contactEvents 诊断计数。
- 补充 MASS/LSTP 独立事件实验、八路全曲线与驱动阶段配对评估,以及 Amesim 不连续点输出对照和力差定位报告;MASS 新增释放机制仍保留为独立实验。
- 保存局部 probe、context 访问与回退、shadow replay、R288 real skip/typed replay 及阀门数值尾部诊断工具和报告;未证明净收益的实验不启用为生产默认优化。
- 更新原生运行说明和元件建模规范,补充信号边界、输出语义、接触事件和实验依赖回归测试。

验证:五组专项回归共 34 项全部通过;37 个待提交 Python 文件语法检查通过;git diff --cached --check 通过。
This commit is contained in:
ljz committed 2026-09-17 23:50:13 +08:00
1 parent 1aac220084
commit 7611f13208
85 files changed
+11358 -33

No files matched your search

@@ -0,0 +1,165 @@
# 八路模型正确性初评与展示建议
日期:2026-09-17。代码提交:`1aac2200843009a86066271d3bfb1053bd8d6b2d`。本机 Windows / Python 3.12.3 / GCC 8.1 / SUNDIALS 7.4.0。
## 评价结论
**平台已具备初步展示核心仿真功能的条件,但尚不能表述为“全部结果与 Amesim 一致”或“已完成工程精度验证”。**
本轮重新执行当前 Amesim 模型程序和当前平台代码,共完成六组对照,每组比较 238 条关键曲线。20 项相关自动化回归全部通过。压力、温度、常规行程和质量守恒表现较好;当前仍需处理默认模型配置不一致、循环信号边界不一致,以及小流量/焓流的局部偏差。
原始模型输入和 143 个已跟踪生产文件的 SHA-256 在评估前后均未变化。本轮新增评估脚本、图片和报告,没有修改组件公式、求解器或默认工程。
## 1. 首先发现:当前两份默认模型并非相同工况
| 项目 | 当前平台 JSON | 当前 Amesim AME |
| --- | --- | --- |
| 文件 | `tests/data/test-mql-8-corrected.json` | `tests/data/test_mql.ame` |
| 两个 UD00 信号 | 非循环,`iscyclic=0` | 循环,Amesim 枚举值为 2 |
| 仿真终点 | 10 s | 50 s |
| 输出间隔 | 0.01 s | 0.05 s |
| 误差限数值 | 后端默认 rtol=1e-8 | tolerance=1e-7 |
结构审计得到 **157 个元件、178 条逐端口连接、1,092 项公开参数**;只有两个 UD00 的循环参数不匹配,连接差异为 0。当前 AME 的 SHA-256 为 `0ad9117d88c64c743fcfc41c7b1c5d10854527ab6478cc76ffa092913e52ada3`,与 9 月 14 日旧报告的 `251b2f…` 不同,不能直接复用旧报告作为当前输入的结论。
正式对照在新建 JSON 副本中,仅将这两个循环参数按 Amesim 语义设为 1;再次审计后 **1,092 项参数及全部连接一致**,并完成 1,015 项图纸参数与归档运行参数交叉核验。运行时间、输出间隔、误差限在两边的副本中统一。原文件保持原样。
证据:[原始审计](../../test/evaluation-mql8-20260917/audit-original/audit.json)、[两个参数的对齐记录](../../test/evaluation-mql8-20260917/alignment-changes.json)、[对齐后审计](../../test/evaluation-mql8-20260917/audit-aligned/audit.json)。
## 2. 本轮实际运行与比较口径
| 工况 | 信号 | 时长 | 输出间隔 | 两边误差限数值 | 结果 |
| --- | --- | ---: | ---: | ---: | --- |
| 对齐后的短演示 `default` | 循环 | 10 s | 0.01 s | 1e-8 | 两边完成 |
| 当前模型全程 `full` | 循环 | 50 s | 0.01 s | 1e-8 | 两边完成 |
| 启动细采样 `startup` | 循环 | 0.15 s | 0.0001 s | 1e-8 | 两边完成 |
| 启动容差收紧 `startup-refined` | 循环 | 0.15 s | 0.0001 s | 1e-10 | 两边完成 |
| 最初压缩过程 `volume-startup` | 循环 | 2 μs | 2 ns | 1e-10 | 两边完成 |
| 非循环对照 `noncyclic` | 非循环 | 50 s | 0.01 s | 1e-8 | 两边完成 |
非循环对照使用已保存、重新审计的旧版非循环 AME 与当前默认 JSON,只在副本中统一运行设置;同样重新执行程序,没有读取旧运行曲线代替新结果。其余五组使用当前 AME。
Amesim 端提取源归档内的可执行程序与运行输入后重新运行;没有重新编译 Amesim。除 `.sim` 前五个运行设置外,提取文件逐字节校验不变。平台走 JSON→System XML→组件网络→当前原生 C 编译/运行。平台使用 CVODE BDF,最大步长为 1e30;Amesim 保留其余原运行选项。相同误差限数字不代表两套求解器的误差权重和算法完全相同。
每组映射压力、温度、位移、速度、8 路接触力与间隙、节点焓流/质量流、气室质量/容积/容积功、活塞容积及信号,共 **238 条曲线**。平台完整输出为 **1,784 条**;其余输出检查了有限性,未逐条声明与 Amesim 相符。节点焓流由保存的各支路流量和流入焓按符号重构;Amesim 气室体积功按其保存的压力、连接容积变化率及容积下限条件重构。
单位统一为 SI:Amesim 表压加 101300 Pa,g 转 kg,cm³ 转 m³,L/min 转 m³/s,间隙 mm 转 m。映射来自元件拓扑和端口审计,没有交换元件、拟合时间轴或任意改符号。
**时间比较方法:**在共同规则网格上,若原始保存时刻距名义采样时刻不超过输出间隔的 1e-7,直接读取最近保存值;其他点线性插值。保留原记录的事件侧别,不平均、不平滑尖峰。直接对 `1e17→49000` 的巨大跳变做插值,会因输出时间浮点漂移在 0.81 s 伪造 57888 等尾值。本轮已用原始样本消除这一比较器伪差;原始结果、原始时刻及朴素插值诊断仍保留。
所有“最大差”均指所述采样网格,不是连续时间极值。事件点不从主统计中删除;另外的事件外指标仅用于定位问题。
## 3. 主要结果
| 指标 | 50 s 循环全程,10 ms 采样 | 启动 0.15 s,0.1 ms 采样 |
| --- | ---: | ---: |
| 最大绝对压力差 | **65.687 Pa** | **4,641.503 Pa** |
| 最大温差 | **0.3954 K** | **0.4575 K** |
| 压力最大逐点相对差 | 0.000319% | 0.02022% |
| 温度最大逐点相对差 | 0.004197% | 0.007854% |
| 节点焓流最大绝对差 | 141.920 W | 27,064.123 W |
| 节点质量流最大绝对差 | 1.3268e-5 kg/s | 0.390305 kg/s,位于 0.04 s 阶跃点 |
| 8 路接触力最大绝对差 | **1,285,489.483 N**,32.4 s | 105.579 N |
| 普通质量块最大位移差,排除特殊 #9 | 1.2930e-8 m | 7.4362e-13 m |
表中各指标取该类全部映射曲线中的最大值,最大绝对差与最大相对差可能属于不同曲线和时刻。
![主要曲线和误差](../../test/evaluation-mql8-20260917/comparison.png)
### 完成状态与基本物理检查
- 六组均完成指定终点;所有读取的结果数值有限,输出时间有序。50 s 循环运行到达 50 s,没有再出现早期的 10.8 s 提前退出。
- 56 个气体质量状态合计初值约 **5.566893 kg**。六组中最大总质量漂移为 **4.3521e-14 kg**,相对漂移约 **7.82e-15**。
- 所检查的保存结果中气体质量、绝对压力和温度均为正。质量守恒通过不等于能量及所有本构关系均已验证。
- 20 项回归全部通过,覆盖默认非循环八路 10 s 完整运行、节点能量与容积传递、容积功和下限、氦气物性与反解、UD00 信号链路、压力单位、CSV 导出。首次运行中的部分 GCC 启动失败经现有重试机制恢复;最终没有测试失败。
### 容积下限的快速过程
普通 10 ms 采样看不到最初快速压缩,不能只拿恒定容积说明实现正确。2 ns 采样下,双方第 15 个气室都在 32 ns 的首个下限采样点达到 **0.15 L**,此前初值为 15 L。八个气室最大容积差约 **1.716e-13 m³**;体积功率最大绝对差约 **5.306e5 W**,最大逐点相对差约 **4.786e-6%**,参考功率本身约为 1e13 W 量级。
![容积与体积功率](../../test/evaluation-mql8-20260917/volume-startup.png)
该八路文件中的活塞直接连接气室;经节点传递容积与非零预设容积变化率的覆盖来自本轮通过的专项测试,不能仅由这张图推断。
## 4. 仍不能验收为全部一致的部分
### 4.1 循环事件与采样边界:已确认存在实现缺陷
当前原生信号函数分别通过 `fmod` 判断周期位置、通过周期乘法定位事件。本轮直接编译调用当前源文件,得到:
| 事件函数返回时刻 | 该时刻信号求值 | 应进入的阶段值 | 下一个 double 时刻的值 |
| --- | ---: | ---: | ---: |
| 44 s | 1e17 | 49000 | 49000 |
| 54 s,补充探针 | 49000 | 1e17 | 1e17 |
这证明同一数值时刻上的事件定位和信号求值不一致;不需要积分器即可复现。定位文件:[signal.c](../../native/components/modules/signal.c)。证据:[探针输出](../../test/evaluation-mql8-20260917/signal-probe/signal-boundaries.csv)。
32.4 s 的大接触力差还包含另一层问题:平台保存时间为 `32.4`,此时 UD00 为 49000;Amesim 保存时间为 `32.40000000000221`,UD00 为 1e17。第 2 路接触力分别为 **468662.661 N** 和 **1754152.144 N**。显示相同的小数时间并不保证处于跳变的同一侧,不能把该差额直接认定为接触力本构公式错误。
仅作定位:保留 t≥0.1 s 并避开各信号边界前后 0.02 s 后,8 路接触力最大差为 **0.276 N**,普通质量块速度最大差约 **1.35e-7 m/s**。这不能替代包括事件点的整段验收。
此外,平台原始额外事件样本在约 `32.40035510065 s` 保存了约 **−2.084e14 N** 的接触力;共同 10 ms 网格未包含这个样本,Amesim 本轮保存点也未覆盖同一时刻。因此本轮无法对该窄峰完成同侧、同分辨率定量验收,不能把共同网格最大差当作全部原始事件样本的上界。
### 4.2 小流量与焓流:绝对差小,但局部相对差仍明显
沿用此前报告的诊断分界:焓流参考绝对值超过 1 W、质量流超过 1e-6 kg/s 时计算逐点相对误差;参考更接近零时单列原值和绝对差。**±5% 是本轮筛查线,不是用户批准的工程公差。** 其他物理量分界及分界乘/除 10 的敏感性保存在指标文件中。
| 50 s 工况中的样本 | Amesim | 当前平台 | 绝对差 | 相对差 |
| --- | ---: | ---: | ---: | ---: |
| P4NODE2_1 参考焓流,0.32 s | −2.375850 W | −1.641047 W | 0.734803 W | −30.928% |
| P4NODE2_2 参考质量流,0.32 s | 3.260972e-6 kg/s | 8.351735e-6 kg/s | 5.090763e-6 kg/s | +156.112% |
50 s 循环共同网格中,明确非零的超 5% 样本为 **61 个**:接触力 24、速度 2、信号 5、焓流 7、质量流 23。其中 **30 个位于信号事件点之外**,全部属于上述焓流/质量流;不能将所有差异解释成事件侧别。参考近零的异常另计,没有因为不算相对误差而自动通过。
启动段 0.04 s 的质量流约 0.390305 kg/s 差异位于阶跃点;收紧双方误差限后,该点差异消失,启动质量流最大差降为 0.0009686 kg/s。另一方面,启动焓流过零附近仍有约 0.32 W 差异。收紧容差后最大压差仍约 **4.551 kPa**,最大温差为 **0.5214 K**,说明剩余偏差没有简单随误差限收紧消失。
本轮没有证明管阻公式、近零流量闭合或积分误差中的哪一项是剩余偏差的唯一原因。应在相同状态输入下逐项比较,再决定修改位置。
![事件与小量差异](../../test/evaluation-mql8-20260917/diagnostics.png)
### 4.3 输入本身属于极端工况,数值对齐不等于物理有效
模型包含 1e17 量级激励;无限位、无摩擦的特殊质量块 #9 在循环 50 s 时位移约 **1.12e17 m**。其最大绝对位移差约 **3.056e10 m**,最大逐点相对差约 **9.78e-5%**。该量及相连活塞的巨大几何容积必须单独列出,不能与普通行程的绝对误差混合评价。
启动细采样的气体温度达到约 **11759 K**;当前物性诊断也报告状态方程有效上限 1500 K 被越过,并报告内部理想热量学查询约 39.44 K 低于其 200 K 下限。39.44 K 是内部物性查询温度,不是初始气室温度。这些提示来自本次实际运行。
因此该输入适合展示复杂网络、刚性系统、事件和诊断能力;若用于展示某个真实设备的预测精度,需要另行明确合理的载荷、约束和物性适用工况,并以实验或可靠工程基准验证。
## 5. 建议修改优先级与验收方式
| 优先级 | 修改对象 | 依据 | 修改后应如何验收 |
| --- | --- | --- | --- |
| P1,展示前 | 默认 AME/JSON 的工况管理 | 两个循环开关、终点、采样间隔不同 | 明确主展示工况;保存成对的 AME/JSON 与哈希;参数、端口和运行设置审计一致 |
| P1,正确性 | UD00 的阶段判定、事件定位和输出侧别 | 当前 44 s/54 s 探针直接失败;循环接触力事件点差异大 | 为所有边界检查前一个 double、边界、本身之后一个 double;约定事件前/后输出;比较事件时刻、同侧力与速度及窄窗口原始样本 |
| P2,精度 | 启动残差与小流量/焓流 | 事件之外仍有偏差,收紧容差后未完全消失 | 先做同状态物性、管流、节点输入输出探针;再做分辨率/容差收敛;同时报告绝对误差和非零相对误差 |
| P2,展示模型 | 极端载荷、自由质量块与物性适用域 | 巨大位移、超温、纳秒级压缩 | 保留当前模型作为压力测试;另建有合理量级和约束的展示工况,重新对齐两平台,不能仅缩坐标轴隐藏异常 |
现有结果不足以支持“先更换积分器”或“继续优化求解器即可修复曲线差异”。已证明的边界缺陷和输入一致性应优先处理。
## 6. 可用于初步展示的内容
建议展示顺序为:加载八路工程 → 查看元件、连接与信号设置 → 运行 → 叠加两平台压力/温度/普通行程 → 展示误差曲线 → 查看物性诊断与事件差异 → 导出结果。
可直接导入的评估副本:[10 s 对齐工程](../../test/evaluation-mql8-20260917/default/platform.json)、[50 s 循环工程](../../test/evaluation-mql8-20260917/full/platform.json)。两者已与当前 AME 的物理输入对齐。
可用表述:“已完成 157 元件、132 状态八路网络的原生求解及结果输出,对 238 条关键曲线进行了 Amesim 对照;主要连续状态吻合较好,事件边界和小流量精度仍在完善。”
本轮没有执行真实浏览器中的拖拽、导入按钮、持久化恢复、绘图及取消全流程,不将后端测试通过等同于前端展示流程已经验收。单次 50 s 循环平台求解约 12.41 s,Amesim 完整进程约 7.59 s;计时边界不同且未重复测量,**不据此计算性能优劣比**。
## 7. 交付与复现
全部本机证据在 `test/evaluation-mql8-20260917/`,该目录按仓库规则被 Git 忽略;报告及四个脚本为新增可跟踪文件。
- [总指标与运行状态](../../test/evaluation-mql8-20260917/summary.json)、[输入/代码哈希](../../test/evaluation-mql8-20260917/manifest.json)、[评估结束哈希核验](../../test/evaluation-mql8-20260917/source-verification.json)。
- [1,428 条分工况曲线指标 CSV](../../test/evaluation-mql8-20260917/curve-errors.csv)、[18 条展示变量的双平台曲线 CSV](../../test/evaluation-mql8-20260917/showcase-curves.csv)。每个工况另有完整 `curves.npz`、`comparison.json`、映射、原始结果、日志和事件邻近样本。
- [20 项回归日志](../../test/evaluation-mql8-20260917/regression.log)、[信号边界探针](../../test/evaluation-mql8-20260917/signal-probe/signal-boundaries.csv)、[采样匹配检查](../../test/evaluation-mql8-20260917/sampling-verification.json)。
- [主评估脚本](../../tests/manual/evaluate_mql8_correctness.py)、[曲线映射](../../tests/manual/mql8_comparison.py)、[边界探针脚本](../../tests/manual/probe_mql8_signal_boundaries.py)、[绘图脚本](../../tests/manual/plot_mql8_evaluation.py)。
从仓库根目录使用新的输出目录重跑当前循环模型五组对照:
```powershell
.\.venv-win\Scripts\python.exe tests/manual/evaluate_mql8_correctness.py --output test/evaluation-mql8-rerun --ame-home F:/AMESim2404/Amesim --align-cyclic-from-ame
.\.venv-win\Scripts\python.exe tests/manual/probe_mql8_signal_boundaries.py --output test/evaluation-mql8-rerun/signal-probe
```
可选追加 `--noncyclic-ame test/node-fixes-amesim-20260914/test_mql.ame --noncyclic-project tests/data/test-mql-8-corrected.json`,重跑第六组非循环对照;该历史副本只存在于当前工作站证据目录。绘图脚本需要 Matplotlib,本轮使用已安装该库的 `F:/Anaconda/python.exe`。主评估脚本仅需项目既有运行依赖与 NumPy。