modelica - 欧拉求解器在 Dymola 事件附近的时间步长
问题描述
接近状态事件,求解器将采取缩短的时间步长,以便将步长与事件对齐。这有利于保持事件附近的准确性;但是,时间变量似乎没有根据步长更新,导致 Dymola 的结果不正确:
这是重现问题的 Modelica 代码:
model Unnamed
Modelica.Blocks.Sources.Trapezoid ramp(
period=1,
rising=0.1,
falling=0.1)
annotation (Placement(transformation(extent={{-52,20},{-32,40}})));
Modelica.Blocks.Continuous.FirstOrder firstOrder(T=0.001)
annotation (Placement(transformation(extent={{-20,20},{0,40}})));
Modelica.Blocks.Sources.Pulse pulse(period=0.1222)
annotation (Placement(transformation(extent={{-40,-20},{-20,0}})));
equation
connect(firstOrder.u, ramp.y)
annotation (Line(points={{-22,30},{-31,30}}, color={0,0,127}));
annotation (uses(Modelica(version="3.2.2")), experiment(
Interval=0.001,
__Dymola_fixedstepsize=0.001,
__Dymola_Algorithm="Euler"));
end Unnamed;
有没有办法在 Dymola 中禁用事件处理并保持欧拉时间步长固定?或者更好的是,使时间变量正确更新。谢谢
解决方案
有两个部分:
- 关闭对事件的特殊处理(不仅仅是时间事件)。对此没有理想的方法,但您可以设置编译器标志(在 Dymola 2020x 中,它位于 Simulation>Setup>Compiler>Custom Options>Compiler)并
/DFindEvent_=0
为 Visual Studio 设置 - 我相信它应该-DFindEvent_=0
用于 gcc。 - 不幸的是,似乎无法根据需要调整时间轴的时间值。
然而,在许多情况下,这将导致对事件的处理不太准确,这将导致问题,例如,离合器没有完全锁定在机械系统中。
推荐阅读
- selenium - 如果每个功能文件都有独立的跑步者,报告会被覆盖
- tensorflow - 使 tfp.optimizer.differential_evolution_minimize 并行工作
- google-sheets - Excel在工作表之间计数和乘以单元格
- laravel - 主管套接字错误:取消链接过时的套接字 /tmp/supervisor.sock
- ruby - 如何使用 Ruby 同时可靠地读取和写入输入 CSV 文件?
- perl - Perl:将本地 .pm 文件中的自定义模块“安装”到 Perl 执行环境中?
- java - 提高在文件夹和子文件夹文件 Java 中查找和替换的性能
- python - 在 Linux Mint 20 上安装 quadprog 失败
- python - Django - 由登录用户 ViewSet 创建的项目
- r - dots_list(...) 中的错误:缺少参数“标签”,没有默认值