Files
SystemSimulationApp/docs/other/Amesim元件语义核查与修复-2026-09-13.md
T

70 lines
8.8 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.
# Amesim 元件语义核查与修复
日期:2026-09-13;分支:`system-optimization`。本轮核查公开目录中的 22 个 Amesim 条目,重点是参数编码、选项是否实际参与计算、单位、力方向、初值和分段信号。对照本机 Amesim 2404 子模型 C 文件及其随附说明;没有复制其实现源码进入生产代码。
**同日复核补充:不能将下表理解为对应元件已全面对齐。后续发现 PNL0003 分端换热仍有计算错误,UD00 零时长及部分机械参数边界也有差异;详见 [已修复元件语义复核](Amesim已修复元件语义复核-2026-09-13.md)。本报告保留原修复记录,新增差异尚未修复。**
本轮没有修改 `native/runtime/` 中的积分器、停滞判断或事件恢复策略,也没有开展稀疏矩阵优化。公开参数名、端口名和 0/1 布尔编码不变;修复的是已有选项的实现及外部转换,故保持当前精确 `modelVersion`,避免已有 XML 被无关版本升级拒绝。
## 已修复的问题
| 元件 | 旧问题 | 修复后的行为 |
|---|---|---|
| UD00 | AME 的 `iscyclic=1` 被直接复制为本系统的 `1`,把不循环误作循环 | 外部转换明确为 **AME 1→公共 0,AME 2→公共 1**;浏览器 JSON/XML 不再次转换 |
| UD00 | 不循环时,末段斜坡在全部分段结束后仍向后延伸;未安排最后终点 | 最后终点以后保持末值;开始前保持首值;最后终点纳入分段通知。零时长分段跳过是本系统现有扩展,Amesim 拒绝有效段时长为零,不能称为语义对齐 |
| LSTP00A | 选择几何刚度后仍使用保存的 `kcont` | 使用 `G × wdiam⁴ / (8 × sdiam³ × na)`,几何参数须为正;接触力仍在 C 中计算 |
| MECMAS21 | `theta` 未参与计算 | 按度转换倾角,计入 `mass × 9.80665 × sin(theta)`;正负 90° 的加速度方向分别验证 |
| MECMAS21 | 弹性限位使用线性阻尼增长,与 LSTP00A 不同 | 二者共用指数接触公式;穿透量等于 Pdis/Pdmin/Pdmax 时达到约 63.2% 阻尼,并保留允许/禁止负接触力的选项 |
| MECMAS21 | 恢复碰撞模式仍计入隐藏的库仑摩擦 | 按原子模型,恢复碰撞只保留启用时的黏性摩擦、风阻;干摩擦不参与 |
| PNL0001/2/3 | `mode=1` 只是关闭环境换热,`k` 未生效 | 实现多方过程;`k=1` 等温,其他 k 按质量变化计算温度与压力;带换热模式保留质量/能量方程 |
| PNCH012 + PNRP17 | 初始储气量只按死容积/固定容积计算,随后加入活塞容积时初始 p/T 被改变 | 按活塞及相连质量块初始位置计算完整容积,再初始化储气量;紧凑和扩展 C 生成路径均已修复 |
多方模式对照 `pn2vol1` 说明:固定容积中 `dm/dt=Σ流量`、`dT/dt=(k−1)T/m × dm/dt`,且 `p=mRT/V`。实现使用质量/温度作为内部状态;U 作为结果由状态导出。和 Amesim 的这一简化模式一致,储气质量采用理想气体关系,流阻所用密度及端口焓仍来自所选介质;不能把这种模式解释成完整的真实气体能量守恒模型。直接相连的管路储气单元须采用相同热力学模式和多方指数。
### 尚未实现的能力改为明确拒绝
静摩擦保持、脱离和高级干摩擦/Stribeck 尚未实现,本轮不加入需要进一步讨论的摩擦切换机制。现在执行编译会拒绝这些激活的配置,不再忽略参数后给出看似正常的结果;关闭摩擦、恢复碰撞中的隐藏干摩擦参数仍按其不生效的语义处理,工程仍可编辑和保存。
同时补齐 MECMAS21 的活动参数约束:非恢复碰撞且启用摩擦时 `fcoul ≤ fstick`,`dvel/astrib > 0`;恢复碰撞要求 `restdvel > 0`。因此现阶段可完整执行黏性摩擦、风阻及无干摩擦的模式,不能宣称完整支持所有摩擦选项。
冻结 Python 基准有三组 `fcoul=2、fstick=0` 的活动干摩擦输入,Amesim 本身也拒绝这种组合。历史文件保持原样,回归改为确认两个 C 入口明确拒绝;恢复碰撞那组则用独立牛顿方程验证去掉干摩擦后的加速度。
## 其余条目的核查边界
| 条目 | 本轮核查结论 |
|---|---|
| 理想空气介质、氦气介质 | 是限定介质/物性方法的公开条目;`property_model=0` 是各自的公共编码,不是 PNGD00 所有气体/EOS 选项的原始编号 |
| STEP0、F000 | 已检查阶跃前后值与时刻、零力输出,未发现新的编码问题 |
| FORC | 公开 `direction=±1` 与原模型几何方向转换已有明确处理;图标旋转不代替方向参数 |
| LMECHN1 | `sum=1`、活动端口数量、公共力平衡规则已检查;公开最多 20 个支路端口是范围限制 |
| PNPL01 | 封闭口零流量语义已检查 |
| PNCH023 | 固定容积、初始绝对 p/T、换热系数与面积的组合已检查 |
| PNOR001、PNVO001、固定开度 PNVO001 | `flowset=1/2/3` 含义相同;Cv/Kv 采用各自单位定义换算;有效开度限制在 0–1。固定开度条目是明确的公开变体 |
| PNL00R | 阻性管段没有储气状态;管径、长度、相对粗糙度和反向流符号沿用既有已验证实现 |
| PN3NODE2、P4NODE2 | 参考量传递与支路汇总遵循公共供需合同,没有把原始有向变量符号直接视为公共端口符号 |
结合前表,覆盖全部 22 个公开条目。这里的“未发现新问题”限于本轮检查的编码、参数选择和接口约定,**不是逐点证明所有物性、所有工况都与 Amesim 相同**。公共端口统一采用连接守恒符号;例如本系统 Fvisc 是带方向的力贡献,而原模型展示量采用阻力约定,曲线比对仍需显式映射。PNCH012 的固定外部容积参数、固定开度阀也属于公开扩展,不应冒充原模型全部接口的一比一复制。
## 当前模型文件
四路、八路 corrected JSON 各仅修改两个 `iscyclic`,仿真时长仍为 10 秒,未修改 AME。网页里的已有存档不自动改写,请重新导入修正文件;不能把所有历史 JSON 中的 `1` 批量改为 `0`,其他工程可能确实需要循环。
| 文件 | 修复前 SHA-256 | 修复后 SHA-256 |
|---|---|---|
| `tests/data/test-mql-4-corrected.json` | `542494eed8e235cb36eae5f80a0776b812e547d9215fa370949b0882834ebc8b` | `c8ed9efa83d111e58aa9e20e158448a7a5f45d4bd1e2a6360dd929e34919b9eb` |
| `tests/data/test-mql-8-corrected.json` | `670977bef67e62d9c66e8af497bada208bd72a7301be45128d185d47282cf288` | `60ed16c71b72be4ae71ca7980f4f8cdcdf6b4c4c4c8950863c2390960b71ced4` |
默认八路 AME 仍为 `tests/data/test_mql.ame`,本次 SHA-256 为 `319b27ac1b8ceb7e960cc05592efbfc19664e70479fe9bf36000b823c3c928f8`。它保存 50 秒、0.05 秒输出间隔、rtol=1e-7;JSON 保存 10 秒、0.01 秒输出间隔,后台 rtol=1e-8。参数审计与时间配置差异分别报告,不再把时间配置不一致冒称为元件参数错误,也不把 AME 算法枚举等同于 CVODE BDF。
## 验证结果
- 两份 AME 图纸独立审计通过:八路 157 个元件、1092 个参数、178 条连接;四路 81 个元件、582 个参数、90 条连接。当前参数与精确端口连接均无待修正项。
- 八路只将修正 JSON 的时长延长为 50 秒,原 BDF 求解器完整结束:**纯求解 10.746 秒**,9576 个接受步、669 个拒绝步、1 次状态切换;5002 个输出时刻全部有限。56 个储气质量量总和约 5.566893015 kg,最大漂移 `1.69e-14 kg`。
- 四路原 10 秒配置完整结束:**纯求解 0.888 秒**,1003 个输出时刻全部有限。
- 多方管路实际 BDF 积分 0.02 秒,验证 `T/(m/m₀)^(k−1)` 不变量,相对误差 `3.35e-8` 以下;专项也覆盖三种管路、等温/多方、直接相连的储气单元和初始状态。
- 元件、XML、原生目录及启动自检综合回归完整通过 43 项;最终元件与原生目录回归 **14 项通过**,记录在 `final-component-tests-recheck.log`。上一轮有一个独立 `--probe` 进程返回空 stdout,原失败日志保留,重跑全部通过;没有修改原生探针来忽略空输出。`final-launch-and-contract-tests.log` 中 25 项通过,包含编译进程恢复、启动自检和冻结历史合同。最后循环事件去重与进程检查另有 9 项通过。
上述耗时是本轮功能回归的观察值,不是隔离负载的性能评测。本轮没有重跑 Amesim,也没有重新宣布完整曲线一致;原积分器停滞问题仍等用户审阅后另行处理。
证据在被 Git 忽略的 `test/component-semantics-20260913/`:输入变更、工具安装说明提取、专项测试日志、四路与多方运行结果。八路原始输出在 `test/mql8-50s-20260913/semantic-fixes-production-retry/`。所有正式实现继续使用 C 数值内核;未恢复 Python 积分器。C 修改使用跨平台 C11,构建继续兼容 Windows/Linux;本次真实运行平台为 Windows,未在 Linux 服务器实跑。