OpenModelica и JModelica дают существенно разные результаты - PullRequest
0 голосов
/ 04 октября 2019

После этого вопроса я пытаюсь сравнить результаты моделирования между 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()

, что приводит к:

               <img src="https://i.stack.imgur.com/sLfKA.png" width="400">
                      Fig.1 - Velocity versus time solved by JModelica.                

и

               <img src="https://i.stack.imgur.com/U7bkA.png" width="400">
           Fig.2 - Friction and shear force versus time solved by JModelica.                

но если я установлю параметры моделирования в OpenModelica как:

                     <img src="https://i.stack.imgur.com/IiEJK.png" width="300">
                    Fig.3 - Simulation options in OpenModelica.                

, что приведет к:

               <img src="https://i.stack.imgur.com/rQQb8.png" width="400">
                   Fig.4 - Velocity versus time solved by OpenModelica.                

и

               <img src="https://i.stack.imgur.com/3ttuS.png" width="400">
        Fig.5 - Friction and shear force versus time solved by OpenModelica.                

Буду признателен, если вы поможете мне понять, почему результаты так различны, и как я могу добиться аналогичного моделирования с помощью этих двух разных компиляторов.

PS опубликовал дополнительный вопрос здесь, на форуме OpenModelica .

1 Ответ

0 голосов
/ 07 октября 2019

Прежде всего код, который я упоминал в моем предыдущем посте , был неправильным. В дополнение к некоторым небольшим проблемам, которые обсуждались здесь , следует использовать функцию noEvent, чтобы убедиться, что условия оператора if скомпилированы правильно (подробнее здесь ),Правильная версия кода упоминается здесь .

Чтобы JModelica мог выдавать результаты, аналогичные OpenModelica, Christian Winther здесь дал команду поиграть с параметром opts["CVode_options"]["maxh"], значение которого по умолчанию 0,Я установил опцию:

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

, и JModelica работала нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...