Files
SystemSimulationApp/docs/other/八路循环信号平台与Amesim对比-2026-09-14.md
T

132 lines
11 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-14,Windows,分支 `system-optimization`。
## 结论
先核对参数,再将两个 UD00 都设为循环并统一运行设置。最终测试副本的 **157 个元件、178 条逐端口连接、1,092 项公开参数均匹配**,另有 1,015 项图纸参数与 Amesim 实际运行参数表交叉核验通过。
两边均连续三次完成 50 秒。平台纯求解墙钟时间中位数 **9.133 秒**;平台原生进程完整运行 **10.660 秒**,Amesim 原生进程完整运行 **6.816 秒**,按此进程口径平台约慢 **1.56 倍**。平台通过真实 HTTP 流式接口提交和接收结果,完整请求中位数为 **14.593 秒**。
**曲线总体变化趋势相近,但不能验收为全部一致。** 循环切换采样点存在左右分支差异;起始快速变化阶段还有压力、温度差异,而且将双方误差限收紧到 `1e-10` 后仍然存在。
## 1. 仿真前参数检查
本轮来源为用户指定的当前八路默认文件:
| 来源 | 仿真前 SHA-256 |
| --- | --- |
| `tests/data/test_mql.ame` | `251b2f17c24ea02c1ab48f9f441a0ec38e7920627ea7e6870392326424a517c5` |
| `tests/data/test-mql-8-corrected.json` | `60ed16c71b72be4ae71ca7980f4f8cdcdf6b4c4c4c8950863c2390960b71ced4` |
原模型公开物理参数和连接没有差异,两个 UD00 都为非循环。原运行设置有三项差别:JSON 为 10 秒、输出间隔 0.01 秒,Amesim 为 50 秒、0.05 秒;平台默认相对误差限 `1e-8`,Amesim 容差 `1e-7`。
在测试副本中调整如下,并在开始求解之前重新通过完整参数、连接和时间设置审计:
| 设置 | 平台 | Amesim |
| --- | --- | --- |
| 起止时间 | 0–50 s | 0–50 s |
| 输出间隔 | 0.01 s | 0.01 s |
| 最大积分步长 | 1e30 s | 1e30 s |
| 误差限数值 | rtol=1e-8 | tolerance=1e-8 |
| 运行方式 | CVODE BDF | 标准变步长积分器;API `integ_method=0` |
| 循环开关 | 两个 UD00 均为 1 | 两个 UD00 均为 2 |
循环开关按各自枚举的语义转换,而非直接比较数字。两个信号周期都是 **10.8 秒**:
- `amesim_ud00_1` / `piecewiselinear`:前 0.8 秒为 `1e17`,后 10 秒为 `49000`。
- `amesim_ud00_2` / `piecewiselinear_1`:前 0.8 秒为 `1e12`,后 10 秒为 `0`。
统一的是公开物理输入、连接和上述运行设置,不是两套求解器的全部内部行为。Amesim 保留 mixed error、standard solver、启用 optimized solver;平台保留生成的逐状态绝对误差限。相同的 `1e-8` 数字不等于完全相同的误差权重。按用户此前要求,仅记录 Amesim 运行选项,不把其内部算法直接认定为 CVODE BDF。
证据:`test/mql8-cyclic-20260914/preflight/audit.json`、`aligned-audit/audit.json`、`ame-settings.json`。原始 AME/JSON 在本轮结束时 SHA-256 均未改变。
## 2. 执行方式和耗时
Amesim 使用本机 2404 官方 API 打开副本、设置参数、生成程序并保存;随后独立运行其生成的模型程序。平台启动一个独立临时 FastAPI 实例,走 JSON→XML→`/api/system-xml/simulate-stream` 正式路径,使用本轮修复后的 C 封装。该临时服务已结束,未替换用户运行中的服务。
两边各串行运行三次,没有互相并发竞争计算资源。平台三次均命中模型编译缓存。主测均为 `1e-8`;后文 `1e-10` 仅用于精度诊断,不混入速度中位数。
| 计时字段 | 第 1 次 | 第 2 次 | 第 3 次 | 中位数 |
| --- | ---: | ---: | ---: | ---: |
| 平台 `solveSeconds`:纯求解墙钟 | 9.368 s | 9.133 s | 9.058 s | **9.133 s** |
| 平台 `solveCpuSeconds`:纯求解 CPU | 9.344 s | 9.219 s | 9.078 s | **9.219 s** |
| 平台 `processWallSeconds`:原生进程及结果读取 | 10.901 s | 10.660 s | 10.594 s | **10.660 s** |
| 平台 HTTP 请求墙钟 | 14.593 s | 14.653 s | 14.291 s | **14.593 s** |
| Amesim 原生进程墙钟 | 6.886 s | 6.816 s | 6.649 s | **6.816 s** |
| Amesim 日志 `Total CPU time` | 4.406 s | 4.438 s | 4.250 s | **4.406 s** |
CPU 字段之比约 2.09;但 Amesim 的日志总 CPU 字段与平台明确排除了初始化/最终结果投影的纯求解 CPU 字段不保证边界完全一致,因此只作辅助观察。原生进程墙钟之比约 1.56;两边结果格式和输出数量也不同,不能把全部差额认定为积分器内部开销。
平台完整请求的额外成本可直接看到:缓存命中时仍有约 **2.22 秒构建检查/预处理**;原生进程时间比纯求解约多 **1.53 秒**;另有后端组装及本地 HTTP 结果传输。此次平台返回完整 1,784 个输出,JSON 体积较大。HTTP 计时包含请求至接收完全部流式响应,不含客户端随后解析大 JSON、浏览器 JavaScript 或绘图,所以不能称为网页按钮到绘图完成时间。
平台三次接受步均为 15,037,均记录同时间成功返回 12 次、最多连续 6 次;最终到达 50 秒,没有再次出现 10.8 秒提前终止。
## 3. 曲线结果
比较 158 条关键曲线:质量位移/速度、气腔和管路压力/温度、8 路接触力/间隙及信号。由参数审计确定对应元件,按物理单位转换,例如 Amesim 表压加 101300 Pa 对应平台绝对压力,间隙 mm 转为 m;没有通过交换元件或改变符号来拟合曲线。
平台返回 5,010 个时刻,Amesim 为 5,002 个时刻。双方具名保存值均有限;对比使用 0~50 秒的 5,001 个共同 0.01 秒网格点,线性插值。额外事件点及浮点边界的处理并不相同,原始文件全部保留。
### 完整区间的最大差
| 物理量/曲线 | 最大绝对差 | 发生时刻 |
| --- | ---: | ---: |
| 第 1 路接触力 `amesim_lstp00a_1.force` | **1,285,518 N** | 32.4 s |
| 全部 8 路接触力的最差项,第 7 路 | 1,285,518 N | 32.4 s |
| 管路压力 `amesim_pnl0002_6.p` | **163,286 Pa** | 0.01 s |
| 管路温度 `amesim_pnl0001_13.T` | **105.215 K** | 0.01 s |
| 接触间隙最差项,第 2 路 | 2.703e-8 m | 44.19 s |
不能只报“趋势重合”而省略上表的大差异。
### 循环切换点为什么有尖峰差异
在共同网格 `t=32.4 s`,两边取到了不同的信号分支:平台第一个信号为 `49000`,Amesim 插值值约为 `1e17`。这里正好是第三个循环边界;浮点时间、事件点及保存采样的先后约定影响取到跳变前还是跳变后的值。离开切换点前后 0.02 秒后,所有对照信号完全相同,说明不是周期长度或幅值参数仍不一致。
接触力对此特别敏感:本模型 `kcont=rcont=1e11`,32.4 秒处两边接触间隙接近,但 Amesim 相连两质量的相对速度约为 `1.2855e-5 m/s`,平台接近零,仅此阻尼项就对应约 **1.2855e6 N** 的力。因而微小速度和切换取样侧的差别,会被很大的阻尼放大为力尖峰。这里是对保存结果的解释,不等于已证明某一方的尖峰代表真实物理脉冲。
保留全部初始阶段、只避开每个 UD00 切换点前后 0.02 秒,8 路接触力最大差约 **5,129 N**。进一步仅看 `t>=0.1 s` 且避开上述窗口,接触力最大差 **32.12 N**;第 1 路在 50 秒时的差为 **−28.79 N**。这些筛选结果用于定位差异,不能代替完整区间验收。
### 温度和压力差异并未随容差收紧消失
补做两边 `1e-10` 的 50 秒诊断:
| 项目 | 双方 1e-8 最大差 | 双方 1e-10 最大差 |
| --- | ---: | ---: |
| 上述管路压力 | 163,285.92 Pa | 163,359.89 Pa |
| 上述管路温度 | 105.2145 K | 105.2373 K |
| 第 7 路接触力 | 1,285,518.34 N | 1,288,259.73 N |
对压力最差曲线,平台自身收紧容差的变化最大约 89.87 Pa,Amesim 自身变化约 15.89 Pa;温度最差曲线分别约 0.02356 K 和 0.00106 K,远小于双方之间的 105 K。因此这部分差异主要不是普通积分误差限偏松,后续应核对相应状态/物性公式、有效范围之外的处理和初始化后的快速压缩过程。
本次 Amesim 日志实际报告:初始快速过程的氦气温度超出状态方程及残余热物性有效上限 1500 K,日志中出现约 9609 K 的查询;保存曲线也有约 5174 K 的管内温度。Amesim 还报告 8 个 PNCH012 容积被最小容积 `cvol0/100=150 cm³` 限制。这些都是当前匹配模型实际进入的状态,需要在后续公式对照中保留,不能因为双方均正常终止就认定该工况的物性精度已经得到保证。本轮没有进一步认定某个具体物性函数为唯一根因。
### 巨大位移的特殊质量块
`amesim_mecmas21_9` 是质量 100 kg、无摩擦、无限位的质量块,受到本模型量级很大的重复激励。两边都得到约 `1.12e17 m` 的最终位移。默认容差下该位移的绝对差约 `1.50e10 m`,相对该量级约 `1.34e-7`;容差收紧后绝对差降到约 `2.66e8 m`。这部分不能与普通活塞的毫米级位移混在同一绝对误差指标里,也不能忽略这项极端模型状态。
排除该质量块,在 `t>=0.1 s` 且避开切换窗口后,其他质量位移最大差约 `2.19e-5 m`,速度最大差约 `2.43e-4 m/s`。完整逐曲线指标均见 `comparison.json`。
![循环模型对比](../../test/mql8-cyclic-20260914/comparison.png)
## 4. 后续方向与本轮范围
这次已经确认:参数与连接匹配、两个循环信号配置正确、两边都完成 50 秒、外层提前终止问题没有复发。仍未完成的“一致性”包括切换点采样侧统一,以及高温快速过程的压力/温度差异解释。应先完成这两项,再把此模型作为等精度性能基准。
本轮没有修改生产求解器、组件公式或两个可调环境参数,也没有据此开展稀疏矩阵优化。Amesim 首次重新编译遇到既有 GCC CreateProcess 故障,另一次 API 会话缺少模型库搜索路径;补齐该会话使用的既有库路径后编译完成,未修改机器工具链配置。这些发生在正式计时之前。
## 5. 交付文件与证据
所有本机工件位于 `test/mql8-cyclic-20260914/`:
- **`amesim/test_mql.ame`**:循环、50 秒、0.01 秒采样、容差 1e-8 的模型副本,已通过官方 API 保存最新仿真结果;归档 `.results` 的 SHA-256 与本次实际运行结果一致。
- **`test-mql-8-cyclic.json`**:参数对应的平台工程,可直接导入;rtol 由当前平台后端默认值提供。
- `platform-curves.csv`、`amesim-curves.csv`:158 条曲线在共同网格上的单位统一数据。
- `comparison.png` / `.svg`:总体及局部曲线。
- `comparison.json`、`refinement-comparison.json`:完整指标及严格容差诊断。
- `platform-timings.json`、`ame-timings.json`:三次计时;`platform-result-event.json`、`ame-run/` 保留原始输出。
- `prepare_ame.py`、`run_comparison.py`、`analyze.py`、`refine.py`、`analyze_refinement.py`:本机复现脚本。
原始 `tests/data` 两份默认输入保持不变;循环测试使用交付副本。测试目录为 Git 忽略目录,报告保存在 `docs/other/`。