我正在将一个相对较小的有限元 (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
dsmodelext1.c
dsmodelext10.c
dsmodelext11.c
dsmodelext12.c
dsmodelext13.c
dsmodelext14.c
dsmodelext15.c
dsmodelext16.c
dsmodelext2.c
dsmodelext3.c
dsmodelext4.c
dsmodelext5.c
dsmodelext6.c
dsmodelext7.c
dsmodelext8.c
dsmodelext9.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?
Dymola 确实会为数组的每个元素分配一个名称。您可以在这里尝试两件事。第一个是简单的,但我不能说它是否真的有帮助。 Visual C++ 提示包括/bigobj
命令行上的开关可能会有所帮助。如果您想这样做,您应该查看中的各种构建脚本/bin
安装 Dymola 的目录。您可以修改这些脚本来更改用于编译模型的命令。不过,我肯定会backup在你弄乱这些脚本之前,你可能会遇到无法再编译任何模型的情况。我认为主要脚本是build.bat
(虽然还有其他的,但我不知道是什么决定了调用哪些)。
如果这不起作用,处理大量数据的另一种方法是使用ExternalObject
位于莫代利卡的工厂。这允许您加载数据C
语言级别,而不是 Modelica 级别。例如,这可用于将插值表加载到内存中,而不会因插值中使用的数千个数据点而堵塞 Modelica 命名空间。However,我怀疑这是否真的会对您有帮助,因为您似乎需要 Dymola 来求解由质量和刚度矩阵生成的方程。因此,将它们置于外部并没有帮助。它适用于插值情况,因为 Dymola 并不真正需要了解所有数据(只有插值函数需要它)。但是,如果您使用(所有)这些数据来求解方程组,我认为您无法真正摆脱对 Dymola 的隐藏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)