Modelica Dymola中使用多模DAE的错误

Modelica Dymola中使用多模DAE的错误,modelica,dymola,Modelica,Dymola,我在Dymola中建立了一个简单的模型,在不同的时期使用不同的方程,但让我惊讶的是,Dymola无法处理这个简单的模型。在指数缩减后,系统似乎是奇异的 我的问题是: 这是使用Modelica时的常见问题吗 如果是这样,我应该如何修改这个模型,我知道当我用der(x)=0替换方程x=100时,模型运行良好,但我想知道对于更复杂的情况是否有一个通用规则。如能提供详细解释,我将不胜感激 以下是模型的代码: model ErrorWhenUsingIf Real x(start=

我在Dymola中建立了一个简单的模型,在不同的时期使用不同的方程,但让我惊讶的是,Dymola无法处理这个简单的模型。在指数缩减后,系统似乎是奇异的

我的问题是:

  • 这是使用Modelica时的常见问题吗
  • 如果是这样,我应该如何修改这个模型,我知道当我用
    der(x)=0
    替换方程
    x=100
    时,模型运行良好,但我想知道对于更复杂的情况是否有一个通用规则。如能提供详细解释,我将不胜感激
以下是模型的代码:

    model ErrorWhenUsingIf
      Real x(start=100);
    equation 
      if time<=0.5 then
        x=100;
      else
       der(x)=5;
      end if;
    end ErrorWhenUsingIf;
使用IF时的模型错误
实x(起点=100);
方程式

如果时间给定模型不遵守当前规则之一,遵循实现可模拟/可编译Modelica模型的常见典型直接方法:

模型在整个过程中不得改变其差异指数 模拟

《Modelica语言规范指南》的实际版本并没有明确阻止实现这些模型,也没有什么不利于实现这一点

普通模拟环境显然不会模拟这样一个简单的模型,除非明确说明允许多模式DAE

现在我们来详细讨论一下,微分指数非正式地对应于状态变量之间隐式/显式依赖的固有程度。在整个模拟过程中,差异指数有两种变化方式,一种是结构方式,另一种是数值方式

以结构化的方式将模型(与给定模型类似)表示为方程系统的几个分支。每个分支对应一个不同的微分指数。在给定的模型中,一个分支对应于一个线性方程,而另一个分支对应于一个微分方程。结构分析的一个典型实现将揭示该模型对应于一个ODE系统(第一个分支不是这样)。我猜线性方程会提交给ODE解算器。如果我们在If条件之外添加一个伪微分方程,例如
der(z)=-1
,系统将被模拟,因为结构分析意外(半)正确

如果我们在不同的分支中处理高索引DAE,我们可能会得到数值上不精确的解决方案,因为索引缩减不是针对每个可能的分支分别进行的。将解算器应用于非简化DAE可能会导致数值解出现草稿,因为传递给解算器的最终简化方程中未明确显示隐式代数方程

以数值方式在某些情况下,模型参数的不同值会导致不同的微分指数(想想一个参数值,它会将复杂的方程变为平凡的方程)。类似地,差异索引可能在模拟运行时更改其值。使用处理高指数微分方程的常用方法很难捕捉到这种类型

结构指数:常用方法是使用s.c.结构指数来近似微分指数:这是一种基于图表的方程系统表示法,通过它可以近似计算微分指数。ODE系统的结构指数为0,而非微分方程系统的结构指数为-1。参考相关文献,使用Pantelides算法和虚拟导数方法的组合进行指数缩减。这种基于图形的方法无法捕捉在模拟过程中不同的微分指数或不同的参数值的数值方面的变化

由这两种类型产生的多模DAE受到了积极的研究,并且已经有了关于多模DAE的新出版物,参见Hilding Elmqvist在Modelica会议和期刊上的出版物以及其他关于多模DAE的相关出版物(请注意,我不确定关于这个主题的最佳出版物是什么)


如果有一个通用的角色,那么一个模型的所有分支都应该具有相同的结构索引(理想情况下,在模拟过程中具有相同的差异索引)。在前者中,对于小模型,建模者可以轻松地近似结构索引。对于大模型,如果仿真环境可以转储有关基于图形的结构(即计算图形)的信息,这将是有益的在后一种类型中,建模人员很难捕获给定模型的差异索引等。如果模拟环境可以转储有关数值变化的差异索引的此类信息,这是理想的。

这与正在进行的讨论有关,其中(在Modelica语言规范版本3.4中)未指定变结构模型是合法的,还是特定于工具的或非法的。有些工具(和概念证明)带有DAE解算器,可以成功模拟此类模型。

同意。我相应地更改了答案。
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