Manipulate a function

Tutorial by Tobias Thummerer, Johannes Stoljar

🚧 This tutorial is under revision and will be replaced by an up-to-date version soon 🚧

License

# Copyright (c) 2021 Tobias Thummerer, Lars Mikelsons, Josef Kircher, Johannes Stoljar
# Licensed under the MIT license. 
# See LICENSE (https://github.com/thummeto/FMI.jl/blob/main/LICENSE) file in the project root for details.

Introduction to the example

This example shows how to overwrite a FMI function with a custom C-function. For this the FMU model is simulated first without changes. Then the function fmi2GetReal() is overwritten and simulated again. Both simulations are displayed in a graph to show the change caused by overwriting the function. The model used is a one-dimensional spring pendulum with friction. The object-orientated structure of the SpringFrictionPendulum1D can be seen in the following graphic.

svg

Other formats

Besides, this Jupyter Notebook there is also a Julia file with the same name, which contains only the code cells and for the documentation there is a Markdown file corresponding to the notebook.

Code section

To run the example, the previously installed packages must be included.

# imports
using FMI
using FMIZoo
using FMICore
using Plots
using DifferentialEquations # for auto solver detection

Simulation setup

Next, the start time and end time of the simulation are set.

tStart = 0.0
tStop = 8.0
8.0

Import FMU

Next, the FMU model from FMIZoo.jl is loaded.

# we use an FMU from the FMIZoo.jl
fmu = loadFMU("SpringFrictionPendulum1D", "Dymola", "2022x"; type=:ME)
Model name:	SpringFrictionPendulum1D
Type:		0

Simulate FMU

In the next steps the recorded value is defined. The recorded value is the position of the mass. In the function simulateME() the FMU is simulated in model-exchange mode (ME) with an adaptive step size. In addition, the start and end time and the recorded variables are specified.

# an array of value references... or just one
vrs = ["mass.s"]

simData = simulate(fmu, (tStart, tStop); recordValues=vrs)
Simulating ME-FMU ...   0%|█                             |  ETA: N/A

Simulating ME-FMU ... 100%|██████████████████████████████| Time: 0:00:20





Model name:
	SpringFrictionPendulum1D
Success:
	true
f(x)-Evaluations:
	In-place: 439
	Out-of-place: 0
Jacobian-Evaluations:
	∂ẋ_∂p: 0
	∂ẋ_∂x: 0
	∂ẋ_∂u: 0
	∂y_∂p: 0
	∂y_∂x: 0
	∂y_∂u: 0
	∂e_∂p: 0
	∂e_∂x: 0
	∂e_∂u: 0
	∂xr_∂xl: 0
Gradient-Evaluations:
	∂ẋ_∂t: 0
	∂y_∂t: 0
	∂e_∂t: 0
Callback-Evaluations:
	Condition (event-indicators): 670
	Time-Choice (event-instances): 0
	Affect (event-handling): 6
	Save values: 46
	Steps completed: 46
States [92]:
	0.0	[0.5, 0.0]
	2.352941176471972e-11	[0.5, 1.0e-10]
	0.002306805098500577	[0.50001131604032, 0.009814511243574901]
	0.017671223302467173	[0.500666989145529, 0.07566472355097752]
	0.05336453040764681	[0.5061289098366911, 0.23069249511360376]
	0.1184474059074749	[0.5303427356080991, 0.5120833959919191]
	0.1848453912296851	[0.5734637072149397, 0.782680751659161]
	0.2717770318313012	[0.6552396623997402, 1.0873036051683178]
	0.3694508180093065	[0.7743876782686996, 1.333136262428136]
	...
	8.0	[1.0668036416924678, -1.0000040369366221e-10]
Values [46]:
	0.0	(0.5,)
	2.352941176471972e-11	(0.5,)
	0.002306805098500577	(0.50001131604032,)
	0.017671223302467173	(0.500666989145529,)
	0.05336453040764681	(0.5061289098366911,)
	0.1184474059074749	(0.5303427356080991,)
	0.1848453912296851	(0.5734637072149397,)
	0.2717770318313012	(0.6552396623997402,)
	0.3694508180093065	(0.7743876782686996,)
	...
	8.0	(1.0668036416924678,)
