旧版前端工程文件导入时版本对比查验、审阅与仿真时部分阻挡功能实现;前端参数输入格式统一规范
This commit is contained in:
1 parent
22579e51c9
commit
44b6ea74ab
32 files changed
+2087
-322
No files matched your search
@@ -1,5 +1,9 @@
|
||||
# C 求值的依赖排序与局部求解
|
||||
|
||||
文档版本:1.1.1
|
||||
修订日期:2026-09-12
|
||||
核对代码基线:`22579e5`;本次版本号仅标注文档,不改变模型版本或协议版本。
|
||||
|
||||
本文说明当前内置模型的扩展 C 生成路径。Python 仅在编译时整理计算关系,运行时仍由独立 C 程序完成物性、连接量、局部迭代和积分。没有恢复旧 Python 数值内核或旧 IR 包。
|
||||
|
||||
## 执行过程
|
||||
@@ -41,7 +45,7 @@
|
||||
- 在实际返回候选点检查方程相对残差不超过 `1e-9`,同时保留流量变化的绝对 `1e-13 kg/s` 或相对 `1e-10` 判据;比较过程避免流量尺度溢出造成误判。解析低雷诺数分支也核对残差及返回流量的有限性。
|
||||
- 求根最多128轮。区间已缩至相邻浮点值时核验两端候选,仍不满足上述条件则失败;非有限方程、无法夹根、迭代耗尽均返回失败值,不将最后一次试算当成解。
|
||||
|
||||
PNL00R原有的直接层流分支(对应 `Re ≤ 1000`)继续按其解析式计算;该保留分支不经过上述混合摩擦关系的求根检查。区间法的收敛仍以区间内方程连续等条件为前提,不代表任意经验公式、任意有限输入或整套耦合系统都能成功求解。上面的系统压力、焓闭合策略,以及积分器和系统雅可比策略均保留。系统循环的来源检查和局部划分不代表任意新非线性方程都已得到数值求解支持。
|
||||
PNL00R原有的直接层流分支(对应 `Re ≤ 1000`)继续按其解析式计算;该保留分支不经过上述混合摩擦关系的求根检查。区间法的收敛仍以区间内方程连续等条件为前提,不代表任意经验公式、任意有限输入或整套耦合系统都能成功求解。上述压力/焓闭合与管路求根是不同层次;当前系统 BDF 的雅可比已采用下节说明的有条件着色差分。系统循环的来源检查和局部划分不代表任意新非线性方程都已得到数值求解支持。
|
||||
|
||||
每次 `model_eval` 还建立调用者持有的 `NativePropertyCache`,并显式传给局部辅助函数。气体状态准备后登记已有温度、焓和密度;阀口、管路及诊断计算共享相同状态中的有效物性。压力、焓或介质参数改变时按完整输入重新查询,缓存不跨系统试算复用。记录容量满时使用正常计算回退。
|
||||
|
||||
@@ -65,3 +69,27 @@ operations.append(Computation.assignment(
|
||||
对应测试:`tests/test_native_schedule.py`、`tests/test_native_catalog.py`。本轮模型对照记录见 [计算排序验证记录](../other/C计算依赖排序验证-2026-09-10.md)。
|
||||
|
||||
物性复用和管流求根还由 `tests/test_native_properties.py`、`tests/test_native_pipe_physics.py` 覆盖。`tests/test_native_pipe_solver.py` 仅依赖Python标准库和C编译器,通过独立二分、切换邻点及临时测试副本中的斜率/方程故障注入,验证区间保护、残差、回退与明确失败。实现边界与实测结果见 [物性复用与管流求根实现及验证](../other/物性复用与管流求根实现及验证-2026-09-11.md)。
|
||||
|
||||
## 新注册模型的构建与数值检查(2026-09-12 修订)
|
||||
|
||||
公共数值函数位于 `native/components/modules/`,导出与依赖由 `native_codegen/modules.py` 管理;`kernels.c` 仅为诊断聚合入口。增加 C 调用后检查函数所属模块实际进入链接。
|
||||
|
||||
求值排序的输入输出声明与 BDF 雅可比的状态依赖分析需要分别核对:`jacobian.py` 识别新的受控函数时必须知道全部状态输入,分支及投影取保守依赖;不能因调度无环就断言着色正确。无法证明结构时保守回退,动态模型适用时对生成的 `model`/`model.exe` 执行 `--verify-jacobian`;它不是 Python 包装 CLI 的参数。新增状态还须审查 `tolerances.py` 的量纲尺度。完整步骤见[注册流程](component-registration-workflow-v1.md)。本次无状态斜坡源演练未覆盖新的非线性环、动态端口或非平凡的雅可比结构。
|
||||
|
||||
## 当前 BDF 雅可比与误差尺度
|
||||
|
||||
`jacobian.py` 在编译期追踪状态依赖。仅当依赖可证明且 `0 < colorCount < stateCount` 时,CVODE 安装着色前向差分;未知依赖或无分组收益时保留默认稠密差分。紧凑路径当前明确使用稠密回退。着色减少 RHS 评估次数,底层仍是 `SUNMatrix_Dense` 与 `SUNLinSol_Dense`,不是稀疏矩阵分解器。
|
||||
|
||||
扩展路径为雅可比生成 `model_eval_jacobian()`:差分基点和扰动点统一采用 canonical 物性求值方式,避免初始缓存填充与后续查询的细小舍入差影响导数;普通 `model_eval()` 的物性复用行为不因此更改。运行策略以构建清单 `jacobianStructure.defaultRuntimePolicy/runtimeEligible/runtimeFallbackReason` 为准。
|
||||
|
||||
网页、XML API 和原生 Python CLI 默认经 `backends.simulation_config()` 取得 `rtol=1e-8`;CLI 可显式覆盖。单独构造 `SolveIVPConfig()` 或直接运行未指定容差的生成 EXE,其默认 `rtol` 仍是 `1e-6`;直接 EXE 默认方法还是 RK45,不能混作网页的 BDF 默认。原生 runner 不支持自定义 `atol/first_step`,保留的配置 `atol=1e-8` 只是入口约定;实际 `model_atol` 为质量字段 `m/m1/m2:1e-14`、位移/速度 `x/v:1e-12`,其余 `1e-8`。
|
||||
|
||||
## 构建缓存的实际边界
|
||||
|
||||
默认根目录为 `app/data/native-builds/`。`objects/<hash>` 保存可复用编译单元(cacheVersion 1),`models/<hash>` 保存完整模型程序及合同(cacheVersion 2);它们与工程/结果存储分开,当前不会随 `SIMULATIONAPP_DATA_DIR` 自动迁移。
|
||||
|
||||
按需选择只作用于 `modules.py` 列出的组件功能模块,粒度是 C 模块文件,不是某实例或单个函数;运行库的六个 C 单元总会参与构建身份计算。即使完整模型命中,每次仍检查工具链、预处理所选源码、计算内容/依赖哈希并核验产物,再跳过编译和链接。因此缓存命中不是零构建成本。参数或元件组合改变通常改变生成的 `model.c`,公共单元仍可复用。
|
||||
|
||||
默认模型预算 256 MiB、对象预算 128 MiB,分别由 `SIMULATION_NATIVE_MODEL_CACHE_MB`、`SIMULATION_NATIVE_OBJECT_CACHE_MB` 设置非负整数。清理按目录最近使用时间进行,并保护正在使用、并发变化或非受管条目;单个剩余超大条目会保留,因此是可报告超限的预算,不是硬磁盘配额。设 0 也不是关闭缓存开关。启动预热(默认启用,`SIMULATIONAPP_WARMUP=off` 可禁用)只检查工具链和 XML Schema,不预先编译全部组件;`build.py` 仍会验证命中缓存的工具链条件。
|
||||
|
||||
Windows/Linux 编译、依赖布局和实际验证范围见[跨平台约定](跨平台交付约定.md)。
|
||||
Reference in new issue
Block a user