OpenModelica支持函数偏导数吗?模拟遇内部错误求助
OpenModelica函数偏导数模拟时的翻译错误原因分析
OpenModelica曾通过相关变更添加了函数偏导数的支持,以下是用于测试的Modelica代码:
model PartFncTest function sinwave input Real x; output Real y; algorithm y := sin(x); end sinwave; function coswave = der(sinwave,x); Real cosVal; equation cosVal = coswave(10); end PartFncTest;
该代码在模型检查阶段可以正常通过:
[1] 14:24:58 Scripting Notification Check of PartFncTest completed successfully. Class PartFncTest has 1 equation(s) and 1 variable(s). 1 of these are trivial equation(s).
但模拟阶段会触发翻译错误:
[2] 14:27:19 Translation Error [C:/dev/OM64bit/OMCompiler/Compiler/SimCode/SimCodeUtil.mo: 830:5-830:83]: Internal error Creation of Modelica functions failed.
错误原因
这个内部错误的核心原因是OpenModelica编译器的后端代码生成逻辑存在缺陷:
- 模型检查阶段仅负责验证语法和静态语义的合法性,编译器能识别
der(sinwave,x)这种偏导数定义的语法规则,因此检查可以通过; - 但到了模拟前的代码生成环节,负责生成可执行代码的SimCode模块无法正确将导数函数的定义转换为可执行的代码实现,导致生成Modelica函数的内部步骤失败。
此外,也有可能是相关变更集仅完成了前端语法检查部分的支持,后端代码生成的完整逻辑尚未实现,属于功能未完全落地的情况。
内容的提问来源于stack exchange,提问作者邱紀戰
相关产品推荐
相关产品推荐

