modelica - 查找在 Modelica 模型中导致非线性误差的变量

标签 modelica dymola

我正在Dymola中调试一个非线性模型,模型停在56600s,最后一个错误是

IF97 medium function g2 called with too low pressure
p = 611.643 Pa <= 611.657 Pa (triple point pressure)
Failed condition: p > 611.657

所以我尝试找到导致此错误的变量,但我不确定是否有一种简单的方法可以在 Dymola 中找到它,或者我需要输出非线性迭代详细信息,这将是一个巨大的日志文件。我的问题是:
如何简单地找到错误的变量

这是 dslog.txt 文件:

Expression preheaterHP_LevelController.limiter.u < preheaterHP_LevelController.limiter.uMin became false ( (preheaterHP_LevelController.limiter.u) - (preheaterHP_LevelController.limiter.uMin) = 1.2054e-09 )
Iterating to find consistent restart conditions.
      during event at Time :  52544.06110892259
Expression pPI1.limiter.u < pPI1.limiter.uMin became false ( (pPI1.limiter.u) - (pPI1.limiter.uMin) = 7.89853e-09 )
Iterating to find consistent restart conditions.
      during event at Time :  52681.07501417062

POINTA=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>

Expression  -vol_turbineHP1.drain[2].m_flow > 0.0 became true ( ( -vol_turbineHP1.drain[2].m_flow)-(0.0) = 1.96259e-14 )
Iterating to find consistent restart conditions.
      during event at Time :  56087.88419083787

=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>

POINTB=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>

Error: The following error was detected at time: 56600
  IF97 medium function g2 called with too low pressure
p = 611.643 Pa <= 611.657 Pa (triple point pressure)
  Failed condition: p > 611.657

=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>

Error: The following error was detected at time: 56598.40726897018
  IF97 medium function g2 called with too low pressure
p = 611.656 Pa <= 611.657 Pa (triple point pressure)
  Failed condition: p > 611.657
Error: The following error was detected at time: 56598.30750099612
  IF97 medium function g2 called with too low pressure
p = 611.657 Pa <= 611.657 Pa (triple point pressure)
  Failed condition: p > 611.657
Error: The following error was detected at time: 56598.30750099612
  IF97 medium function g2 called with too low pressure
p = 611.657 Pa <= 611.657 Pa (triple point pressure)
  Failed condition: p > 611.657

Integration terminated before reaching "StopTime" at T = 5.66e+04

最佳答案

对于大多数模型,您应该确保没有禁用“模拟设置>调试>在消息中包含函数调用” 默认设置类似于:

Error: The following error was detected at time: 0
  IF97 medium function tsat called with too low pressure
p = -210190 Pa <= 611.657 Pa (triple point pressure)
  Failed condition: p > 611.657
The stack of functions is:
Modelica.Media.Water.IF97_Utilities.BaseIF97.Basic.tsat
Modelica.Media.Water.IF97_Utilities.BaseIF97.Regions.boilingcurve_p
Modelica.Media.Water.IF97_Utilities.BaseIF97.Regions.hl_p
Modelica.Media.Water.IF97_Utilities.BaseIF97.Regions.region_ph
Modelica.Media.Water.IF97_Utilities.waterBaseProp_ph
Modelica.Media.Water.IF97_Utilities.rho_props_ph(
V18.port_a.p,
volume4.medium.h,
Modelica.Media.Water.IF97_Utilities.waterBaseProp_ph(V18.port_a.p, volume4.medium.h, 0, 0))
Modelica.Media.Water.IF97_Utilities.rho_ph(pipeB7Pump.port_b.p, V18.port_a.h_outflow, 0, 0)
Modelica.Media.Water.WaterIF97_ph.density_ph_Unique5(pipeB7Pump.port_b.p, V18.port_a.h_outflow, 0, 0)
Modelica.Media.Water.WaterI...

对于非常大的模型,这将被禁用(这将用附加指令写入 C 代码中)。

可以构建 dymosim 的调试版本(通过设置 Advanced.BuildDebugDymosim=true )并在这种情况下设置断点,然后从那里开始。

关于modelica - 查找在 Modelica 模型中导致非线性误差的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69567042/

相关文章:

Modelica:阶跃函数的初始条件

if-statement - OpenModelica 中 'when' 和 'if' 之间的区别?

modelica - Dymola 中的文本自动格式命令/快捷方式

modelica - 如何读取 JModelica 中的 .mat 输出文件?

modelica - 无法在 Dymola 中生成 Flat Modelica 代码?

modelica - 如何在 Dymola 中定义记录的自定义参数?

modelica - 如何在没有分析雅可比的情况下从 FMU 或 Dymola 访问模型雅可比

modelica - 如何在Modelica中实现周期盘点?

modelica - 在 Dymola/Modelica 中基于 CPU 时间停止模拟

python - 从 python 脚本重现 Dymola 信息层