A set of hand-coded FMUs for development, testing and debugging of the Functional Mock-up Interface.
- BouncingBall - a bouncing ball model with state events
- Dahlquist - Dahlquist test equation
- Feedthrough - all variable types
- Resource - load data from a file
- Stair - a counter with time events
- StateSpace - arrays and structural parameters
- VanDerPol - Van der Pol test equation
Use the fmusim executable to simulate an FMU:
> fmusim --help
Usage: fmusim [OPTION]... [FMU]
Simulate a Functional Mock-up Unit and write the output to result.csv.
  --help                           display this help and exit
  --interface-type [me|cs]         the interface type to use
  --tolerance [TOLERANCE]          relative tolerance
  --start-time [VALUE]             start time
  --stop-time [VALUE]              stop time
  --output-interval [VALUE]        set the output interval
  --start-value [name] [value]     set a start value
  --output-variable [name]         record a specific variable
  --input-file [FILE]              read input from a CSV file
  --output-file [FILE]             write output to a CSV file
  --log-fmi-calls                  log FMI calls
  --fmi-log-file [FILE]            set the FMI log file
  --solver [euler|cvode]           the solver to use
  --early-return-allowed           allow early return
  --event-mode-used                use event mode
  --record-intermediate-values     record outputs in intermediate update
  --initial-fmu-state-file [FILE]  file to read the serialized FMU state
  --final-fmu-state-file [FILE]    file to save the serialized FMU state
Example:
  fmusim BouncingBall.fmu  simulate with the default settings
You can download the pre-built Reference FMUs and fmusim executables from releases.
fmusim uses CSV (comma separated values) files with the following structure as input and output format.
- The file must be UTF-8 encoded.
- The first line contains the names of the columns.
- Each column name must match a variable name of the respective FMU.
- Names that contain commas (,) must be surrounded by double quotes (").
- The first column is the independent variable.
- The values of the first column must be monotonically increasing.
- Every line is terminated by a newline character (\n).
- Every column is separated by a comma (,).
- Every line must have the same number of columns.
- The values must be stored in the same format as the start values of the respective variables in the modelDescription.xml.
- Stringand- Binaryvariables can only be scalars or arrays with only one element.
- String values must be surrounded by double quotes (").
Example:
<ModelVariables>
    <Float64 name="time" causality="independent"/>
    <Float64 name="Float64 array">
        <Dimension valueReference="2"/>
    </Float64>
    <Boolean name="Boolean array">
        <Dimension valueReference="4"/>
    </Boolean>
    <Binary name="Binary scalar"/>
</ModelVariables>time,"Float64 array","Boolean array","Binary scalar"
0,1e-2 -1,0 false 1 true,666f6f
0.1,0.02 -2,1 false 0 true,aa6f6f
0.5,0.03 -3,1 true 0 false,66bb6f
<model>
- config.h- model specific types and definitions
- FMI{1CS|1ME|2|3}.xml- model descriptions
- model.c- implementation of the model
include
- fmi{|2|3}Functions.h- FMI header files
- model.h- generic model interface
- cosimulation.h- generic co-simulation interface
src
- fmi{1|2|3}Functions.c- FMI implementations
- cosimulation.c- generic co-simulation
examples
- *.c- various FMI 3.0 import examples
- Examples.cmake- CMake configuration for the example projects
fmusim
- sources of the fmusimexecutable
To build the FMUs you need CMake and a supported build tool e.g. Visual Studio ≥ 2013 , Xcode or make:
- 
download or clone the repository 
- 
open the CMakeGUI 
- 
click Browse Source...and select the cloned or downloaded and extracted repository (that containsCMakeLists.txt)
- 
click Browse Build...and select the folder where you want build the FMUs
- 
click Configureand select the generator for your IDE / build tool
- 
select the FMI_VERSIONyou want to build and optionally theFMI_TYPE(only for FMI 1.0)
- 
click Generateto generate the project files
- 
click Open Projector open the project in your build tool
- 
build the project 
The FMUs will be in the dist folder inside the selected build folder.
To build the fmusim executable, run the build/build_*.py <platform> Python scripts (where <platform> is the platform to build for, e.g. x86_64-windows) and enable WITH_FMUSIM before generating the CMake project.
Copyright © 2024, Modelica Association Project "FMI". All rights reserved. The code is released under the 2-Clause BSD License.
The Reference FMUs are a fork of the Test FMUs by Dassault Systèmes, which are a fork of the FMU SDK by QTronic, both released under the 2-Clause BSD License.