【问题标题】:OpenModelica and JModelica deliver significantly different resultsOpenModelica 和 JModelica 提供了截然不同的结果
【发布时间】:2019-10-03 22:44:43
【问题描述】:

在this question 之后,我正在尝试比较 JModelica 和 OpenModelica 之间的模拟结果。 Modelica 文件与the above-mentioned post 相同,JModelica 包装器是更正版本:

#%%
from pymodelica import compile_fmu
from pyfmi import load_fmu
import matplotlib.pylab as plt

#%%
model_name = 'friction1D.fricexample_1'
mofile = 'friction1D.mo'

#%%
fmu_name = compile_fmu(model_name, mofile)
sim = load_fmu(fmu_name)

#%%
opts = sim.simulate_options()
opts["ncp"] = 500
opts['CVode_options']['rtol'] = 1.0e-8
res = sim.simulate(final_time=10, options=opts)

#%%
time = res['time']
vel = res['v']
ffo = res['ffo']
sfo = res['sfo']

#%%
plt.plot(time, vel)
plt.xlabel("Time (s)")
plt.ylabel("Velocity (m/s)")
plt.show()

#%%
plt.plot(time, ffo, label="friction force")
plt.plot(time, sfo, label="shear force")
plt.xlabel("Time (s)")
plt.ylabel("Force (N)")
plt.legend()
plt.show()

导致:

图 1 - JModelica 求解的速度与时间关系。

和

图 2 - JModelica 求解的摩擦力和剪切力与时间的关系。

但如果我将 OpenModelica 中的模拟选项设置为:

图 3 - OpenModelica 中的模拟选项。

导致:

图 4 - OpenModelica 求解的速度与时间关系。

和

图 5 - OpenModelica 求解的摩擦力和剪切力与时间的关系。

如果您能帮助我了解结果为何如此不同,以及如何使用这两种不同的编译器实现类似的模拟,我将不胜感激。

P.S. 发布了后续问题here on the OpenModelica forum。

【问题讨论】:

    标签: modelica openmodelica jmodelica pyfmi pymodelica


    【解决方案1】:

    首先the code, I had mentioned in my previous post 是错误的。除了here 讨论过的一些小问题外,还应该使用noEvent 函数来确保正确编译if 语句的条件(更多信息here)。代码的正确版本提到了here。

    为了让 JModelica 提供与 OpenModelica 类似的结果,Christian Wintherhere 指示我使用默认值为 0 的 opts["CVode_options"]["maxh"] 参数。我将选项设置为:

    opts['CVode_options']['maxh'] = 0.01
    

    并且 JModelica 运行良好。

    【讨论】:

      猜你喜欢
      • 2021-05-31
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      相关资源
      最近更新 更多