50 lines
5.6 KiB
Markdown
50 lines
5.6 KiB
Markdown
# 物性有效温度越界提示与 Amesim 核验
|
||
|
||
已给平台原生仿真增加非致命物性温度越界提示,实时显示在仿真控制台,并保存到结果诊断信息中。提示包含气体名称、物性类别、物性计算使用的温度、有效界限和仿真时刻,不包含具体元件名称。
|
||
|
||
## Amesim 实际行为
|
||
|
||
核对 Amesim 2404 实际运行的 [run.log](../../test/helium-high-temperature-20260915/amesim/run.log),例如第 16 行起的提示:状态方程使用了 10890.565 K,超过 1500.000 K 上限,发生于 0.001000 s;下一行说明使用 pneumatic gas 1、predefined helium (He) real。后续还有 Cp/h/s 中依赖状态方程的真实气体修正项越界提示。
|
||
|
||
这些提示没有具体元件名。因此,“不报元件”的判断与本次日志相符;但 Amesim 不只是给出温度,还包含物性类别、界限、时刻和气体编号/名称。日志存在重复提示,本次平台按“氦气物性类别 + 上/下界方向”在一次仿真内仅提示一次,另外保存极值,避免刷屏。没有依据该日志推断所有 Amesim 物性模块、版本都采用完全相同策略。
|
||
|
||
## 范围与触发规则
|
||
|
||
范围来自本机 Amesim 2404 的 `libpn/data/nasa_properties/` 数据文件,来源哈希见 [原物性对照清单](../../test/helium-high-temperature-20260915/manifest.json)。
|
||
|
||
| 实际使用的物性 | 有效温度范围 | 数据来源 |
|
||
| --- | --- | --- |
|
||
| 状态方程及热力性质的真实气体修正项 | 2.2–1500 K | helium_eos.data |
|
||
| 理想气体热容、焓和内能 | 200–20000 K | helium_cp_h_s.data;内能由焓减 RT |
|
||
| 动力黏度 | 200–15000 K | helium_mu.data |
|
||
|
||
- 只检查实际调用的物性。封闭容积不使用黏度时,不因容积温度高而生成黏度警告。
|
||
- 在初始状态和每个求解器接受的状态检查,包括接受的事件状态;不采纳被拒绝的步、Newton/Jacobian 试探状态或结果回放。提示首次时刻指首次检测到越界的接受状态,未额外求解准确穿越时刻。
|
||
- 温度指物性计算的输入温度,也可能包括等熵估算温度;不能将其解读为某个容积元件的存储温度。
|
||
- 边界使用 `1e-9 × max(界限, 1)` K 的浮点容差,避免温度反解舍入造成端点误报。
|
||
- 保持现有物性公式、外推行为和求解状态不变,越界本身不中断仿真;温度有计算结果不意味着它仍处于物性有效范围。
|
||
- 多个氦气实例使用同一数据集,提示合并为“氦气”,不添加无法从当前原生介质结构可靠还原的 Amesim 气体编号。平台其他介质目前没有对应的已核验温度有效域,本次没有虚构空气等介质的界限。
|
||
|
||
## 实现
|
||
|
||
`NativePropertyTemperatures` 在每次检查中汇总实际物性调用的最小/最大温度,不依赖物性缓存是否已满,也不使用进程全局状态。两个代码生成路径都提供诊断入口。原生运行时按初始/接受状态额外执行一次只读模型计算;不改变积分器的 RHS 统计或状态,无氦气的通用模型跳过该检查。
|
||
|
||
原生进程通过 stderr JSON 发出 `property-warning`;后端保留现有进度/心跳阶段并转发警告;前端以 warning 级别显示,实时提示与最终结果提示去重。结果的 `diagnostics.propertyWarnings` 同时保存首次温度/时刻、极值温度/时刻及提示文字,原生结果也有 `propertyWarnings`。用户终止且工作进程被强制停止时,保留已收到的警告。
|
||
|
||
## 验证结果
|
||
|
||
新增 4 项原生测试覆盖两个生成路径的端点、上下限、黏度按需触发、空气不误报、缓存容量耗尽、试探计算隔离、去重和极值。RK45/BDF 下开启与关闭提示的最终状态、全部最终输出以及 nfev/njev/nlu、接受/拒绝步数完全一致。结合氦气物性、属性缓存、结果分块、求解器控制和工作进程控制回归,共 22 项 Python 测试分批通过。前端 5 项浏览器测试通过,包含实时/仅结果提示、重复消息去重与 IndexedDB 结果保存;TypeScript 检查和 Vite 生产构建通过。
|
||
|
||
验证期间修正了两个测试环境问题:浏览器导入工程名已由文件名决定,旧测试仍断言 JSON 内名称;原生控制测试需显式提供临时目录内的二进制结果文件,避免 Windows `tmpfile()` 无权限导致空结果。这些调整没有修改生产求解行为。
|
||
|
||
使用上一次已经核对参数和初始条件的同一 Amesim 模型对应 [startup/platform.json](../../test/node-fixes-amesim-20260914/startup/platform.json),经真实后端消息流完成 0–0.15 s 仿真:1784 条输出曲线、每条 1501 个采样值,与添加提示前的高温物性修复结果逐值完全一致。[验证结果](../../test/property-temperature-warnings-20260915/model-validation.json)、[消息流](../../test/property-temperature-warnings-20260915/stream-events.jsonl)、[复现脚本](../../test/property-temperature-warnings-20260915/validate_model.py)。本次检查的是提示功能,不是重新声明整个模型对 Amesim 的相对误差均小于 5%。
|
||
|
||
本模型检测到:
|
||
|
||
| 类别 | 首次时刻 / s | 首次物性计算温度 / K | 界限 / K | 期间越界极值 / K |
|
||
| --- | ---: | ---: | ---: | ---: |
|
||
| 理想气体热容、焓和内能下界 | 0 | 39.4411755352 | 200 | 39.4411755352 |
|
||
| 状态方程及真实气体修正项上界 | 2.95514285254e-8 | 1513.97899017 | 1500 | 11759.1354656 |
|
||
|
||
初始的 56 个容积温度输出都约为 293.15 K;39.44 K 是物性计算内部使用的温度,不能说初始容积气体降到了 39.44 K。实时消息按发生顺序发出,结果列表按物性类别汇总,顺序可以不同。
|