Modelica 介质模型定常方程组的Dymola解法

Modelica 介质模型定常方程组的Dymola解法,modelica,dymola,Modelica,Dymola,我正在Dymola建立一个媒体库,类似于Helmholtz媒体,但用于氨水+水的混合物。 你会得到很多不可显式解的方程 由于Modelica中介质和流体库的结构,我需要能够从p、h和x中获得热力学状态。状态向量由d、T和x组成 这是一个如何获取状态向量的简单示例: model getState_phX parameter AbsolutePressure p = 500000 "pressure"; parameter SpecificEnthalpy h = 2500000 "enth

我正在Dymola建立一个媒体库,类似于Helmholtz媒体,但用于氨水+水的混合物。 你会得到很多不可显式解的方程

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


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

流体属性库的基础是一个前端部分,即实际的亥姆霍兹能量状态方程(EoS)。它将
d,T,X
作为输入。这一部分或多或少是很难实现的。
如果你想用p,h,X来指定热力学状态,或者你想找到多个相之间的平衡,你通常会建立一个重函数系统,并尝试用一些迭代程序来找到方程组的根。写

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

重复使用现有的解算器有其优点和缺点,它们通常经过很好的测试,编写它们需要很多努力,但是如果您编写自己的解算器,您可以更好地控制它的功能。据我所知,Dassl有各种各样的优势,但解决这类方程并不是它最初的目标。 尝试使用Dymola解算器查找VLE,请参见链接pdf的第3.2节。听起来很有效,但不太可靠。
MSL已经包含了一个基于Brent算法的非线性解算器,该算法只适用于一个未知对象,请参见。如果需要,可以添加其他通用解算器


在编写自己的求解器之前,您应该与 MODEICA .Media<代码>接口的开发人员联系(它将在MSL的未来版本中扩展以包括多组分、多相混合物),并考虑重新使用现有的流体属性库,如RefPrpP、CuroPROP、FLUIDPROP或多FLASH,仅举几个例子。

这比原来的问题更好地解释了这个问题。我已经对媒体模式进行了大量投资,可能问得太晚了。使用Dymola解算器,我能够可靠地计算几乎完整热力学场中的汽液平衡。在咨询开发人员时,我可能会继续使用这种方法。最初的问题是:modelica中方程组的寻根问题是否有通用的求解器?仍然存在,但提供了足够的输入。作为一种语言,Modelica不提供任何解算器。您可以使用Modelica编程一个解算器,一个解算器在MSL中实现(仅1D)。应该可以连接用C或Fortran编写的包含此类解算器的现有库,如netlib或GNU科学库。还有两个想法:1:完整的热力学表面也包括超级恒星部分。2:您如何猜测起始值以及如何将其传递给您的解算器?还有两条评论:直接使用亥姆霍兹能量状态方程将永远不会很快,因为它使用了大量的术语。如果速度很重要,你也应该考虑多维查找表,或者样条。由于Tiller-Roth EoS的数值特性,实现水+氨的迭代解算器尤其困难。出于这个原因,埃里克·莱蒙正在开发一种新的EoS,我想他会很高兴地告诉你细节。另外,你可以联系DTU的马丁雷尔克恩,他还在MODEICA上研究氨+水。1:我没有考虑损坏的临界射流。该模型适用于吸收式热泵。重要的是用于冷却应用的压力为5-30巴或低于1-2巴。我不确定Tillner Roth模型是否最适合这项任务。2:猜测值至关重要。我使用一个表格,并且是线性插值的(来自原始出版物和更多迭代出版物的值)。谢谢你的提醒和名字。我做了一个文献搜索,但不幸的是在Modelica/EoS场景中找不到这些信息。现在我正在研究组件的基本实现。重新阅读我阅读的猜测值和文档。但我遇到了问题,因为猜测值是参数。组件从外部接收的值通过
FluidPorts
传递。我不允许使用这些值生成
参数
。这是因为我假设的编译和解算器实现。也许有一个解决办法。