首页 > 解决方案 > 线性分析中的“内存不足”错误(在 Dymola 中)

问题描述

在 Dymola 中使用“线性分析<全线性分析”时出现错误。它抱怨为:

Log-file of program .\Modelica_LinearSystems2.Math.Matrices.LAPACK.dgeevx.exe
(generated: Mon Oct 11 13:12:45 2021)

Modelica_LinearSystems2.Math.Matrices.LAPACK.dgeevx.exe started
... "empty.txt" loading (dymosim input file)
Error: The following error was detected at time: 0
  Out of memory for reals
It could due to too large matrices, infinite recursion, or uninitialized variables.
You can change the memory size by setting the variable Advanced.RealBufferSize.
  Failed condition: currentMark.place.Realbuffer<EndRealbuffer

The stack of functions is:
Modelica_LinearSystems2.Math.Matrices.LAPACK.dgeevx
Error: Integrator failed to start model.

如日志中所述,失败是由 Realbuffer<EndRealbuffer 引起的,但我不明白为什么我确实有这个错误。此外,还找到了Hans Olsson 编写的源代码。

我的模型是一个有 117 个消费者和 255 个管道和多个生产单元的区域供热网络。当我使用特定的管道模型(称为静态)时,我可以运行全线性分析,我可以获得系统报告。但是,当我将此管道模型更改为另一个(称为动态)时,我得到了这个错误。

在这两个模型中,我都有相同的未初始化变量(在消费者模型中)。因此,我认为这不是主要问题...日志还建议,我可以通过设置变量 Advance.RealBufferSize 来更改内存大小。我正在查看 Dymola 手册,并指出“Real 缓冲区的默认大小(生成的数组中 Real 的最大数量)与以前的版本相比没有变化;它仍然是7e6。在以前的版本中,已经可以通过标志 Advanced.RealBufferSize 来控制缓冲区大小。该标志默认为 0,表示使用默认缓冲区大小。如果标志有任何其他值,则该值用作缓冲区大小。'。因此,我将标志设置为 Advance.RealBufferSize=7e7, 7e15 和 7e30 仍然没有帮助。与该标志并行,我将 linearizeAtInitial 第一个设置为真而不是假(并设置其他输入)仍然没有帮助。

我认为全线性分析是理解工具和模型的最佳方式之一。所以我真的希望它能够工作,但目前没有尝试的选择。我还能做什么?

我感谢任何形式的反馈。

PS:如果有人好奇的话,模拟中的一些注释:

运行全线性分析的具有静态管道模型的网络模型,在转换模型中具有:27031 个时变变量标量和 60380 个别名变量标量。非线性方程组的大小:{10, 10},非线性系统处理后的大小:{1, 1},数值雅可比行列式数:0

具有未运行全线性分析的动态管道模型的网络模型,在已转换模型处具有:25257 个时变变量标量和 58836 个别名变量标量。非线性方程组的大小:{10, 10},非线性系统处理后的大小:{1, 1},数值雅可比行列式数:0

标签: modelicadymola

解决方案


推荐阅读