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

8.3 KiB
Raw Permalink Blame History

Amesim 已修复元件语义复核

日期:2026-09-13;分支:system-optimization。

本次针对上一份报告“已修复的问题”涉及的 UD00、LSTP00A、MECMAS21、PNL0001/2/3、PNCH012 和 PNRP17 复核,排除已单独说明的静摩擦保持和高级干摩擦。依据本机 Amesim 2404 子模型源文件、随附帮助及当前生产 C 程序的最小探针结果。没有修改生产元件、积分器、工程参数或运行中的后端;没有重跑完整 Amesim 模型。

结论:不能确认这些元件已经全面对齐。原先修改的若干核心公式已对齐,但还发现了 PNL0003 换热计算错误、若干活动参数边界不一致,以及环境参数和适用范围限制。上一份报告中把零时长分段跳过也列作对齐行为,不准确。

逐项结论

元件 已核对一致的部分 仍有差异或验证边界
UD00 外部循环编码转换;正时长分段的线性插值、开始前首值保持、非循环结束后末值保持 我们接受有效段时长为 0,Amesim 初始化拒绝;未使用段时长为 0 不属于这个问题。事件内部的试算调用约定不同,不能据函数值核对就宣布积分器事件处理等价
LSTP00A 几何刚度公式;按公共端口方向转换后的间隙/相对速度;指数接触阻尼;负接触力保留或截零 数值模式 kcont=0 我们接受而 Amesim 拒绝;几何模式 G=0 我们拒绝而 Amesim 的子模型初始化检查允许
MECMAS21,排除未实现干摩擦 默认重力下的倾角分量;上下弹性限位的指数阻尼和方向;恢复碰撞模式不计算干摩擦,保留启用的黏性摩擦和风阻 弹性限位参数边界尚未对齐;重力固定为 9.80665,未实现 Amesim 的 GRAV0 环境覆盖;碰撞事件处理机制仍不能宣称全面等价
PNL0001、PNL0002 固定容积、mode=1 多方储气方程;mode=2 本地温度换热项及质量/能量守恒形式 公开 k、rr 范围比原子模型检查更窄;本次未重新验证全部介质物性、流阻曲线和极端状态
PNL0003 两个半容积、各自的多方储气方程、中心质量/焓流守恒方向 mode=2 的两个换热项错误使用平均温度,尚未对齐;同样存在 k、rr 范围限制
PNCH012 + PNRP17 直接相连活塞的初始完整容积;在该容积下满足指定初始绝对 p/T;气腔能量中的环境换热和压力做功项;有效活塞面积、相对运动对应的容积及变化率 气压力计算固定采用 101300 Pa 参考大气压,没有对应 PNATP00 的覆盖;固定外部容积参数是公共扩展,当前 C 生成器按直接相邻 PNRP17 收集动态容积,不能据此声称任意供容积元件/连接均已支持;极小容积/负状态时的求解恢复策略未对齐证明

“方程形式一致”以采用相同介质状态关系和统一单位、端口方向为前提。不同内部状态选择可以表达同一物理方程,不能把状态变量名称不同直接当成语义错误;同样,形式一致也不能替代完整曲线验证。

已复现的计算问题:PNL0003 分别换热

Amesim 对两个半容积分别使用自己的温度:

Q1 = kth × A/2 × (Text − T1)
Q2 = kth × A/2 × (Text − T2)

当前实现先计算 (T1+T2)/2,再用这一温度计算两个相同的换热项。对两个半容积的总换热功率,这个写法可能恰好相同;但分配到每个半容积的能量不同,后续温度、压力及流量会受到影响。

最小算例使用理想气体,两端封闭、初始压力均为 200000 Pa,避免中心流量干扰;管径 0.02 m、管长 1 m、kth=10 W/(m²·K),T1=400 K、T2=200 K、Text=300 K。

量 按 Amesim 方程独立计算 当前生产 EXE 探针
中心质量流量 0 kg/s 0 kg/s
半容积 1 的 dU/dt −31.4159265359 W 0 W
半容积 2 的 dU/dt +31.4159265359 W 0 W

这是实际方程差异,不是积分容差、求解速度或输出采样造成的。这里的 Amesim 预期值来自已核对的方程,不冒称本次运行了 Amesim EXE。

定位:本系统 app/simulation/native_codegen/extended.py:577;Amesim F:/AMESim2404/Amesim/libpn/submodels/PNL0003.c:377 和 :382。

