在这个问题之后,我试图比较 JModelica 和 OpenModelica 之间的模拟结果。Modelica 文件与上述帖子相同,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 求解的摩擦力和剪切力与时间的关系。
如果您能帮助我了解为什么结果如此不同以及如何使用这两种不同的编译器实现类似的模拟,我将不胜感激。
PS在 OpenModelica 论坛上发布了一个后续问题。