使用 Modelica.Media 的模型上的非线性方程组
Non-Linear Set of Equations on Model using Modelica.Media
我正在尝试使用 Modelica.Media 包对自然对流情况进行建模,并且我已经设置了一个简单的 6x6 固定体积区域网格(代码已附),它实现了质量和能量守恒。这些区域连接到无流动边界条件模型并通过流动模型进行通信。
但是在仿真的时候,我在所有的步骤中得到了一组非线性方程,涉及到每个区域的状态p,h,Xi的计算(附图)。
你知道我可以设置它来避免这种情况吗?也许一组不同的初始条件?非常感谢任何帮助!
model Zone
replaceable package Medium = Modelica.Media.Interfaces.PartialMedium annotation(choicesAllMatching = true);
Medium.BaseProperties medium(p(start=101325, fixed=false),
T(start=293.15, fixed=false));
Test.Port portT(redeclare package Medium = Medium);
Test.Port portB(redeclare package Medium = Medium);
Test.Port portL(redeclare package Medium = Medium);
Test.Port portR(redeclare package Medium = Medium);
parameter Medium.AbsolutePressure P_ambient = 101325;
Medium.Temperature T_ambient = Units.Conversions.from_degC(20);
Medium.MassFraction X_ambient[Medium.nX] = Medium.X_default;
...
initial equation
medium.p = P_ambient;
medium.T = T_ambient;
medium.Xi = X_ambient[1:Medium.nXi];
equation
...
m = V * medium.d;
U = m * medium.u;
mXi = m * medium.Xi;
der(m) = portL.mf + portR.mf + portT.mf + portB.mf;
der(U) = portL.hf + portR.hf + portT.hf + portB.hf + portL.q + portR.q + portT.q + portB.q;
der(mXi) = portL.mXif + portR.mXif + portT.mXif + portB.mXif;
关于流量模型,我使用的是
portI.mf = mf;
portI.hf = semiLinear(portI.mf, portI.h, portJ.h);
portI.mXif = semiLinear(portI.mf, portI.Xi, portJ.Xi);
portI.q = q;
portI.mf + portJ.mf = 0;
portI.hf + portJ.hf = 0;
portI.q + portJ.q = 0;
portI.mXif + portJ.mXif = zeros(Medium.nXi);
连接器
Medium.Temperature T;
flow Units.HeatFlowRate q;
Medium.AbsolutePressure p;
flow Medium.MassFlowRate mf;
Medium.SpecificEnthalpy h;
flow Medium.EnthalpyFlowRate hf;
Medium.MassFraction Xi[Medium.nXi];
flow Medium.MassFlowRate mXif[Medium.nXi];
Non Linear Warning Image
我刚发现问题,我的方程组不完整,初始化一点帮助都没有。
我正在尝试使用 Modelica.Media 包对自然对流情况进行建模,并且我已经设置了一个简单的 6x6 固定体积区域网格(代码已附),它实现了质量和能量守恒。这些区域连接到无流动边界条件模型并通过流动模型进行通信。
但是在仿真的时候,我在所有的步骤中得到了一组非线性方程,涉及到每个区域的状态p,h,Xi的计算(附图)。
你知道我可以设置它来避免这种情况吗?也许一组不同的初始条件?非常感谢任何帮助!
model Zone
replaceable package Medium = Modelica.Media.Interfaces.PartialMedium annotation(choicesAllMatching = true);
Medium.BaseProperties medium(p(start=101325, fixed=false),
T(start=293.15, fixed=false));
Test.Port portT(redeclare package Medium = Medium);
Test.Port portB(redeclare package Medium = Medium);
Test.Port portL(redeclare package Medium = Medium);
Test.Port portR(redeclare package Medium = Medium);
parameter Medium.AbsolutePressure P_ambient = 101325;
Medium.Temperature T_ambient = Units.Conversions.from_degC(20);
Medium.MassFraction X_ambient[Medium.nX] = Medium.X_default;
...
initial equation
medium.p = P_ambient;
medium.T = T_ambient;
medium.Xi = X_ambient[1:Medium.nXi];
equation
...
m = V * medium.d;
U = m * medium.u;
mXi = m * medium.Xi;
der(m) = portL.mf + portR.mf + portT.mf + portB.mf;
der(U) = portL.hf + portR.hf + portT.hf + portB.hf + portL.q + portR.q + portT.q + portB.q;
der(mXi) = portL.mXif + portR.mXif + portT.mXif + portB.mXif;
关于流量模型,我使用的是
portI.mf = mf;
portI.hf = semiLinear(portI.mf, portI.h, portJ.h);
portI.mXif = semiLinear(portI.mf, portI.Xi, portJ.Xi);
portI.q = q;
portI.mf + portJ.mf = 0;
portI.hf + portJ.hf = 0;
portI.q + portJ.q = 0;
portI.mXif + portJ.mXif = zeros(Medium.nXi);
连接器
Medium.Temperature T;
flow Units.HeatFlowRate q;
Medium.AbsolutePressure p;
flow Medium.MassFlowRate mf;
Medium.SpecificEnthalpy h;
flow Medium.EnthalpyFlowRate hf;
Medium.MassFraction Xi[Medium.nXi];
flow Medium.MassFlowRate mXif[Medium.nXi];
Non Linear Warning Image
我刚发现问题,我的方程组不完整,初始化一点帮助都没有。