2016-03-29 39 views
3

測試用:Modelica標準模型庫組件AbruptAdaptor

MSL版本:

  • 3.2.1,2013年8月14日,建立2(2013年8月14日08:44:41Z)
  • 3.2.1,2013年8月14日,建立4(2015年9月30日09:15:00Z)

下面是與4個分量的模型:

  1. 質量流量源(M_bound)
  2. AbruptAdapter(abruptAdapter)
  3. 動態管道(pipeSmall)
  4. 壓力源(P_bound)

兩個模型的連接的情況也包含在equation部:

情況#1:M_bound - > abruptAdaptor - > 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; 
+0

兩條評論:您正在使用舊的MSL(版本2),當前版本4更接近語言規範。第二點評論:動態管道正在使用交錯的網格,交替的體積和流量元素。嘗試更改'Advanced'參數選項卡上的'modelStructure',方程組可能變得更容易解決。但是你的錯誤可能完全不相關...... – matth

+0

在情況#2中,通過組件的質量流方向相反。這是故意的還是你真的想要切換管道/適配器的順序? –

+0

使用Dymola,你可能不會在構建2和4之間看到太多差異。更嚴格/更接近語言規範主要有助於其他工具,如OpenModelica和JModelica(也可以添加這些標記)。不過,您可以考慮更新到目前最新版本的Dymola 2016 FD01。 – matth

回答

1

您的交錯網格是好的,你設置您不得不卷。 不要擔心,這不是你的錯,是一個調試,我試過多次使用它,它總是以某種方式失敗(我不知道你的適配器的位置,但它並不真的物)。您可以始終使用定義關係dp(Areas_rate)的孔,避免兩種情況下的反向流動,因此在孔的前後連接兩個體積(如並聯的兩個閥)。 這應該工作。

+0

感謝您獨立驗證我的觀察結果。我會接受這個答案。 –