You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Modelica流概念时如何关闭介质回流可能性?

在Modelica流模型中添加回流关闭开关的实现方案

MSL Fluid/Media库中回流开关的位置与实现

在Modelica标准库(MSL)的Fluid库中,回流控制的实现方式如下:

  • 全局参数:在Modelica.Fluid.Constants中定义了allowReverseFlow这类布尔参数,用于全局控制是否允许回流
  • 组件局部参数:管道、阀门等流体组件中会添加同名局部参数,优先级高于全局设置,可单独控制单个组件的回流行为
  • 核心逻辑:关闭回流时,组件会简化流变量方程,强制固定流量方向,避免双向流的方程耦合,从而减少仿真计算量

修改DEMO_v42库添加回流关闭开关

通过全局参数+组件适配的方式,可在你的DEMO库中实现回流关闭功能,同时保留inStream()和actualStream()的使用。修改后的完整代码如下:

package DEMO_v42

//  ---------------------------------------------------------------------------------------------
//     Interfaces  
//  ---------------------------------------------------------------------------------------------

    import Modelica.Blocks.Interfaces.RealInput;
    import Modelica.Blocks.Interfaces.RealOutput;

//  ---------------------------------------------------------------------------------------------
//     全局配置参数:控制是否允许回流
//  ---------------------------------------------------------------------------------------------
    parameter Boolean allowReverseFlow = true "设置为false关闭回流,提升仿真速度";

//  ---------------------------------------------------------------------------------------------
//     Equipment
//  ---------------------------------------------------------------------------------------------

    package EquipmentLib

        connector LiquidCon
            Real P                                             "Pressure";
            flow Real F                                        "Flow rate";
            stream Real c_outflow                              "Substance conc";
        end LiquidCon;

        model PipeType
            LiquidCon inlet, outlet;
            parameter Real area = 1;
            // 可选:组件级参数,覆盖全局设置
            parameter Boolean allowReverseFlow = DEMO_v42.allowReverseFlow "组件级回流控制开关";
        equation 
            inlet.F = -outlet.F;
            outlet.F = -area^2*(inlet.P - outlet.P);           // Linearized Bernoulli equation
            
            // 根据回流开关处理浓度流方程
            if allowReverseFlow then
                outlet.c_outflow = inStream(inlet.c_outflow);
                inlet.c_outflow=inStream(outlet.c_outflow);
            else
                // 关闭回流时,只允许正向流动(inlet到outlet),简化方程
                outlet.c_outflow = inStream(inlet.c_outflow);
                // 添加断言确保流量方向正确
                assert(outlet.F >= 0, "关闭回流时不允许反向流动");
            end if;
        end PipeType;

        model FeedtankType
            LiquidCon outlet;
            parameter Real P = 0.1                             "Pressure";
            parameter Real V_0 = 100                           "Initial feed volume";
            parameter Real c_in = 1.0                          "Feedtank conc";
            Real V(start=V_0, fixed=true)                      "Feed volume";
        equation 
            outlet.c_outflow = c_in;
            outlet.P = P;
            der(V) = outlet.F;
        end FeedtankType;

        model HarvesttankType
            LiquidCon inlet;
            parameter Real P = 0.0                             "Pressure";
            parameter Real V_0 = 1.0                           "Initial harvest liquid volume";
            parameter Real m_0 = 0.0                           "Initial substance mass";
            Real V(start=V_0, fixed=true)                      "Harvest liquid volume";
            Real m(start=m_0, fixed=true)                      "Substance mass";
            Real c                                             "Substance conc";
            Real inletC=actualStream(inlet.c_outflow);
            // 可选:组件级回流开关
            parameter Boolean allowReverseFlow = DEMO_v42.allowReverseFlow "组件级回流控制开关";
        equation 
            inlet.P = P;
            inlet.c_outflow=c;
            der(V) = inlet.F;
            
            // 关闭回流时,确保流入方向正确,简化物质平衡方程
            if allowReverseFlow then
                der(m) = actualStream(inlet.c_outflow)*inlet.F;
            else
                assert(inlet.F >= 0, "关闭回流时不允许液体流出储罐");
                der(m) = inletC * inlet.F;
            end if;
            
            c = m/V;
        end HarvesttankType;
    end EquipmentLib;

//  ---------------------------------------------------------------------------------------------
//     Example of system 
//  ---------------------------------------------------------------------------------------------

    model Test
        EquipmentLib.FeedtankType feedtank;
        EquipmentLib.HarvesttankType harvesttank;
        EquipmentLib.PipeType pipe;
    equation 
        connect(feedtank.outlet, pipe.inlet);
        connect(pipe.outlet, harvesttank.inlet);
    end Test;

end DEMO_v42;

修改说明:

  1. 全局参数添加:在DEMO_v42包根目录新增allowReverseFlow参数,作为全局回流控制开关
  2. PipeType适配:
    • 新增组件级参数,可选择覆盖全局设置
    • 关闭回流时,仅保留正向流的浓度传递方程,添加断言确保流量方向合规,消除反向流的方程耦合
  3. HarvesttankType适配:
    • 同步添加组件级开关
    • 关闭回流时,通过断言限制流入方向,简化物质平衡计算逻辑
  4. 流函数保留:inStream()和actualStream()依然在正向流场景中正常使用,兼容原库的设计逻辑

内容的提问来源于stack exchange,提问作者janpeter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:35:20