Modelica标准库组件AbruptAdaptor

时间:2016-03-29 19:49:31

标签: modelica dymola openmodelica jmodelica

经过测试:

MSL版本:

  • 3.2.1,2013-08-14,build 2(2013-08-14 08:44:41Z)
  • 3.2.1,2013-08-14,build 4(2015-09-30 09:15:00Z)

以下是包含4个组件的模型:

  1. 质量流量源(M_bound)
  2. AbruptAdapter(abruptAdapter)
  3. 动态管道(pipeSmall)
  4. 压力源(P_bound)
  5. 模型的两个连接案例也包含在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;
    

1 个答案:

答案 0 :(得分:1)

你的交错网格很好,你设置了你必须的地方。 别担心,这不是你的错,是调试,我试过多次使用它,它总是以其中一种方式失败(我不知道你的适配器的位置,但它并不重要)。您可以随时使用定义关系dp(Areas_rate)的孔,避免两种情况下的反转流,因此在孔之前和之后连接两个体积(如两个并联的阀门)。 这应该有用。