modelica - 线性分析中的“内存不足”错误(在 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
解决方案
推荐阅读
- docker - npm 库无法在 GitLab CI 中安装
- c# - 在 C# 中存储一些不可变和高度访问的数据的最佳方法是什么?
- python-3.x - 我无法从 PythonStdioGames 启动任何程序并出现错误,我该如何防止这种情况发生?
- javascript - Gulp 编译命令未将 SRC 文件夹从 TS 编译为 DIst 文件夹中的 JS
- bitbucket - bitbucket cloud - 强制拉取请求连接到 JIRA 问题
- c - 即使导致缓冲区溢出,将 int 转换为 string 仍然有效
- reporting-services - SSRS 从 2008R2 迁移到 2017 错误 RSPortal
- python - 使用函数从列表创建字典
- angular - 更新到 Angular 9
- redux - React Redux 输入句柄