与使用 DASSL 的正常计算模式相比,Dymola 中的内联集成性能

Performance of inline integration in Dymola compared to normal calculation mode using DASSL

我尝试在Dymola中使用inline integration做实时仿真,我以Modelica.Fluid.Examples.HeatingSystem为例,但是无论我选择哪种inline integration方法,仿真总是失败。

  1. 当我选择显式方法时,Dymola 无法启动集成。
  2. 当我选择隐式方法时,Dymola 卡住了。
  3. 比较特殊的是Rosenbrock方法,错误显示Dymola无法微分一些方程。

在我的理解中,内联积分意味着将离散化方程添加到模型方程中,然后 Dymola 可以进行更多的符号操作并得到新的 BLT 形式。我知道这种方法可能会导致更多的代数环,并使牛顿法难以解决这些代数环。
我的问题是:

  1. 与Dymola中的普通方法相比,什么样的模型更适合内联集成方法?
  2. 内联积分旨在提高仿真速度,但在非线性代数环难以求解的情况下可能会很困难,那么使用内联积分方法是否有限制或规则?
  3. Modelica.Fluid.Examples.HeatingSystem为例,如何调整模型以使用内联集成?
  4. 我知道Dymola只支持使用Euler积分器(固定步长积分算法)的内联积分法,那么为什么内联积分法只支持固定步长?是否不需要使用可变步长?如果不局限于实时仿真,只想使用inline integration来提高仿真速度,是否可以将inline integration方法与DASSl结合起来?

对于大多数隐式求解器来说似乎卡住了,因为:

  • 这是一个合理大小的模型,您将其与 6000 秒的毫秒时间步长集成在一起;这意味着 600 万步(每一步都涉及方程组)。
  • 在线集成期间反馈较少(因为提供反馈需要太多时间)。

但隐式 Euler 并没有卡住 - 只需几分钟即可完成。

但是,你可以为这个模型增加隐式欧拉的步长很多,它实际上在 1 秒时工作得很好;然后在不到一秒内完成。

内联显式 Euler 失败,除非您使用更小的步长(与非内联显式 Euler 相同)。

注意:Dymola中的内联求解器都是固定步长求解器,因此设置太短的步长会减慢模拟速度,太长的步长- size 会导致模拟失败,而 dassl, lsodar, radau, esdirk* 都会在积分时调整步长以避免这两个问题。