我的模拟在某些时候非常慢(在我的例子中,时间= 358.65)。在eventlog.txt
和dslog.txt
,这次没有参赛作品。下一步我将GenerateTimers和GenerateBlockTimers设置为true,但我不得不停止模拟,在这种情况下似乎无法查看Timer结果!?
在CPU时间8E4秒(22h)后,我停止了模拟。 在模拟时间358.65没有发生任何事件,但是很多警告与负温度和负压有关,所以我假设非线性求解器以某种方式向错误的方向前进!所以,我想确定在时间= 358.65时很难解决的方程组。
第一个问题:这很奇怪,对于我停止模拟后我可以打开两个,dslog.txt
和eventlog.txt
,它们包含相应的信息。
第二个问题:有几种方法可以调查模型的性能。我假设你使用了其中的一些,但我会将它们列为完整性,从简单到更高级的(如果我忘记了,任何人都可以随意扩展):
OutputCPUtime = true;
。le = true
启用事件记录,并通过输入c
继续模拟。输出应指示事件是否快速发生。如果发生许多事件并且时间没有推进,则问题可能是“喋喋不休”。Advanced.GenerateTimers=true
Advanced.Define.PrecisionTiming=true
Advanced.DymosimRealTimePriority=true
将在您的工作目录中生成plotTiming.mos
。这将定义一个矩阵,可以通过键入来绘制
RunScript("plotTiming.mos",true)
createPlot(grid=true, leftTitle="Execution time for step", bottomTitle="Simulation time");
plotArray(times[:,1],times[:,2],-1);
这将创建一个图表,其中每个步骤的执行时间显示在y轴上,而模拟时间显示在x轴上。因此,如果您定义了1ms的步长并且您想要实时模拟,则应确保现在有超过1ms的标记。Advanced.GenerateTimers=true
Advanced.GenerateBlockTimers=true
结果显示在模拟日志中。
为了理解这个dsmodel.c
应该有帮助(如果你有从模型创建源文件的许可)。该c文件包含指向日志输出中提到的部分的链接。对于您的具体情况,我认为要点1-4应该有所帮助。对于5和6,您应该在Dymola手册第5.7.5节中获得更多信息。