0

在 Open Modelica 中,在 IDA 求解器的设置中,我们也可以定义初始时间步长和最大时间步长。在模拟中,我设置了这些参数,但在模拟和检查解点后,我发现 IDA 没有限制在定义的最大时间步长上。有没有人告诉我为什么参数不起作用?

4

1 回答 1

1

您可以通过添加-lv=LOG_SOLVER模拟标志并在日志中搜索maximum step size. 如果它不存在 IDA 将使用默认设置。

要更改 IDA 的最大步长,您不能使用-maxstepsize,它不适用于 DIA。我必须检查源代码以了解如何正确执行。这是可能的,但方法很复杂。

你需要:


因此,以下示例脚本将使用最大步长为 π 的 IDA 来模拟来自 MSL 的钟摆:

loadModel(Modelica); getErrorString();
setCommandLineOptions("-d=newInst"); getErrorString();
simulate(Modelica.Mechanics.MultiBody.Examples.Elementary.Pendulum, method="ida", simflags="-noEquidistantOutputTime=3.14159265358979 -noEquidistantTimeGrid -lv=LOG_SOLVER"); getErrorString();

将此脚本保存到runTest.mos并使用 omc 运行它$omc runTest.mos &> some.log。检查some.log你会发现

LOG_SOLVER        | info    | recognized solver: ida
LOG_SOLVER        | info    | Initializing IDA DAE Solver
LOG_SOLVER        | info    | ## IDA ## Initializing solver of size 2 .
|                 | |       | | The relative tolerance is 1e-06. Following absolute tolerances are used for the states: 
|                 | |       | | IDA uses internal root finding method YES
|                 | |       | | Maximum integration order 5
|                 | |       | | use equidistant time grid NO
|                 | |       | | maximum step size 3.14159
|                 | |       | | as the output frequency control is used: 0
|                 | |       | | as the output frequency time step control is used: 3.141593
|                 | |       | | IDA linear solver method selected ida use sparse direct solver KLU. (default)
|                 | |       | | Jacobian is calculated by \"Colored numerical Jacobian, which is default for dassl and ida. With option -idaLS=klu a sparse matrix is used.\"
|                 | |       | | initial step size is set automatically.

您可以在 OMedit 中执行相同的操作,并将 simflags-noEquidistantOutputTime=3.14159265358979 -noEquidistantTimeGrid添加到您的模拟中。


注意:当然这很荒谬,并且-maxstepsize的文档是错误的:

值指定最大绝对步长,由以下方法使用:dassl、ida。

请在OpenModelica GitHub上开一张有关此问题的票,以便修复它。

于 2020-12-04T18:40:03.283 回答