2

我正在 Dymola 中构建一个类似于 Helmholtz-Media 的媒体库,但用于 Ammonia+Water,一种混合​​物。你会得到很多无法明确求解的方程。

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

这是一个如何获取状态向量的简单示例:

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 个非线性独立方程)

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

4

1 回答 1

1

您的流体属性库的基础是前向部分,即实际的亥姆霍兹能量状态方程 (EoS)。它d,T,X作为输入。这部分的实施或多或少是直截了当的。
如果您想使用指定热力学状态p,h,X或如果您想找到多相之间的平衡,您通常会建立一个残差函数系统并尝试使用一些迭代程序来找到您的方程组的根。跨度(2000)写道

“在建立用于评估状态方程的程序包时,[用于求根]的可靠迭代程序的制定通常是最关键的问题”。

重用现有的求解器有利有弊,它们通常经过很好的测试,编写它们需要付出很多努力,但是如果您编写自己的求解器,您可以更好地控制它的作用。据我所知,Dassl 有各种优势,但求解那种方程并不是它最初的目标。 Olson、Tummescheit 和 Elmqvist (2005)尝试使用 Dymola 求解器来查找 VLE,请参阅链接 pdf 的第 3.2 节。听起来它有效,但不是很可靠。
MSL 已经包含一个基于 Brent 算法的非线性求解器,它仅适用于一个未知数,请参阅Modelica.Math.Nolinear.solveOneNonlinearEquation. 如果需要,您可以添加其他通用求解器。

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

于 2014-10-08T11:28:17.800 回答