gpt4 book ai didi

time - Modelica 仿真和方程初始化的总时间计算

转载 作者:行者123 更新时间:2023-12-03 16:21:36 27 4
gpt4 key购买 nike

我想测量 DAE 系统的总模拟和初始化时间。我对挂钟时间很感兴趣(就像 Matlab 中函数 tic-toc 给出的那样)。

我注意到在 Modelica 中模拟时间有不同的标志,但实际上我得到的时间与我按下模拟按钮到模拟结束所耗时相比非常小(大约用我的手机时钟测量)。

我猜这个短时间只是模拟所需的时间,它不包括eqs系统的初始化。

有没有办法计算这个总时间?

非常感谢你提前,

加布里埃莱

亲爱的马可,
非常感谢您非常详细和有用的回复!

我实际上使用的是 OpenModelica 而不是 Dymola,所以不幸的是,我必须构建为我执行此操作的函数,而且我对 OpenModelica 语言非常陌生。

到目前为止,我有一个基于 DAE 模拟物理行为的模型。现在,我正在尝试构建您在这里建议的内容:

使用 get time(),您可以构建一个函数:在 t_start 转换模型并模拟 0 秒时读取系统时间,再次读取系统时间,并且 t_stop 计算 t_start 和 t_stop 之间的差异。

请给我更多详细信息:我可以使用哪个命令在 t_start 时间读取系统并模拟 0 秒?要对 t_start 和 t_stop 执行此操作,我是否需要不同的功能?

完成此操作后,是否必须调用 OpenModelica 模型中的函数(或多个函数),我想知道其时间?

再次感谢您的宝贵帮助!

最好的问候,加布里埃尔

最佳答案

根据您拥有的工具,这可能意味着很多工作。

第一个问题是 MSL 允许您检索系统时间,但没有包含任何内容来轻松计算时间增量。因此,Dymola 中的测试库具有运算符(operator)记录 DateTimeDuration .请注意,计划将它们集成到 future 的 MSL 版本中,但目前这只能通过 Dymola 用户的测试库使用。

第二个问题是没有标准化的方法来翻译和模拟模型。每个工具都有自己的方法来从脚本中做到这一点。因此,在不知道您使用的是什么工具的情况下,不可能给出准确的答案。

Modelica 在 MSL 中提供了什么

在当前的 Modelica 标准库版本 3.2.3 中,您可以通过 Modelica.Utilities.System.getTime() 读取实际系统时间。 .

这个小例子展示了如何使用它:

function printSystemTime
protected
Integer ms, s, min, h, d, mon, a;
algorithm
(ms, s, min, h, d, mon, a) := Modelica.Utilities.System.getTime();
Modelica.Utilities.Streams.print("Current time is: "+String(h)+":"+String(min)+":"+String(s));
end printSystemTime;

您会看到它通过 7 个返回值提供当前系统日期和时间。如果您想计算时间增量,这些变量不太好处理,因为您最终会得到 14 个变量,每个变量都有自己的值范围。

一般如何测量翻译和模拟时间

gettime()您可以构建一个函数:
  • 读取系统时间为 t_start
  • 翻译模型并模拟 0 秒
  • 再次读取系统时间并作为 t_stop
  • 计算 t_start 和 t_stop 的差值。

  • 步骤 2 取决于工具。在 Dymola 你会打电话
    DymolaCommands.SimulatorAPI.simulateModel("path-to-model", 0, 0);

    它会转换您的模型并对其进行 0 秒的模拟,因此它只运行初始化部分。

    对于 Dymola 用户

    测试库包含函数 Testing.Utilities.Simulation.timing ,这几乎完全符合您的要求。

    要翻译和模拟您的模型,请按如下方式调用它:
    Testing.Utilities.Simulation.timing(
    "Modelica.Blocks.Examples.PID_Controller",
    task=Testing.Utilities.Simulation.timing.Task.fullTranslate_simulate,
    loops=3);

    这将转换您的模型并模拟 1 秒 3 次并计算平均值。

    要模拟 0,请复制该函数并更改它
    if simulate then
    _ :=simulateModel(c);
    end if;


    if simulate then
    _ :=simulateModel(c, 0, 0);
    end if;

    关于time - Modelica 仿真和方程初始化的总时间计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61375492/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com