Functional Mock-up Interface 2.0.3
Oct 1st 2021
Page 18 of 131
2.1.3 Status Returned by Functions
This section defines the “
status” flag (an enumeration of type fmi2Status defined in file
“
fmi2FunctionTypes.h”) that is returned by all functions to indicate the success of the function call:
fmi2Warning,
fmi2Discard,
fmi2Error,
fmi2Fatal,
fmi2Pending } fmi2Status;
Status returned by functions. The status has the following meaning
fmi2OK – all well
fmi2Warning – things are not quite right, but the computation can continue. Function “logger” was
called in the model (see below), and it is expected that this function has shown the prepared
information message to the user.
fmi2Discard – this return status is only possible if explicitly defined for the corresponding function
3
(ModelExchange:
fmi2SetReal, fmi2SetInteger, fmi2SetBoolean, fmi2SetString,
fmi2SetContinuousStates, fmi2GetReal, fmi2GetDerivatives,
fmi2GetContinuousStates, fmi2GetEventIndicators;
CoSimulation: fmi2SetReal, fmi2SetInteger, fmi2SetBoolean, fmi2SetString,
fmi2DoStep, fmiGetXXXStatus):
For “model exchange”: It is recommended to perform a smaller step size and evaluate the model
equations again, for example because an iterative solver in the model did not converge or because
a function is outside of its domain (for example sqrt(<negative number>)). If this is not possible, the
simulation has to be terminated.
For “co-simulation”:
fmi2Discard is returned also if the slave is not able to return the required
status information. The master has to decide if the simulation run can be continued.
In both cases, function “
logger” was called in the FMU (see below) and it is expected that this
function has shown the prepared information message to the user if the FMU was called in debug
mode (
loggingOn = fmi2True). Otherwise, “logger” should not show a message.
fmi2Error – the FMU encountered an error. The simulation cannot be continued with this FMU
instance. If one of the functions returns
fmi2Error, it can be tried to restart the simulation from a
formerly stored FMU state by calling
fmi2SetFMUstate. This can be done if the capability flag
canGetAndSetFMUstate is true and fmi2GetFMUstate was called before in non-erroneous state.
If not, the simulation cannot be continued and
fmi2FreeInstance or fmi2Reset must be called
afterwards.
4
Further processing is possible after this call; especially other FMU instances are not affected.
Function “
logger” was called in the FMU (see below), and it is expected that this function has
shown the prepared information message to the user.
fmi2Fatal – the model computations are irreparably corrupted for all FMU instances. [For example,
due to a run-time exception such as access violation or integer division by zero during the execution
3
Functions fmi2SetXXX do not usually perform calculations but just store the values that are passed in internal buffers. The
actual calculation is performed by fmi2GetXXX functions. Still fmi2SetXXX functions could check whether the input arguments
are in their validity range. If not, these functions could return with fmi2Discard.
4
Typically, fmi2Error return is for non-numerical reasons, like “disk full”. There might be cases where the environment can
fix such errors (eventually with the help of the user), and then simulation can continue at the last consistent state defined with
fmi2SetFMUstate
.