Events [12]:
	State-Event #11 @ 2.352941176471972e-11s (state-change: false)
	State-Event #12 @ 2.352941176471972e-11s (state-change: false)
	State-Event #11 @ 0.9940987965831369s (state-change: false)
	State-Event #12 @ 0.9940987965831369s (state-change: false)
	State-Event #19 @ 1.9883957668475916s (state-change: false)
	State-Event #20 @ 1.9883957668475916s (state-change: false)
	State-Event #11 @ 2.9832978886371553s (state-change: false)
	State-Event #12 @ 2.9832978886371553s (state-change: false)
	State-Event #19 @ 3.9789937954129138s (state-change: false)
	...
	State-Event #12 @ 4.976922554045545s (state-change: false)

Plotting FMU

After the simulation is finished, the result of the FMU for the model-exchange mode can be plotted. In the plot for the FMU it can be seen that the oscillation continues to decrease due to the effect of the friction. If you simulate long enough, the oscillation comes to a standstill in a certain time.

fig = plot(simData, states=false)

<img src="data:image/png;base64,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8cdz586NiYnx8/NruguKonx9fdeuXTtr1qzo6GhfX99mMRQWFkZHRzd9xc/PT6VSXbly5fjx44sWLdJWKre3t9dWak1KSrpy5UpoaCgA7N+/X7u7I0eOTJs2LTo6unv37n379i0rK3Nycqqurp4xY8aiRYv27t2rVqvnz5//2WefNat7npCQkJub2zSz6ri7uwcHB5eWlqakpNy7d69pndilS5fevXt3586duld8fHwKWFysxACYCFlzvJCJ9aXsjMxoQ3zopPtkisRXm0NIWO/1pQWvnOzm5qb9wc7OTtcZaGdn19DQAABFRUVRUVFz587t3bu3tm9QpVL5+vomJiZu3bp12rRpDMPs3LlT2822efPml156KS8vb8uWLTNmzGi6l2PHjm3evHn+/PmlpaVfffXV5IeLB+p2pxMfHw8AL7/8cnh4+P79+5944gkA8Pb2XrhwIQAMGDDg1VdfnTZtGgDoku6ECRN69eqVlJTUvXt33R/i5OT02muvPfbYYwCwe/dupVJ55i8lJSVbt2594YUXXn/99f79+3/44YcAoFart23bRgjp378/APTv31/7w9y5c9etW7d161btZteuXbtnz56TJ082HVNSX1/P81pX0miItDcJRBQSCsloPQVl2hjsHetDnSkS9XgZCxipTlHS/iskHbyOZfwVJktMTAwLC1u+fPnjjz/es2dP3XO4iIiILVu25OTkzJs374MPPgAAPz+/Dz744NKlS1999VXLB1KBgYHr1q27fv362rVr33333Wb/261bt7t377bcu0wms7e3bzkV2MnJqeWLjY2N9+/f9/DwaPZ6Xl6eu7s7AHTt2nXq1Knaiih1dXUNDQ3aJ4gzZszw9PTUvk4IefDgQX19fbONyOVy3d++adOmr7/++tixYz4+Pk3fc/fuXV0vLj8k0CLcsKGub18JrIR5rJAsDG8lEa5ZA22smzbQi7pSTmrUIBfroRg0CDZvlvY0j82bYdgwoYMww/TpIJcLHYR5Nm6E4GChgxBUt27dLl68ePDgQblcvnr1au0Eu1u3bv3www+jRo2yt7dPTU0NDw9nGObll1+Oj4/38PA4ffq09pliWlpaXFxcUVFRVVXVsmXLJkyY4OrqmpSUFN5iOYIxY8asWLFC+3N6evquXbuio6NlMtm+ffsqKyvHjx8PACtXrvTy8goMDLx79+7a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WhO8qXv37nl7e//14cgdHR2XLFnyz3/+c9CgQdoqawDg7e1dKPJxjAbDRGiuhEJmcW8WBvtqHxNO72z+lhCyOq+/btDbDJllrlDArl2mxODt7f3iiy+++OKLFRUVkZGRO3bsaLaQUFZW1vDhw998881//OMftbW127dv12g0ut5UrdLS0rKysmPHjmn/OX78+I4dOzZ7g1Kp1L1h2LBhXbp0AYBnnnlm4cKFb7/99rZt27QL85aUlNjY2Bw/flz7TrlcruvqbFkTvBl7e3tdmVAHB4fk5OQvv/xy4cKFpaWlu3btGjVqFADU1dVZTJENCSRCigLRfto1arhYSmJ92mrG2dj83TPThlhf6sUkMZb0dHCQfLlkmaytcq/iZ28vjbrzbTDwLJCupm07d3f3wMDAmpoaALC1tdUNSDl+/PiIESO0VTQTEhJ0v2tra6sbpRIeHp6amrpmzRp9OwoPD//ll18++OAD+uHvxMiRIxmGOXTo0G+//aZt5HXr1k2tVj/33HPBhpV5bRpGaGjo7du3df/VpUuXtX9Zt26dNhHevn27W7duhmxZ/CSQCNPSqnv2dBI6itadvk/6elLOtm29Z98+g65i/TtQNx8QZQO4iex6ER0N16611k8kHcnJ0GKhUCmZMwekXCoEACAhASy7PNyKFStycnJGjhzp6el57Nixq1evbt++HQB69+793Xff1dbWRkZGRkREvP/++7/88gvDMOub1Bfo3bv3Z599dufOnejo6FmzZm3evPnZZ5997LHH6uvrExISXn311aCgv9dpmzZt2scffzxr1qyZM2c2NjaePn36mWeeiYiIoCjq6aefnj9//siRI7VFPl1dXZcsWTJ58uS3337b09Pz6tWr7u7uuuV2W+rdu/fKlSsjIyMnTpzYv3//qqqqvLy8Tp063bp16/PPPx81apRcLj958mTv3r217z9z5oy2MLcFkEAiDAoSYztJK6GAGR3QTpZrsZhJ62xp6OdJnS8hY82bksiFkBCQdNHtIOkv9xgSIu2i2w8vs2OB5s6du3///sTExLq6upCQkLS0tM6dOwPA22+//dNPP2VnZ3fs2HHChAmbN2/+z3/+4+Hh8c0333z//ffaVt2GDRt27dp19+7dsLAwBweHlJSUL774YseOHfb29gMHDmy2RJGNjc2pU6e++uqrXbt2yWSy/v376+rI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" />

