如何解决Dymola 在模拟过程中的结果的数据处理
我正在处理一个包含大量数据的复杂 Modelica 模型,我需要模拟继续进行,直到我终止模拟过程,甚至可能持续数天,因此 .mat 文件可能会变得非常大,我在如何进行数据处理方面遇到了麻烦。所以我想问一下有没有什么方法可以让我
- 在模拟期间的固定时间步长后输出我需要的数据,但在模拟后不使用 .mat 文件。我正在考虑使用 Modelica.Utilities.Stream.Print` 函数将我需要的数据打印到 CSV 文件中,但是我必须编写大量代码来打印我需要的每个变量,所以我认为应该有更好的解决方案.
- 在固定的时间步内删除.mat文件,这样我电脑上存储的.mat文件就不会过大,不影响Dymola的正常模拟。
解决方法
很久以前我写了一个小的 C 程序,它用两个线程运行 Dymola 的可执行文件。其中之一负责在超过输入时间限制后终止整个模拟。我在 Dymola 的标准给定 mfiles 中使用了这个 C 程序的可执行文件。我认为只要有一些黑客能力,就可以满足上述要求。
看看 https://github.com/Mathemodica/dymmat 但是我需要警告相关的 mfiles 适用于特定类型的模型,并且该软件很长时间没有维护。但是,C 程序的想法是可以重现的。
,我没有对此进行全面测试,因此请将此视为“灵感来源”而不是完整答案:
在 Dymola 2021 发行说明的“4.3.6 在模拟期间保存定期快照”部分中,您将找到执行以下操作的说明:
仿真过程中可以指示模拟器打印仿真结果文件“dsfinal.txt”快照。
这可以使用模拟设置选项“完成结果快照”定期完成,但我认为对于您的情况,使用函数 Dymola.Simulation.TriggerResultSnapshot()
从模型触发它可能更有用。还给出了一个简单的例子:
when x > 0 then
Dymola.Simulation.TriggerResultSnapshot();
end when;
这个函数的一个属性也有帮助,因为它默认创建多个文件而不覆盖它们:
默认情况下,快照文件名会添加时间戳,例如:“dsfinal_0.1.txt”。
创建的 dsfinal_[TIMESTAMP].txt
的格式一开始有点让人不知所措,因为它包含了初始化模型的所有信息,但应该有你需要的一切......
因此将一些精力转移到后期处理上,因为您可能需要读取多个文件,但我认为这是一个可以接受的权衡。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。