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

6.0 KiB
Raw Blame History

节点焓流与 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 固定状态测试类。