首页 > 解决方案 > 追问:Modelica总时间计算仿真和方程初始化

问题描述

我正在写这个与相关的问题。在他的回复中,Marco 给了我一个很好的答案,但不幸的是,我是 OpenModelica 的新手,所以我需要一些进一步的帮助。

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

到目前为止,我有一个基于 DAE 模拟物理行为的模型。现在,我正在尝试构建您在此处提出的建议:

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

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

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

再次感谢您的宝贵帮助!

最好的问候, 加布里埃尔

标签: timemodelicaopenmodelica

解决方案


从另一个问题:

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

报告的时间是正确的。花费的大部分时间不是初始化或模拟,而是编译。如果您在 OMEdit 中使用重新模拟选项(在绘图视图中右键单击结果文件以获取变量),您会注意到模拟非常快。

$ cat e.mos
loadString("model M
  Real r(fixed=true, start=2.0);
equation
  der(r) = time;
end M;");getErrorString();
simulate(M);getErrorString();
$ omc e.mos
true
""
record SimulationResult
    resultFile = "/mnt/data/@Mech/martin/tmp/M_res.mat",
    simulationOptions = "startTime = 0.0, stopTime = 1.0, numberOfIntervals = 500, tolerance = 1e-06, method = 'dassl', fileNamePrefix = 'M', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = ''",
    messages = "LOG_SUCCESS       | info    | The initialization finished successfully without homotopy method.
LOG_SUCCESS       | info    | The simulation finished successfully.
",                                                                                                                                                                                                    
    timeFrontend = 0.004114061,                                                                                                                                                                       
    timeBackend = 0.00237546,                                                                                                                                                                         
    timeSimCode = 0.0008126780000000001,                                                                                                                                                              
    timeTemplates = 0.062749837,                                                                                                                                                                      
    timeCompile = 0.633754155,                                                                                                                                                                        
    timeSimulation = 0.006627571000000001,                                                                                                                                                            
    timeTotal = 0.7106012479999999                                                                                                                                                                    
end SimulationResult;                                                                                                                                                                                 
""

据我所知,OMEdit 没有报告这些其他数字(翻译和编译模型的时间)。在 Windows 上,这些时间相当长,因为链接需要更长的时间。


推荐阅读