gpt4 book ai didi

iteration - Modelica模型稳健性问题: Failed to evaluate model for ODE-Jacobian

转载 作者:行者123 更新时间:2023-12-02 23:49:09 25 4
gpt4 key购买 nike

我正在 Dymola(基于 modelica 的商业软件)中运行系统模型。模型是关于强制对流下多孔物质的传热和传质。我提出这个问题的问题是关于模型模拟过程中产生的错误。

使用模型的当前设置,可以在给定的模拟时间(7200 秒)内成功运行。但它会在日志文件中生成以下提示(在整个运行过程中间歇性地生成):

 ERROR: Failed to solve non-linear system using Newton solver.
To get more information: Turn on Simulation/Setup/Debug/Nonlinear solver diagnostics/Details
Solution to systems of equations not found at time = 882.457
Nonlinear system of equations number = 4
Infinity-norm of residue = 154.849
Iteration is not making good progress.
Accumulated number of residue calculations: 25279
Last values of solution vector:
drum.T_e = 306.346
drum.X_e = 0.0413446
Last values of residual vector:
{ -0.000157014, 154.849 }

我想我最重要的问题是,当我看到这个时,我应该对我的模型有什么大致的了解。这是否意味着我定义方程组或事件系统的方式存在特定错误?当我通过在一定范围内更改一些关键参数来对模型进行稳健性研究时,这个问题变得显而易见。由于此错误,模型会在参数值的随机组合下在结束时间之前失败。正如错误消息中所建议的,我确实运行了模型并检查了诊断详细信息,并且它提供了大型 Amat 数组,并具有以下说明:

Failed to evaluate model for ODE-Jacobian
Too many slow iterations with no progress
Line search: DX-norm scaled-residua-norm residual (unscaled)
Search direction{ -0.000634251, 6.52346E-006 }
To investigate the properties of the function, you can plot the
function in the search direction by pasting the following
commands in the Dymola command window:
Amat={<...>};
plotArray(Amat[:,1],Amat[:,2],-1);
If the graph has discontinuities, local minima above zero,
and/or knees this explains the problem.

如您所见,它为绘制 Amat 提供了方向(以便查看是否存在不连续性和局部最小值)。同样,如果我确实发现这些不规则之处,那么我应该对模型(方程)进行哪些更改?

我知道所提供的详细信息可能不足以回答,但是在整个运行过程中存在大量日志,并且出现相同的重复失败。因此,如果有人对此有一些想法,也请建议我可以添加有关我的模型或模拟的相关细节,以便回答可能很容易。

最佳答案

该错误消息表明求解器无法找到模型中非线性方程组的解。这可能意味着系统没有解决方案,或者只是求解器无法找到它。如果存在解但求解器无法找到它,则可能是由于起始条件所致,即非线性求解器的起始条件,而不是 ODE 求解器的起始条件。显然,对于非线性系统,解可能对初始条件非常敏感,特别是当存在多个解时。有时您会发现,通过降低求解器容差(例如,将其从 1e-4 更改为 1e-6)实际上可以提高鲁棒性,因为软件找到的数值解将更接近真实解。另一种可能性是此时没有解决方案。这就是 Dymola 在第二个片段中使用“Amat”数组报告的内容。如果运行这些命令,您可能会发现存在一个不跨越零的局部最小值,如下图所示。

enter image description here

其中“x”代表求解器尝试过的点。在这种情况下,求解器尝试通过改变 x 的值并检查 f(x) 的值来找到方程 0 = f(x) 的解。它试图找到过零的地方。它尝试的点之间仍然可能存在交叉点,但这通常意味着没有解决方案。

现在的问题是如果发生这种情况该怎么办。系统可能正在接近不存在解决方案的点,因此您可能能够防范该区域(就像您可能防范除以零或负数的平方根一样)。显然这取决于您的具体情况。不过,最好的选择是完全避免非线性系统。这也取决于您的型号和情况。根据用于创建模型的库,您可以通过从模拟设置的“翻译”选项卡生成扁平化 Modelica 代码文件 (.mof) 来研究系统结构。然后,您可以研究生成的非线性系统,这可能会为您提供一些关于如何重新构建模型以避免非线性系统的线索。

您可以做的另一件事是从仿真设置的“调试”选项卡中启用非线性系统解决方案的更多调试信息。在这里,您可以获得有关求解器找到的解决方案的更多详细信息(例如找到的解决方案和每个步骤的残差值)。我不确定它是否会为您提供比上图更多的信息,因为没有找到解决方案,但在其他情况下它可能很有用。

关于iteration - Modelica模型稳健性问题: Failed to evaluate model for ODE-Jacobian,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36539537/

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