diff --git a/fmusim/FMI3CSSimulation.c b/fmusim/FMI3CSSimulation.c index 152908a8..1aba4e4b 100644 --- a/fmusim/FMI3CSSimulation.c +++ b/fmusim/FMI3CSSimulation.c @@ -172,7 +172,7 @@ FMIStatus FMI3CSSimulate(const FMISimulationSettings* s) { time, // currentCommunicationPoint stepSize, // communicationStepSize fmi3True, // noSetFMUStatePriorToCurrentPoint - &eventEncountered, // eventEncountered + &eventEncountered, // eventHandlingNeeded &terminateSimulation, // terminateSimulation &earlyReturn, // earlyReturn &lastSuccessfulTime // lastSuccessfulTime diff --git a/fmusim/FMIRecorder.c b/fmusim/FMIRecorder.c index 267ef1cf..98da1fb0 100644 --- a/fmusim/FMIRecorder.c +++ b/fmusim/FMIRecorder.c @@ -181,7 +181,9 @@ FMIStatus FMISample(FMIInstance* instance, double time, FMIRecorder* recorder) { CALL(FMICalloc(&values, info->nValues, FMISizeOfVariableType(type, recorder->instance->fmiMajorVersion))); - CALL(FMIGetValues(recorder->instance, type, info->valueReferences, info->nVariables, row->sizes, values, info->nValues)); + if (type != FMIClockType) { // skip clocks + CALL(FMIGetValues(recorder->instance, type, info->valueReferences, info->nVariables, row->sizes, values, info->nValues)); + } if (type == FMIBinaryType) { diff --git a/fmusim/FMIStaticInput.c b/fmusim/FMIStaticInput.c index f1cd250c..b2d1080d 100644 --- a/fmusim/FMIStaticInput.c +++ b/fmusim/FMIStaticInput.c @@ -296,8 +296,22 @@ FMIStatus FMIApplyInput(FMIInstance* instance, const FMIStaticInput* input, doub const size_t nValues = input->nValues[j]; const void* values = input->values[j]; - if (nValues == 0) continue; + if (nValues == 0) { + continue; + } + + if (variable->type == FMIClockType) { + + if (instance->state == FMIInitializationModeState) { + continue; // don't set clocks in Initialization Mode + } + if (!*((bool*)values)) { + continue; // don't set inactive clocks + } + + } + CALL(FMISetValues(instance, type, &vr, 1, NULL, values, nValues)); } }