Files
SystemSimulationApp/docs/other/Amesim摩擦与管路功能补齐验证-2026-09-13.md

144 lines
12 KiB
Markdown
Raw Permalink 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`。参照本机 Simcenter Amesim 2404。
## 结论与范围
已补齐 MECMAS21 静摩擦保持、高级干摩擦和 Stribeck 过渡,修正其弹性限位参数检查;调整 LSTP00A 的零刚度/零剪切模量边界、PNL0001/2 的多方指数范围,并修正 PNL0003 两段各自的换热温度。
本次新建并实际运行了 **13 个 Amesim 算例**,每个运行 3 秒;对应平台 C 程序均运行到 3 秒。另外用平台的 **JSON→XML→正式后端仿真函数**完整运行两个联合小系统,确认参数解析、连接编译、结果生成与组件单独执行一致。本次没有在浏览器界面点击运行,后端入口为 `app.main.run_system_xml_simulation`。
常规采样网格上的连续状态和力/热力学曲线吻合。简单摩擦恰好脱离时有一个左右取值不同的采样点,详见下文,不能将结果表述成逐点完全相等。
重力保持 9.80665 m/s²,大气压保持 101300 Pa。根据用户要求,本轮不增加环境重力、大气压的可调组件。没有修改 CVODE 积分公式、稠密分解/条件着色算法,也没有处理此前另行审阅的积分时间停滞问题。
## 已完成的功能
| 元件 | 本次行为 |
|---|---|
| MECMAS21 简单摩擦 | 静止时干摩擦抵消外力;超过静摩擦阈值进入滑动;滑动时使用库仑摩擦;减速停住后重新检查保持或反向启动。 |
| MECMAS21 高级摩擦 | 增加 ±dvel 低速保持区间;支持 Stribeck 过渡、黏性摩擦和风阻共同作用。Amesim 2404 在高级模式采用约 0.1% 的脱离滞环,5 N、7 N 两组实际运行分别验证了 5.005 N、7.007 N 附近脱离。 |
| MECMAS21 理想限位与摩擦 | 限位挡住质量时,由限位承担外力,干摩擦输出为零;反向外力足以脱离后恢复运动。碰撞后的摩擦状态随接受的事件一起更新。 |
| MECMAS21 弹性限位 | 活动模式要求 Kbmin、Kbmax、Dbmin、Dbmax 全部大于零,Pdmin/Pdmax 允许零,xmin≤xmax。参数检查在执行编译阶段进行。 |
| MECMAS21 恢复碰撞 | 延续 Amesim 该模式只计算黏性摩擦和风阻、忽略干摩擦的行为。原有两种积分方法的碰撞回归通过。 |
| LSTP00A | 数值模式 kcont 必须大于零;几何模式允许 G=0,sdiam、wdiam、na 必须大于零。G=0 时弹簧力为零,接触阻尼仍然有效。 |
| PNL0001/2 | k 必须大于零,取消原先的 k≤2 限制;实际以 k=2.5 验证。PNL0003 共用的 k 元数据同步采用相同边界。 |
| PNL0003 | 两半管分别使用自身温度计算对外换热,而不是共同使用两段平均温度。 |
高级摩擦滑动分支的阻力幅值为:
`Fcoul + (Fstick − Fcoul) × exp(−3 × |v| / astrib)`。
PNL0003 两段换热功率分别为:
`Q1 = kth × π × diam × le / 2 × (Text − T1)`,
`Q2 = kth × π × diam × le / 2 × (Text − T2)`。
以两段 400 K、200 K,外界 300 K,管径 0.02 m、管长 1 m、kth=10 为例,独立理想气体封闭初态的换热功率为 −31.4159265359 W 和 +31.4159265359 W。旧的平均温度写法会错误地把两段都算成零。
## 数值实现与状态保存
每个有干摩擦的刚性运动组增加一个内部状态 `_friction_mode`,取保持、正向滑动、反向滑动三个值。在连续积分期间其导数为零,只在接受的脱离/停止/反向/限位事件处修改并重新初始化积分历史。
每次计算先按现有机械连接求出不含干摩擦的驱动力,再计算干摩擦并代入同一组线性力平衡。这是两次已有的线性表达式求值,未引入压力、流量、焓的额外非线性迭代。低速事件检查会增加方程求值次数,本轮验收目标是功能与结果一致性,没有据此作性能收益承诺。
保持状态随采样状态一起保存,函数不会根据试算或绘制历史曲线改变全局摩擦标志。回归额外验证了乱序查询同一状态的输出一致。模型编译的依赖登记增加了新函数和内部状态;雅可比算法本身保持现状。
多质量刚性同速组中的静摩擦反力按各质量静摩擦容量分配。多个静摩擦约束同时保持时,单个元件反力可能存在不唯一性;本次 Amesim 联合验证中的两个质量通过弹性接触连接,并非两个质量直接刚性串联。不能把本次结果扩展成任意欠定静摩擦反力分配都已与 Amesim 逐元件验证。
## 对照条件与单位
- 所有实际 Amesim 算例:3 s,变步长隐式设置,误差限 1e-9,最大积分步长 0.002 s,输出间隔 0.001 s。
- 独立平台 C 程序:BDF,rtol=1e-9,最大积分步长 0.002 s,输出间隔 0.001 s。另有简单摩擦和大低速区间算例的 RK45 回归。
- 联合系统后端:保持平台默认误差设置,JSON 中选择 BDF、3 s、0.002 s 最大步长和 0.001 s 输出间隔。
- 气动介质:显式使用气体索引 1 的氦气 Peng–Robinson 设置;平台 JSON 已指定匹配的介质索引。导出时不得把默认介质索引 0 与显式氦气索引 1 混用。
- 表中误差:将平台输出插值到 Amesim 的 0.001 s 常规采样时刻,计算整个 0–3 s 区间最大绝对差。平台另存事件点,Amesim 固定间隔数据未必包含这些瞬时时刻。
- Amesim 管路压力变量本次使用 Pa 表压,比较时加 101300 Pa 转为绝压;不是再乘 1e5。MECMAS21 限位刚度的 N/mm、阻尼的 N/(mm/s)、穿透量的 mm,分别换算到平台 SI 单位。
- 机械联合系统的 Amesim v1/x1 与平台全局坐标相反;比较时反号,且交换上下限位力。LSTP00A 的 gap 从 mm 转为 m。单质量驱动算例则通过 FORC 方向设置使用相同 v1/x1 方向。
## 单元件实际运行结果
下列 11 个单元件算例全部完整运行 3 s;源 `.ame`、对应 JSON/XML、双方 CSV 已收入交付包。
| 算例 | 主要最大绝对差 |
|---|---|
| 简单摩擦 | 速度 3.79e-9 m/s;位移 5.47e-9 m;脱离单点例外见下文。 |
| 高级摩擦、无 Stribeck | 速度 3.79e-9 m/s;位移 8.68e-9 m。 |
| 高级 Stribeck | 速度 5.31e-8 m/s;位移 3.34e-8 m;干摩擦 3.01e-6 N。 |
| 高级摩擦叠加弹性限位 | 速度 6.89e-8 m/s;位移 2.42e-9 m;加速度 1.82e-5 m/s²。 |
| 高级摩擦叠加理想限位 | 速度 1.72e-8 m/s;位移 2.96e-9 m;干摩擦 4.85e-7 N。 |
| 扩大低速区间、非零初速、风阻 | dvel=0.005 m/s、初速 0.001 m/s;速度差 8.74e-9 m/s,位移差 2.10e-9 m;验证初始低速保持与后续停止。 |
| LSTP00A 几何刚度 | 接触力 6.70e-8 N,间隙 8.87e-10 m。 |
| LSTP00A 零剪切模量 | 接触力 2.89e-8 N;阻尼仍有非零力,间隙差 8.39e-10 m。 |
| PNL0001,k=2.5 | 管内压力 0.0205 Pa,温度 1.85e-5 K。 |
| PNL0002,k=2.5 | 管内压力 0.142 Pa,温度 1.28e-4 K;相连储气腔最大压力差 0.216 Pa。 |
| PNL0003,非对称温度换热 | 两半最大压力差 0.000169 Pa,最大温度差 8.42e-7 K。 |
管路对照并非按位相等;本次全区间最大压力差不足 0.22 Pa,相对于约 200000 Pa 的压力约为百万分之一。温度与多方关系、换热方向一致。现有管阻根求解实现及积分器误差控制不同仍可带来这种小量差异,本轮未继续修改其求解算法。
### 简单摩擦的单个切换采样点
外力在 t=0.15 s 达到 5 N。Amesim 的常规输出点保存切换前的静止分支,平台该事件点保存切换后的滑动分支,因此该点干摩擦差 2 N,加速度差 2 m/s²。
原始数据和 `comparison.json` 均保留这个最大差。单独注明并排除恰好该时刻后,干摩擦最大差 4.46e-10 N,加速度最大差 8.24e-10 m/s²;整个区间的速度、位移仍分别只有 3.79e-9 m/s、5.47e-9 m 的差异。回归同时保留 0.149 s 和 0.151 s 的前后分支检查,而不把瞬时跳变强行平滑成相同数据。
## 两个联合小系统
### 机械系统
连接:分段力信号 → FORC → 左质量(高级 Stribeck+弹性限位)→ LSTP00A → 右质量(简单干摩擦+弹性限位)→ 零力源。
三秒内发生启动、接触、脱离、换向、限位压缩和再次静止。独立 C 程序记录 12 次离散状态切换。
平台正式后端相对 Amesim 的最大差:
| 输出 | 最大绝对差 |
|---|---:|
| 左质量位移 | 3.26e-8 m |
| 右质量位移 | 3.75e-8 m |
| 左质量速度 | 1.09e-6 m/s |
| 右质量速度 | 6.03e-7 m/s |
| 接触力 | 8.20e-5 N |
| 左质量干摩擦 | 8.20e-5 N |
![机械联合系统](../../test/component-semantics-20260913/delivery/joint_mechanical.png)
### 气动系统
连接:封闭储气腔 → PNL0001(k=2.5)→ PNL0002(k=2.5)→ PNL0003(两半初始 320/280 K,与 300 K 环境换热)→ 封闭端。
平台正式后端相对 Amesim,四个管内压力输出最大差 **0.133 Pa**;管内温度输出最大差 **1.12e-4 K**。两个系统的后端均完整返回 3 s 结果。
![气动联合系统](../../test/component-semantics-20260913/delivery/joint_pneumatic.png)
## 回归与限制记录
- 元件语义测试:11 项通过,覆盖活动参数、零剪切模量、多方指数 2.5、两段独立换热等。
- Amesim 实测冻结数据回归:1 项测试内含 8 个算例、10 次积分运行,全部通过;覆盖 BDF 和 RK45、静止/启动/反向/限位和联合系统。
- 原生目录与机械 XML 回归:16 项通过,包含原有恢复碰撞和代数模型两种积分方法。
- 结构依赖回归:6 项通过。旧目录有 3 个 fcoul>fstick 的非法历史输入,已改为验证明确拒绝,未修改冻结输入。
- 以上相关测试合计 **34 项通过**。扩展运行的旧 `NativeJacobianProbeTests` 仍在预检失败:`native-jacobian-cache-state.json` 绑定的八路输入摘要与当前 corrected JSON 不符。该固定状态夹具、模型输入及其摘要均未在本轮改写;需要后续在求解器审阅中重新建立一致基准。不能将完整雅可比测试套件标记为全绿。
- `NativeJacobianRuntimeTests` 的独立私有 ABI 检查依赖 Linux SUNDIALS 静态库,本机 Windows 按其既有规则跳过。
- Windows 上实际通过原生 C 编译、链接、运行及 Amesim 对照。生产代码只使用 C11、现有构建器和跨平台状态/事件接口,无新增 Windows 专用工具链路径。本轮没有 Linux 实机结果。
- Amesim API 用于新建模型、生成代码及参数文件;本机 JobManager 无可用运行资源时,关闭 API 后独立启动其生成的本机可执行文件,均正常完成。原始运行日志和 `.results` 保留在 `test/component-semantics-20260913/feature-reference/*-run/`。
## 文件与复现
交付包:[amesim-component-validation-20260913.zip](../../test/component-semantics-20260913/amesim-component-validation-20260913.zip)。含 13 个新算例的 JSON/XML/AME、单位和坐标已统一的双方 CSV、两份后端 CSV、对照统计和曲线图。`.ame` 保存模型与设置,本次仿真测量值另存于 CSV。
平台可直接导入:
- [机械小系统 JSON](../../test/component-semantics-20260913/delivery/joint_mechanical.json)
- [气动小系统 JSON](../../test/component-semantics-20260913/delivery/joint_pneumatic.json)
运行中的后端需要重新启动以加载 Python 编译器及元件参数定义的修改;新生成的 C 模型通过已有构建指纹使用更新后的内核。
无需 Amesim 安装即可运行已冻结的实测回归:
```text
python -m unittest tests.test_amesim_semantics tests.test_native_friction tests.test_native_catalog tests.test_amesim_mechanical_xml tests.test_native_jacobian_structure.StructuralDependencyTests -v
```
本机 Amesim 构建脚本和对照脚本保留在 `test/component-semantics-20260913/`;实测冻结数据在 `tests/fixtures/amesim-component-semantics-2404.json`,带原始 Amesim 结果 SHA-256。交付内容不包含 Siemens 元件库实现源码。