在 Open Modelica 中,在 IDA 求解器的设置中,我们也可以定义初始时间步长和最大时间步长。在模拟中,我设置了这些参数,但在模拟和检查解点后,我发现 IDA 没有限制在定义的最大时间步长上。有没有人告诉我为什么参数不起作用?
问问题
53 次
1 回答
1
您可以通过添加-lv=LOG_SOLVER
模拟标志并在日志中搜索maximum step size
. 如果它不存在 IDA 将使用默认设置。
要更改 IDA 的最大步长,您不能使用-maxstepsize,它不适用于 DIA。我必须检查源代码以了解如何正确执行。这是可能的,但方法很复杂。
你需要:
- 使用-noEquidistantTimeGrid禁用等距时间步长
- 将值设置为-noEquidistantOutputTime=value
因此,以下示例脚本将使用最大步长为 π 的 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 回答