FMI.jl is a free-to-use software library for the Julia programming language which integrates the Functional Mock-Up Interface (fmi-standard.org): load or create, parameterize, simulate and plot FMUs seamlessly inside the Julia programming language!
1. Open a Julia-REPL, switch to package mode using ]
, activate your preferred environment.
2. Install FMI.jl:
(@v1.6) pkg> add FMI
3. If you want to check that everything works correctly, you can run the tests bundled with FMI.jl:
(@v1.6) pkg> test FMI
4. Have a look inside the examples folder in the examples branch or the examples section of the documentation. All examples are available as Julia-Script (.jl), Jupyter-Notebook (.ipynb) and Markdown (.md).
using FMI, Plots
# load and instantiate a FMU
myFMU = fmiLoad(pathToFMU)
# simulate from t=0.0s until t=10.0s and record the FMU variable named "mass.s"
simData = fmiSimulate(myFMU, 0.0, 10.0; recordValues=["mass.s"])
# plot it!
fmiPlot(simData)
# free memory
fmiUnload(myFMU)
- importing the full FMI 2.0.3 and FMI 3.0.0 command set, including optional specials like
fmi2GetState
,fmi2SetState
andfmi2GetDirectionalDerivatives
- parameterization, simulation & plotting of CS- and ME-FMUs
- event-handling for imported discontinuous ME-FMUs
FMI2.0.3 | FMI3.0 | |||
---|---|---|---|---|
Import | Export | Import | Export | |
CS | ✓✓ | ~~ | ✓ | ~ |
ME (continuous) | ✓✓ | ✓✓ | ✓ | ~ |
ME (discontinuous) | ✓✓ | ✓✓ | ✓ | ~ |
SE | - | - | ✓ | ~ |
Explicit solvers | ✓✓ | ✓✓ | ✓ | ~ |
Implicit solvers (autodiff=false) | ✓✓ | ~~ | ✓ | ~ |
Implicit solvers (autodiff=true) | ✓ | ~~ | ~~ | ~ |
get/setState | ✓✓ | ~ | ✓ | ~ |
getDirectionalDerivatives | ✓✓ | ~ | ✓ | ~ |
getAdjointDerivatives | - | - | ✓ | ~ |
✓✓ supported & tested
✓ beta supported, untested
~~ work in progress
~ planned
- not supported by the corresponding FMI standard
x not planned
To keep dependencies nice and clean, the original package FMI.jl had been split into new packages:
- FMI.jl: High level loading, manipulating, saving or building entire FMUs from scratch
- FMIImport.jl: Importing FMUs into Julia
- FMIExport.jl: Exporting stand-alone FMUs from Julia Code
- FMICore.jl: C-code wrapper for the FMI-standard
- FMIBuild.jl: Compiler/Compilation dependencies for FMIExport.jl
- FMIFlux.jl: Machine Learning with FMUs (differentiation over FMUs)
- FMIZoo.jl: A collection of testing and example FMUs
- FMI Cross Checks (as soon as the successor is available)
- nice documentation & doc-strings
- more examples/tutorials
- ...
- SSP 1.0 support
- ...
FMI.jl is tested (and testing) under Julia Versions 1.6 LTS (64-bit) and latest (64-bit) on Windows latest (64-bit) and Ubuntu latest (64-bit). Mac and Julia (32-bit) should work, but untested.
Tobias Thummerer, Lars Mikelsons and Josef Kircher. 2021. NeuralFMU: towards structural integration of FMUs into neural networks. Martin Sjölund, Lena Buffoni, Adrian Pop and Lennart Ochel (Ed.). Proceedings of 14th Modelica Conference 2021, Linköping, Sweden, September 20-24, 2021. Linköping University Electronic Press, Linköping (Linköping Electronic Conference Proceedings ; 181), 297-306. DOI: 10.3384/ecp21181297
Tobias Thummerer, Johannes Stoljar and Lars Mikelsons. 2022. NeuralFMU: presenting a workflow for integrating hybrid NeuralODEs into real-world applications. Electronics 11, 19, 3202. DOI: 10.3390/electronics11193202
Tobias Thummerer, Johannes Tintenherr, Lars Mikelsons. 2021 Hybrid modeling of the human cardiovascular system using NeuralFMUs Journal of Physics: Conference Series 2090, 1, 012155. DOI: 10.1088/1742-6596/2090/1/012155
See FMIFlux.jl.