小编Mar*_*vel的帖子

调试 Modelica 模型的结构奇异并最小化非线性

我构建了一个 Modelica 模型,但是在检查模型时(这是模型下载链接),它显示了一个局部奇点,如下面的屏幕截图所示。 在此处输入图片说明

所以我删除了错误消息中显示的代码。

h[3]=(hout+hl)/2
Run Code Online (Sandbox Code Playgroud)

但尽管模型检查良好,但存在导致初始化失败的强烈非线性问题。

在此处输入图片说明 在此处输入图片说明

所以我尝试删除以下代码行:

h[1]=(hin+hv)/2
Run Code Online (Sandbox Code Playgroud)

并且模型不仅检查而且没有初始化问题。

在此处输入图片说明

我的问题是:

  1. 在调试模型奇点时,Dymola 显示的错误信息可能不是模型的奇点来源?有没有找到奇点问题根源的通用方法?或者我必须手动分析模型中的方程?
  2. 如何最小化Modelica模型的非线性并保证收敛?我发现这个问题存在于很多领域,尤其是在热工水力模型中,我发现处理这个问题的一种方法是使用Modelon 的 Thermao Power LibraryThermoSysPro for EDF 的方式,这两个库划分模型或连接器分为流量和体积两种。为了确保收敛,它需要使用交错网格方案,如下面的屏幕截图所示。

    那么有没有另一种方法来处理热工水力模型中的非线性问题呢?关于如何处理热工水力模型中的非线性问题,是否有共同的看法?

在此处输入图片说明

modelica dymola

11
推荐指数
0
解决办法
257
查看次数

在 Dymola 中使用先前模拟结果的结果值作为下一次模拟的猜测值

初始化可能非常繁琐,容易导致发散。一个简单的策略是在构建整个系统的一部分时运行模拟,并使用模拟结果来修改猜测值。这是我在 Francesco Casella 的 PPT 和 Daniel Bouskela 的书中得到的内容。

在此处输入图片说明

在此处输入图片说明

我发现我可以在 Dymola 中使用一个选项,如下所示,但我想在达到稳定状态时使用结果而不是使用初始化结果。所以我想使用python脚本从.mat结果文件中提取结果,然后自动修改迭代变量。但关键的问题是,我不知道当我在我的模型中添加更多组件时,现有组件的迭代变量集会发生变化,我不知道这会导致什么样的效果。任何人对这个问题有意见,欢迎回答这个问题。

所以我的问题是我应该在哪里找到python

在此处输入图片说明

在此处输入图片说明

modelica dymola

6
推荐指数
1
解决办法
121
查看次数

Does Dymola have the similar function of "equation browser" like Wolfram system modeler?

Wolfram system modeler has a function called "equation browser", the youtube video here(at 20:58) gives an introduction about "equation browser", I am wondering if Dymola has the same function, it would be helpful to debug nonlinear system.
Also, it is welcome for some other workaround solution, like using python to visualize the equation structures.

这是“方程式浏览器”的屏幕截图。
在此处输入图片说明

wolfram-mathematica modelica systemmodeler dymola

6
推荐指数
1
解决办法
141
查看次数

如何使 Dymola 中的动态模型与稳态设计结果一致?

Modelica建模是第一原理建模,所以如何测试模型并设置一个有效的基准很重要,比如我可以随心所欲地设计一个流体网络,但是在建立动态仿真模型时,我需要知道详细的几何形状结构和参数来设置我的模型的每一部分。通常,我会建立一个具有简单能量守恒定律和质量守恒定律的稳态模型,然后根据相应的设计手册设计每一台设备,但是当我将每个动态组件放在一起时,仿真到稳态时,结果是与稳态模型或多或少不同。所以我想知道我是否应该修改我的工作流程以使动态模型与稳态模型一致。欢迎任何建议。

#dymola #modelica

modelica dymola

6
推荐指数
1
解决办法
142
查看次数

Dymola 中的错误“无法为 FMU 生成 XML 文件”?

模型工作正常,但在我的 PC 上,它最终出现错误“无法为 FMU 生成 XML 文件”。有人告诉我这是因为 XML 解析器在 Windows 系统上损坏了。有谁知道这个问题的确切原因?

在此处输入图片说明

modelica dymola

4
推荐指数
1
解决办法
262
查看次数

何时在 Modelica 语言中使用 noEvent 运算符?

Modelica 中的 noEvent 运算符不使用迭代来查找触发事件的精确时刻。

在此处输入图片说明

似乎这会导致计算错误,这是我在以下网站上找到的示例 https://mbe.modelica.university/behavior/discrete/decay/ 那么我是否必须确保在使用 noEvent 运算符时函数是平滑的?如果不能确保准确性,使用 noEvent 运算符的目的是什么?

在此处输入图片说明

modelica

4
推荐指数
2
解决办法
510
查看次数

在 Dymola 中解决 DAEs,为什么在执行 Patelides 算法后使用 DASSL 算法?

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

在此处输入图片说明

基于以下变量的定义,我认为求解 DAE 的过程是

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明 在此处输入图片说明

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

在此处输入图片说明

我的问题是:
使用 Pantelides 算法进行索引归约和分区后,我可以用牛顿法求解方程,但为什么 Dymola 必须再次进行分区并使用 DASSL 算法?

在此处输入图片说明

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

在此处输入图片说明

differential-equations modelica dymola

4
推荐指数
2
解决办法
158
查看次数

不同的Modelica仿真环境之间有什么区别?

有不同的Modelica仿真环境,包括Dymola,Wolfram SystemModeler,OpenModelica和Jmodelica。因此,我尝试加载热流体库(ThermoSysPro https://github.com/Dwarf-Planet-Project/ThermoSysPro),但是除了Dymola之外,其他软件上的结果均以错误结尾。

如果库和仿真环境均基于Modelica规范标准,为什么存在兼容性问题?我认为该库可能包含仅Dymola支持的某些功能。谁能澄清这些仿真环境之间的区别?

modelica systemmodeler openmodelica dymola jmodelica

3
推荐指数
1
解决办法
71
查看次数

Dymola 中的命令手册

Dymola 中是否有命令集或参考手册?例如,如果我想知道当前的工作目录,我应该使用哪个命令?我试过pwddir,但它们没有用。

在此处输入图片说明

modelica dymola

3
推荐指数
1
解决办法
305
查看次数

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

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

我的问题是:

  • 这是使用 Modelica 时常见的问题吗?
  • 如果是这样,我应该如何修改这个模型,我知道当我用 替换方程x=100der(x)=0,模型工作正常,但我想知道是否有适用于更复杂情况的通用规则。如果提供详细的解释,我将不胜感激。

这是模型的代码:

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

错误信息是:

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. …
Run Code Online (Sandbox Code Playgroud)

modelica dymola

3
推荐指数
1
解决办法
165
查看次数