Modelica 标准库组件 AbruptAdaptor
Modelica Standard Library component AbruptAdaptor
测试:
MSL 版本:
- 3.2.1,2013-08-14,版本 2 (2013-08-14 08:44:41Z)
- 3.2.1,2013-08-14,内部版本 4 (2015-09-30 09:15:00Z)
下面是一个包含 4 个组件的模型:
- 质量流源(M_bound)
- AbruptAdapter(突然适配器)
- 动态管道 (pipeSmall)
- 压力源(P_bound)
模型的两个连接案例也包含在equation
部分:
案例 #1:M_bound -> 突然适配器 -> pipeSmall -> P_bound
案例 #2:M_bound -> pipeSmall -> abruptAdaptor -> P_bound
总结:案例#1 模拟良好,但案例#2 失败。生成的错误如下所示:
The following error was detected at time: 0
Model error - division by zero: (data.zeta1) / ((if data.zeta1_at_a then rho_a_des*A_a^2 else rho_b_des*A_b^2)) = (0.402964) / (0)
The stack of functions is:
Modelica.Fluid.Fittings.BaseClasses.QuadraticTurbulent.pressureLoss_m_flow_totalPressure
Modelica.Fluid.Fittings.BaseClasses.QuadraticTurbulent.pressureLoss_m_flow_totalPressure(
-pipeBig.port_b.m_flow,
abruptAdaptor.state_a.d,
abruptAdaptor.state_b_des.d,
abruptAdaptor.state_b.d,
abruptAdaptor.state_a_nondes.d,
abruptAdaptor.data,
abruptAdaptor.m_flow_small)
First evaluation failed for non-linear solver.
问题:为什么案例 #2 失败以及如何解决它的建议?任何见解都会很棒。它甚至可能是 AbruptAdaptor
组件中的错误。
型号代码
model AbruptAdaptor_1Pipe
replaceable package Medium = Modelica.Media.Water.StandardWater;
inner Modelica.Fluid.System system;
Modelica.Fluid.Sources.Boundary_pT P_bound(
redeclare package Medium = Medium,
nPorts=1,
p=system.p_ambient,
T=M_bound.T);
Modelica.Fluid.Sources.MassFlowSource_T M_bound(
redeclare package Medium = Medium,
m_flow=1,
T=300,
nPorts=1);
Modelica.Fluid.Fittings.AbruptAdaptor abruptAdaptor(
redeclare package Medium = Medium,
diameter_a=1,
diameter_b=0.5,
m_flow_nominal=M_bound.m_flow,
m_flow_start=M_bound.m_flow);
Modelica.Fluid.Pipes.DynamicPipe pipeSmall(
redeclare package Medium = Medium,
T_start=M_bound.T,
m_flow_start=M_bound.m_flow,
length=1,
diameter=0.5,
modelStructure=Modelica.Fluid.Types.ModelStructure.av_b); // switch to av_vb with case #2
equation
// Case #1
connect(M_bound.ports[1],abruptAdaptor.port_a);
connect(abruptAdaptor.port_b,pipeSmall.port_a);
connect(pipeSmall.port_b,P_bound.ports[1]);
// Case #2
//connect(M_bound.ports[1],pipeSmall.port_b);
//connect(abruptAdaptor.port_b,pipeSmall.port_a);
//connect(abruptAdaptor.port_a,P_bound.ports[1]);
annotation (uses(Modelica(version="3.2.1")));
end AbruptAdaptor_1Pipe;
您的交错网格很好,您在必须设置的位置设置了卷。
别担心,这不是你的错,是一个调试,我尝试使用它几次,它总是以一种方式失败(我不知道你的适配器的位置,但这并不重要).您始终可以在定义关系 dp(Areas_rate) 的地方使用孔口,在这两种情况下避免反向流动,因此在孔口前后连接两个体积(就像两个并联的阀门)。
应该可以。
测试:
MSL 版本:
- 3.2.1,2013-08-14,版本 2 (2013-08-14 08:44:41Z)
- 3.2.1,2013-08-14,内部版本 4 (2015-09-30 09:15:00Z)
下面是一个包含 4 个组件的模型:
- 质量流源(M_bound)
- AbruptAdapter(突然适配器)
- 动态管道 (pipeSmall)
- 压力源(P_bound)
模型的两个连接案例也包含在equation
部分:
案例 #1:M_bound -> 突然适配器 -> pipeSmall -> P_bound
案例 #2:M_bound -> pipeSmall -> abruptAdaptor -> P_bound
总结:案例#1 模拟良好,但案例#2 失败。生成的错误如下所示:
The following error was detected at time: 0
Model error - division by zero: (data.zeta1) / ((if data.zeta1_at_a then rho_a_des*A_a^2 else rho_b_des*A_b^2)) = (0.402964) / (0)
The stack of functions is:
Modelica.Fluid.Fittings.BaseClasses.QuadraticTurbulent.pressureLoss_m_flow_totalPressure
Modelica.Fluid.Fittings.BaseClasses.QuadraticTurbulent.pressureLoss_m_flow_totalPressure(
-pipeBig.port_b.m_flow,
abruptAdaptor.state_a.d,
abruptAdaptor.state_b_des.d,
abruptAdaptor.state_b.d,
abruptAdaptor.state_a_nondes.d,
abruptAdaptor.data,
abruptAdaptor.m_flow_small)
First evaluation failed for non-linear solver.
问题:为什么案例 #2 失败以及如何解决它的建议?任何见解都会很棒。它甚至可能是 AbruptAdaptor
组件中的错误。
型号代码
model AbruptAdaptor_1Pipe
replaceable package Medium = Modelica.Media.Water.StandardWater;
inner Modelica.Fluid.System system;
Modelica.Fluid.Sources.Boundary_pT P_bound(
redeclare package Medium = Medium,
nPorts=1,
p=system.p_ambient,
T=M_bound.T);
Modelica.Fluid.Sources.MassFlowSource_T M_bound(
redeclare package Medium = Medium,
m_flow=1,
T=300,
nPorts=1);
Modelica.Fluid.Fittings.AbruptAdaptor abruptAdaptor(
redeclare package Medium = Medium,
diameter_a=1,
diameter_b=0.5,
m_flow_nominal=M_bound.m_flow,
m_flow_start=M_bound.m_flow);
Modelica.Fluid.Pipes.DynamicPipe pipeSmall(
redeclare package Medium = Medium,
T_start=M_bound.T,
m_flow_start=M_bound.m_flow,
length=1,
diameter=0.5,
modelStructure=Modelica.Fluid.Types.ModelStructure.av_b); // switch to av_vb with case #2
equation
// Case #1
connect(M_bound.ports[1],abruptAdaptor.port_a);
connect(abruptAdaptor.port_b,pipeSmall.port_a);
connect(pipeSmall.port_b,P_bound.ports[1]);
// Case #2
//connect(M_bound.ports[1],pipeSmall.port_b);
//connect(abruptAdaptor.port_b,pipeSmall.port_a);
//connect(abruptAdaptor.port_a,P_bound.ports[1]);
annotation (uses(Modelica(version="3.2.1")));
end AbruptAdaptor_1Pipe;
您的交错网格很好,您在必须设置的位置设置了卷。 别担心,这不是你的错,是一个调试,我尝试使用它几次,它总是以一种方式失败(我不知道你的适配器的位置,但这并不重要).您始终可以在定义关系 dp(Areas_rate) 的地方使用孔口,在这两种情况下避免反向流动,因此在孔口前后连接两个体积(就像两个并联的阀门)。 应该可以。