高温氦气物性补全;三通四通能量计算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,57 @@
# 节点焓流与 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 固定状态测试类。