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

所以我删除了错误消息中显示的代码。
h[3]=(hout+hl)/2
Run Code Online (Sandbox Code Playgroud)
但尽管模型检查良好,但存在导致初始化失败的强烈非线性问题。
所以我尝试删除以下代码行:
h[1]=(hin+hv)/2
Run Code Online (Sandbox Code Playgroud)
并且模型不仅检查而且没有初始化问题。
我的问题是:
如何最小化Modelica模型的非线性并保证收敛?我发现这个问题存在于很多领域,尤其是在热工水力模型中,我发现处理这个问题的一种方法是使用Modelon 的 Thermao Power Library和ThermoSysPro for EDF 的方式,这两个库划分模型或连接器分为流量和体积两种。为了确保收敛,它需要使用交错网格方案,如下面的屏幕截图所示。
那么有没有另一种方法来处理热工水力模型中的非线性问题呢?关于如何处理热工水力模型中的非线性问题,是否有共同的看法?
初始化可能非常繁琐,容易导致发散。一个简单的策略是在构建整个系统的一部分时运行模拟,并使用模拟结果来修改猜测值。这是我在 Francesco Casella 的 PPT 和 Daniel Bouskela 的书中得到的内容。
我发现我可以在 Dymola 中使用一个选项,如下所示,但我想在达到稳定状态时使用结果而不是使用初始化结果。所以我想使用python脚本从.mat结果文件中提取结果,然后自动修改迭代变量。但关键的问题是,我不知道当我在我的模型中添加更多组件时,现有组件的迭代变量集会发生变化,我不知道这会导致什么样的效果。任何人对这个问题有意见,欢迎回答这个问题。
所以我的问题是我应该在哪里找到python
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.
Modelica建模是第一原理建模,所以如何测试模型并设置一个有效的基准很重要,比如我可以随心所欲地设计一个流体网络,但是在建立动态仿真模型时,我需要知道详细的几何形状结构和参数来设置我的模型的每一部分。通常,我会建立一个具有简单能量守恒定律和质量守恒定律的稳态模型,然后根据相应的设计手册设计每一台设备,但是当我将每个动态组件放在一起时,仿真到稳态时,结果是与稳态模型或多或少不同。所以我想知道我是否应该修改我的工作流程以使动态模型与稳态模型一致。欢迎任何建议。
#dymola #modelica
Modelica 中的 noEvent 运算符不使用迭代来查找触发事件的精确时刻。
似乎这会导致计算错误,这是我在以下网站上找到的示例 https://mbe.modelica.university/behavior/discrete/decay/ 那么我是否必须确保在使用 noEvent 运算符时函数是平滑的?如果不能确保准确性,使用 noEvent 运算符的目的是什么?
我对 Dymola 中的 DAE 求解过程感到困惑。所以我做了一个例子来探索它。
这是示例方案和控制方程的屏幕截图
基于以下变量的定义,我认为求解 DAE 的过程是
我使用以下调试设置在 Dymola 中构建模型。
由于我的模型中DAE的指数是3,所以需要做指数约简,使用Pantelides算法后,Dymola会在DAE系统中加入更多的微分方程。
翻译日志验证了我的推断。

现在,根据方程浏览器,很明显 DAE 系统已被修改为 BLT 形式,我想我可以在当前方程系统中使用牛顿法,但 Dymola 会使用 DASSL 算法。显然,DASSL 会再次从头开始构建结构雅可比矩阵,因此在初始化(使用 Pantelides 算法)和模拟(使用 DASSL 算法)过程中,将使用不同的结构雅可比矩阵。
我的问题是:
使用 Pantelides 算法进行索引归约和分区后,我可以用牛顿法求解方程,但为什么 Dymola 必须再次进行分区并使用 DASSL 算法?
另外,我在 Wolfram System Modeler 中比较了结构化雅可比矩阵在初始化和仿真过程中,发现这两个矩阵是不同的。
有不同的Modelica仿真环境,包括Dymola,Wolfram SystemModeler,OpenModelica和Jmodelica。因此,我尝试加载热流体库(ThermoSysPro https://github.com/Dwarf-Planet-Project/ThermoSysPro),但是除了Dymola之外,其他软件上的结果均以错误结尾。
如果库和仿真环境均基于Modelica规范标准,为什么存在兼容性问题?我认为该库可能包含仅Dymola支持的某些功能。谁能澄清这些仿真环境之间的区别?
我在 Dymola 中建立了一个简单的模型,在不同时期使用不同的方程,但令我惊讶的是 Dymola 无法处理这个简单的模型。索引减少后,系统似乎是奇异的。
我的问题是:
x=100时der(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)