什么会影响Modelica中的模拟运行时

什么会影响Modelica中的模拟运行时,modelica,dymola,openmodelica,Modelica,Dymola,Openmodelica,为了使Modelica中的模型模拟运行得更快,我提出以下问题: 什么影响Modelica中的仿真运行时 我会提供任何可能的帮助。编辑:更多详细信息,请参阅我的书《Modelica by Application--Power Systems》() 什么会影响运行时性能? I.应用编译技术 当然,面向对象的Modelica模型,即使是微不足道的模型,也会对应于一个大规模的方程组。Modelica仿真环境通常会优化生成的模型: 通过删除不重要的方程式(即别名方程式),减少可能方程式的数量 用所谓的B

为了使Modelica中的模型模拟运行得更快,我提出以下问题: 什么影响Modelica中的仿真运行时


我会提供任何可能的帮助。

编辑:更多详细信息,请参阅我的书《Modelica by Application--Power Systems》()

什么会影响运行时性能?

I.应用编译技术

当然,面向对象的Modelica模型,即使是微不足道的模型,也会对应于一个大规模的方程组。Modelica仿真环境通常会优化生成的模型:

  • 通过删除不重要的方程式(即别名方程式),减少可能方程式的数量
  • 用所谓的BLT变换将一大块方程组分解为更小的级联方程组,这些级联方程组可以以顺序方式更快地求解,而不是作为单个方程组
  • 使用撕裂方法求解s.c.大型代数循环
  • 从理论上讲,它甚至可能走得太远,如果可能的话,试图用解析的方式来求解方程组块,而不是进行昂贵的数值积分
因此,运行时性能将受到底层Modelica编译器的影响,以及它在多大程度上利用了基于等式的编译器方法。通常需要激活一些额外的设置来利用所有可能的此类技术。需要挖掘文档以启用此类设置

II。模型的性质

模型的性质会影响运行时性能,尤其是:

  • 该模型是一个大型系统吗?还是小规模的
  • 它是强非线性的还是半线性的
  • 与模型相对应的优化方程组是稀疏的(即每个方程组都有少量变量的大型方程组,如电力系统网络模型)还是密集的(如多体系统和生化网络)
  • 这是一个僵硬的系统吗?(例如,具有多个子系统的系统,其中一些表现出非常快的动态,而另一些表现出非常慢的动态)
  • 系统是否显示大量状态事件
  • III解算器的选择

    给定模型的上述特征通常会影响解算器的理想选择。解算器可以在很大程度上影响运行时性能(和精度)。可按以下顺序选择解算器策略:

  • 对于非刚性弱非线性模型,理想的选择是显式方法,例如单步Runga-Kutta或高阶多步Adam-Bashforth。如果精度不太重要,可以尝试一种执行速度更快的低阶显式方法。当然,增加解算器误差容差也会加快模拟速度

  • 然而,数值稳定性可能更难保证,特别是对于大型系统而言。然后,应尝试为显式解算器减小解算器步长(和/或更小的误差容限)。在这种情况下,误差容限较大的隐式解算器可以与误差容限较小的显式解算器进行比较

  • 实际上,明智的做法是尝试这两种方法,比较结果的准确性,并确定显式方法是否能产生相对准确的结果。然而,作为一个警告,这只是一个启发,因为系统不一定在允许的参数值的整个空间内具有相同的行为

  • 由于模型的非线性程度越来越高,选择将更倾向于使用可变步长技术的现代解算器。这里,我将从隐式变步长龙加库塔法(即单步法)和/或隐式变步长多步法(Adams–Moulton)开始。对于这两个类,可以扩大解算器容差和/或降低解算器错误顺序,并确定模拟是否生成了相对准确的解(但运行速度更快)

  • 前几类方法的实现通常在误差控制方面不太保守,因此,为了增加模型的刚度或可伸缩性差的模型,选择更倾向于实现所谓数值更稳定的后向微分公式(BDF)、s.a.DASSL、CVODE、IDA的现代解算器。这些解算器(can)还利用系统的s.c.雅可比矩阵进行自适应步长控制

  • 如果不知道有关模型行为的太多信息,那么像LSODAR这样的现代解算器可以在显式解算器和隐式解算器之间切换,并执行自动错误顺序控制(在不同顺序之间切换)是一个不错的选择。可能是某些Modelica环境具有使用自动切换的高级解算器。然而,如果事先知道模型的行为,那么使用其他建议的方法也是明智的,因为LSODAR可能不会在需要时执行最佳切换

  • x、

    类别3、4和5的解算器之间的比较并不容易判断,还取决于系统是连续的还是混合的,即底层的寻根算法

    通常,DASSL可能较慢,因为它在步长/错误控制方面更为保守。所以看起来艾达和其他人跑得更快。一些已发表的作品可以提供一些关于这种比较的直觉。最好有一个Modelica库,包括所有可能的模型类型,并运行所有可能的基准w.r.t.准确性和运行时间,以得出更多的解算器/模型特定结论。Modelica库可以用于和扩展此目的

    IV.高级方面

  • 已经出版了一些w