在Dymola中求解DAEs,为什么执行完Patelides算法后还要用DASSL算法?

In Dymola to solve DAEs, why use the DASSL algorithm after performing the Patelides algorithm?

我对 Dymola 中的 DAE 求解过程感到困惑。所以我做了一个例子来探究一下。
这是示例方案和控制方程的屏幕截图

根据下面的变量定义,我认为求解DAEs的过程是

  1. 选择状态变量
  2. 使用积分器根据导数计算状态变量。
  3. 计算其他变量。

我使用以下调试设置在 Dymola 中构建模型。

由于我模型中DAE的指数是3,需要做指数约简,在使用Pantelides算法后,Dymola会在DAE系统中加入更多的微分方程。
翻译日志验证了我的推论。

现在,根据方程浏览器,很明显DAE系统已经被修改为BLT形式,我想我可以用当前方程系统的牛顿法,但Dymola会使用DASSL算法。显然,DASSL 会再次从头开始构建结构雅可比矩阵,因此在初始化(使用 Pantelides 算法)和模拟(使用 DASSL 算法)过程中,将使用不同的结构雅可比矩阵。

我的问题是:
用Pantelides算法做索引归约和分区后,我可以用牛顿法解方程,但为什么Dymola要重新做分区并使用DASSL算法?

另外,我在Wolfram System Modeler中比较了Structural Jacobian Matrix在初始化和仿真过程中,发现这两个矩阵是不同的。

After using Pantelides Algorithm to do index reduction and partitioning, I could solve the equations with Newton Method, but why does Dymola have to do partitioning again and use DASSL Algorithm?

简单的答案是:它不必进行额外的分区或使用 DASSL。您只需单击几个按钮并将算法更改为 cvode、Runge-Kutta、Euler 等。我有点不确定,但我认为 Dymola 不会在 ODE 模式下为 DASSL 做任何额外的分区(我肯定知道OpenModelica 的 DASSL 算法没有——尽管使用 DAE 求解器来求解 ODE 系统有点愚蠢)。如果你 运行 在 DAE 模式下模拟,你甚至可以跳过索引缩减(取决于系统的索引)。

积分法(如dassl)所做的,其实就是逐个时间步求解系统时间。 Pantelides 算法所做的是索引缩减(在 Modelica 工具中通常为 ODE 形式,这是大多数集成方法所需要的)。

我觉得其实有两点对于理解整个过程很重要:

  1. 初始化和模拟的方程组不同。原因是例如在第 8.6 节的 Modelica Language Specification 3.4 中找到:

During this phase, also the derivatives, der(..), and the pre-variables, pre(..), are interpreted as unknown algebraic variables. The initialization uses all equations and algorithms that are utilized in the intended operation...

基本上,一组不同的未知数(和各自的方程)会导致两个独立的问题来解决初始化和模拟过程。据我所知,符号处理(包括 Pantelides 算法)用于简化这两个问题。例如:翻译 Modelica.Blocks.Examples.PID_Controller 会产生以下翻译日志,它将两个方面分开(注意:“翻译模型”和“初始化问题”不同):

  1. 找到初始问题的一致解后(例如使用牛顿法),实际积分开始。初始化完成后 DASSL 所做的与所有其他动态模拟求解器相同:使用当前步骤的信息和模型方程计算的导数(在 DASSL 的情况下)计算下一个模拟步骤的状态向量和其他一些,DASSL 使用隐式 BDF 算法的未来值,参见例如 here).

DASSL 有一个特别之处,虽然不是唯一的,但它有两个接口可以在仿真期间使用:它可以与系统的 ODE 描述一起工作(在它被转换之后,例如通过符号Dymola 的预处理)或者它可以使用 DAE 描述(通过设置 Advance.Define.DAEsolver=true;)。默认情况下,使用 ODE 接口。两者各有优势,Dymola 手册指出:

When DAE solver is enabled the equations in the output and dynamics section of the model are not solved during calls to the model. They are instead handled by the integrator as part of the nonlinear system of equations that the integrator solves each step. If the translated model contains several or large nonlinear equation systems, then DAE solvers may be more efficient since fewer nonlinear systems are solved.