【问题标题】:Dymola solving stationary equation systems for Media-ModelDymola 求解媒体模型的固定方程组
【发布时间】:2014-10-08 09:17:37
【问题描述】:

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

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

【问题讨论】:

    标签: modelica dymola


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这比原来的问题更好地解释了这个问题。我已经对媒体模型非常投入,可能问得太晚了。使用 Dymola 求解器,我能够可靠地计算几乎完整的热力学场中的 VLE。在咨询开发人员时,我可能会继续使用这种方法。最初的问题:modelica 中的方程组求根问题是否有通用求解器?仍然存在,但提供了足够的输入。
    • Modelica 作为一种语言不提供任何求解器。您可以使用 Modelica 对求解器进行编程,在 MSL 中实现了一个求解器(仅限一维)。应该可以连接用 C 或 Fortran 编写的包含此类求解器的现有库,例如 netlib 或 GNU Scientific 库。还有两个想法: 1:完整的热力学表面也将包括超临界部分。 2:你如何猜测起始值以及如何将它们传递给你的求解器?
    • 还有两个 cmets:直接使用亥姆霍兹能量 EoS 永远不会很快,因为它使用了许多繁重的术语。如果速度很重要,您还应该考虑多维查找表或样条。由于其数值行为,为水+氨的 Tillner-Roth EoS 实施迭代求解器尤其困难。出于这个原因,Eric Lemmon 正在开发一个新的 EoS,我想他会很高兴地告诉你细节。另外,您可以联系 DTU 的 Martin Ryhl Kærn,他也在 Modelica 中研究氨+水。
    • 1:我没有考虑临界轨迹喷射。该模型适用于吸收式热泵。重要的是用于冷却应用的压力为 5-30 bar 或低至 1-2 bar。我不确定 Tillner-Roth 模型是否最适合这项任务。 2:猜测值至关重要。我使用一个表格并且是线性插值的(来自原始出版物的值和更多发现的迭代)。感谢您的提醒和名称。我进行了文献搜索,但遗憾的是无法从 Modelica/EoS 场景中找到这些信息。
    • 现在我正在处理组件的基本实现。关于猜测值,我阅读了Mattsson2002 和文档。但是我遇到了问题,因为猜测值是parameters。组件从外部接收的值通过FluidPorts 传递。我不允许使用这些值来生成parameters。这是因为我假设的编译和求解器实现。也许有一个解决方法。
    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多