如何在 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不允许显示非线性方程的细节
我想找到由 Dymola 中的撕裂算法选择的变量集。这样我就可以知道哪些变量 link 系统的不同部分在一起。但我不确定如何在 Dymola 中显示这些变量。我查看了 Dymola 的帮助文档,但没有找到任何与如何显示这些变量相关的内容。
您应该能够在 dsmodel.mof
中看到它,它是在设置 Advanced.OutputModelicaCode = true;
或在 UI 中使用“模拟设置 -> 翻译 -> 生成列表”创建的dsmodel.mof".
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不允许显示非线性方程的细节