1

我正在将一个相对较小的有限元 (FE) 模型集成到 Modelica 中。为此,我创建了一个模型(Modelica 类),它可以读取 Matlab 二进制文件格式的质量 (M) 和刚度 (K) 矩阵。我将 FE 模型与 Modelica 标准库 (Modelica.Mechanics.MultiBody) 中的一些组件连接起来。如果 M 和 K 非常小(例如 20x20),则 Dymola 能够运行模型并提供与 Abaqus 相比相当准确的结果(但计算效率不高)。但是,如果我增加包含较大 M 和 K 的 FE 模型的复杂性(例如 size(M)=[200,200]),则 Dymola 会提供以下错误:

编译和链接模型 (Visual C++)。

设置使用 Microsoft Visual Studio 2010 x86 工具的环境。dsmodel。 C

生成代码...

c:\sentient\src\gll\gearlibrary\dsmodel.c(185115):致命错误 C1128:超出目标文件格式限制的节数:使用 /bigobj 编译

生成 Dymosim 时出错。

我将 Visual Studio C++ Express Edition (10.0) 与 Dymola 连接起来。

在我看来,Dymola 为 M 和 K 的每个实体提供了一个变量名。这超出了 C++ 编译器的最大对象限制。

我怎样才能防止 Dymola 这样做?如何在 Dymola 环境中设置 /bigobj?

4

2 回答 2

2

确实,Dymola 将为数组的每个元素分配一个名称。您可以在这里尝试两件事。第一个是简单的,但我不能说它是否真的有帮助。Visual C++ 提示/bigobj在命令行中包含开关可能会有所帮助。如果您想这样做,您应该查看/bin安装了 Dymola 的目录中的各种构建脚本。您可以修改这些脚本以更改用于编译模型的命令。但是,我会确保在您弄乱它们之前备份这些脚本,否则您可能会遇到无法再编译任何模型的情况。我认为主要脚本是build.bat(尽管还有其他脚本,但我不知道是什么决定了调用哪些脚本)。

如果这不起作用,另一种处理大量数据的方法是使用ExternalObjectModelica 中的工具。这允许您在C语言级别加载数据,而不是在 Modelica 级别。例如,这可用于将插值表加载到内存中,而不会因为插值中使用的数千个数据点而堵塞 Modelica 命名空间。 然而,我怀疑这是否真的会对您有所帮助,因为您似乎需要 Dymola 来求解由质量和刚度矩阵生成的方程。因此,将它们设为外部将无济于事。它适用于插值情况,因为 Dymola 并不真正需要了解所有这些数据(只有插值函数需要它)。但是,如果您使用(所有)这些数据来求解方程组,我认为您无法真正摆脱对 Dymola 的隐藏。

于 2013-08-10T14:04:11.753 回答
0

从 Dymola 2015 FD01 开始,您可以Advanced.CompileBigObject=true;在 Dymola 内部进行设置 - 即无需修改 bat 文件。

问原始问题时它不起作用,但如果其他人有同样的问题应该更方便。

于 2017-02-21T14:21:49.680 回答