Files
SystemSimulationApp/docs/other/节点焓流与PNCH012容积修复-2026-09-14.md

58 lines
6.0 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.
# 节点焓流与 PNCH012 容积修复
## 复核结论
用户报告的两类现象均已复现,具体包含三个缺陷:
1. PN3NODE2/P4NODE2 的参考口用净质量流量和比焓表示支路汇总能量,无法表示“净质量流量为零、净焓流非零”。接收储气元件又在净流出时使用自身比焓,覆盖了节点带来的混合支路能量;原参考比焓算法的小流量平滑还会引入守恒偏差。
2. PNCH012 只搜索直接连接的 PNRP17,漏掉经过节点传来的活塞容积和变化率。因此气室状态所用容积和 `-p*dV/dt` 做功一起出错。
3. 两条 C 生成路径都把 PNCH012 的 `dvol1..4` 参数用于做功,却没有积分它们对应的预设容积,导致容积输出保持不变。
需要区分原模型与本平台参数的含义:安装版 Amesim 的 PNCH012 接收独立的外部 `vol` 和 `dvol` 输入,原子模型本身并不替输入提供者积分。本平台把这些输入暴露为常数参数后,本次明确约定 `vol1..4` 为仿真开始时的初始预设容积,`dvol1..4` 为对应的恒定变化率。PNCH023 没有这些参数,本条变化率修复针对 PNCH012。
## 实现
- 在扩展生成器中按节点支路到参考口的方向排序,先计算子节点,再计算父节点;焓流以带符号的功率直接求和并送入接收储气元件,不再从汇总净流量反推能量。支路流出的比焓仍取参考端提供的温度对应值。
- 同一方向关系用于追踪活塞容积来源,覆盖直接连接、两类节点、多活塞和节点串联。初始气体质量/内能使用完整初始容积计算。
- 两条生成路径仅对非零预设变化率之和增加 `_volume_displacement` 状态,从仿真起点积分;活塞的实时几何容积直接叠加,不重复积分。
- 总容积低于 `cvol0/100` 时钳位并停止容积做功;恰好在下限且向外膨胀时保留正变化率。
- 登记新增状态和节点能量表达式的 Jacobian 依赖,容积积分状态使用 `1e-14 m³` 绝对误差下限;补充参数说明,保留已有模型版本以兼容保存的 XML。原生缓存根据生成源码内容重新构建。
节点参考端的 `h_outflow` 仍是有限比焓诊断值;在零净质量流量条件下,不能用它乘净流量来重建实际传递的焓流。实际能量方程使用独立的带符号焓流汇总。
主要代码:
- `app/simulation/native_codegen/extended.py`:定向节点汇总、完整容积初始化、接收端能量方程、容积积分。
- `app/simulation/native_codegen/compiler.py`:紧凑生成路径的容积积分与下限处理。
- `app/simulation/native_codegen/tolerances.py`:新增容积状态误差下限。
- `app/simulation/components/amesim/storage/chambers.py`、`junctions/nodes.py`:行为说明。
- `tests/test_native_node_conservation.py`:守恒和动态容积回归。
## 数值证据
理想空气探针:节点参考气室初始压力 200000 Pa、温度 400 K;两支路储气室温度为 700 K 和 300 K,经流阻连接。两侧压力调整至支路质量流量大小相等、方向相反。
| 量 | 修复前 | 修复后 |
| --- | ---: | ---: |
| 参考口净质量流量 | 约 0 kg/s | −5.42×10⁻²⁰ kg/s |
| 气室接收净焓流 | 约 0 W | 95.3426714541 W |
| 系统总内能变化率残差 | 约 −95.3426714541 W | 0 W |
另三组探针覆盖参考口净流入、净流出和接近零流量;修复后的系统能量残差绝对值不超过 `7.11e-15 W`。数值输出保存在 `test/node-fixes-evidence.json`。
双活塞探针中,气室基础与预设容积合计 0.011 m³,每个活塞直径 0.1 m、初始腔长 0.2 m。经过节点时,修复前气室容积为 0.011 m³,修复后为正确的 0.014141592653589793 m³,与直接连接一致。
预设变化率探针从 `t_start=5 s` 开始,初始容积 0.013 m³,变化率为 ±0.002 m³/s。修复前容积恒定,修复后满足 `V=0.013±0.002*(t-5)`。扩展路径另用理想气体绝热关系 `p*V^γ=常数` 和 `T*V^(γ-1)=常数` 验证能量与容积变化一致。
## 验证范围与既有问题
专项测试覆盖两类节点、六类储气接收元件、正反向与停滞流向组合、零净流量、极小流量、节点串联及反序生成、双活塞、非零起始时间、容积下限,以及 RK45/BDF 两种积分器。首次修复前运行的五项测试产生 55 个失败子用例;修复后扩展到七项测试并全部通过。
安装版语义依据:`F:/AMESim2404/Amesim/libpn/submodels/PN3NODE2.c` 第 21–32 行、`P4NODE2.c` 的对应宏说明,均定义支路焓流、容积及变化率向参考口求和;`F:/AMESim2404/Amesim/libpcd/submodels/PNCH012.c` 第 314–329 行分别求和外部容积与变化率,并处理容积下限。
既有 `tests.test_native_jacobian_structure.NativeJacobianProbeTests` 无法进入计算:夹具 `tests/fixtures/native-jacobian-cache-state.json` 要求输入 SHA-256 为 `670977be…`,而 `tests/data/test-mql-8-corrected.json` 的工作区与 Git HEAD 都是 `60ed16c7…`。本次未修改这两个文件,也未覆盖该校验;同模块的结构依赖测试另行执行。
原生进程在一次中间回归中返回空输出,编译器也出现过启动重试;已批量执行流向探针并重跑验收。修复前、中间及最终测试日志分别保存在 `test/node-fixes-before.log`、`test/node-fixes-after.log`、`test/node-fixes-final.log`、`test/node-fixes-acceptance.log`。
最终组合验收执行 68 项测试(265.185 s),其中 67 项直接通过,包括七项专项测试、旧 XML/API、组件元数据、计算调度、Jacobian 结构依赖和当前八支路模型的完整保存配置。唯一错误是旧目录基准第 6 个网络的 `--init` 进程返回空输出;该网络由 PNCH023、PNL0002 和堵头组成。随后保留原始基准内容单独重跑该失败网络,通过两条编译入口的原有初值、输出和导数断言,耗时 5.212 s,日志为 `test/node-fixes-catalog-retry.log`。以上不包含因既有哈希不匹配而无法启动的 Jacobian 固定状态测试类。