更新test_mql迁移状态文档
This commit is contained in:
1 parent
2c2952cff1
commit
65f6d6dd87
3 files changed
+154
-167
No files matched your search
+92
-145
@@ -1,166 +1,113 @@
|
||||
# test_mql
|
||||
|
||||
本目录记录从 AMESim 模型 `test_mql.ame` 迁移到 `PythonModels` 的当前状态。
|
||||
本目录记录 AMESim 模型 `test_mql.ame` 向 `PythonModels` 迁移时使用的源模型信息、结果对齐约定和当前进度。
|
||||
|
||||
## 模型命名
|
||||
## 目标
|
||||
|
||||
- 仓库内模型名:`test_mql`
|
||||
- Python 系统类:`TestMqlSystem`
|
||||
- Python 配置解析类:`TestMqlConfig`
|
||||
- Python 运行入口:`PythonModels/scripts/run_test_mql.py`
|
||||
迁移目标不是复制 AMESim `.results` 中的观测值,而是建立真实的 Python 仿真链路:
|
||||
|
||||
## 源文件
|
||||
`组件方程 -> SimulationNetwork/系统装配 -> closure -> snapshot/端口写回 -> RHS -> solver -> reporting/comparison`
|
||||
|
||||
Python 输出只有通过 AMESim baseline 对比后才能作为数值一致性依据。duplicate、反号或派生观测可以用于验证端口方向,但不能替代组件方程和网络闭合。
|
||||
|
||||
## 模型与源数据
|
||||
|
||||
- AMESim 源模型:`AmesimModels/test_mql.ame`
|
||||
- 该 `.ame` 文件本质是一个 tar 包,内部包含 `test_mql_.cir`、`test_mql_.param`、`test_mql_.modelinfo`、`test_mql_.sim`、`test_mql_.data`、`test_mql_.results`、`test_mql_.var` 等文件。
|
||||
- `test_mql_.results` 是 AMESim 主时序结果文件;`test_mql_.data` 是配套结果/数据文件。
|
||||
|
||||
## 当前新增文件
|
||||
|
||||
- `PythonModels/systems/test_mql.py`
|
||||
- 记录 AMESim 组件清单、全局参数、子模型分布、连接拓扑和 AMESim modelinfo 状态数。
|
||||
- 当前是结构化 Python 迁移骨架,不是完整 AMESim 物理方程复刻。
|
||||
|
||||
- `PythonModels/systems/test_mql_config.py`
|
||||
- 提供 `TestMqlConfig.from_amesim_specs()`。
|
||||
- 负责把 AMESim 全局参数和组件参数解析成后续可用的 Python 配置对象。
|
||||
- `test_mql` 默认工质已按 AMESim 模型确认设为氦气。
|
||||
- 已支持常量、全局参数引用、四则运算、括号和 AMESim 风格的 `^` 指数表达式。
|
||||
- 非数值文本会保留为 `None`,后续按具体子模型显式处理。
|
||||
|
||||
- `PythonModels/scripts/run_test_mql.py`
|
||||
- 提供独立运行入口。
|
||||
- 当前输出结构摘要和基础序列,后续逐步接入真实物理方程。
|
||||
|
||||
- `tests/test_test_mql_structural.py`
|
||||
- 保护组件数、连接数、状态数、全局参数和关键子模型计数。
|
||||
|
||||
- `tests/test_test_mql_config.py`
|
||||
- 保护全局参数解析、AMESim 表达式解析、按子模型分组、默认氦气工质和典型组件参数解析。
|
||||
|
||||
- `PythonModels/core/peng_robinson.py`
|
||||
- 提供 Peng-Robinson 状态方程小物性库。
|
||||
- 当前覆盖压缩因子、摩尔体积、密度和由密度反算压力。
|
||||
- 已内置 `HELIUM_PR`,供 `test_mql` 默认使用。
|
||||
|
||||
- `PythonModels/components/amesim_pneumatic.py`
|
||||
- 提供 `test_mql` 后续会用到的 AMESim 气动组件原语。
|
||||
- 当前包含氦气 PR 压力闭合的气动容腔、标准可压缩孔口流量、单位换算 helper。
|
||||
- 这层仍是首版近似原语,后续必须通过 AMESim 结果对齐修正。
|
||||
|
||||
- `PythonModels/reporting/amesim_results.py`
|
||||
- 直接解析 `.ame` 包内的 AMESim 二进制结果。
|
||||
- 当前已确认 `test_mql_.results` 结构为:2 个 int32 头字段、1116 个保存变量映射、1002 行 `time + 1116变量` 的 double 时序矩阵,以及尾部 `time + 1278变量终值`。
|
||||
|
||||
- `tests/test_amesim_results.py`
|
||||
- 保护 `test_mql_.results` 的时间轴、变量数量、Data_Path 映射和典型样本值。
|
||||
|
||||
- `PythonModels/reporting/test_mql_comparison.py`
|
||||
- 提供 `test_mql` 专用的 AMESim/Python 时序对齐工具。
|
||||
- 按 AMESim `Data_Path` 做时间插值、最大绝对误差、平均绝对误差、最大相对误差和终值误差统计。
|
||||
- 可导出 `test_mql_amesim_baseline.csv` 和 `test_mql_amesim_comparison.csv`,供后续组件方程校验使用。
|
||||
|
||||
- `tests/test_test_mql_comparison.py`
|
||||
- 保护 AMESim 原始序列零误差对齐、粗时间步插值、偏移误差统计、缺失变量报错和 CSV 输出。
|
||||
|
||||
- `PythonModels/systems/test_mql_pneumatic.py`
|
||||
- 把 AMESim 配置中的 `PNCH023`、`PNCH012`、`PNOR001`、`PNVO001` 装配成 Python 气动对象。
|
||||
- 当前覆盖 4 个固定气室、8 个变容气室、8 个固定孔口、8 个可变孔口,alias 沿用 AMESim 原名。
|
||||
- 初始压力按 AMESim 全局参数 `P0=153 bar` 和大气压 `1.013 bar` 转成 `15198700 Pa`。
|
||||
|
||||
- `tests/test_test_mql_pneumatic.py`
|
||||
- 保护气动装配数量、alias、氦气工质、气室体积、孔口面积/流量系数和基础质量流量计算。
|
||||
|
||||
- `PythonModels/reporting/test_mql_variables.py`
|
||||
- 建立 AMESim `Data_Path` 到信号名、组件/连接 alias、owner 类型和子模型的变量目录。
|
||||
- 当前 1100 个有 `Data_Path` 的变量全部可归属,其中组件变量 712 个、连接/管路变量 388 个。
|
||||
|
||||
- `tests/test_test_mql_variables.py`
|
||||
- 保护变量目录覆盖率、组件变量映射、连接变量映射、子模型计数和非法 `Data_Path` 报错。
|
||||
|
||||
- `PythonModels/systems/test_mql_lines.py`
|
||||
- 把 AMESim `CONNECTION_SPECS` 中的管路连接装配成 Python 管路目录。
|
||||
- 当前覆盖 `PNL0001` 20 条、`PNL0002` 8 条、`PNL0003` 8 条、`PNL00R` 4 条,共 40 条。
|
||||
- 保留 `pneumatic_*` alias、源/目标组件端口、`C-R`/`R-C-R`/`C-R-C`/`R` 模式和对应 `Data_Path`。
|
||||
|
||||
- `tests/test_test_mql_lines.py`
|
||||
- 保护管路数量、拓扑端口、管路模式、典型 `Data_Path` 和子模型分组。
|
||||
|
||||
- `PythonModels/systems/test_mql_mechanical.py`
|
||||
- 把 AMESim 配置中的 `PNRP17`、`MECMAS21`、`LSTP00A`、`LMECHN1` 等机械相关组件装配成 Python 参数目录。
|
||||
- 当前覆盖 8 个气动活塞、10 个质量/端止动、8 个弹性端止动、2 个机械节点、16 个零力源和 2 个力连接器。
|
||||
- 保留 AMESim alias 和对应 `Data_Path`,并把直径、刚度、阻尼、穿透距离等参数换算到 SI 单位。
|
||||
|
||||
- `tests/test_test_mql_mechanical.py`
|
||||
- 保护机械组件数量、活塞面积、质量端止动参数、载荷质量行程限制、弹性端止动参数、机械节点端口数、单位换算,以及 8 个活塞/8 个弹性端止动的 AMESim 末端样本对齐。
|
||||
|
||||
- `PythonModels/components/amesim_mechanical.py`
|
||||
- 提供 AMESim 机械侧小原语,当前覆盖 `PNRP17` 活塞腔几何和 `LSTP00A` 弹性端止动接触力。
|
||||
- 活塞腔长度、体积、体积变化率已用 `length@pn_brp2_*`、`vol1@pn_brp2_*`、`vvol1@pn_brp2_*` 的 AMESim 样本校验。
|
||||
- 端止动接触力已按 `gap@elasticendstop_*`、`f1@elasticendstop_*` 和阻尼速度样本校验。
|
||||
|
||||
- `tests/test_amesim_mechanical_components.py`
|
||||
- 保护机械原语单位换算、活塞几何、活塞体积变化率和弹性端止动接触力。
|
||||
|
||||
## 物性约定
|
||||
|
||||
AMESim 模型中 `test_mql` 使用氦气,Python 侧当前通过 `HELIUM_PR` 使用 Peng-Robinson 状态方程计算气体压缩因子和密度。当前物性层先覆盖状态方程相关量,完整焓/内能偏差函数后续在接气室能量方程时再补。
|
||||
|
||||
## 当前提取结果
|
||||
|
||||
- 组件数:117
|
||||
- 连接数:84
|
||||
- AMESim 连续状态数:132
|
||||
- AMESim 离散状态数:24
|
||||
- Python 系统类:`PythonModels.systems.test_mql.TestMqlSystem`
|
||||
- 结构运行入口:`PythonModels/scripts/run_test_mql.py`
|
||||
- 132 状态比较入口:`PythonModels/scripts/run_test_mql_full_state_comparison.py`
|
||||
- AMESim 组件数:117
|
||||
- LINE 连接数:84
|
||||
- 连续状态数:132
|
||||
- 离散状态数:24
|
||||
- 全局参数:`D1=20`、`D2=20`、`D3=14`、`P0=153`、`Pdq=1`、`V=15`、`cf=0.45`
|
||||
|
||||
主要 AMESim 子模型分布:
|
||||
`.ame` 文件是 tar 包,迁移和校验主要使用其中的:
|
||||
|
||||
- `F000`: 16
|
||||
- `PNPL01`: 16
|
||||
- `MECMAS21`: 10
|
||||
- `PNRP17`: 8
|
||||
- `LSTP00A`: 8
|
||||
- `PNCH012`: 8
|
||||
- `PNOR001`: 8
|
||||
- `PN3NODE2`: 8
|
||||
- `P4NODE2`: 8
|
||||
- `PNVO001`: 8
|
||||
- `STEP0`: 8
|
||||
- `PNCH023`: 4
|
||||
- `LMECHN1`: 2
|
||||
- `FORC`: 2
|
||||
- `UD00`: 2
|
||||
- `PNGD00`: 1
|
||||
- `test_mql_.cir`:组件、连接、参数表达式和生成代码线索。
|
||||
- `test_mql_.param` / `test_mql_.data`:参数和结果配套数据。
|
||||
- `test_mql_.modelinfo` / `test_mql_.sim`:状态数和仿真设置。
|
||||
- `test_mql_.var` / `test_mql_.results`:AMESim `Data_Path` 目录和 baseline 时序。
|
||||
|
||||
当前结果解析器可读取 1002 个时间点和 1116 个保存变量,无需先转换成 CSV。
|
||||
|
||||
## 结果对齐原则
|
||||
## 当前实现
|
||||
|
||||
后续 Python 仿真结果必须以 AMESim 为基准做一一对应校验:
|
||||
当前已经完成:
|
||||
|
||||
1. 组件别名优先沿用 AMESim 原名,例如 `pn_brp2_8`、`pn_c1_8`、`pn_orifice_18`。
|
||||
2. 子模型族优先沿用 AMESim 子模型名,例如 `PNRP17`、`PNCH012`、`PNOR001`、`PNVO001`。
|
||||
3. 输出变量命名要能追溯到 AMESim 的 `Data_Path`,避免 Python 侧改名后无法对比。
|
||||
4. Python 每完成一批物理方程,都应优先使用 `test_mql_.results` 解析出的 AMESim 原始时序做误差对比。
|
||||
5. CSV 仍可作为人工检查或外部交换格式,但不是自动对齐的前置条件。
|
||||
6. 在没有完成逐变量误差对比前,不能把 Python 输出描述为“已经和 AMESim 几乎一致”,只能说明完成了结构、参数、结果读取或某类组件方程。
|
||||
- AMESim 组件、LINE 连接、直接组件接触、全局参数和变量目录解析。
|
||||
- 氦气 Peng-Robinson 物性;内部使用绝对压力,AMESim `press` 按相对 `101300 Pa` 的表压输出。
|
||||
- `PNCH023 / PNCH012 / PNOR001 / PNVO001` 气动组件。
|
||||
- `PNL0001 / PNL0002 / PNL0003 / PNL00R` 管路动态或阻性关系。
|
||||
- `PN3NODE2 / P4NODE2` 代数节点、真实邻接拓扑、canonical flow 和端口写回。
|
||||
- `PNRP17 / MECMAS21 / LSTP00A / LMECHN1 / UD00 / FORC` 当前工况可确认的机械行为。
|
||||
- 112 个气动状态和 20 个机械状态组成的 132 状态总闭包。
|
||||
- 活塞运动学、变容气室机械反馈、气动力、外力、端止动和质量约束耦合。
|
||||
- 关键 `Data_Path` 序列导出、schema validation、AMESim 插值 comparison、误差排序、端点诊断和变容气室 RHS 拆解。
|
||||
|
||||
## 验证方式
|
||||
主要实现位置:
|
||||
|
||||
- `PythonModels/systems/test_mql.py`
|
||||
- `PythonModels/systems/test_mql_closure.py`
|
||||
- `PythonModels/systems/test_mql_pneumatic.py`
|
||||
- `PythonModels/systems/test_mql_mechanical.py`
|
||||
- `PythonModels/systems/test_mql_lines.py`
|
||||
- `PythonModels/components/amesim_pneumatic.py`
|
||||
- `PythonModels/components/amesim_mechanical.py`
|
||||
- `PythonModels/reporting/amesim_results.py`
|
||||
- `PythonModels/reporting/test_mql_comparison.py`
|
||||
- `PythonModels/scripts/run_test_mql_full_state_comparison.py`
|
||||
|
||||
## 当前对比结果
|
||||
|
||||
默认 comparison 使用 `0 -> 1e-5 s` 的短时域,目的是在数值误差扩散前检查初值、RHS 和局部耦合。
|
||||
|
||||
当前已确认:
|
||||
|
||||
- 最大绝对误差路径是 `press@pn_c1_8`。
|
||||
- 初值已对齐:Python 约 `-1300 Pa`,AMESim 约 `-1300 Pa`。
|
||||
- `t=1e-5 s` 时 Python 约 `-1290.75976 Pa`,AMESim 约 `-1299.98825 Pa`,末值绝对误差约 `9.22849 Pa`。
|
||||
- `pn_c1_8` 的边界体积功只有约 `0.026 W`,端口焓流约 `32722 W`;当前偏差主要不像是活塞体积功导致。
|
||||
|
||||
这表明 132 状态仿真链路已经能够暴露真实偏差,但 PNL0001、节点流量、孔口或 PNCH012 方程仍需数值标定,尚不能声称已经达到 AMESim parity。
|
||||
|
||||
## 下一步
|
||||
|
||||
下一步只围绕当前最大偏差推进:
|
||||
|
||||
1. 导出 Python 的 `p4_port3_remote_chamber_to_line_flow`。
|
||||
2. 与 AMESim 的 `dm1@pneumatic_69` 比较,先做 `g/s -> kg/s` 单位转换并确认符号方向。
|
||||
3. 比较 `t=0` 和 `t=1e-5 s`,并用 `mgas1@pn_c1_8` 的有限差分交叉验证质量导数。
|
||||
4. 若流量偏差明显,检查 `pneumatic_69` 的 PNL0001 `resistance_mass_flow`、参数和 `pnnode4_16` 节点平衡。
|
||||
5. 若流量吻合,再校准 PNCH012 焓流、氦气物性以及质量/能量到压力导数的换算。
|
||||
|
||||
`pn_c1_8` 的直接主线是 `pneumatic_69`。`pneumatic_96` 属于 `pn_node3_8 -> pn_general_chamber` 固定气室支路,不是本轮流量诊断对象。
|
||||
|
||||
## 运行与验证
|
||||
|
||||
运行默认短时域 comparison:
|
||||
|
||||
```bash
|
||||
python3 -m PythonModels.scripts.run_test_mql_full_state_comparison
|
||||
```
|
||||
|
||||
运行相关测试:
|
||||
|
||||
```bash
|
||||
python3 -m unittest tests.test_run_test_mql_full_state_comparison tests.test_test_mql_pnl0001_segment
|
||||
```
|
||||
|
||||
运行全量测试:
|
||||
|
||||
```bash
|
||||
python3 -m py_compile PythonModels/components/amesim_mechanical.py PythonModels/components/amesim_pneumatic.py PythonModels/core/peng_robinson.py PythonModels/reporting/amesim_results.py PythonModels/reporting/test_mql_comparison.py PythonModels/reporting/test_mql_variables.py PythonModels/systems/test_mql.py PythonModels/systems/test_mql_config.py PythonModels/systems/test_mql_lines.py PythonModels/systems/test_mql_mechanical.py PythonModels/systems/test_mql_pneumatic.py PythonModels/scripts/run_test_mql.py
|
||||
python3 -m PythonModels.scripts.run_test_mql
|
||||
python3 -m unittest discover -s tests -t .
|
||||
```
|
||||
|
||||
当前测试覆盖的是结构、配置解析、气动原语、机械原语、气动件装配、管路连接装配、机械装配、AMESim 结果读取、变量目录和 AMESim/Python 时序对齐工具,不代表已经完成 AMESim 物理结果复刻。
|
||||
## 对齐约定
|
||||
|
||||
## 后续方向
|
||||
|
||||
后续继续补模型时,保持只新增或修改 `test_mql` 相关代码,不改旧的 `testmodel`。建议按下面顺序逐步实现真实物理方程:
|
||||
|
||||
1. `PNGD00`:气体属性。
|
||||
2. `PNCH023 / PNCH012`:固定气室和变容气室。
|
||||
3. `PNOR001 / PNVO001`:固定孔口和可变孔口。每完成一项后用 `test_mql_comparison.py` 按 `Data_Path` 对齐 AMESim 结果。
|
||||
4. `PNL0001 / PNL0002 / PNL0003 / PNL00R`:管路阻容连接。
|
||||
5. `PNRP17 / MECMAS21 / LSTP00A / LMECHN1`:气动活塞、机械负载和端止动。
|
||||
- 组件 alias 和输出名优先保持 AMESim 原名及 `Data_Path`。
|
||||
- `PortState.m_flow > 0` 表示流入当前组件。
|
||||
- closure 先定义 canonical flow,再按各组件端口方向写回 `m_flow`。
|
||||
- AMESim 管路质量流量通常以 `g/s` 保存,Python 内部统一使用 `kg/s`。
|
||||
- CSV 是人工检查和交换格式,不是读取 AMESim baseline 的前置条件。
|
||||
- 未完成真实 Python 输出对比前,不使用“与 AMESim 完全一致”之类结论。
|
||||
+28
-22
@@ -1,23 +1,23 @@
|
||||
# PythonModels
|
||||
|
||||
`PythonModels` 用于承接 `ModelicaModels` 的 Python 平台移植。
|
||||
`PythonModels` 用于承接 Modelica 和 AMESim 模型的 Python 平台移植。
|
||||
|
||||
目标不是把 `.mo` 文件逐行翻译成 Python,而是建立一个可运行、可对比、可逐步逼近 `OpenModelica` 行为的 Python 仿真框架。
|
||||
目标不是逐行翻译源模型,而是建立可运行、可测试、可导出,并能与 OpenModelica 或 AMESim baseline 对比的 Python 仿真框架。
|
||||
|
||||
当前状态不是“只有骨架”,而是“`Testmodel` 已有一版可运行的 ODE 近似实现,并具备基础结果导出与对比能力”。
|
||||
当前包含两条模型线:`Testmodel` 已有可运行的 ODE 近似和 OpenModelica 对比能力;`test_mql` 已形成 132 状态气动机械总闭包,正在按 AMESim baseline 做数值校准。
|
||||
|
||||
## 当前目录
|
||||
|
||||
- `core/`: 通用基础设施
|
||||
包含组件基类、状态与端口数据结构、介质模型、网络装配、积分入口。
|
||||
- `components/`: 元件级 Python 实现
|
||||
目前有 `Cylinder`、`Tank`、`Pipe`、`Orifice`、`Tee` 五类元件。
|
||||
包含 `Cylinder`、`Tank`、`Pipe`、`Orifice`、`Tee`,以及 AMESim 气动和机械组件原语。
|
||||
- `systems/`: 系统级装配与闭合
|
||||
当前只有 `TestModelSystem`,对应 `ModelicaModels/Testmodel.mo`。
|
||||
包含旧 `TestModelSystem`,以及当前主线 `TestMqlSystem` 的配置、拓扑、closure、snapshot、端口写回和 RHS。
|
||||
- `reporting/`: 结果导出与对比
|
||||
当前承接主变量 CSV、温度 CSV/SVG、Python 对 OpenModelica 的对比表与误差摘要导出。
|
||||
承接 OpenModelica 对比,以及 AMESim 结果读取、`Data_Path` schema validation、comparison 和诊断报告。
|
||||
- `scripts/`: 运行脚本
|
||||
当前入口是 `run_testmodel.py`。
|
||||
包含 `run_testmodel.py`、`run_test_mql.py` 和 `run_test_mql_full_state_comparison.py`。
|
||||
- `baselines/`: 提交进仓库的稳定基线
|
||||
当前承接 Python 主变量基线和 Python 对 Modelica 的误差摘要基线。
|
||||
- `runs/`: 每次实际运行的默认输出目录
|
||||
@@ -25,15 +25,18 @@
|
||||
|
||||
当前关键文件:
|
||||
|
||||
- `core/medium.py`: 理想气体近似介质 `IdealGasMedium`
|
||||
- `core/medium.py`: 温度相关的空气近似介质 `IdealGasMedium`
|
||||
- `core/medium.py`: 温度相关的理想气体近似介质 `IdealGasMedium`
|
||||
- `core/peng_robinson.py`: `test_mql` 使用的氦气 Peng-Robinson 物性
|
||||
- `core/network.py`: `SimulationNetwork`,负责组件注册、连接拓扑和状态向量拼装
|
||||
- `core/solver.py`: `integrate_ode()`,优先走 `SciPy solve_ivp`,缺依赖时回退到内置 RK4,并支持 `t_start == t_stop` 的零时长返回
|
||||
- `components/pipe.py`: 单阻容管道近似,入口压降 + 出口直连内容腔
|
||||
- `components/tee.py`: 三通的最小 stream 混合 helper
|
||||
- `systems/testmodel.py`: `Testmodel` 的系统装配壳与外部运行入口
|
||||
- `systems/testmodel_closure.py`: `Testmodel` 当前专用的闭合、初始化投影、分支求解与端口回写
|
||||
- `systems/test_mql.py`: `test_mql` 系统装配、132 状态总闭包和关键输出映射
|
||||
- `systems/test_mql_closure.py`: `test_mql` 气动网络 closure、snapshot、流量计算和端口写回
|
||||
- `reporting/testmodel_outputs.py`: `Testmodel` 的 CSV/SVG/对比摘要导出
|
||||
- `scripts/run_test_mql_full_state_comparison.py`: `test_mql` 短时域 AMESim comparison 和诊断入口
|
||||
- `scripts/run_testmodel.py`: 基线运行与程序化执行入口
|
||||
- `tests/test_pythonmodels_regression.py`: 当前 Python 基线回归测试
|
||||
|
||||
@@ -256,7 +259,7 @@ print(result.used_modelica_reference)
|
||||
## 基线结果
|
||||
|
||||
当前基线对比摘要来自:
|
||||
[testmodel_modelica_comparison_summary.txt](/home/lujz/projects/pressurization-transfer-system/PythonModels/baselines/testmodel/testmodel_modelica_comparison_summary.txt)
|
||||
[testmodel_modelica_comparison_summary.txt](baselines/testmodel/testmodel_modelica_comparison_summary.txt)
|
||||
|
||||
当前四个主变量的最大误差为:
|
||||
|
||||
@@ -273,13 +276,14 @@ print(result.used_modelica_reference)
|
||||
|
||||
当前已经完成:
|
||||
|
||||
- 结构目录:组件清单、连接拓扑、全局参数、仿真设置和变量目录。
|
||||
- 结果读取:可直接解析 `.ame` 包内 `test_mql_.var` 和 `test_mql_.results`,并按 AMESim `Data_Path` 索引时序数据。
|
||||
- 物性:`test_mql` 使用氦气,物性库已补 Peng-Robinson 状态方程入口。
|
||||
- 气动装配:已装配 `PNCH023 / PNCH012 / PNOR001 / PNVO001` 参数目录和首版气动原语;气室内部使用绝对压力计算氦气 PR 密度,对外按 AMESim `press` 表压对齐。
|
||||
- 管路装配:已整理 `PNL0001 / PNL0002 / PNL0003 / PNL00R` 连接目录,保留源/目标组件和端口。
|
||||
- 机械装配:已整理 `PNRP17 / MECMAS21 / LSTP00A / LMECHN1 / F000 / FORC` 参数目录。
|
||||
- 机械原语:已补 `AmesimPistonGeometry`、`AmesimElasticEndstop`、`AmesimMassFrictionEndstops`,并用 AMESim 结果校验活塞几何、弹性端止动力和质量端口观测方向。
|
||||
- 解析 117 个组件、84 条 LINE 连接、直接组件接触、全局参数、仿真设置以及 AMESim 变量目录。
|
||||
- 直接读取 `.ame` 包内 `test_mql_.var` 和 `test_mql_.results`;baseline 包含 1002 个时间点和 1116 个保存变量。
|
||||
- 使用氦气 Peng-Robinson 物性,内部统一使用绝对压力,对外按 AMESim 表压和原始单位输出。
|
||||
- 实现 `PNCH023 / PNCH012 / PNOR001 / PNVO001`,以及 `PNL0001 / PNL0002 / PNL0003 / PNL00R` 管路和 `PN3NODE2 / P4NODE2` 节点语义。
|
||||
- 完成气动真实拓扑装配、canonical flow、端口写回、snapshot 和 112 状态气动 RHS。
|
||||
- 实现 `PNRP17 / MECMAS21 / LSTP00A / LMECHN1 / UD00 / FORC` 当前工况可确认的机械行为,并形成 20 状态机械闭包。
|
||||
- 将气动和机械部分组合成 132 状态总闭包,接入活塞体积反馈、气动力、外力、端止动和质量约束,可通过现有 solver 短时积分。
|
||||
- 建立关键 `Data_Path` 序列导出、output schema、validation、AMESim 插值比较、误差排序、端点诊断和 PNCH012 RHS 项拆解。
|
||||
|
||||
当前确认的关键细节:
|
||||
|
||||
@@ -290,9 +294,11 @@ print(result.used_modelica_reference)
|
||||
- `MECMAS21` 的 `x1dup / v1dup / acc1dup` 是第二机械端口观测,相对 `x1 / v1 / acc1` 为反号,不是重复同值。
|
||||
- 本算例中 `MECMAS21` 的 `Fmin / Fmax / Fvisc / Ffric` 在 AMESim 结果里为零;当前只把这一工况能验证的部分写入测试,没有硬猜未激活碰撞/摩擦状态机。
|
||||
|
||||
当前还不能宣称 `test_mql` 的 Python 时域仿真已经和 AMESim 全局一致。下一步应继续补气动网络动态方程和机械网络闭合,再用 `reporting/test_mql_comparison.py` 对 AMESim `Data_Path` 做全变量误差统计。
|
||||
当前默认 `0 -> 1e-5 s` comparison 已定位最大偏差为 `press@pn_c1_8`:初值对齐,但末值绝对误差约 `9.22849 Pa`。RHS 拆解显示边界体积功约 `0.026 W`,端口焓流约 `32722 W`,因此当前首要工作是比较 Python 的 `p4_port3_remote_chamber_to_line_flow` 与 AMESim 的 `dm1@pneumatic_69`,检查单位、符号、PNL0001 阻力和 `pnnode4_16` 节点平衡。
|
||||
|
||||
## 当前架构判断
|
||||
当前还不能宣称 `test_mql` 的 Python 时域仿真已经和 AMESim 全局一致。完整说明、运行命令和下一步校准路径见 `AmesimModels/test_mql/README.md`。
|
||||
|
||||
## Testmodel 当前架构判断
|
||||
|
||||
如果按“组件正确 -> 网络闭合 -> 积分可跑 -> 结果对齐 -> 去近似”来看,当前大致处于:
|
||||
|
||||
@@ -306,7 +312,7 @@ print(result.used_modelica_reference)
|
||||
|
||||
`Testmodel` 已有一版可运行、可导出、可对比的 Python 近似实现。
|
||||
|
||||
## 已知限制
|
||||
## Testmodel 已知限制
|
||||
|
||||
当前最主要的限制可以直接理解成下面几条:
|
||||
|
||||
@@ -332,7 +338,7 @@ print(result.used_modelica_reference)
|
||||
- 作为最终工程结论的唯一依据
|
||||
- 直接扩展到更复杂拓扑而不补通用连接器语义
|
||||
|
||||
## 文件级现状
|
||||
## Testmodel 文件级现状
|
||||
|
||||
按代码现状逐项看:
|
||||
|
||||
@@ -355,7 +361,7 @@ print(result.used_modelica_reference)
|
||||
- `baselines/`: 是当前稳定基线,不应该随着日常运行频繁改动。
|
||||
- `runs/`: 是当前默认运行产物目录,不是手写源代码,也不应该当作提交基线使用。
|
||||
|
||||
## 当前主技术债
|
||||
## Testmodel 当前主技术债
|
||||
|
||||
目前最主要的技术债,可以直接理解成下面 4 件事:
|
||||
|
||||
|
||||
@@ -1,2 +1,36 @@
|
||||
# SystemSimulationApp
|
||||
|
||||
本仓库用于把 Modelica 和 AMESim 系统模型迁移到可运行、可测试、可与原模型结果对比的 Python 仿真平台。
|
||||
|
||||
## 当前模型
|
||||
|
||||
- `Testmodel`:旧 Modelica 迁移模型,已有可运行的 ODE 近似、结果导出和 OpenModelica 对比能力。
|
||||
- `test_mql`:当前开发主线,从 `AmesimModels/test_mql.ame` 迁移到 `PythonModels`。
|
||||
|
||||
`test_mql` 已完成 112 个气动状态和 20 个机械状态组成的 132 状态总闭包,可以短时积分并按 AMESim `Data_Path` 生成 comparison 报告。当前工作重点已经从拓扑接入转为数值校准;尚不能宣称 Python 结果与 AMESim 完全一致。
|
||||
|
||||
## 目录
|
||||
|
||||
- `AmesimModels/`:AMESim 源模型及模型级迁移说明。
|
||||
- `PythonModels/core/`:状态、网络、介质和求解器基础设施。
|
||||
- `PythonModels/components/`:气动、机械及通用组件方程。
|
||||
- `PythonModels/systems/`:系统装配、closure、snapshot、端口写回和 RHS。
|
||||
- `PythonModels/reporting/`:AMESim 结果读取、schema validation 和误差比较。
|
||||
- `PythonModels/scripts/`:仿真与 comparison 命令行入口。
|
||||
- `tests/`:组件、闭包、运行入口和回归测试。
|
||||
|
||||
## 运行 test_mql
|
||||
|
||||
运行默认的 132 状态短时域 AMESim 对比:
|
||||
|
||||
```bash
|
||||
python3 -m PythonModels.scripts.run_test_mql_full_state_comparison
|
||||
```
|
||||
|
||||
运行全量测试:
|
||||
|
||||
```bash
|
||||
python3 -m unittest discover -s tests -t .
|
||||
```
|
||||
|
||||
详细迁移说明见 `AmesimModels/test_mql/README.md`,Python 平台说明见 `PythonModels/README.md`。本机开发恢复记录保存在根目录 `STATUS.md`;该文件被 `.git/info/exclude` 忽略,不会随正常提交推送。
|
||||
Reference in new issue
Block a user