如何在 Dymola 中找到撕裂算法选择的变量

How to find the variables selected by the tearing algorithm in Dymola

我想找到由 Dymola 中的撕裂算法选择的变量集。这样我就可以知道哪些变量 link 系统的不同部分在一起。但我不确定如何在 Dymola 中显示这些变量。我查看了 Dymola 的帮助文档,但没有找到任何与如何显示这些变量相关的内容。

您应该能够在 dsmodel.mof 中看到它,它是在设置 Advanced.OutputModelicaCode = true; 或在 UI 中使用“模拟设置 -> 翻译 -> 生成列表”创建的dsmodel.mof".

中已翻译的 Modelica 代码

Dymola 将在// Torn part 中生成相关代码。在 dsmodel.mof 中搜索此文件是一个不错的选择,因为文件可能会变得很大。

确切的代码将取决于问题的类型。两个例子:

(1) 像这样一个相当简单的电气 将以符号方式解决,结果代码:

...
// Linear system of equations
// Tag: simulation.linear[1]
  // Symbolic solution
    /*  Original equation
    resistor1.v = constantVoltage.V-resistor.v-capacitor.v;
    */
    resistor1.p.i :=  -(capacitor.v-constantVoltage.V+resistor.R_actual*
      inductor.i)/(resistor.R_actual+resistor1.R_actual);
  // Torn part
    resistor.p.i := inductor.i+resistor1.p.i;
    resistor.v := resistor.R_actual*resistor.p.i;
    resistor1.v := resistor1.R_actual*resistor1.p.i;
// End of linear system of equations
...

在这种情况下,撕裂变量是 resistor1.p.i,其中直接说明了计算它的方程式。

(2) 翻译 Modelica.Thermal.FluidHeatFlow.Examples.TwoMass 会给你一个非线性的情况,即当需要迭代来求解方程组时。你应该找到类似的东西:

...
  // Start values for iteration variables of non-linear system of 1 equations: 
  //   pipe2.V_flow(start = 0)
algorithm // Torn part
  pipe2.flowPort_a.m_flow := pipe2.V_flow*pipe2.medium.rho;
  pipe1.flowPort_a.m_flow :=  -(pipe2.flowPort_a.m_flow+ambient1.flowPort.m_flow);
...

在这种情况下,撕裂变量是 pipe2.V_flow,迭代的起始值。

在 Dymola 2021X 中,我们可以使用 Equation Incidence Browser 查看非线性方程中使用了哪些变量,我猜这些变量可以被视为撕裂变量。这也适用于商业图书馆。但遗憾的是Dymola 2021X不允许显示非线性方程的细节