完善AMESim可配置参数交互
补充气动孔口、动态管路、UD00 与弹性接触组件的离散选项、条件显示和折叠分组。 增加目录协议、非法选项和前端参数表交互回归测试,不修改现有求解公式。
This commit is contained in:
1 parent
be54070855
commit
df1d676131
12 files changed
+1262
-69
No files matched your search
@@ -27,6 +27,8 @@ _MECMAS21_ELASTIC_STOP = ParameterCondition("stoptype", (2.0,))
|
||||
_MECMAS21_RESTITUTION_STOP = ParameterCondition("stoptype", (3.0,))
|
||||
_MECMAS21_ADVANCED_FRICTION = ParameterCondition("frictionType", (2.0,))
|
||||
_MECMAS21_STRIBECK_ENABLED = ParameterCondition("strib", (2.0,))
|
||||
_LSTP00A_NUMERICAL_STIFFNESS = ParameterCondition("stiffmode", (1.0,))
|
||||
_LSTP00A_GEOMETRICAL_STIFFNESS = ParameterCondition("stiffmode", (2.0,))
|
||||
|
||||
|
||||
class AmesimF000(AlgebraicComponent):
|
||||
@@ -713,22 +715,126 @@ class AmesimLstp00a(AlgebraicComponent):
|
||||
"""AMESim LSTP00A first public elastic contact component."""
|
||||
|
||||
MODEL_TYPE = "amesim_lstp00a"
|
||||
MODEL_VERSION = "0.1.0"
|
||||
MODEL_VERSION = "0.2.0"
|
||||
PORTS = (
|
||||
PortDefinition.mechanical_translational("port_1"),
|
||||
PortDefinition.mechanical_translational("port_2"),
|
||||
)
|
||||
PARAMETERS = (
|
||||
ParameterDefinition("na", 10.0, label="有效圈数", quantity="dimensionless", unit="", minimum=0.0, minimum_exclusive=True),
|
||||
ParameterDefinition("gap0", 0.0, label="初始间隙", quantity="length", unit="m"),
|
||||
ParameterDefinition("kcont", 1.0e6, label="接触刚度", quantity="translational_stiffness", unit="N/m", minimum=0.0),
|
||||
ParameterDefinition("G", 8.57e10, label="剪切模量", quantity="pressure", unit="Pa", minimum=0.0),
|
||||
ParameterDefinition("sdiam", 0.02, label="弹簧直径", quantity="length", unit="m", minimum=0.0),
|
||||
ParameterDefinition("wdiam", 0.002, label="线径", quantity="length", unit="m", minimum=0.0),
|
||||
ParameterDefinition("rcont", 0.0, label="接触阻尼", quantity="translational_damping", unit="N/(m/s)", minimum=0.0),
|
||||
ParameterDefinition("Pdis", 1.0e-7, label="满阻尼穿透", quantity="length", unit="m", minimum=0.0),
|
||||
ParameterDefinition("stiffmode", 1.0, label="刚度模式", quantity="dimensionless", unit="", minimum=0.0),
|
||||
ParameterDefinition("discContactOption", 1.0, label="接触选项", quantity="dimensionless", unit="", minimum=0.0),
|
||||
ParameterDefinition(
|
||||
"na",
|
||||
10.0,
|
||||
label="有效圈数",
|
||||
quantity="dimensionless",
|
||||
unit="",
|
||||
minimum=0.0,
|
||||
minimum_exclusive=True,
|
||||
description="几何刚度模式下使用的弹簧有效圈数。",
|
||||
visible_when=(_LSTP00A_GEOMETRICAL_STIFFNESS,),
|
||||
),
|
||||
ParameterDefinition(
|
||||
"gap0",
|
||||
0.0,
|
||||
label="初始间隙",
|
||||
quantity="length",
|
||||
unit="m",
|
||||
description="两个机械端口开始产生接触力前的初始间隙。",
|
||||
),
|
||||
ParameterDefinition(
|
||||
"kcont",
|
||||
1.0e6,
|
||||
label="接触刚度",
|
||||
quantity="translational_stiffness",
|
||||
unit="N/m",
|
||||
minimum=0.0,
|
||||
description="数值刚度模式下直接指定的接触刚度。",
|
||||
visible_when=(_LSTP00A_NUMERICAL_STIFFNESS,),
|
||||
),
|
||||
ParameterDefinition(
|
||||
"G",
|
||||
8.57e10,
|
||||
label="剪切模量",
|
||||
quantity="pressure",
|
||||
unit="Pa",
|
||||
minimum=0.0,
|
||||
description="几何刚度模式下的材料剪切模量。",
|
||||
visible_when=(_LSTP00A_GEOMETRICAL_STIFFNESS,),
|
||||
),
|
||||
ParameterDefinition(
|
||||
"sdiam",
|
||||
0.02,
|
||||
label="弹簧直径",
|
||||
quantity="length",
|
||||
unit="m",
|
||||
minimum=0.0,
|
||||
description="几何刚度模式下的弹簧平均直径。",
|
||||
visible_when=(_LSTP00A_GEOMETRICAL_STIFFNESS,),
|
||||
),
|
||||
ParameterDefinition(
|
||||
"wdiam",
|
||||
0.002,
|
||||
label="线径",
|
||||
quantity="length",
|
||||
unit="m",
|
||||
minimum=0.0,
|
||||
description="几何刚度模式下的弹簧线径。",
|
||||
visible_when=(_LSTP00A_GEOMETRICAL_STIFFNESS,),
|
||||
),
|
||||
ParameterDefinition(
|
||||
"rcont",
|
||||
0.0,
|
||||
label="接触阻尼",
|
||||
quantity="translational_damping",
|
||||
unit="N/(m/s)",
|
||||
minimum=0.0,
|
||||
description="接触穿透过程中使用的最大阻尼系数。",
|
||||
),
|
||||
ParameterDefinition(
|
||||
"Pdis",
|
||||
1.0e-7,
|
||||
label="满阻尼穿透",
|
||||
quantity="length",
|
||||
unit="m",
|
||||
minimum=0.0,
|
||||
description="接触阻尼由零增至全值所需的穿透量。",
|
||||
),
|
||||
ParameterDefinition(
|
||||
"stiffmode",
|
||||
1.0,
|
||||
label="刚度模式",
|
||||
quantity="dimensionless",
|
||||
unit="",
|
||||
minimum=1.0,
|
||||
maximum=2.0,
|
||||
editor="choice",
|
||||
options=(
|
||||
ParameterOption(1.0, "数值刚度"),
|
||||
ParameterOption(2.0, "几何参数"),
|
||||
),
|
||||
description=(
|
||||
"AMESim 原始编码:1 直接使用接触刚度,2 使用弹簧几何参数。"
|
||||
"当前公开求解器尚未实现由几何参数换算刚度,几何模式仍沿用"
|
||||
"已保存的接触刚度值。"
|
||||
),
|
||||
),
|
||||
ParameterDefinition(
|
||||
"discContactOption",
|
||||
1.0,
|
||||
label="允许负接触力",
|
||||
quantity="dimensionless",
|
||||
unit="",
|
||||
minimum=1.0,
|
||||
maximum=2.0,
|
||||
editor="choice",
|
||||
options=(
|
||||
ParameterOption(1.0, "允许负接触力"),
|
||||
ParameterOption(2.0, "不允许负接触力"),
|
||||
),
|
||||
description=(
|
||||
"AMESim 原始编码:1 保留阻尼项可能产生的负接触力,"
|
||||
"2 将接触力限制为非负。"
|
||||
),
|
||||
),
|
||||
)
|
||||
RESULT_VARIABLES = (
|
||||
ResultVariableDefinition("gap", "间隙", "length", "m", "derived", 10),
|
||||
@@ -745,6 +851,20 @@ class AmesimLstp00a(AlgebraicComponent):
|
||||
PortDisplaySpec("port_2", "right", order=20),
|
||||
),
|
||||
order=40,
|
||||
parameter_groups=(
|
||||
ParameterGroupDisplaySpec(
|
||||
id="stiffness",
|
||||
label="刚度",
|
||||
parameters=("kcont", "G", "sdiam", "wdiam", "na"),
|
||||
order=10,
|
||||
),
|
||||
ParameterGroupDisplaySpec(
|
||||
id="contact",
|
||||
label="接触",
|
||||
parameters=("gap0", "rcont", "Pdis"),
|
||||
order=20,
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
def __init__(self, name: str, medium: IdealGasMedium, **parameters: float) -> None:
|
||||
@@ -773,9 +893,14 @@ class AmesimLstp00a(AlgebraicComponent):
|
||||
medium: IdealGasMedium,
|
||||
parameters: Mapping[str, float],
|
||||
) -> "AmesimLstp00a":
|
||||
definitions = {definition.name: definition for definition in cls.PARAMETERS}
|
||||
for integer_name in ("stiffmode", "discContactOption"):
|
||||
if not float(parameters[integer_name]).is_integer():
|
||||
value = float(parameters[integer_name])
|
||||
if not value.is_integer():
|
||||
raise ValueError(f"LSTP00A {integer_name} must be an integer.")
|
||||
message = definitions[integer_name].validation_message(value)
|
||||
if message is not None:
|
||||
raise ValueError(f"LSTP00A {integer_name} {message}.")
|
||||
return cls(name=name, medium=medium, **dict(parameters))
|
||||
|
||||
@property
|
||||
|
||||
Reference in new issue
Block a user