Dymola解决媒体模型的固定方程系统

时间:2014-10-08 09:17:37

标签: modelica dymola

我正在Dymola建造一个类似于Helmholtz-Media的媒体库,但是Ammonia + Water是一种混合物。 你得到了许多不明确可解的方程式。

由于Modelica中的Media和Fluid库的结构,我需要能够从p,h和x获得我的热力学状态。状态向量由d,T和x组成。

这是一个如何获取state-vector的简单示例:

model getState_phX
  parameter AbsolutePressure p = 500000 "pressure";
  parameter SpecificEnthalpy h = 2500000 "enthalpy";
  parameter SI.MassFraction x = 0.7 "mole fraction of amonia";
  parameter Real[2] start = getStart_Td_phx(p,h,xL);
  output ThermodynamicState state(d(start=start[2]),T(start=start[1]),X={(1 - xL),xL});
  DerivateFull f = Derivates(state);   
equation 
  p = (1 + f.delta*f.phirdelta)*R*state.T*state.d/molarMass(state);
  h = state.T*R*(1 + f.delta*f.phirdelta + f.tau*f.phirtau + f.tau0*f.phi0tau0)/molarMass(state);
end getState_phX;

请不要介意方程的各个部分。它们由依赖于状态向量的许多部分(总和和日志)组成。 这是由Dymola的求解器解决的,具有良好的起始值。 但我并不需要Dassl的所有“时间依赖”解决能力。

在没有求解器的情况下,是否有用于解决此类固定方程系统的库? 是否可以使用这些函数从这个模型中创建一个函数?

我知道我可以手工编写一个简单的求解器但是对于媒体模型(VLE)的其他部分我也需要高度可靠的固定求解器(但有4个非线性独立方程)

如果我没有清楚地解释自己,请告诉我。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

流体属性库的基础是前向部分,即实际的亥姆霍兹能量状态方程(EoS)。它需要d,T,X作为输入。这部分或多或少地要实施 如果要使用p,h,X指定热力学状态,或者如果要在多个阶段之间找到平衡点,通常会建立一个重复函数系统,并尝试使用迭代函数找到方程组的根程序。 Span (2000)写道

  

"制定可靠的迭代程序[用于根发现]   在设置程序包时,这通常是最关键的问题   对状态方程的评估"。

重新使用现有的求解器有优点和缺点,它们通常经过很好的测试,编写它们需要花费很多精力,但如果你编写自己的求解器,你就可以更好地控制它的作用。据我所知,达斯尔有各种各样的力量,但解决这种方程并不是它最初的目标。 Olson, Tummescheit and Elmqvist (2005)尝试使用Dymola解算器查找VLE,请参阅链接pdf的第3.2节。听起来很有效,但不太可靠 MSL已经包含一个基于Brent算法的非线性求解器,它仅使用一个未知算法,参见Modelica.Math.Nolinear.solveOneNonlinearEquation。如果需要,您可以添加其他通用解算器。

在编写自己的求解器之前,您应该联系Modelica.Media接口的开发人员(将在MSL的未来版本中进行扩展,以包含多组分,多阶段混合)并考虑重新使用现有的流体属性库,如RefProp,CoolProp,FluidProp或MultiFlash,仅举几例。