完善AMESim可配置参数交互

补充气动孔口、动态管路、UD00 与弹性接触组件的离散选项、条件显示和折叠分组。

增加目录协议、非法选项和前端参数表交互回归测试,不修改现有求解公式。
This commit is contained in:
ljz committed 2026-08-04 01:27:17 +08:00
1 parent be54070855
commit df1d676131
12 files changed
+1262 -69

No files matched your search

+111 -10
View File
@@ -8,16 +8,44 @@ from app.simulation.components.amesim.gases import (
normalize_amesim_gas_index,
)
from app.simulation.core.base import AlgebraicComponent
from app.simulation.core.catalog import ComponentDisplaySpec, PortDisplaySpec
from app.simulation.core.catalog import (
ComponentDisplaySpec,
ParameterGroupDisplaySpec,
PortDisplaySpec,
)
from app.simulation.core.equations import EquationResidual
from app.simulation.core.metadata import (
ParameterCondition,
ParameterDefinition,
ParameterOption,
ResultVariableDefinition,
)
from app.simulation.core.medium import GasMedium
from app.simulation.core.ports import PortDefinition
_FLOW_COEFFICIENT_OPTIONS = (
ParameterOption(1.0, "Cq"),
ParameterOption(2.0, "Cv"),
ParameterOption(3.0, "Kv"),
)
_FLOWSET_USES_CQ = (ParameterCondition("flowset", (1.0,)),)
_FLOWSET_USES_CV = (ParameterCondition("flowset", (2.0,)),)
_FLOWSET_USES_KV = (ParameterCondition("flowset", (3.0,)),)
_PNOR001_FLOW_COEFFICIENT_GROUP = ParameterGroupDisplaySpec(
id="flow_coefficient",
label="流量系数",
parameters=("cq", "area", "Cv", "Kv"),
order=10,
)
_PNVO001_FLOW_COEFFICIENT_GROUP = ParameterGroupDisplaySpec(
id="flow_coefficient",
label="流量系数",
parameters=("cq", "area0", "Cv", "Kv"),
order=10,
)
class AmesimPnor001(AlgebraicComponent):
"""AMESim PNOR001 constant-flow-coefficient pneumatic orifice.
@@ -27,7 +55,7 @@ class AmesimPnor001(AlgebraicComponent):
"""
MODEL_TYPE = "amesim_pnor001"
MODEL_VERSION = "0.1.0"
MODEL_VERSION = "0.2.0"
PORTS = (
PortDefinition.pneumatic("port_1", nominal_role="bidirectional"),
PortDefinition.pneumatic("port_2", nominal_role="bidirectional"),
@@ -43,6 +71,7 @@ class AmesimPnor001(AlgebraicComponent):
minimum=1.0e-10,
maximum=1.0,
description="孔口实际质量流量相对于理想可压缩流量的无量纲修正系数。",
visible_when=_FLOWSET_USES_CQ,
),
ParameterDefinition(
"area",
@@ -53,6 +82,7 @@ class AmesimPnor001(AlgebraicComponent):
minimum=0.0,
maximum=1.0,
description="选择 Cq/面积方式时用于流量计算的有效孔口面积。",
visible_when=_FLOWSET_USES_CQ,
),
ParameterDefinition(
"Cv",
@@ -62,6 +92,7 @@ class AmesimPnor001(AlgebraicComponent):
unit="",
minimum=0.0,
description="选择 Cv 方式时使用的英制流量系数。",
visible_when=_FLOWSET_USES_CV,
),
ParameterDefinition(
"Kv",
@@ -71,6 +102,7 @@ class AmesimPnor001(AlgebraicComponent):
unit="",
minimum=0.0,
description="选择 Kv 方式时使用的公制流量系数。",
visible_when=_FLOWSET_USES_KV,
),
ParameterDefinition(
"flowset",
@@ -80,6 +112,8 @@ class AmesimPnor001(AlgebraicComponent):
unit="",
minimum=1.0,
maximum=3.0,
editor="choice",
options=_FLOW_COEFFICIENT_OPTIONS,
description="流量参数方式:1 使用 Cq 和面积,2 使用 Cv,3 使用 Kv。",
),
)
@@ -111,6 +145,7 @@ class AmesimPnor001(AlgebraicComponent):
PortDisplaySpec("port_2", "right", order=20),
),
order=10,
parameter_groups=(_PNOR001_FLOW_COEFFICIENT_GROUP,),
)
def __init__(
@@ -320,7 +355,7 @@ class AmesimPnvo001FixedOpening(AlgebraicComponent):
"""
MODEL_TYPE = "amesim_pnvo001_fixed"
MODEL_VERSION = "0.1.0"
MODEL_VERSION = "0.2.0"
PORTS = (
PortDefinition.pneumatic("port_2", nominal_role="bidirectional"),
PortDefinition.pneumatic("port_3", nominal_role="bidirectional"),
@@ -336,6 +371,7 @@ class AmesimPnvo001FixedOpening(AlgebraicComponent):
minimum=1.0e-10,
maximum=1.0,
description="孔口实际质量流量相对于理想可压缩流量的无量纲修正系数。",
visible_when=_FLOWSET_USES_CQ,
),
ParameterDefinition(
"area0",
@@ -346,6 +382,7 @@ class AmesimPnvo001FixedOpening(AlgebraicComponent):
minimum=0.0,
maximum=1.0,
description="阀门完全开启时的最大有效孔口面积。",
visible_when=_FLOWSET_USES_CQ,
),
ParameterDefinition(
"Cv",
@@ -355,6 +392,7 @@ class AmesimPnvo001FixedOpening(AlgebraicComponent):
unit="",
minimum=0.0,
description="选择 Cv 方式时使用的最大英制流量系数。",
visible_when=_FLOWSET_USES_CV,
),
ParameterDefinition(
"Kv",
@@ -364,6 +402,7 @@ class AmesimPnvo001FixedOpening(AlgebraicComponent):
unit="",
minimum=0.0,
description="选择 Kv 方式时使用的最大公制流量系数。",
visible_when=_FLOWSET_USES_KV,
),
ParameterDefinition(
"flowset",
@@ -373,6 +412,8 @@ class AmesimPnvo001FixedOpening(AlgebraicComponent):
unit="",
minimum=1.0,
maximum=3.0,
editor="choice",
options=_FLOW_COEFFICIENT_OPTIONS,
description="流量参数方式:1 使用 Cq 和面积,2 使用 Cv,3 使用 Kv。",
),
ParameterDefinition(
@@ -422,6 +463,7 @@ class AmesimPnvo001FixedOpening(AlgebraicComponent):
PortDisplaySpec("port_3", "right", order=20),
),
order=30,
parameter_groups=(_PNVO001_FLOW_COEFFICIENT_GROUP,),
)
def __init__(
@@ -685,7 +727,7 @@ class AmesimPnvo001SignalOpening(AmesimPnvo001FixedOpening):
"""AMESim PNVO001 signal-controlled pneumatic orifice."""
MODEL_TYPE = "amesim_pnvo001"
MODEL_VERSION = "0.1.0"
MODEL_VERSION = "0.2.0"
PORTS = (
PortDefinition.signal("res", nominal_role="input"),
PortDefinition.pneumatic("port_2", nominal_role="bidirectional"),
@@ -693,12 +735,70 @@ class AmesimPnvo001SignalOpening(AmesimPnvo001FixedOpening):
)
PARAMETERS = (
AMESIM_GAS_INDEX_PARAMETER,
ParameterDefinition("cq", 0.72, label="流量系数 Cq", quantity="dimensionless", unit="", minimum=1.0e-10, maximum=1.0),
ParameterDefinition("area0", 5.0e-6, label="最大孔口面积", quantity="area", unit="m2", minimum=0.0, maximum=1.0),
ParameterDefinition("Cv", 0.5, label="最大流量系数 Cv", quantity="dimensionless", unit="", minimum=0.0),
ParameterDefinition("Kv", 0.4, label="最大流量系数 Kv", quantity="dimensionless", unit="", minimum=0.0),
ParameterDefinition("flowset", 1.0, label="流量系数设置", quantity="dimensionless", unit="", minimum=1.0, maximum=3.0),
ParameterDefinition("opening0", 1.0, label="初始开度", quantity="dimensionless", unit="", minimum=0.0, maximum=1.0),
ParameterDefinition(
"cq",
0.72,
label="流量系数 Cq",
quantity="dimensionless",
unit="",
minimum=1.0e-10,
maximum=1.0,
description="孔口实际质量流量相对于理想可压缩流量的无量纲修正系数。",
visible_when=_FLOWSET_USES_CQ,
),
ParameterDefinition(
"area0",
5.0e-6,
label="最大孔口面积",
quantity="area",
unit="m2",
minimum=0.0,
maximum=1.0,
description="阀门完全开启时的最大有效孔口面积。",
visible_when=_FLOWSET_USES_CQ,
),
ParameterDefinition(
"Cv",
0.5,
label="最大流量系数 Cv",
quantity="dimensionless",
unit="",
minimum=0.0,
description="选择 Cv 方式时使用的最大英制流量系数。",
visible_when=_FLOWSET_USES_CV,
),
ParameterDefinition(
"Kv",
0.4,
label="最大流量系数 Kv",
quantity="dimensionless",
unit="",
minimum=0.0,
description="选择 Kv 方式时使用的最大公制流量系数。",
visible_when=_FLOWSET_USES_KV,
),
ParameterDefinition(
"flowset",
1.0,
label="流量系数设置",
quantity="dimensionless",
unit="",
minimum=1.0,
maximum=3.0,
editor="choice",
options=_FLOW_COEFFICIENT_OPTIONS,
description="流量参数方式:1 使用 Cq 和面积,2 使用 Cv,3 使用 Kv。",
),
ParameterDefinition(
"opening0",
1.0,
label="初始开度",
quantity="dimensionless",
unit="",
minimum=0.0,
maximum=1.0,
description="信号尚未传播时使用的归一化初始开度;0 表示关闭,1 表示完全开启。",
),
)
RESULT_VARIABLES = AmesimPnvo001FixedOpening.RESULT_VARIABLES
DISPLAY = ComponentDisplaySpec(
@@ -712,6 +812,7 @@ class AmesimPnvo001SignalOpening(AmesimPnvo001FixedOpening):
PortDisplaySpec("port_3", "right", order=20),
),
order=35,
parameter_groups=(_PNVO001_FLOW_COEFFICIENT_GROUP,),
)
def __init__(