在 Dymola 中使用多模式 DAE 的错误

An error of using multi-mode DAEs in Dymola

我在 Dymola 中构建了一个简单的模型,在不同时期使用不同的方程式,但令我惊讶的是 Dymola 无法处理这个简单的模型。似乎系统在索引减少后是奇异的。

我的问题是:

模型代码如下:

    model ErrorWhenUsingIf
      Real x(start=100);
    equation 
      if time<=0.5 then
        x=100;
      else
       der(x)=5;
      end if;
    end ErrorWhenUsingIf;

错误信息是:

Failed to evaluate model for ODE-Jacobian
Error: The following error was detected at time: 7.62939453125E-012
Error: Singular inconsistent scalar system for der(x) = ( -(if time <= 0.5 then x-100 else -5.0))/((if time <= 0.5 then 0.0 else 1.0)) = 8e-008/0
Solver will attempt to handle this problem.

Failed to evaluate model for ODE-Jacobian

给定的模型不遵守当前规则之一,该规则遵循常见的典型 straight-forward 实现 simulate-able / 可编译 Modelica 模型的方法:

a model shall not change its differential index throughout the simulation

实际版本的 Modelica 语言规范指南并未明确阻止实现此类模型,也没有什么可以反对实现这一点。

常见的仿真环境显然无法仿真如此简单的模型,除非明确说明允许 multi-modes 个 DAE。

现在详细一点,微分指数非正式地对应于状态变量之间隐式/显式依赖的固有程度。在整个模拟过程中,微分指数可以通过两种方式改变,结构方式或数值方式。

在结构方式中,模型(类似于给定的模型)是根据方程系统的几个分支来表示的。每个分支对应不同的差异索引。在给定的模型中,一个分支对应于一个线性方程,而另一个对应于一个微分方程。结构分析的典型实施会揭示该模型对应于 ODE 系统(对于第一个分支而言并非如此)。我的猜测是线性方程被提交给 ODE 求解器。如果我们在 if 条件之外添加一个虚拟微分方程,例如 der(z) = -1,系统将被模拟,因为结构分析是偶然的(半)正确的。

如果我们在不同的分支中处理 higher-index DAE,我们可能会得到一个数值上不精确的解决方案,因为索引缩减不是针对每个可能的分支单独进行的.将求解器应用于 non-reduced DAE 可能会导致数值解出现草稿,因为在传递给求解器的所得简化方程中未明确显示隐式代数方程。

在数值方式中,存在模型参数的不同值导致不同微分指数的情况(考虑将复杂方程变为简单方程的参数值)。同样,差异指数可能会在模拟运行期间更改其值。使用处理 higher-index 微分方程的常用方法很难捕获这种类型。

结构指数:常用的方法是用s.c来近似微分指数。结构指数:它是方程系统的 graph-based 表示,从中可以近似微分指数。 ODE 系统的结构索引为 0,而 non-differential 方程系统的结构索引为 -1。索引缩减是使用 Pantelides 算法和虚拟导数方法的组合进行的,参见。相关文献。此类 graph-based 方法不会捕获在模拟期间不同或参数值不同的变化差异指数的数值方面。

Multi-modes DAEs,由这两种类型产生,受到积极的研究,并且已经有关于多模 DAEs 的新颖出版物,参见。 Hilding Elmqvist 在 Modelica 会议和期刊上的出版物以及 multi-mode DAE 的其他相关出版物(请注意,我没有确定关于该主题的最佳出版物)。

如果有通用角色遵循,那么这就是模型的所有分支都应该具有相同的结构索引(理想情况下在模拟过程中具有相同的差异索引).在前者中,结构指数可以很容易地被小模型的建模者近似。对于大型模型,如果仿真环境可以转储有关给定模型的 graph-based 结构(即计算图),其差异索引等信息,则将是有益的。在后一种类型中,建模者很难做到这一点捕获。如果模拟环境可以转储有关数值变化的微分指数的此类信息,那就太理想了。

这与正在进行的 https://github.com/modelica/ModelicaSpecification/issues/2411 讨论有关,其中(在 Modelica 语言规范版本 3.4 中)未指定变量结构模型是合法的,还是工具特定的或非法的。有一些带有 DAE 求解器的工具(和概念证明)可以成功模拟此类模型。