如何提高Dymola的收敛性能?

How to improve the convergence performance of Dymola?

最近我在使用Modelica进行流体建模,但是我遇到了很多非线性方程的发散问题,如下面的截图所示。

所以我正在考虑是否可以使用变量的 min/max/nominal 属性来提高模型的收敛性,尤其是当用户遇到非线性求解器失败时。根据 , min/max attributes won't help convergence, and based on the Modelica Specification 4.8.6,名义属性用于确定适当的公差或 epsilons,或者可用于缩放。
所以我的问题是:
如果我遇到这种由我的模型的非线性引起的发散问题,我该如何帮助编译器更好更快地收敛?
有人可能会建议用作状态变量的变量的起始值更好,但是当我处理大型模型时,我不确定如何找到我应该修改其起始值的特定状态变量。

在时间 = 0 时对雅各宾的基于特征值的分析提供了状态变量从最重要到最不重要的排名。这可能是一种启发式方法,用于检查最重要状态变量的起始变量的影响。

在问题发生前的一段时间进行类似的分析也可能会有帮助。

还有可能计算状态变量的动态参数敏感性(在问题发生之前)w.r.t。起始值,参见例如https://github.com/Mathemodica/DerXP 获取建议的方法。这会提示您哪些起始值会显着影响状态变量的值。

手册 1B 中的第 2.6.13 章“非线性系统的在线诊断”以及手册中的后续内容应该有所帮助。你可以例如列出主导错误的状态:通常这些状态是一个很好的提示,从哪里开始改进。

添加到 Imke Krueger 的回答中。 如果模型在 2917 秒后失败,一种可能性是解决方案在此之前发散,例如,焓值越来越低,直到模型离开有效区域。

假设它发生得相当缓慢,最好绘制该组件中的状态和其他变量。此外,如 Imke Krueger 的回答中所示,主导错误的状态并查看它们是否有分歧。

如果发生得更快:

  • 记录事件并检查在此时间之前是否发生了重要的事情,例如流量反转。
  • 禁用等距输出,因为模型可能在两个输出点之间发散。