OpenModelica中如何将稳态模拟结果自动作为瞬态模拟初始值?
如何在OpenModelica中自动将稳态结果作为瞬态模拟初始值
针对你使用OpenModelica v1.14.1和OMSimulator的场景,以下两种方法可实现稳态结果到瞬态初始值的自动传递:
方法一:使用OpenModelica脚本导出+加载稳态值
这种方法通过脚本完成稳态模拟、结果导出,再将结果加载为瞬态模型的初始值,适合纯Modelica模型场景:
- 编写稳态模拟脚本
创建.mos脚本文件,运行稳态模拟并导出变量结果:
loadModel(Modelica); loadModel(你的模型所在包名); // 运行稳态模拟(stopTime设为0指定稳态求解) simulate(你的稳态模型名称, stopTime=0, simulationType="steadyState", resultFile="steady_state_result.mat"); // 导出所有变量到MAT文件 exportResult(resultFile="steady_state_result.mat", variables={"*"});
- 编写瞬态模拟加载脚本
在另一个.mos脚本中,加载稳态结果并设置为瞬态模型的初始值:
loadModel(Modelica); loadModel(你的模型所在包名); // 加载稳态结果文件 import Modelica.Utilities.Files.loadMatFile; auto steadyStateData = loadMatFile("steady_state_result.mat"); // 将稳态值映射为瞬态模型的初始值并运行模拟 simulate(你的瞬态模型名称, startTime=0, stopTime=你的瞬态时长, initialValues=steadyStateData.variables);
如果initialValues参数在v1.14.1中不支持,可改用setInitialValues函数逐个设置变量,或者在模拟时指定initialization="file"并指向稳态结果文件。
方法二:使用OMSimulator耦合稳态与瞬态模型
利用OMSimulator的模型耦合能力,可直接将稳态模型的收敛结果传递给瞬态模型作为初始条件,步骤如下:
创建.oms脚本文件:
// 创建复合模型容器 oms_newModel("SteadyToTransient"); oms_addSystem("SteadyToTransient.root", oms_system_sc); // 添加稳态和瞬态模型实例 oms_addSubModel("SteadyToTransient.root.SteadyModel", "你的稳态模型文件.mo"); oms_addSubModel("SteadyToTransient.root.TransientModel", "你的瞬态模型文件.mo"); // 配置稳态模型为稳态求解模式 oms_setSimulationType("SteadyToTransient.root.SteadyModel", oms_simulator_steadyState); // 建立变量映射:将稳态模型的关键变量(如流速、压力等)传递给瞬态模型的初始值 oms_addConnection("SteadyToTransient.root.SteadyModel.fluidVelocity", "SteadyToTransient.root.TransientModel.fluidVelocity"); oms_addConnection("SteadyToTransient.root.SteadyModel.pressure", "SteadyToTransient.root.TransientModel.pressure"); // 根据你的模型需求,添加所有需要传递的变量 // 先运行稳态模型直至收敛 oms_simulate("SteadyToTransient.root.SteadyModel"); // 将稳态结果设置为瞬态模型的初始值并运行瞬态模拟 oms_setInitialValuesFromModel("SteadyToTransient.root.TransientModel", "SteadyToTransient.root.SteadyModel"); oms_simulate("SteadyToTransient.root.TransientModel", stopTime=你的瞬态时长);
针对你之前失败的说明
你尝试的GitHub方案可能依赖OpenModelica较新版本的初始化特性,而v1.14.1作为旧版本不支持这些新功能。上述两种方法适配v1.14.1和OMSimulator的版本,稳定性更强。
内容的提问来源于stack exchange,提问作者AMINE CHNIOUEL
相关产品推荐
相关产品推荐