Override Function

After overwriting a function, the previous one is no longer accessible. The original function fmi2GetReal() is cached by storing the address of the pointer. The addresses of the pointers are kept in the FMU and are thus accessible.

# save, where the original `fmi2GetReal` function was stored, so we can access it in our new function
originalGetReal = fmu.cGetReal
Ptr{Nothing} @0x000000018008da60

To overwrite the function fmi2GetReal!(), the function header of the new custom function must be identical to the previous one. The function header looks like fmi2GetReal!(cfunc::Ptr{Nothing}, c::fmi2Component, vr::Union{Array{fmi2ValueReference}, Ptr{fmi2ValueReference}}, nvr::Csize_t, value::Union{Array{fmi2Real}, Ptr{fmi2Real}})::fmi2Status. The information how the FMI2 function are structured can be seen from FMICore.jl, the api of fmi2GetReal! or the FMI2.0.3-specification.

In the new implementation the original function is called by the previously stored pointer. Next there is a special handling if value is a pointer to an array. In this case the pointer is treated as an array, so that the entries are accessible. Otherwise, each value in value is multiplied by two. Finally, the original state of the original function is output.

function myGetReal!(c::fmi2Component, vr::Union{Array{fmi2ValueReference}, Ptr{fmi2ValueReference}}, 
                    nvr::Csize_t, value::Union{Array{fmi2Real}, Ptr{fmi2Real}})
    # first, we do what the original function does
    status = fmi2GetReal!(originalGetReal, c, vr, nvr, value)

    # if we have a pointer to an array, we must interprete it as array to access elements
    if isa(value, Ptr{fmi2Real})
        value = unsafe_wrap(Array{fmi2Real}, value, nvr, own=false)
    end

    # now, we multiply every value by two (just for fun!)
    for i in 1:nvr 
        value[i] *= 2.0 
    end 

    # return the original status
    return status
end
myGetReal! (generic function with 1 method)

In the next command the original function is overwritten with the new defined function, by replacing the function pointer fmu.cGetReal with a C-callable version of myGetReal! (created via @cfunction).

# now we overwrite the original function
fmu.cGetReal = @cfunction(myGetReal!, fmi2Status,
    (fmi2Component, Ptr{fmi2ValueReference}, Csize_t, Ptr{fmi2Real}))
Ptr{Nothing} @0x000002a1b1a28e60

Simulate and Plot FMU with modified function

As before, the identical command is called here for simulation. This is also a model exchange simulation. Immediately afterwards, the results are added to the previous graph as a dashed line.

simData = simulate(fmu, (tStart, tStop); recordValues=vrs)
plot!(fig, simData; states=false, style=:dash)

<img src="data:image/png;base64,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" />

As expected by overwriting the function, all values are doubled.

Unload FMU

After plotting the data, the FMU is unloaded and all unpacked data on disc is removed.

unloadFMU(fmu)

Summary

In this tutorial it is shown how an existing function of the library can be replaced by an own implementation.