如何运行 Modelica (Dymola) 模拟,该模拟由于以下原因而失败:“警告:无法使用牛顿求解器求解非线性系统。”

0 modelica dymola

我目前正在尝试重建论文“向具有集成季节性地热能存储的太阳能区域供热网过渡的策略”中提出的模型(https://ideas.repec.org/a/eee/energy/v228y2021ics0360544221009117.html)但总是遇到问题,模拟失败,因为Warning: Failed to solve nonlinear system using Newton solver.

对于该模型,我尝试使用 MoSDH 库(https://github.com/MoSDH/MoSDH)。

我无法在这个论坛上上传我的模型,但我很高兴与有兴趣研究我的问题的每个人分享。

我将添加错误消息的最后几行,以便更好地理解我的问题。

Warning: Failed to solve nonlinear system using Newton solver.
  During initialization at time: 0
  Tag: simulation.nonlinear[27]
Homotopy reducing

Warning: Failed to solve nonlinear system using Newton solver.
  During initialization at time: 0
  Tag: simulation.nonlinear[27]
Error: Integrator failed to start model.

... Error message from dymosim

ERROR: The simulation of FormhalsModellNachbau.SolarThermalTest3 FAILED
Run Code Online (Sandbox Code Playgroud)

我已经尝试过 Dassl 和 Cvode 解决案例,它们应该是最好的工作案例。两者都遇到了同样的问题。

小智 6

这是 Modelica 建模/仿真项目中的常见问题。

这种“非线性系统”的数学正确名称是隐式代数方程系统。如果它们存在,您的模型就是所谓的DAE而不是ODE

通常,Dymola 通过为每个代数系统嵌入牛顿求解器并将生成的整个系统暴露给 ODE 求解器来求解 DAE。

但正如您所经历的那样,牛顿迭代可能会失败。我会推荐以下方法来解决它:

  1. 摆脱代数系统
  2. 为迭代变量提供更好的起始值
  3. 分析残差函数并改进它(例如外推,避免零斜率)

第 1 点是最重要的一点。您需要理解并打破代数环。典型原因有:

  • 流反转(流连接器)-> 尝试使用 inStream() 而不是 acutalStream()
  • 通过控制器的 P 部分直接耦合传感器和执行器 -> 添加传感器动态

我们已经发表了一篇关于该主题的博客文章。