高温氦气物性补全;三通四通能量计算bug修正

This commit is contained in:
ljz committed 2026-09-15 17:57:20 +08:00
1 parent 6fc9afe41d
commit 2b07d996cf
133 files changed
+5230 -253310

No files matched your search

@@ -0,0 +1,121 @@
# 组件连接守恒扩展排查
## 结论与范围
本次只排查,未修改生产代码。核对现有 27 类注册模型的声明、紧凑和扩展两条 C 生成路径,完成 38 个原生方程探针,涉及 24 类运行元件;另外调用安装版 Amesim 的 PNRP17、PNCH012 原始子模型进行容积传递对照。
结论是:**原有焓流问题会影响六类储气元件,另确认一处活塞容积传递遗漏。没有发现其他独立流阻、动态管路或本次机械探针中存在同类守恒错误。**
“未发现”限定于下文代码路径与测试工况。此次不是对全部组件所有模式重新进行 Amesim 长时间曲线验收。两种介质定义没有独立物理端口;UD00 的信号边界问题已在上一份报告确认,本次未重测。数值探针采用氦气介质,不代表已经覆盖理想空气或任意介质组合。
## 1. 原节点焓流 bug 的实际影响范围
PN3NODE2/P4NODE2 参考口连接下列元件时,错误不只存在于节点本身,还涉及储气元件如何接收节点汇总后的能量:
| 储气元件 | 受影响的连接 | 小模型中整个封闭系统的能量收支残差 |
|---|---|---:|
| PNCH023 | 任一气动口接节点参考口 | −189.319 W |
| PNCH012 | 任一气动口接节点参考口 | −189.319 W |
| PNL0001 | 储气侧端口 2 接节点参考口 | −189.319 W |
| PNL0003 | 端口 1 或 2 的储气侧;本次探针测试端口 1 | −189.319 W |
| 临时库 Cylinder 气瓶 | 唯一气动口接节点参考口 | −189.254 W |
| 临时库 Tank 储罐 | 唯一气动口接节点参考口 | −189.254 W |
上述探针为固定容积、无环境换热、无机械做功的封闭系统。应有“所有储气元件的质量变化率之和为零、内部能量变化率之和为零”。实测质量收支平衡到约 1e-19 kg/s,能量却持续漏算。
这些不是六个互不相关的组件公式错误,而是它们共用 `app/simulation/native_codegen/extended.py:615` 的流向选焓逻辑。参考口净流出时,接收端采用自身焓覆盖节点信息。不同模型在这里会触发相同问题。
PNL0002 的两端是流量供给口,并非这种储气参考口,当前固定供需检查不允许它们与节点参考口直接组成上述连接。因此不能仅凭“它也有内部气体”就把 PNL0002 列为同一种直接触发对象;它仍可能受到系统其他位置错误结果的间接影响。
进一步验证:
- 节点参考口净流入的对照工况,能量残差约 1.59e-12 W。这解释了某些正常测试为什么没有暴露问题。
- 参考腔体净质量流约 −4.34e-19 kg/s,几乎为零时,整个系统仍漏算约 **3573.65 W**。只处理普通单向流动不够。
- 两个节点串联仍漏算约 **189.319 W**。未来修复不能只识别“节点直接连接某一个管腔”的固定模板。
- PNCH023、PNCH012 各支路**直接分别连接各自端口**,不经上述节点汇总时,同样的冷热气体同时进出测试能量残差为 0。这进一步排除了腔体基础能量方程本身漏掉多端口求和。
## 2. 新确认:PNRP17 经节点连接 PNCH012 时丢失容积和做功
### 原因
`extended.py:270` 只查找“气动口直接连到当前 PNCH012 的活塞”,再把这些活塞的容积、容积变化率加进气室。
当连接变成:
`PNRP17 → PN3NODE2/P4NODE2 支路口 → 节点参考口 → PNCH012`
活塞不再是气室的直接邻居,因此被漏掉。活塞本身仍计算扫掠容积和受压力,气室却只采用基础容积,并认为容积变化率为零。连 `−p × 容积变化率` 的气体做功项也随之消失。
### 数值验证
小模型设置:活塞直径 0.1 m、杆径 0、初始腔长 0.2 m、活塞与缸体相对速度 0.1 m/s;气室基础容积 10 L、绝对压力 200000 Pa、温度 400 K。
| 量 | 平台直接连接 | 平台经过三通 | 平台经过四通 | Amesim 原始子模型及节点公开求和规则 |
|---|---:|---:|---:|---:|
| 活塞扫掠容积 | 1.570796 L | 1.570796 L | 1.570796 L | 1.570796 L |
| 气室总容积 | 11.570796 L | **10 L** | **10 L** | 11.570796 L |
| 气室容积变化率 | 0.785398 L/s | **0** | **0** | 0.785398 L/s |
| 平台气体内部能量变化率 | −157.079633 W | **0** | **0** | 对应应计入 −p·dV/dt |
平台直接连接时,气体内部能量变化、机械动能变化和对环境做功之和约为 −1.42e-14 W。经过节点后,功率收支出现 **157.079633 W** 的缺口。
本次 Amesim 对照不是另搭三份完整图纸运行,而是在生成程序的隔离副本中调用已安装的 PNRP17、PNCH012 原始子模型,并按 PN3NODE2/P4NODE2 的公开容积求和宏分别传递输入。三种路径都得到 11.570796 L,温度变化率 −18.109354 K/s、压力变化率 −22635.528 Pa/s。原始子模型接口与公开规则支持容积经节点传递,平台的遗漏不是 Amesim 也采用的限制。
参考文件:
- `F:/AMESim2404/Amesim/libpcd/submodels/PNRP17.c`:输出扫掠容积和容积变化率。
- `F:/AMESim2404/Amesim/libpn/submodels/PN3NODE2.c`、`P4NODE2.c`:分别汇总支路体积与体积变化率。
- `F:/AMESim2404/Amesim/libpcd/submodels/PNCH012.c`:采用外部体积及变化率计算储气状态。
这是与焓流遗漏不同的一条缺陷,涉及 **PNRP17—节点—PNCH012** 整条连接路径。修复需要沿已声明的容积传递关系汇总贡献,同时防止漏算、重复计入和无来源的环路。
## 3. 本次没有发现同类错误的部分
| 元件/路径 | 检查内容 | 结果与限制 |
|---|---|---|
| PNOR001、PNVO001 固定开度/信号开度 | 两储气腔之间正向、反向流动 | 所有质量、能量收支残差为 0;普通单通道的流向选焓成立 |
| PNL00R、临时库 Pipe、Orifice | 正向、反向流动 | 所有质量、能量收支残差为 0;不证明流阻公式与 Amesim 完全相同 |
| PNL0001、PNL0002、PNL0003 | 独立进出、两种压差方向,换热模式 | 连同相邻气室的质量、能量守恒;未把多方过程当作绝热内部能量方程检查 |
| PNL0001/2/3 环境换热 | 设置非零换热系数,核对内部能量总变化与外部热量 | 去除应有热量后,残差不超过约 1.31e-11 W |
| PNL0003 内部连接 | 两半管腔之间质量流、能量流 | 内部交换在两半方程中符号相反,合计抵消 |
| 临时库 Tee | 热冷支路同时进出 | 能量残差约 1.14e-12 W;它采用对称混合语义,与 Amesim 两种参考口节点不同 |
| PNPL01 | 封闭端 | 质量流为零,不产生气体对流能量流;在上述用例中作为封口参与验证 |
| PNRP17 直接连接 PNCH012 | 气体膨胀、受压力、机械动能与环境做功 | 收支平衡;缺陷在经过节点后的传递路径 |
| LMECHN1、MECMAS21、FORC、F000 | 四质量刚性连接、外力输入 | 节点力和约 8.88e-16 N;动能变化率与外部输入同为 90 W |
| LSTP00A 与质量块 | 接触压缩及阻尼耗散 | 动能变化 −0.599980 W、弹性势能变化 +0.15 W、耗散 +0.449980 W,收支残差为 0 |
独立流动元件的正反向测试共 18 个,全系统最大质量残差约 **3.23e-16 kg/s**,最大能量残差约 **2.31e-10 W**。这些残差对应几百至数千瓦的流动能量量级,与已确认的百瓦、千瓦漏算明显不同。
机械摩擦、恢复系数限位、多方模式等没有在本次逐个重新运行完整 Amesim 工况。其特殊过程可能有耗散或隐含热交换,不能要求仅气体内部能量或仅机械动能单独恒定。
之前确认的高温氦气物性分段遗漏、管流摩擦公式近似、UD00 时间边界缺陷仍然存在,它们属于另一类问题,本次没有修复,也不能因本次守恒测试通过就宣布消失。
## 4. 为什么现有检查会漏掉这些问题
1. `core/port_computation.py` 的供需契约包含 p、T、质量流、能量流,但主要检查双方是否声明了对应输入、输出,没有验证生成方程是否真的实现能量收支。
2. 容积、容积变化率出现在通用端口定义中,却没有纳入同一套供需契约的检查量,也没有形成通用的跨节点计算路径。
3. `systems/network.py:214` 的连接方程清单只收录相等和求和为零的变量。气体比焓的混合规则、容积的定向传递不会在这份清单中成为独立守恒项。它是声明清单,不是运行时数值守恒验收。
4. 因此,“端口供需检查通过”“质量流平衡”“C 和旧 Python 结果接近”,都不足以证明能量和做功正确。
## 5. 建议的修复范围
- 将带符号的质量流和能量流分别汇总并传递,修复所有合法参考口接收者及节点串联。
- 为容积、容积变化率建立实际生成路径,不能只搜索直接连接的活塞。
- 在测试中独立检查质量、气体能量、机械功和外部热量/环境功的收支;采用直接连接与经理想节点连接的对照。
- 保留普通单支路、动态管内部交换、临时库 Tee 的正确语义,避免对所有端口套用同一种混合规则。
上述是修复建议,本次没有实施。
## 6. 证据与复现
目录:`test/conservation-audit-20260914/`。
- `audit.py`:独立流阻、管路、节点接收者及活塞路径探针。
- `additional.py`:直接多端口气室、环境换热、机械力与功率探针。
- `edge_cases.py`:近零净流量和节点串联。
- `prepare_ame_volume.py`、`ame-volume/volume-routing.csv`:安装版 Amesim 子模型的容积路径对照。
- 每个用例的 `model.c`、`manifest.json`、`probe.json`:生成方程、变量映射、输入状态、导数和输出。
- `final-summary.json`、`catalog-inventory.json`:最终统计、逐类覆盖清单。
- `production-before.json` 与最终汇总:188 个生产文件开始、结束哈希一致,无本次生产代码改动。
诊断过程中两个首次尝试受本机编译/进程启动异常影响,重跑后均完成,保留于 `audit.log`、`retry.log`;最终 38 个用例按成功生成的探针结果统计,不将工具链异常计为组件方程问题。原模型文件和此前工作区改动均保留。