Interoperability - C and Python¶
Below is information and examples about the OpenModelica external C interfaces, as well as examples of Python interoperability.
Calling External C functions¶
The following is a small example (ExternalLibraries.mo) to show the use of external C functions:
model ExternalLibraries
function ExternalFunc1
input Real x;
output Real y;
external y=ExternalFunc1_ext(x) annotation(Library="ExternalFunc1.o", LibraryDirectory="modelica://ExternalLibraries", Include="#include \"ExternalFunc1.h\"");
end ExternalFunc1;
function ExternalFunc2
input Real x;
output Real y;
external "C" annotation(Library="ExternalFunc2", LibraryDirectory="modelica://ExternalLibraries");
end ExternalFunc2;
Real x(start=1.0, fixed=true), y(start=2.0, fixed=true);
equation
der(x)=-ExternalFunc1(x);
der(y)=-ExternalFunc2(y);
end ExternalLibraries;
These C (.c) files and header files (.h) are needed (note that the headers are not needed since OpenModelica will generate the correct definition if it is not present; using the headers it is possible to write C-code directly in the Modelica source code or declare non-standard calling conventions):
double ExternalFunc1_ext(double x)
{
double res;
res = x+2.0*x*x;
return res;
}
double ExternalFunc1_ext(double);
double ExternalFunc2(double x)
{
double res;
res = (x-1.0)*(x+2.0);
return res;
}
The following script file ExternalLibraries.mos will perform everything that is needed, provided you have gcc installed in your path:
>>> system(getCompiler() + " -c -o ExternalFunc1.o ExternalFunc1.c")
0
>>> system(getCompiler() + " -c -o ExternalFunc2.o ExternalFunc2.c")
0
>>> system("ar rcs libExternalFunc2.a ExternalFunc2.o")
0
>>> simulate(ExternalLibraries)
record SimulationResult
resultFile = "«DOCHOME»/ExternalLibraries_res.mat",
simulationOptions = "startTime = 0.0, stopTime = 1.0, numberOfIntervals = 500, tolerance = 1e-6, method = 'dassl', fileNamePrefix = 'ExternalLibraries', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = ''",
messages = "LOG_SUCCESS | info | The initialization finished successfully without homotopy method.
LOG_SUCCESS | info | The simulation finished successfully.
",
timeFrontend = 9.637290000000001e-4,
timeBackend = 0.0033387660000000004,
timeSimCode = 5.977220000000001e-4,
timeTemplates = 0.001754913,
timeCompile = 0.10240402300000001,
timeSimulation = 0.004876872,
timeTotal = 0.11399737
end SimulationResult;
Note
Notification: Model statistics after passing the front-end and creating the data structures used by the back-end:
* Number of equations: 2
* Number of variables: 2
Notification: Model statistics after passing the back-end for initialization:
* Number of independent subsystems: 2
* Number of states: 0 ()
* Number of discrete variables: 0 ()
* Number of discrete states: 0 ()
* Number of clocked states: 0 ()
* Top-level inputs: 0
Notification: Strong component statistics for initialization (4):
* Single equations (assignments): 4
* Array equations: 0
* Algorithm blocks: 0
* Record equations: 0
* When equations: 0
* If-equations: 0
* Equation systems (not torn): 0
* Torn equation systems: 0
* Mixed (continuous/discrete) equation systems: 0
Notification: Model statistics after passing the back-end for simulation:
* Number of independent subsystems: 2
* Number of states: 2 (y,x)
* Number of discrete variables: 0 ()
* Number of discrete states: 0 ()
* Number of clocked states: 0 ()
* Top-level inputs: 0
Notification: Strong component statistics for simulation (2):
* Single equations (assignments): 2
* Array equations: 0
* Algorithm blocks: 0
* Record equations: 0
* When equations: 0
* If-equations: 0
* Equation systems (not torn): 0
* Torn equation systems: 0
* Mixed (continuous/discrete) equation systems: 0
And plot the results:
Figure 125 Plot generated by OpenModelica+gnuplot¶
Calling external Python Code from a Modelica model¶
The following calls external Python code through a very simplistic external function (no data is retrieved from the Python code). By making it a dynamically linked library, you might get the code to work without changing the linker settings.
function pyRunString
input String s;
external "C" annotation(Include="
#include <Python.h>
void pyRunString(const char *str)
{
Py_Initialize();
PyRun_SimpleString(str);
Py_Finalize();
}
");
end pyRunString;
model CallExternalPython
algorithm
pyRunString("
print('Python says: simulation time',"+String(time)+")
");
end CallExternalPython;
>>> system("python3-config --cflags > pycflags")
0
>>> system("python3-config --ldflags --embed > pyldflags")
0
>>> pycflags := stringReplace(readFile("pycflags"),"\n","");
>>> pyldflags := stringReplace(readFile("pyldflags"),"\n","");
>>> setCFlags(getCFlags()+pycflags)
true
>>> setLinkerFlags(getLinkerFlags()+pyldflags)
true
>>> simulate(CallExternalPython, stopTime=2)
record SimulationResult
resultFile = "«DOCHOME»/CallExternalPython_res.mat",
simulationOptions = "startTime = 0.0, stopTime = 2.0, numberOfIntervals = 500, tolerance = 1e-6, method = 'dassl', fileNamePrefix = 'CallExternalPython', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = ''",
messages = "Python says: simulation time 0
Python says: simulation time 0
Python says: simulation time 0.004
LOG_SUCCESS | info | The initialization finished successfully without homotopy method.
Python says: simulation time 0.008
Python says: simulation time 0.012
Python says: simulation time 0.016
Python says: simulation time 0.02
Python says: simulation time 0.024
Python says: simulation time 0.028
Python says: simulation time 0.032
Python says: simulation time 0.036
Python says: simulation time 0.04
Python says: simulation time 0.044
Python says: simulation time 0.048
Python says: simulation time 0.052
Python says: simulation time 0.056
Python says: simulation time 0.06
Python says: simulation time 0.064
Python says: simulation time 0.068
Python says: simulation time 0.072
Python says: simulation time 0.076
Python says: simulation time 0.08
Python says: simulation time 0.084
Python says: simulation time 0.088
Python says: simulation time 0.092
Python says: simulation time 0.096
Python says: simulation time 0.1
Python says: simulation time 0.104
Python says: simulation time 0.108
Python says: simulation time 0.112
Python says: simulation time 0.116
Python says: simulation time 0.12
Python says: simulation time 0.124
Python says: simulation time 0.128
Python says: simulation time 0.132
Python says: simulation time 0.136
Python says: simulation time 0.14
Python says: simulation time 0.144
Python says: simulation time 0.148
Python says: simulation time 0.152
Python says: simulation time 0.156
Python says: simulation time 0.16
Python says: simulation time 0.164
Python says: simulation time 0.168
Python says: simulation time 0.172
Python says: simulation time 0.176
Python says: simulation time 0.18
Python says: simulation time 0.184
Python says: simulation time 0.188
Python says: simulation time 0.192
Python says: simulation time 0.196
Python says: simulation time 0.2
Python says: simulation time 0.204
Python says: simulation time 0.208
Python says: simulation time 0.212
Python says: simulation time 0.216
Python says: simulation time 0.22
Python says: simulation time 0.224
Python says: simulation time 0.228
Python says: simulation time 0.232
Python says: simulation time 0.236
Python says: simulation time 0.24
Python says: simulation time 0.244
Python says: simulation time 0.248
Python says: simulation time 0.252
Python says: simulation time 0.256
Python says: simulation time 0.26
Python says: simulation time 0.264
Python says: simulation time 0.268
Python says: simulation time 0.272
Python says: simulation time 0.276
Python says: simulation time 0.28
Python says: simulation time 0.284
Python says: simulation time 0.288
Python says: simulation time 0.292
Python says: simulation time 0.296
Python says: simulation time 0.3
Python says: simulation time 0.304
Python says: simulation time 0.308
Python says: simulation time 0.312
Python says: simulation time 0.316
Python says: simulation time 0.32
Python says: simulation time 0.324
Python says: simulation time 0.328
Python says: simulation time 0.332
Python says: simulation time 0.336
Python says: simulation time 0.34
Python says: simulation time 0.344
Python says: simulation time 0.348
Python says: simulation time 0.352
Python says: simulation time 0.356
Python says: simulation time 0.36
Python says: simulation time 0.364
Python says: simulation time 0.368
Python says: simulation time 0.372
Python says: simulation time 0.376
Python says: simulation time 0.38
Python says: simulation time 0.384
Python says: simulation time 0.388
Python says: simulation time 0.392
Python says: simulation time 0.396
Python says: simulation time 0.4
Python says: simulation time 0.404
Python says: simulation time 0.408
Python says: simulation time 0.412
Python says: simulation time 0.416
Python says: simulation time 0.42
Python says: simulation time 0.424
Python says: simulation time 0.428
Python says: simulation time 0.432
Python says: simulation time 0.436
Python says: simulation time 0.44
Python says: simulation time 0.444
Python says: simulation time 0.448
Python says: simulation time 0.452
Python says: simulation time 0.456
Python says: simulation time 0.46
Python says: simulation time 0.464
Python says: simulation time 0.468
Python says: simulation time 0.472
Python says: simulation time 0.476
Python says: simulation time 0.48
Python says: simulation time 0.484
Python says: simulation time 0.488
Python says: simulation time 0.492
Python says: simulation time 0.496
Python says: simulation time 0.5
Python says: simulation time 0.504
Python says: simulation time 0.508
Python says: simulation time 0.512
Python says: simulation time 0.516
Python says: simulation time 0.52
Python says: simulation time 0.524
Python says: simulation time 0.528
Python says: simulation time 0.532
Python says: simulation time 0.536
Python says: simulation time 0.54
Python says: simulation time 0.544
Python says: simulation time 0.548
Python says: simulation time 0.552
Python says: simulation time 0.556
Python says: simulation time 0.56
Python says: simulation time 0.564
Python says: simulation time 0.568
Python says: simulation time 0.572
Python says: simulation time 0.576
Python says: simulation time 0.58
Python says: simulation time 0.584
Python says: simulation time 0.588
Python says: simulation time 0.592
Python says: simulation time 0.596
Python says: simulation time 0.6
Python says: simulation time 0.604
Python says: simulation time 0.608
Python says: simulation time 0.612
Python says: simulation time 0.616
Python says: simulation time 0.62
Python says: simulation time 0.624
Python says: simulation time 0.628
Python says: simulation time 0.632
Python says: simulation time 0.636
Python says: simulation time 0.64
Python says: simulation time 0.644
Python says: simulation time 0.648
Python says: simulation time 0.652
Python says: simulation time 0.656
Python says: simulation time 0.66
Python says: simulation time 0.664
Python says: simulation time 0.668
Python says: simulation time 0.672
Python says: simulation time 0.676
Python says: simulation time 0.68
Python says: simulation time 0.684
Python says: simulation time 0.688
Python says: simulation time 0.692
Python says: simulation time 0.696
Python says: simulation time 0.7
Python says: simulation time 0.704
Python says: simulation time 0.708
Python says: simulation time 0.712
Python says: simulation time 0.716
Python says: simulation time 0.72
Python says: simulation time 0.724
Python says: simulation time 0.728
Python says: simulation time 0.732
Python says: simulation time 0.736
Python says: simulation time 0.74
Python says: simulation time 0.744
Python says: simulation time 0.748
Python says: simulation time 0.752
Python says: simulation time 0.756
Python says: simulation time 0.76
Python says: simulation time 0.764
Python says: simulation time 0.768
Python says: simulation time 0.772
Python says: simulation time 0.776
Python says: simulation time 0.78
Python says: simulation time 0.784
Python says: simulation time 0.788
Python says: simulation time 0.792
Python says: simulation time 0.796
Python says: simulation time 0.8
Python says: simulation time 0.804
Python says: simulation time 0.808
Python says: simulation time 0.812
Python says: simulation time 0.816
Python says: simulation time 0.82
Python says: simulation time 0.824
Python says: simulation time 0.828
Python says: simulation time 0.832
Python says: simulation time 0.836
Python says: simulation time 0.84
Python says: simulation time 0.844
Python says: simulation time 0.848
Python says: simulation time 0.852
Python says: simulation time 0.856
Python says: simulation time 0.86
Python says: simulation time 0.864
Python says: simulation time 0.868
Python says: simulation time 0.872
Python says: simulation time 0.876
Python says: simulation time 0.88
Python says: simulation time 0.884
Python says: simulation time 0.888
Python says: simulation time 0.892
Python says: simulation time 0.896
Python says: simulation time 0.9
Python says: simulation time 0.904
Python says: simulation time 0.908
Python says: simulation time 0.912
Python says: simulation time 0.916
Python says: simulation time 0.92
Python says: simulation time 0.924
Python says: simulation time 0.928
Python says: simulation time 0.932
Python says: simulation time 0.936
Python says: simulation time 0.94
Python says: simulation time 0.944
Python says: simulation time 0.948
Python says: simulation time 0.952
Python says: simulation time 0.956
Python says: simulation time 0.96
Python says: simulation time 0.964
Python says: simulation time 0.968
Python says: simulation time 0.972
Python says: simulation time 0.976
Python says: simulation time 0.98
Python says: simulation time 0.984
Python says: simulation time 0.988
Python says: simulation time 0.992
Python says: simulation time 0.996
Python says: simulation time 1
Python says: simulation time 1.004
Python says: simulation time 1.008
Python says: simulation time 1.012
Python says: simulation time 1.016
Python says: simulation time 1.02
Python says: simulation time 1.024
Python says: simulation time 1.028
Python says: simulation time 1.032
Python says: simulation time 1.036
Python says: simulation time 1.04
Python says: simulation time 1.044
Python says: simulation time 1.048
Python says: simulation time 1.052
Python says: simulation time 1.056
Python says: simulation time 1.06
Python says: simulation time 1.064
Python says: simulation time 1.068
Python says: simulation time 1.072
Python says: simulation time 1.076
Python says: simulation time 1.08
Python says: simulation time 1.084
Python says: simulation time 1.088
Python says: simulation time 1.092
Python says: simulation time 1.096
Python says: simulation time 1.1
Python says: simulation time 1.104
Python says: simulation time 1.108
Python says: simulation time 1.112
Python says: simulation time 1.116
Python says: simulation time 1.12
Python says: simulation time 1.124
Python says: simulation time 1.128
Python says: simulation time 1.132
Python says: simulation time 1.136
Python says: simulation time 1.14
Python says: simulation time 1.144
Python says: simulation time 1.148
Python says: simulation time 1.152
Python says: simulation time 1.156
Python says: simulation time 1.16
Python says: simulation time 1.164
Python says: simulation time 1.168
Python says: simulation time 1.172
Python says: simulation time 1.176
Python says: simulation time 1.18
Python says: simulation time 1.184
Python says: simulation time 1.188
Python says: simulation time 1.192
Python says: simulation time 1.196
Python says: simulation time 1.2
Python says: simulation time 1.204
Python says: simulation time 1.208
Python says: simulation time 1.212
Python says: simulation time 1.216
Python says: simulation time 1.22
Python says: simulation time 1.224
Python says: simulation time 1.228
Python says: simulation time 1.232
Python says: simulation time 1.236
Python says: simulation time 1.24
Python says: simulation time 1.244
Python says: simulation time 1.248
Python says: simulation time 1.252
Python says: simulation time 1.256
Python says: simulation time 1.26
Python says: simulation time 1.264
Python says: simulation time 1.268
Python says: simulation time 1.272
Python says: simulation time 1.276
Python says: simulation time 1.28
Python says: simulation time 1.284
Python says: simulation time 1.288
Python says: simulation time 1.292
Python says: simulation time 1.296
Python says: simulation time 1.3
Python says: simulation time 1.304
Python says: simulation time 1.308
Python says: simulation time 1.312
Python says: simulation time 1.316
Python says: simulation time 1.32
Python says: simulation time 1.324
Python says: simulation time 1.328
Python says: simulation time 1.332
Python says: simulation time 1.336
Python says: simulation time 1.34
Python says: simulation time 1.344
Python says: simulation time 1.348
Python says: simulation time 1.352
Python says: simulation time 1.356
Python says: simulation time 1.36
Python says: simulation time 1.364
Python says: simulation time 1.368
Python says: simulation time 1.372
Python says: simulation time 1.376
Python says: simulation time 1.38
Python says: simulation time 1.384
Python says: simulation time 1.388
Python says: simulation time 1.392
Python says: simulation time 1.396
Python says: simulation time 1.4
Python says: simulation time 1.404
Python says: simulation time 1.408
Python says: simulation time 1.412
Python says: simulation time 1.416
Python says: simulation time 1.42
Python says: simulation time 1.424
Python says: simulation time 1.428
Python says: simulation time 1.432
Python says: simulation time 1.436
Python says: simulation time 1.44
Python says: simulation time 1.444
Python says: simulation time 1.448
Python says: simulation time 1.452
Python says: simulation time 1.456
Python says: simulation time 1.46
Python says: simulation time 1.464
Python says: simulation time 1.468
Python says: simulation time 1.472
Python says: simulation time 1.476
Python says: simulation time 1.48
Python says: simulation time 1.484
Python says: simulation time 1.488
Python says: simulation time 1.492
Python says: simulation time 1.496
Python says: simulation time 1.5
Python says: simulation time 1.504
Python says: simulation time 1.508
Python says: simulation time 1.512
Python says: simulation time 1.516
Python says: simulation time 1.52
Python says: simulation time 1.524
Python says: simulation time 1.528
Python says: simulation time 1.532
Python says: simulation time 1.536
Python says: simulation time 1.54
Python says: simulation time 1.544
Python says: simulation time 1.548
Python says: simulation time 1.552
Python says: simulation time 1.556
Python says: simulation time 1.56
Python says: simulation time 1.564
Python says: simulation time 1.568
Python says: simulation time 1.572
Python says: simulation time 1.576
Python says: simulation time 1.58
Python says: simulation time 1.584
Python says: simulation time 1.588
Python says: simulation time 1.592
Python says: simulation time 1.596
Python says: simulation time 1.6
Python says: simulation time 1.604
Python says: simulation time 1.608
Python says: simulation time 1.612
Python says: simulation time 1.616
Python says: simulation time 1.62
Python says: simulation time 1.624
Python says: simulation time 1.628
Python says: simulation time 1.632
Python says: simulation time 1.636
Python says: simulation time 1.64
Python says: simulation time 1.644
Python says: simulation time 1.648
Python says: simulation time 1.652
Python says: simulation time 1.656
Python says: simulation time 1.66
Python says: simulation time 1.664
Python says: simulation time 1.668
Python says: simulation time 1.672
Python says: simulation time 1.676
Python says: simulation time 1.68
Python says: simulation time 1.684
Python says: simulation time 1.688
Python says: simulation time 1.692
Python says: simulation time 1.696
Python says: simulation time 1.7
Python says: simulation time 1.704
Python says: simulation time 1.708
Python says: simulation time 1.712
Python says: simulation time 1.716
Python says: simulation time 1.72
Python says: simulation time 1.724
Python says: simulation time 1.728
Python says: simulation time 1.732
Python says: simulation time 1.736
Python says: simulation time 1.74
Python says: simulation time 1.744
Python says: simulation time 1.748
Python says: simulation time 1.752
Python says: simulation time 1.756
Python says: simulation time 1.76
Python says: simulation time 1.764
Python says: simulation time 1.768
Python says: simulation time 1.772
Python says: simulation time 1.776
Python says: simulation time 1.78
Python says: simulation time 1.784
Python says: simulation time 1.788
Python says: simulation time 1.792
Python says: simulation time 1.796
Python says: simulation time 1.8
Python says: simulation time 1.804
Python says: simulation time 1.808
Python says: simulation time 1.812
Python says: simulation time 1.816
Python says: simulation time 1.82
Python says: simulation time 1.824
Python says: simulation time 1.828
Python says: simulation time 1.832
Python says: simulation time 1.836
Python says: simulation time 1.84
Python says: simulation time 1.844
Python says: simulation time 1.848
Python says: simulation time 1.852
Python says: simulation time 1.856
Python says: simulation time 1.86
Python says: simulation time 1.864
Python says: simulation time 1.868
Python says: simulation time 1.872
Python says: simulation time 1.876
Python says: simulation time 1.88
Python says: simulation time 1.884
Python says: simulation time 1.888
Python says: simulation time 1.892
Python says: simulation time 1.896
Python says: simulation time 1.9
Python says: simulation time 1.904
Python says: simulation time 1.908
Python says: simulation time 1.912
Python says: simulation time 1.916
Python says: simulation time 1.92
Python says: simulation time 1.924
Python says: simulation time 1.928
Python says: simulation time 1.932
Python says: simulation time 1.936
Python says: simulation time 1.94
Python says: simulation time 1.944
Python says: simulation time 1.948
Python says: simulation time 1.952
Python says: simulation time 1.956
Python says: simulation time 1.96
Python says: simulation time 1.964
Python says: simulation time 1.968
Python says: simulation time 1.972
Python says: simulation time 1.976
Python says: simulation time 1.98
Python says: simulation time 1.984
Python says: simulation time 1.988
Python says: simulation time 1.992
Python says: simulation time 1.996
Python says: simulation time 2
Python says: simulation time 2
LOG_SUCCESS | info | The simulation finished successfully.
",
timeFrontend = 8.345160000000001e-4,
timeBackend = 0.003965011,
timeSimCode = 7.53374e-4,
timeTemplates = 0.002885986,
timeCompile = 0.12942383899999998,
timeSimulation = 3.199894676,
timeTotal = 3.337808758
end SimulationResult;
Note
Notification: Model statistics after passing the front-end and creating the data structures used by the back-end:
* Number of equations: 0
* Number of variables: 0
Notification: Model statistics after passing the back-end for initialization:
* Number of independent subsystems: 1
* Number of states: 0 ()
* Number of discrete variables: 0 ()
* Number of discrete states: 0 ()
* Number of clocked states: 0 ()
* Top-level inputs: 0
Notification: Strong component statistics for initialization (0):
* Single equations (assignments): 0
* Array equations: 0
* Algorithm blocks: 0
* Record equations: 0
* When equations: 0
* If-equations: 0
* Equation systems (not torn): 0
* Torn equation systems: 0
* Mixed (continuous/discrete) equation systems: 0
Notification: Model statistics after passing the back-end for simulation:
* Number of independent subsystems: 1
* Number of states: 0 ()
* Number of discrete variables: 0 ()
* Number of discrete states: 0 ()
* Number of clocked states: 0 ()
* Top-level inputs: 0
Notification: Strong component statistics for simulation (0):
* Single equations (assignments): 0
* Array equations: 0
* Algorithm blocks: 0
* Record equations: 0
* When equations: 0
* If-equations: 0
* Equation systems (not torn): 0
* Torn equation systems: 0
* Mixed (continuous/discrete) equation systems: 0
Calling OpenModelica from Python Code¶
This section describes a simple-minded approach to calling Python code from OpenModelica. For a description of Python scripting with OpenModelica, see OMPython - OpenModelica Python Interface.
The interaction with Python can be perfomed in four different ways whereas one is illustrated below. Assume that we have the following Modelica code:
model CalledbyPython
Real x(start=1.0), y(start=2.0);
parameter Real b = 2.0;
equation
der(x) = -b*y;
der(y) = x;
end CalledbyPython;
In the following Python (.py) files the above Modelica model is simulated via the OpenModelica scripting interface:
#!/usr/bin/env python3
import os
newb = 0.5
exec(open('CreateMosFile.py').read())
os.popen(r"omc CalledbyPython.mos").read()
exec(open('RetrResult.py').read())
#!/usr/bin/env python3
mos_file = open('CalledbyPython.mos','w', 1)
mos_file.write('loadFile("CalledbyPython.mo");\n')
mos_file.write('setComponentModifierValue(CalledbyPython,b,$Code(="+str(newb)+"));\n')
mos_file.write('simulate(CalledbyPython,stopTime=10);\n')
mos_file.close()
#!/usr/bin/env python3
def zeros(n):
return [0.0] * int(n)
res_file = open("CalledbyPython_res.plt",'r',1)
line = res_file.readline()
size = int(res_file.readline().split('=')[1])
time = zeros(size)
y = zeros(size)
while line != ['DataSet: time\\n']:
line = res_file.readline().split(',')[0:1]
for j in range(int(size)):
time[j]=float(res_file.readline().split(',')[0])
while line != ['DataSet: y\\n']:
line=res_file.readline().split(',')[0:1]
for j in range(int(size)):
y[j]=float(res_file.readline().split(',')[1])
res_file.close()
A second option of simulating the above Modelica model is to use the command buildModel instead of the simulate command and setting the parameter value in the initial parameter file, CalledbyPython_init.txt instead of using the command setComponentModifierValue. Then the file CalledbyPython.exe is just executed.
The third option is to use the ZeroMQ interface for invoking the compiler and then just use the scripting interface to send commands to the compiler via this interface.
The fourth variant is to use external function calls to directly communicate with the executing simulation process.