建议后续使用当前半容积自己的温度,并补充两端温度不同、环境温度位于两者之间的回归。仅验证初始温度相同或 kth=0,无法发现该问题。

已复现的参数边界差异

以下本系统结果经过实际构建网络和执行编译校验确认。Amesim 一栏依据子模型初始化检查;不是逐个启动 Amesim 后得到的结果。

配置 本系统 Amesim 初始化检查
UD00 的有效段 t1=0、nstages=2 接受,跳过该段 拒绝,要求每个有效段终点严格晚于起点
LSTP00A 数值模式 kcont=0 接受 拒绝,要求 >0
LSTP00A 几何模式 G=0 拒绝 只拒绝 G<0
MECMAS21 弹性限位 Kbmin=0 接受 拒绝,要求上下限位刚度均 >0
MECMAS21 弹性限位 Dbmin=0 接受 拒绝,要求上下限位阻尼均 >0
MECMAS21 弹性限位 xmin=1、xmax=−1 接受 拒绝,要求 xmin≤xmax
PNL 多方模式 k=2.5 拒绝,公开上限为 2 子模型只要求 k>0
PNL 相对粗糙度 rr=0.2 拒绝,公开上限为 0.1 子模型只要求 rr≥0

前六项属于元件活动参数边界的差异;后两项属于已公开的支持范围限制,不表示共同支持范围内的方程一定错误。未启用参数的检查也需要单独规定,不应为对齐有效段限制而禁止 UD00 未使用段保存默认 0。

源码证据:UD00.c:318;LSTP00A.c:136、:152;MECMAS21.c:225、:234;PNL0001.c:159、:165,PNL0002/3 有对应检查。本系统位置:signals/sources.py:12、semantics.py:43、mechanical/translational.py:61、flow/pipes.py:59。

建议后续统一执行时的活动参数检查:既拒绝 Amesim 拒绝的组合,也避免错误拒绝原模型允许的活动参数;编辑、保存与求解校验仍应按现有协议各自承担责任。

两个默认环境条件

MECMAS21 的 Amesim 原模型从 getgravity_() 取重力;其随附帮助说明可由 GRAV0 改变,默认值为 9.80665 m/s²。目前本系统使用的就是这个默认值。因此倾角公式已经补上,但尚未支持自定义重力。

PNRP17 在 Amesim 中接收表压,本系统使用绝对压力后固定减去 101300 Pa。pn2getatp 随附帮助确认这是 Amesim 默认大气压,同时 PNATP00 可以改变该值。本系统尚未支持这种环境覆盖。不能把默认环境下对齐推广为任意环境配置下都对齐。

对当前四路、八路测试文件的影响

再次读取 tests/data/test-mql-4-corrected.json 和 tests/data/test-mql-8-corrected.json:

  • UD00 的有效段时长均为 0.8 s、10 s,不存在有效零时长段。
  • PNL0003 均使用 mode=2,但 kth=0,因此新发现的分端换热错误不会在这两份当前配置中生效。
  • LSTP00A 使用数值刚度且 kcont>0;MECMAS21 使用理想限位或无限位,theta=0,不触发上述弹性限位参数问题。
  • 当前目录中没有实现 GRAV0、PNATP00;默认对标模型的已审计元件清单也不包含它们。

这些判断只排除本次新发现的触发条件,不表示完整曲线已经验证一致,也不否认尚待审阅的积分停滞问题。 PNCH012 在当前模型中有非零环境换热,该气腔项使用自身温度,不能把它与 PNL0003 的平均温度错误混为一谈。

本次验证与证据

  • 原有 tests.test_amesim_semantics 共 10 项全部通过,耗时 31.444 s。说明原修复的专项检查仍通过;旧测试没有覆盖这次的非对称换热与若干参数边界。
  • 新的独立审计探针确认上述 PNL0003 差异及 8 组参数边界行为。
  • 证据脚本和输出:test/component-semantics-20260913/followup_semantic_audit.py、followup-semantic-audit.json、followup-regression.log。test 目录依仓库约定不纳入 Git。
  • 真实运行平台为 Windows,未在 Linux 服务器运行;本次没有生产代码修复。

下一步应优先修复 PNL0003 分端换热,然后对齐活动参数校验;自定义重力、大气压和通用容积传递是需明确范围的能力补齐。完成相应元件级验证后,再对当前四路、八路做完整 Amesim 曲线对比。