Dymola BlockTimers用于已经停止的模拟

问题描述 投票:0回答:1

我的模拟在某些时候非常慢(在我的例子中,时间= 358.65)。在eventlog.txtdslog.txt,这次没有参赛作品。下一步我将GenerateTimers和GenerateBlockTimers设置为true,但我不得不停止模拟,在这种情况下似乎无法查看Timer结果!?

  • 第一个问题:我可以以某种方式看到计时器中断的计时器结果吗?它们存储在某个文件中吗?
  • 第二个问题:还有其他方法可以找出Dymola花了这么多时间吗?

enter image description here在CPU时间8E4秒(22h)后,我停止了模拟。 在模拟时间358.65没有发生任何事件,但是很多警告与负温度和负压有关,所以我假设非线性求解器以某种方式向错误的方向前进!所以,我想确定在时间= 358.65时很难解决的方程组。

logging dymola
1个回答
3
投票

第一个问题:这很奇怪,对于我停止模拟后我可以打开两个,dslog.txteventlog.txt,它们包含相应的信息。

第二个问题:有几种方法可以调查模型的性能。我假设你使用了其中的一些,但我会将它们列为完整性,从简单到更高级的(如果我忘记了,任何人都可以随意扩展):

  1. 在模拟设置(翻译选项卡)中激活标记“包括模拟期间经过的CPU时间的变量”。这将为您提供两个额外的变量,即结果中的“CPUtime”和“EventCounter”。这有助于指示何时消耗大量时间(CPUtime)以及可能的原因(EventCounter)。或者,您可以从命令行设置OutputCPUtime = true;
  2. 检查模拟日志中的“xxx事件数”,而状态和步骤事件的大数字(> 1000)尤其重要。
  3. 鉴于您有许多事件(并且您的模拟在某个时间非常慢),通过打开运行模拟的命令窗口(dymosim.exe)并按两次CTRL + C来中断模拟是有意义的。然后,您可以通过输入le = true启用事件记录,并通过输入c继续模拟。输出应指示事件是否快速发生。如果发生许多事件并且时间没有推进,则问题可能是“喋喋不休”。
  4. 如果不是这样,问题可能很难解决系统问题。这可以通过激活模拟设置(调试选项卡)中的标志“哪个状态主导错误”来调查。这将指示哪个状态通常限制步长或导致显性误差。如果这只是一个或几个状态,您可以考虑简化或删除它们。
  5. 通过设置使用分析 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的标记。
  6. 可以通过设置来完成更高级的分析 Advanced.GenerateTimers=true Advanced.GenerateBlockTimers=true 结果显示在模拟日志中。 为了理解这个dsmodel.c应该有帮助(如果你有从模型创建源文件的许可)。该c文件包含指向日志输出中提到的部分的链接。
  7. 从Dymola 2018FD01开始,您应该能够右键单击模拟结果并选择“Analyze Numerics”,给出一个应该不言自明的对话框。

对于您的具体情况,我认为要点1-4应该有所帮助。对于5和6,您应该在Dymola手册第5.7.5节中获​​得更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.