OpenModelica and JModelica deliver significantly different results

孤人 提交于 2019-12-11 15:34:43

问题


Following this question, I'm trying to compare the results of the simulation between JModelica and OpenModelica. The Modelica file is identical to the above-mentioned post and the JModelica wrapper is the corrected version:

#%%
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()

resulting in:

               

Fig.1 - Velocity versus time solved by JModelica.

and

               

Fig.2 - Friction and shear force versus time solved by JModelica.

but if I set the simulation options in OpenModelica as:

                     

Fig.3 - Simulation options in OpenModelica.

which results in:

               

Fig.4 - Velocity versus time solved by OpenModelica.

and

               

Fig.5 - Friction and shear force versus time solved by OpenModelica.

I would appreciate it if you could help me know why the results are so different and how I can achieve a similar simulation with these two different compilers.

P.S. posted a follow-up question here on the OpenModelica forum.


回答1:


First of all the code, I had mentioned in my previous post was wrong. In addition to some small issues which have been discussed here, one should use the noEvent function to be sure the conditions of an if-statement are compiled correctly (more info here). The correct version of the code is mentioned here.

For JModelica to deliver similar results as OpenModelica I was instructed by Christian Winther here to play with the opts["CVode_options"]["maxh"] parameter which has a default value of 0. I set the option to:

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

and JModelica worked fine.



来源:https://stackoverflow.com/questions/58227795/openmodelica-and-jmodelica-deliver-significantly-different-results

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!