PyFMI is a package for loading and interacting with Functional Mock-Up Units (FMUs) both for Model Exchange and Co-Simulation, which are compiled dynamic models compliant with the Functional Mock-Up Interface (FMI).
For a more indebt technical description of the features / functionality see the following link.
For citing PyFMI, please use:
Andersson, C, Åkesson, J & Führer, C 2016, PyFMI: A Python Package for Simulation of Coupled Dynamic Models with the Functional Mock-up Interface. Technical Report in Mathematical Sciences, nr. 2, vol. 2016, vol. LUTFNA-5008-2016, Centre for Mathematical Sciences, Lund University.
For information about contributing, see https://github.com/modelon-community/contributing.
PyFMI can be built and installed from source, note this requires FMI library. Additional details are found in the file setup.py
.
python setup.py install --fmil-home=/path/to/FMI_Library/
Here the flag "--fmil-home" points to where FMI Library is installed. The Python package Assimulo needs to be installed in order to build from source.
conda install -c conda-forge pyfmi
Note that some examples requires optional dependencies for plotting, they are:
- wxPython
- matplotlib
PyFMI is tested daily in several different ways:
- Extensive external testing within the
Optimica Compiler Toolkit
(OCT) provided by Modelon using all models in Modelon Modelica libraries (7000+ models), exported as FMUs. - Unit tests from the
tests
directory. These use FMUs generated by- OCT
- JModelica.org
- FMUs in the example directory are generated via FMU SDK by Qtronic, more information is available in related
README.txt
for these FMUs with proper license text.
- PyFMI is the default execution engine for Modelon Impact.
- Testing with FMUs from FMI Cross Check and commit 55c6704:
- All the
win64
Dymola FMUs have been tested with PyFMI2.11.0
and pass with default options. - On
Ubuntu 20.04
usingPython 3.9
,PyFMI 2.11.0
, the following FMUs pass (95 out of 116):- fmus/2.0/me/linux64/MapleSim/2015.1/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/me/linux64/MapleSim/2015.1/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/me/linux64/MapleSim/2015.1/Rectifier/Rectifier.fmu
- fmus/2.0/me/linux64/MapleSim/2015.2/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/me/linux64/MapleSim/2015.2/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/me/linux64/MapleSim/2015.2/Rectifier/Rectifier.fmu
- fmus/2.0/me/linux64/MapleSim/2016.1/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/me/linux64/MapleSim/2016.1/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/me/linux64/MapleSim/2016.1/Rectifier/Rectifier.fmu
- fmus/2.0/me/linux64/MapleSim/2016.2/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/me/linux64/MapleSim/2016.2/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/me/linux64/MapleSim/2016.2/Rectifier/Rectifier.fmu
- fmus/2.0/me/linux64/MapleSim/2018/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/me/linux64/MapleSim/2018/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/me/linux64/MapleSim/2018/Rectifier/Rectifier.fmu
- fmus/2.0/me/linux64/MapleSim/2019/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/me/linux64/MapleSim/2019/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/me/linux64/MapleSim/2019/Rectifier/Rectifier.fmu
- fmus/2.0/me/linux64/MapleSim/2021.1/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/me/linux64/MapleSim/2021.1/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/me/linux64/MapleSim/2021.1/Rectifier/Rectifier.fmu
- fmus/2.0/me/linux64/MapleSim/2021.2/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/me/linux64/MapleSim/2021.2/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/me/linux64/MapleSim/2021.2/Rectifier/Rectifier.fmu
- fmus/2.0/me/linux64/MapleSim/7.01/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/me/linux64/solidThinking_Activate/2020/ActivateRC/ActivateRC.fmu
- fmus/2.0/me/linux64/solidThinking_Activate/2020/Arenstorf/Arenstorf.fmu
- fmus/2.0/me/linux64/solidThinking_Activate/2020/Boocwen/Boocwen.fmu
- fmus/2.0/me/linux64/solidThinking_Activate/2020/CVloop/CVloop.fmu (simulated with
Radau5ODE
instead ofCVode
) - fmus/2.0/me/linux64/solidThinking_Activate/2020/Pendulum/Pendulum.fmu
- fmus/2.0/me/linux64/SystemModeler/5.0/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/me/linux64/SystemModeler/5.0/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.1/BouncingBall/BouncingBall.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.1/Dahlquist/Dahlquist.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.1/Feedthrough/Feedthrough.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.1/Resource/Resource.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.1/Stair/Stair.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.1/VanDerPol/VanDerPol.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.2/BouncingBall/BouncingBall.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.2/Dahlquist/Dahlquist.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.2/Feedthrough/Feedthrough.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.2/Resource/Resource.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.2/Stair/Stair.fmu
- fmus/2.0/me/linux64/Test-FMUs/0.0.2/VanDerPol/VanDerPol.fmu
- fmus/2.0/cs/linux64/20sim/4.6.4.8004/TorsionBar/TorsionBar.fmu
- fmus/2.0/cs/linux64/EDALab_HIFSuite/2017.05_antlia/b01/b01.fmu
- fmus/2.0/cs/linux64/EDALab_HIFSuite/2017.05_antlia/des56_original/des56_original.fmu
- fmus/2.0/cs/linux64/EDALab_HIFSuite/2017.05_antlia/m6502/m6502.fmu
- fmus/2.0/cs/linux64/EDALab_HIFSuite/2017.05_antlia/uart/uart.fmu
- fmus/2.0/cs/linux64/MapleSim/2015.1/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/cs/linux64/MapleSim/2015.1/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/cs/linux64/MapleSim/2015.1/Rectifier/Rectifier.fmu
- fmus/2.0/cs/linux64/MapleSim/2015.2/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/cs/linux64/MapleSim/2015.2/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/cs/linux64/MapleSim/2015.2/Rectifier/Rectifier.fmu
- fmus/2.0/cs/linux64/MapleSim/2016.1/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/cs/linux64/MapleSim/2016.1/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/cs/linux64/MapleSim/2016.1/Rectifier/Rectifier.fmu
- fmus/2.0/cs/linux64/MapleSim/2016.2/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/cs/linux64/MapleSim/2016.2/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/cs/linux64/MapleSim/2016.2/Rectifier/Rectifier.fmu
- fmus/2.0/cs/linux64/MapleSim/2018/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/cs/linux64/MapleSim/2018/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/cs/linux64/MapleSim/2018/Rectifier/Rectifier.fmu
- fmus/2.0/cs/linux64/MapleSim/2019/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/cs/linux64/MapleSim/2019/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/cs/linux64/MapleSim/2019/Rectifier/Rectifier.fmu
- fmus/2.0/cs/linux64/MapleSim/2021.1/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/cs/linux64/MapleSim/2021.1/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/cs/linux64/MapleSim/2021.1/Rectifier/Rectifier.fmu
- fmus/2.0/cs/linux64/MapleSim/2021.2/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/cs/linux64/MapleSim/2021.2/CoupledClutches/CoupledClutches.fmu
- fmus/2.0/cs/linux64/MapleSim/2021.2/Rectifier/Rectifier.fmu
- fmus/2.0/cs/linux64/MapleSim/7.01/ControlledTemperature/ControlledTemperature.fmu
- fmus/2.0/cs/linux64/solidThinking_Activate/2020/ActivateRC/ActivateRC.fmu
- fmus/2.0/cs/linux64/solidThinking_Activate/2020/Arenstorf/Arenstorf.fmu
- fmus/2.0/cs/linux64/solidThinking_Activate/2020/Boocwen/Boocwen.fmu
- fmus/2.0/cs/linux64/solidThinking_Activate/2020/CVloop/CVloop.fmu
- fmus/2.0/cs/linux64/solidThinking_Activate/2020/DiscreteController/DiscreteController.fmu
- fmus/2.0/cs/linux64/solidThinking_Activate/2020/Pendulum/Pendulum.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.1/BouncingBall/BouncingBall.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.1/Dahlquist/Dahlquist.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.1/Feedthrough/Feedthrough.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.1/Resource/Resource.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.1/Stair/Stair.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.1/VanDerPol/VanDerPol.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.2/BouncingBall/BouncingBall.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.2/Dahlquist/Dahlquist.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.2/Feedthrough/Feedthrough.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.2/Resource/Resource.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.2/Stair/Stair.fmu
- fmus/2.0/cs/linux64/Test-FMUs/0.0.2/VanDerPol/VanDerPol.fmu
- fmus/2.0/cs/linux64/YAKINDU_Statechart_Tools/4.0.4/BouncingBall/BouncingBall.fmu
- fmus/2.0/cs/linux64/YAKINDU_Statechart_Tools/4.0.4/Feedthrough/Feedthrough.fmu
- fmus/2.0/cs/linux64/YAKINDU_Statechart_Tools/4.0.4/Stairs/Stairs.fmu
- Those that does not pass are believed to fail due to:
- Linux compliance issues.
- AMESim FMUs fail since FMUs that need an execution tool are not supported.
- All the
- Reference FMUs
- All FMUs pass on both
win64
andlinux64
(tested onUbuntu 20.04
).
- All FMUs pass on both