优化仿真求解性能并修复流量闭合问题(初版)
This commit is contained in:
1 parent
57b459bc72
commit
5332a788f3
55 files changed
+8973
-549
No files matched your search
@@ -111,6 +111,7 @@ app/simulation/components/experimental/junctions/tee.py
|
||||
```python
|
||||
MODEL_TYPE = "example_component"
|
||||
MODEL_VERSION = "1.0.0"
|
||||
PRESSURE_FLOW_DEPENDS_ON_STREAM = False
|
||||
PORTS = (...)
|
||||
PARAMETERS = (...)
|
||||
RESULT_VARIABLES = (...)
|
||||
@@ -153,6 +154,18 @@ def create(
|
||||
- `pressure_flow_equation_residuals()`。
|
||||
- 需要传递 stream 变量时实现 `update_stream_outflows()`。
|
||||
|
||||
实现 `update_stream_outflows()` 或 `update_flow_temperature_references()` 的公开模型,
|
||||
还应在该公开类自身显式声明 `PRESSURE_FLOW_DEPENDS_ON_STREAM`:构成压力/流量方程
|
||||
会读取这些 hook 写入的焓或温度引用时设为 `True`,否则设为 `False`。省略声明、
|
||||
声明非法值或由自定义子类仅继承父类声明时,求解器会保守使用全网热流闭合;不要
|
||||
为了获得分块加速而错误声明 `False`。
|
||||
|
||||
`pressure_flow_equation_residuals()` 返回的每条 `EquationResidual.variables` 必须完整
|
||||
列出该残差实际读取的全部代数端口量(`p/m_flow/x/v/f`),不能只写“主要变量”。
|
||||
求解器会用这份声明编译稀疏 Jacobian 和独立方程块;漏写依赖可能让有限差分方向
|
||||
不完整。仓库内置组件会接受结构与数值依赖回归,外部自定义组件当前仍保守使用
|
||||
全网 dense 回退,直到具备同等的依赖验证边界。
|
||||
|
||||
### 6.2 `ThermodynamicVolumeComponent`
|
||||
|
||||
适用于包含质量和能量状态的气体容腔,例如:
|
||||
@@ -406,6 +419,27 @@ def create(
|
||||
- 必要正则化必须有物理解释,并通过边界测试保护。
|
||||
- 不得用画布坐标、连接线方向或组件名称决定方程。
|
||||
|
||||
### 12.1 可因果执行的残差语义
|
||||
|
||||
后端只会对经过结构门控的内置模型启用完全因果执行。除完整声明
|
||||
`variables` 外,这些模型还必须遵守以下可执行语义:
|
||||
|
||||
- `role="effort", relation="state"` 的残差写成
|
||||
`端口 effort - 状态给定值`,被约束的端口量系数必须为 `+1`。
|
||||
- `role="effort", relation="equal"` 的残差写成两个同类 effort 的差。
|
||||
- `role="flow", relation="sumToZero"` 按“流入组件为正”的约定求和,待消元
|
||||
flow 的系数必须为 `+1`。
|
||||
- `role="flow", relation="constitutive"` 写成
|
||||
`待消元 flow - 本构计算值`,待消元 flow 的系数必须为 `+1`。
|
||||
- `pressure_flow_equation_values()` 必须是无副作用的只读计算,返回顺序和长度
|
||||
必须与 `pressure_flow_equation_residuals()` 的编译结果永久一致;不得在求残差时
|
||||
修改端口、状态或活动集缓存。
|
||||
|
||||
求解器仍会在首次闭合、离散事件之后和固定周期执行完整残差审计。结构不满足、
|
||||
运行时覆盖不完整或审计不通过时,会立即熔断到原有残差/非线性求解路径。现场诊断
|
||||
时可在启动进程前设置 `SIMULATION_CAUSAL_FAST_PATH=0`,一键关闭该优化而不改变模型
|
||||
文件。
|
||||
|
||||
动态模型还必须:
|
||||
|
||||
- 状态向量长度稳定。
|
||||
@@ -435,6 +469,7 @@ from app.simulation.core.ports import PortDefinition
|
||||
class ExampleRestriction(AlgebraicComponent):
|
||||
MODEL_TYPE = "example_restriction"
|
||||
MODEL_VERSION = "1.0.0"
|
||||
PRESSURE_FLOW_DEPENDS_ON_STREAM = False
|
||||
PORTS = (
|
||||
PortDefinition.pneumatic("port_a", nominal_role="bidirectional"),
|
||||
PortDefinition.pneumatic("port_b", nominal_role="bidirectional"),
|
||||
|
||||
Reference in new issue
Block a user