我的模拟在某些时候非常慢(在下面的示例中,时间为358.65)。在eventlog.txt
和dslog.txt
中,目前没有任何条目。下一步,我将GenerateTimers和GenerateBlockTimers设置为true,但是我不得不停止模拟,在这种情况下,似乎无法查看Timer的结果!?
在CPU时间8E4秒(22小时)后,我停止了仿真。
在仿真时间358.65,没有事件发生,但是与负温度和负压力有关的警告很多,因此我认为非线性求解器的方向不正确!因此,我想确定在time = 358.65时很难求解的方程组。
答案 0 :(得分:3)
第一个问题:这很奇怪,对于我来说,停止模拟后,我可以同时打开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);
Advanced.GenerateTimers=true
Advanced.GenerateBlockTimers=true
dsmodel.c
应该会有所帮助(如果您具有从模型创建源文件的许可)。 C文件包含指向日志输出中提到的部分的链接。对于您的具体情况,我认为第1-4点应该有所帮助。对于5和6,您应该在Dymola手册第5.7.5节中有更多信息。