如何在Dymola(Modelica)中使用/ bigobj进行编译

时间:2013-08-09 15:14:43

标签: visual-studio-2010 modelica dymola

我正在将一个相对较小的有限元(FE)模型集成到Modelica中。在这样做的过程中,我创建了一个Model(Modelica类),它可以用Matlab二进制文件格式读取质量(M)和刚度(K)矩阵。我将FE模型与Modelica标准库(Modelica.Mechanics.MultiBody)中的一些组件连接起来。如果M和K非常小(例如20x20),那么Dymola能够运行模型并提供与Abaqus相比非常准确的结果(但计算效率不高)。但是,如果我增加包含较大M和K(例如尺寸(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?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

当提出原始问题时,它没有工作,但如果其他人有同样的问题应该更方便。