I made a model of a cardiovascular system with OpenModelica. The model is very complex so I can’t post it all here.
If I run the model from the terminal or using OMCSessionZMQ (like shown below) there are no issues (other than some warnings) and the simulation finishes successfully.
omc = omp.OMCSessionZMQ()
for cmd in cmds: # cmds is an array of "loadFile(file.mo)" strings
omc.sendExpression(cmd)
omc.sendExpression("simulate(System, stopTime=1000.0)")
And I get this output:
LOG_STDOUT | warning | The default linear solver fails, the fallback solver with total pivoting is started at time 0.000000. That might raise performance issues, for more information use -lv LOG_LS.
LOG_STDOUT | warning | The default linear solver fails, the fallback solver with total pivoting is started at time 0.000000. That might raise performance issues, for more information use -lv LOG_LS.
LOG_SUCCESS | info | The initialization finished successfully without homotopy method.
LOG_SUCCESS | info | The simulation finished successfully.
The issue comes when I use ModelicaSystem to create a model object in order to set the parameters and get the results more easily, using OMPython‘s API. When I try to simulate the model, the solver fails. Below there is the code fragment with ModelicaSystem and the printed output.
mod = omp.ModelicaSystem(absolute_path, # to system.mo file
'System',
['Modelica']
)
### SET PARAMETERS
param_changes = []
for param_name in parameters.keys():
param_value = parameters[param_name]
param_changes.append(f'params.{param_name}={param_value}')
mod.setParameters(param_changes)
### SIMULATE
mod.setSimulationOptions(["startTime=0.0",
f"stopTime={simulation_time}.0",
"tolerance=1e-06",
"stepSize=0.002"
])
mod.simulate()
LOG_STDOUT | warning | The default linear solver fails, the fallback solver with total pivoting is started at time 0.000000. That might raise performance issues, for more information use -lv LOG_LS.
LOG_STDOUT | warning | The default linear solver fails, the fallback solver with total pivoting is started at time 0.000000. That might raise performance issues, for more information use -lv LOG_LS.
LOG_SUCCESS | info | The initialization finished successfully without homotopy method.
LOG_STDOUT | warning | The default linear solver fails, the fallback solver with total pivoting is started at time 0.000000. That might raise performance issues, for more information use -lv LOG_LS.
LOG_STDOUT | warning | Error solving linear system of equations (no. 961) at time 0.000000.
LOG_STDOUT | warning | Solving linear system 961 fails at time 0. For more information use -lv LOG_LS.
LOG_ASSERT | debug | Solving linear system 961 failed at time=0.
| | | | For more information please use -lv LOG_LS.
LOG_STDOUT | info | model terminate | linear system solver failed. | Simulation terminated at time 0
Why does ModelicaSystem fails and OMCSessionZMQ doesn’t? How can I fix this?
I would really like to use the OMPython API to change the parameters and get the results without having to tweak files “by hand”.
I thought the issue was with the mod.setSimulationOptions(...)
function overriding the default settings, but even without calling it the solver still fails. I think it might have to do with some environmental factors but I wouldn’t know where to look.
Thank you.
Andrea Di Marco is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.