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

Modelica 与使用DASSL的正常计算模式相比,Dymola中内联集成的性能,modelica,dymola,Modelica,Dymola,我试图使用Dymola中的内联积分来进行实时仿真,我以Modelica.Fluid.Examples.HeatingSystem为例,但无论我选择哪种内联积分方法,仿真总是失败 当我选择显式方法时,Dymola无法启动集成 当我选择隐式方法时,Dymola陷入了困境 特别的是Rosenbrock方法,其误差表明Dymola无法对某些方程进行微分 在我的理解中,内联积分意味着将离散化方程添加到模型方程中,然后Dymola可以进行更多的符号操作并得到新的BLT形式。我知道这种方法会导致更多的代数循环

我试图使用Dymola中的内联积分来进行实时仿真,我以
Modelica.Fluid.Examples.HeatingSystem
为例,但无论我选择哪种内联积分方法,仿真总是失败

  • 当我选择显式方法时,Dymola无法启动集成
  • 当我选择隐式方法时,Dymola陷入了困境
  • 特别的是Rosenbrock方法,其误差表明Dymola无法对某些方程进行微分
  • 在我的理解中,内联积分意味着将离散化方程添加到模型方程中,然后Dymola可以进行更多的符号操作并得到新的BLT形式。我知道这种方法会导致更多的代数循环,并使牛顿法难以求解这些代数循环。
    我的问题是:

  • 与Dymola中的常规方法相比,哪种模型更适合内联积分方法
  • 内联积分是为了提高仿真速度而设计的,但是当非线性代数循环难以求解时,内联积分可能会很困难,因此使用内联积分方法是否有限制或规则
  • Modelica.Fluid.Examples.HeatingSystem
    为例,如何调整模型以使用内联集成
  • 我知道Dymola只支持使用带Euler积分器的内联积分方法(固定步长积分算法),那么为什么内联积分方法只支持固定步长呢?是否不需要使用可变步长?如果不局限于实时仿真,我只想使用内联集成来提高仿真速度,那么可以将内联集成方法与DASSl结合起来吗

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

    • 它是一个大小合理的模型,可以与毫秒时间步长集成6000秒;这意味着600万步(每一步都涉及方程组)
    • 在内联集成期间反馈较少(因为提供反馈需要花费太多时间)
    但是隐式Euler并没有被卡住——它只需要几分钟就可以完成

    但是,对于该模型,可以大幅增加隐式Euler的步长,它实际上可以在1s内正常工作;然后在不到一秒的时间内完成

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


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

    如果我必须使用固定步长解算器,我必须优化步长以证明步长独立性,就像我进行CFD时一样,我需要证明网格独立性。你对这个问题有什么经验?