From 25e1a2bfe8a48748b8acc09c3229f6b4a37f393d Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Thu, 24 Oct 2024 16:32:03 +0300 Subject: [PATCH 01/11] Output all CVODE steps refs #1330 --- src/OMSimulatorLib/SystemSC.cpp | 78 ++++++++++++++++++++++----------- src/OMSimulatorLib/SystemSC.h | 4 +- 2 files changed, 54 insertions(+), 28 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index 157ff0f40..e3fe9b162 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -534,23 +534,23 @@ oms_status_enu_t oms::SystemSC::doStep() switch(solverMethod) { case oms_solver_sc_explicit_euler: - return doStepEuler(); + return doStepEuler(time + maximumStepSize); case oms_solver_sc_cvode: - return doStepCVODE(); + return doStepCVODE(time + maximumStepSize); default: return logError_InternalError; } } -oms_status_enu_t oms::SystemSC::doStepEuler() +oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) { fmi2Status fmistatus; oms_status_enu_t status; // Step 1: Initialize state variables and time - const fmi2Real end_time = std::min(time + maximumStepSize, getModel().getStopTime()); + const fmi2Real end_time = std::min(time + maximumStepSize, stopTime); const fmi2Real event_time_tolerance = 1e-4; logDebug("doStepEuler: " + std::to_string(time) + " -> " + std::to_string(end_time)); @@ -766,13 +766,14 @@ oms_status_enu_t oms::SystemSC::doStepEuler() return oms_status_ok; } -oms_status_enu_t oms::SystemSC::doStepCVODE() +oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) { fmi2Status fmistatus; oms_status_enu_t status; - int flag; + int flag = 0; + bool tnext_is_event = false; - const fmi2Real end_time = std::min(time + maximumStepSize, getModel().getStopTime()); + const fmi2Real end_time = stopTime; // find next time event fmi2Real tnext = end_time+1.0; @@ -788,16 +789,35 @@ oms_status_enu_t oms::SystemSC::doStepCVODE() time = end_time; } } + + tnext_is_event = tnext <= end_time; + tnext = std::min(tnext, end_time); + logDebug("tnext: " + std::to_string(tnext)); - while (time < end_time) - { + //while (time < end_time) + //{ logDebug("CVode: " + std::to_string(time) + " -> " + std::to_string(end_time)); for (size_t j=0, k=0; j < fmus.size(); ++j) for (size_t i=0; i < nStates[j]; ++i, ++k) NV_Ith_S(solverData.cvode.y, k) = states[j][i]; - flag = CVode(solverData.cvode.mem, std::min(tnext, end_time), solverData.cvode.y, &time, CV_NORMAL); + double cvode_time = tnext; + CVodeGetCurrentTime(solverData.cvode.mem, &cvode_time); + if (cvode_time < tnext) { + flag = CVode(solverData.cvode.mem, tnext, solverData.cvode.y, &cvode_time, CV_ONE_STEP); + if (flag < 0) + return logError("SUNDIALS_ERROR: CVode() failed with flag = " + std::to_string(flag)); + } + + if (cvode_time > tnext) { + // interpolate result to tnext (this shouldn't take any further steps) + flag = CVode(solverData.cvode.mem, tnext, solverData.cvode.y, &cvode_time, CV_NORMAL); + if (flag < 0) + return logError("SUNDIALS_ERROR: CVode() failed with flag = " + std::to_string(flag)); + } + + time = cvode_time; for (size_t i = 0, j=0; i < fmus.size(); ++i) { @@ -809,7 +829,7 @@ oms_status_enu_t oms::SystemSC::doStepCVODE() if (oms_status_ok != status) return status; } - if (flag == CV_ROOT_RETURN || time == tnext) + if (flag == CV_ROOT_RETURN || tnext_is_event && time == tnext) { logDebug("event found!!! " + std::to_string(time)); @@ -839,15 +859,6 @@ oms_status_enu_t oms::SystemSC::doStepCVODE() if (fmi2OK != fmistatus) logError_FMUCall("fmi2_enterContinuousTimeMode", fmus[i]); } - for (size_t i = 0; i < fmus.size(); ++i) - { - if (0 == nStates[i]) - continue; - - status = fmus[i]->getContinuousStates(states[i]); - if (oms_status_ok != status) return status; - } - // find next time event tnext = end_time+1.0; for (size_t i = 0; i < fmus.size(); ++i) @@ -862,6 +873,10 @@ oms_status_enu_t oms::SystemSC::doStepCVODE() time = end_time; } } + + tnext_is_event = tnext <= end_time; + tnext = std::min(tnext, end_time); + logDebug("tnext: " + std::to_string(tnext)); // emit the right limit of the event @@ -885,10 +900,10 @@ oms_status_enu_t oms::SystemSC::doStepCVODE() flag = CVodeReInit(solverData.cvode.mem, time, solverData.cvode.y); if (flag < 0) return logError("SUNDIALS_ERROR: CVodeReInit() failed with flag = " + std::to_string(flag)); - continue; + return oms_status_ok; } - if (flag == CV_SUCCESS) + if (flag >= 0) // Some kind of success { logDebug("CVode completed successfully at t = " + std::to_string(time)); @@ -914,7 +929,7 @@ oms_status_enu_t oms::SystemSC::doStepCVODE() } else return logError("CVode failed with flag = " + std::to_string(flag)); - } + //} return oms_status_ok; @@ -930,14 +945,25 @@ oms_status_enu_t oms::SystemSC::stepUntil(double stopTime) // main simulation loop oms_status_enu_t status = oms_status_ok; - while (time < std::min(stopTime, getModel().getStopTime()) && oms_status_ok == status) + double endTime = std::min(stopTime, getModel().getStopTime()); + double lastTime = time; + while (time < endTime && oms_status_ok == status) { - status = doStep(); + if (solverMethod == oms_solver_sc_explicit_euler) + status = doStepEuler(endTime); + else if (solverMethod == oms_solver_sc_cvode) + status = doStepCVODE(endTime); + else + return logError_InternalError; + if (status != oms_status_ok) logWarning("Bad return code at time " + std::to_string(time)); - if (isTopLevelSystem() && Flags::ProgressBar()) + if (isTopLevelSystem() && Flags::ProgressBar() && time > lastTime + maximumStepSize) + { Log::ProgressBar(startTime, stopTime, time); + lastTime = time; + } } if (isTopLevelSystem() && Flags::ProgressBar()) diff --git a/src/OMSimulatorLib/SystemSC.h b/src/OMSimulatorLib/SystemSC.h index f9b07d830..8b7ae7924 100644 --- a/src/OMSimulatorLib/SystemSC.h +++ b/src/OMSimulatorLib/SystemSC.h @@ -71,8 +71,8 @@ namespace oms oms_status_enu_t setSolver(oms_solver_enu_t solver) {if (solver > oms_solver_sc_min && solver < oms_solver_sc_max) {solverMethod=solver; return oms_status_ok;} return oms_status_error;} private: - oms_status_enu_t doStepEuler(); - oms_status_enu_t doStepCVODE(); + oms_status_enu_t doStepEuler(double stopTime); + oms_status_enu_t doStepCVODE(double stopTime); protected: SystemSC(const ComRef& cref, Model* parentModel, System* parentSystem); From c6fe68328c69e0fa44e1eaa41995aa5b61f80564 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Thu, 23 Oct 2025 17:24:55 +0300 Subject: [PATCH 02/11] Add missing check for changed simulation stopping time to SystemSC::stepUntil() --- src/OMSimulatorLib/SystemSC.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index e3fe9b162..8770169e0 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -959,6 +959,10 @@ oms_status_enu_t oms::SystemSC::stepUntil(double stopTime) if (status != oms_status_ok) logWarning("Bad return code at time " + std::to_string(time)); + // Check whether stopping time has changed due to a request from an FMU + if (getModel().getStopTime() < endTime) + endTime = getModel().getStopTime(); + if (isTopLevelSystem() && Flags::ProgressBar() && time > lastTime + maximumStepSize) { Log::ProgressBar(startTime, stopTime, time); From d2038bbdf47de5c0563a8c594affaf5ab9d9d484 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Thu, 23 Oct 2025 17:50:14 +0300 Subject: [PATCH 03/11] Update reference data for BouncingBall-me refs #1330 --- testsuite/references/BouncingBall-me.mat | Bin 170487 -> 173399 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/testsuite/references/BouncingBall-me.mat b/testsuite/references/BouncingBall-me.mat index 1fa62874d89359f5d429457b8ae6df9212fbeea1..2478283363a0acd815a5ef2abec35c7fd58365ab 100644 GIT binary patch literal 173399 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 literal 170487 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 Date: Mon, 27 Oct 2025 15:54:30 +0200 Subject: [PATCH 04/11] Fix error in CVODE result interpolation refs #1330 It seems that simply calling CVode with mode CV_NORMAL does not work correctly to return at the given stopping time, if the previous call stopped due to a root. --- src/OMSimulatorLib/SystemSC.cpp | 40 +++++++++++++++++++++--------- testsuite/simulation/EventTest.lua | 11 ++++---- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index 8770169e0..c6b7c47c0 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -802,19 +802,35 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) for (size_t i=0; i < nStates[j]; ++i, ++k) NV_Ith_S(solverData.cvode.y, k) = states[j][i]; - double cvode_time = tnext; - CVodeGetCurrentTime(solverData.cvode.mem, &cvode_time); - if (cvode_time < tnext) { - flag = CVode(solverData.cvode.mem, tnext, solverData.cvode.y, &cvode_time, CV_ONE_STEP); - if (flag < 0) - return logError("SUNDIALS_ERROR: CVode() failed with flag = " + std::to_string(flag)); - } + // Advance integrator (to end of step or next root) + double cvode_time = time; + int task = tnext > time + maximumStepSize ? CV_ONE_STEP : CV_NORMAL; + flag = CVode(solverData.cvode.mem, tnext, solverData.cvode.y, &cvode_time, task); + if (flag < 0) + return logError("SUNDIALS_ERROR: CVode() failed with flag = " + std::to_string(flag)); + + // Sanity check, should not be triggered. + // To avoid resorting to this, CV_NORMAL is used above when tnext is too close. + if (cvode_time > tnext) + { + logWarning("SystemSC::doStepCVODE: Stopping time overstepped by CVODE"); + + // This fails to do the necessary interpolation when the previous call has stopped at a root. + // flag = CVode(solverData.cvode.mem, tnext, solverData.cvode.y, &cvode_time, CV_NORMAL); + // if (flag < 0) + // return logError("SUNDIALS_ERROR: CVode() failed with flag = " + std::to_string(flag)); + + // Issue with the approach below: + // - Internal time of CVODE stays at previously returned value. + // - This may cause it to skip a root. + + // Interpolate states to value at tnext + int retval = CVodeGetDky(solverData.cvode.mem, tnext, 0, solverData.cvode.y); + if (retval != CV_SUCCESS) + return logError("SUNDIALS_ERROR: CVodeGetDky() failed with flag = " + std::to_string(retval)); - if (cvode_time > tnext) { - // interpolate result to tnext (this shouldn't take any further steps) - flag = CVode(solverData.cvode.mem, tnext, solverData.cvode.y, &cvode_time, CV_NORMAL); - if (flag < 0) - return logError("SUNDIALS_ERROR: CVode() failed with flag = " + std::to_string(flag)); + flag = CV_TSTOP_RETURN; + cvode_time = tnext; } time = cvode_time; diff --git a/testsuite/simulation/EventTest.lua b/testsuite/simulation/EventTest.lua index d620e2775..107f0c0f6 100644 --- a/testsuite/simulation/EventTest.lua +++ b/testsuite/simulation/EventTest.lua @@ -79,16 +79,15 @@ readFile("EventTest_lua.csv") -- 0, 0.3, -1 -- 0.30000001, -1.00000002723e-08, -1 -- 0.30000001, 0.3, -1 --- 0.60000002, -1.00000154823e-08, -1 +-- 0.60000002, -1.00000004943e-08, -1 -- 0.60000002, 0.3, -1 --- 0.90000003, -1.00000214776e-08, -1 +-- 0.90000003, -1.00000004943e-08, -1 -- 0.90000003, 0.3, -1 --- 1, 0.20000003, -1 --- 1.20000004, -1.0000003936e-08, -1 +-- 1.20000004, -1.00000006054e-08, -1 -- 1.20000004, 0.3, -1 --- 1.50000005, -1.00000143721e-08, -1 +-- 1.50000005, -1.00000290271e-08, -1 -- 1.50000005, 0.3, -1 --- 1.80000006, -1.00000390191e-08, -1 +-- 1.80000006, -1.0000053674e-08, -1 -- 1.80000006, 0.3, -1 -- 2, 0.10000006, -1 -- 2, 0.10000006, -1 From 9fe15bd1f6fab89f755a7eef81c4ab624e822fdd Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Fri, 10 Oct 2025 16:08:11 +0300 Subject: [PATCH 05/11] Fix order of operations in SystemSC (first writes, then reads) refs #1326 --- src/OMSimulatorLib/SystemSC.cpp | 90 ++++++++++++++------------------- 1 file changed, 38 insertions(+), 52 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index fc4dca000..43ced320f 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -613,6 +613,10 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) step_size_adjustment *= 0.5; // reduce the step size in each iteration // a. Evaluate derivatives for each FMU + // set time + for (const auto& component : getComponents()) + component.second->setTime(time); + const fmi2Real step_size = event_time - time; // Substep size, do one step from current time to the event logDebug("step_size: " + std::to_string(step_size) + " | " + std::to_string(time) + " -> " + std::to_string(event_time)); for (size_t i = 0; i < fmus.size(); ++i) @@ -627,6 +631,8 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) if (oms_status_ok != status) return status; } + updateInputs(eventGraph); + // b. Event Detection event_detected = event_time == tnext; logDebug("Event detected: " + std::to_string(event_detected)); @@ -657,10 +663,6 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) time = event_time; step_size_adjustment = maximumStepSize; - // set time - for (const auto& component : getComponents()) - component.second->setTime(time); - for (size_t i = 0; i < fmus.size(); ++i) { fmistatus = fmi2_completedIntegratorStep(fmus[i]->getFMU(), fmi2True, &callEventUpdate[i], &terminateSimulation[i]); @@ -696,10 +698,6 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) if (isTopLevelSystem()) getModel().emit(time, false); - // set time - for (const auto& component : getComponents()) - component.second->setTime(time); - // Enter event mode and handle discrete state updates for each FMU for (size_t i = 0; i < fmus.size(); ++i) { @@ -713,7 +711,16 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) fmistatus = fmi2_enterContinuousTimeMode(fmus[i]->getFMU()); if (fmi2OK != fmistatus) logError_FMUCall("fmi2_enterContinuousTimeMode", fmus[i]); - + } + + updateInputs(eventGraph); + + // emit the right limit of the event + if (isTopLevelSystem()) + getModel().emit(time, true); + + for (size_t i = 0; i < fmus.size(); ++i) + { if (nStates[i] > 0) { status = fmus[i]->getContinuousStates(states_backup[i]); @@ -722,8 +729,11 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) if (oms_status_ok != status) return status; } - status = fmus[i]->getEventindicators(event_indicators_prev[i]); - if (oms_status_ok != status) return status; + if (nEventIndicators[i] > 0) + { + status = fmus[i]->getEventindicators(event_indicators_prev[i]); + if (oms_status_ok != status) return status; + } } // find next time event @@ -740,11 +750,6 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) terminated = true; } } - - // emit the right limit of the event - updateInputs(eventGraph); - if (isTopLevelSystem()) - getModel().emit(time, true); } else { @@ -835,8 +840,15 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) time = cvode_time; + // set time + for (const auto& component : getComponents()) + component.second->setTime(time); + for (size_t i = 0, j=0; i < fmus.size(); ++i) { + if (nStates[i] == 0) + continue; + for (size_t k = 0; k < nStates[i]; k++, j++) states[i][k] = NV_Ith_S(solverData.cvode.y, j); @@ -845,24 +857,20 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) if (oms_status_ok != status) return status; } + updateInputs(eventGraph); + if (isTopLevelSystem()) + getModel().emit(time, false); + + for (size_t i = 0; i < fmus.size(); ++i) + { + fmistatus = fmi2_completedIntegratorStep(fmus[i]->getFMU(), fmi2True, &callEventUpdate[i], &terminateSimulation[i]); + if (fmi2OK != fmistatus) return logError_FMUCall("fmi2_completedIntegratorStep", fmus[i]); + } + if (flag == CV_ROOT_RETURN || tnext_is_event && time == tnext) { logDebug("event found!!! " + std::to_string(time)); - // set time - for (const auto& component : getComponents()) - component.second->setTime(time); - - for (size_t i = 0; i < fmus.size(); ++i) - { - fmistatus = fmi2_completedIntegratorStep(fmus[i]->getFMU(), fmi2True, &callEventUpdate[i], &terminateSimulation[i]); - if (fmi2OK != fmistatus) return logError_FMUCall("fmi2_completedIntegratorStep", fmus[i]); - } - - updateInputs(eventGraph); - if (isTopLevelSystem()) - getModel().emit(time, false); - // Enter event mode and handle discrete state updates for each FMU for (size_t i = 0; i < fmus.size(); ++i) { @@ -920,29 +928,7 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) } if (flag >= 0) // Some kind of success - { logDebug("CVode completed successfully at t = " + std::to_string(time)); - - // set time - for (const auto& component : getComponents()) - component.second->setTime(time); - - for (size_t i = 0; i < fmus.size(); ++i) - { - fmistatus = fmi2_completedIntegratorStep(fmus[i]->getFMU(), fmi2True, &callEventUpdate[i], &terminateSimulation[i]); - if (fmi2OK != fmistatus) return logError_FMUCall("fmi2_completedIntegratorStep", fmus[i]); - - if (0 == nStates[i]) - continue; - - status = fmus[i]->getContinuousStates(states[i]); - if (oms_status_ok != status) return status; - } - - updateInputs(eventGraph); - if (isTopLevelSystem()) - getModel().emit(time, false); - } else return logError("CVode failed with flag = " + std::to_string(flag)); //} From d07ea53cb1dd7e0bb06141f294b777388df699f2 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Wed, 4 Dec 2024 11:20:47 +0200 Subject: [PATCH 06/11] Handle events requested by fmi2_completedIntegratorStep refs #1515 --- src/OMSimulatorLib/SystemSC.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index 43ced320f..f8c262c6d 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -612,6 +612,8 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) step_size_adjustment *= 0.5; // reduce the step size in each iteration + // TODO: Check callEventUpdate values! + // a. Evaluate derivatives for each FMU // set time for (const auto& component : getComponents()) @@ -860,14 +862,17 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) updateInputs(eventGraph); if (isTopLevelSystem()) getModel().emit(time, false); - + + bool immediateEvent = false; for (size_t i = 0; i < fmus.size(); ++i) { fmistatus = fmi2_completedIntegratorStep(fmus[i]->getFMU(), fmi2True, &callEventUpdate[i], &terminateSimulation[i]); if (fmi2OK != fmistatus) return logError_FMUCall("fmi2_completedIntegratorStep", fmus[i]); + + immediateEvent = immediateEvent || callEventUpdate[i]; } - if (flag == CV_ROOT_RETURN || tnext_is_event && time == tnext) + if (flag == CV_ROOT_RETURN || tnext_is_event && time == tnext || immediateEvent) { logDebug("event found!!! " + std::to_string(time)); From 840b3fce0888cc12cb86d5de1482934adee49367 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Wed, 4 Dec 2024 11:27:31 +0200 Subject: [PATCH 07/11] Avoid unnecessary solver resets on events in which nothing changes refs #1516 --- src/OMSimulatorLib/SystemSC.cpp | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index f8c262c6d..927511b6e 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -41,6 +41,7 @@ #include #include #include +#include int oms::cvode_rhs(realtype t, N_Vector y, N_Vector ydot, void* user_data) { @@ -876,6 +877,15 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) { logDebug("event found!!! " + std::to_string(time)); + for (size_t i = 0; i < fmus.size(); ++i) + { + if (0 == nStates[i]) + continue; + + status = fmus[i]->getDerivatives(states_der[i]); + if (oms_status_ok != status) return status; + } + // Enter event mode and handle discrete state updates for each FMU for (size_t i = 0; i < fmus.size(); ++i) { @@ -913,6 +923,7 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) if (isTopLevelSystem()) getModel().emit(time, true); + bool resetSolver = false; for (size_t i = 0; i < fmus.size(); ++i) { if (0 == nStates[i]) @@ -920,14 +931,30 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) status = fmus[i]->getContinuousStates(states[i]); if (oms_status_ok != status) return status; + + // Check whether dervative values have changed due to the event + std::vector prevDer; + prevDer.reserve(nStates[i]); + prevDer.assign(states_der[i], states_der[i] + nStates[i]); + + status = fmus[i]->getDerivatives(states_der[i]); + if (oms_status_ok != status) return status; + + for (int k = 0; k < nStates[i]; k++) { + double diff = states_der[i][k] - prevDer[k]; + if (fabs(diff) > absoluteTolerance && fabs(diff) > relativeTolerance * fabs(prevDer[k])) + resetSolver = true; + } } for (size_t j=0, k=0; j < fmus.size(); ++j) for (size_t i=0; i < nStates[j]; ++i, ++k) NV_Ith_S(solverData.cvode.y, k) = states[j][i]; - flag = CVodeReInit(solverData.cvode.mem, time, solverData.cvode.y); - if (flag < 0) return logError("SUNDIALS_ERROR: CVodeReInit() failed with flag = " + std::to_string(flag)); + if (resetSolver) { + flag = CVodeReInit(solverData.cvode.mem, time, solverData.cvode.y); + if (flag < 0) return logError("SUNDIALS_ERROR: CVodeReInit() failed with flag = " + std::to_string(flag)); + } return oms_status_ok; } From 8bd092e5415a168d7cf6fd12de49b3c38da19386 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Fri, 24 Oct 2025 17:02:08 +0300 Subject: [PATCH 08/11] Fix errors in setting simulation time in the Euler solver for SC systems - Some errors made in commit 4c3fe7910. - All discrete inputs should be updated before going back to continous time mode in any FMU. refs #1326 --- src/OMSimulatorLib/SystemSC.cpp | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index 927511b6e..f32e322e7 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -615,10 +615,10 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) // TODO: Check callEventUpdate values! - // a. Evaluate derivatives for each FMU + // a. Evaluate states at time 'event_time' for each FMU // set time for (const auto& component : getComponents()) - component.second->setTime(time); + component.second->setTime(event_time); const fmi2Real step_size = event_time - time; // Substep size, do one step from current time to the event logDebug("step_size: " + std::to_string(step_size) + " | " + std::to_string(time) + " -> " + std::to_string(event_time)); @@ -666,17 +666,22 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) time = event_time; step_size_adjustment = maximumStepSize; + // FMUs are already at time 'event_time' + // for (const auto& component : getComponents()) + // component.second->setTime(time); + + // emit the left limit of the event (if it hasn't already been emitted) + // We already did an input update earlier + // updateInputs(simulationGraph); //pass the continuousTimeMode dependency graph which involves only connections of type Real + if (isTopLevelSystem()) + getModel().emit(time, false); + for (size_t i = 0; i < fmus.size(); ++i) { fmistatus = fmi2_completedIntegratorStep(fmus[i]->getFMU(), fmi2True, &callEventUpdate[i], &terminateSimulation[i]); if (fmi2OK != fmistatus) return logError_FMUCall("fmi2_completedIntegratorStep", fmus[i]); } - // emit the left limit of the event (if it hasn't already been emitted) - updateInputs(simulationGraph); //pass the continuousTimeMode dependency graph which involves only connections of type Real - if (isTopLevelSystem()) - getModel().emit(time, false); - logDebug("integrate normally to the end time if no events are ahead"); } else @@ -697,6 +702,10 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) step_size_adjustment = maximumStepSize; event_time = end_time; + // FMUs are already at time 'event_time' + // for (const auto& component : getComponents()) + // component.second->setTime(time); + // emit the left limit of the event (if it hasn't already been emitted) if (isTopLevelSystem()) getModel().emit(time, false); @@ -711,9 +720,6 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) if (fmi2OK != fmistatus) logError_FMUCall("fmi2_enterEventMode", fmus[i]); fmus[i]->doEventIteration(); - - fmistatus = fmi2_enterContinuousTimeMode(fmus[i]->getFMU()); - if (fmi2OK != fmistatus) logError_FMUCall("fmi2_enterContinuousTimeMode", fmus[i]); } updateInputs(eventGraph); @@ -722,6 +728,13 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) if (isTopLevelSystem()) getModel().emit(time, true); + // Go back to continuous time mode + for (size_t i = 0; i < fmus.size(); ++i) + { + fmistatus = fmi2_enterContinuousTimeMode(fmus[i]->getFMU()); + if (fmi2OK != fmistatus) logError_FMUCall("fmi2_enterContinuousTimeMode", fmus[i]); + } + for (size_t i = 0; i < fmus.size(); ++i) { if (nStates[i] > 0) From b78a207817e088719376375bec6aee6467488823 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Fri, 24 Oct 2025 17:05:31 +0300 Subject: [PATCH 09/11] Eliminate setting of discrete input variables in continuous time mode Even though the inputs values shouldn't change in continuous time mode, calling setters for such inputs is against the FMI standard and may result in error responses from FMUs. refs #1326 --- src/OMSimulatorLib/SystemSC.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index f32e322e7..3172e3c68 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -65,7 +65,7 @@ int oms::cvode_rhs(realtype t, N_Vector y, N_Vector ydot, void* user_data) if (oms_status_ok != status) return status; } - system->updateInputs(system->eventGraph); + system->updateInputs(system->simulationGraph); // get state derivatives for (size_t j=0, k=0; j < system->fmus.size(); ++j) @@ -107,7 +107,7 @@ int oms::cvode_roots(realtype t, N_Vector y, realtype *gout, void *user_data) if (oms_status_ok != status) return status; } - system->updateInputs(system->eventGraph); + system->updateInputs(system->simulationGraph); for (size_t i = 0, j=0; i < system->fmus.size(); ++i) { @@ -634,7 +634,7 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) if (oms_status_ok != status) return status; } - updateInputs(eventGraph); + updateInputs(simulationGraph); // b. Event Detection event_detected = event_time == tnext; @@ -722,6 +722,7 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) fmus[i]->doEventIteration(); } + // Update all inputs, including non-continuous ones updateInputs(eventGraph); // emit the right limit of the event @@ -873,7 +874,7 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) if (oms_status_ok != status) return status; } - updateInputs(eventGraph); + updateInputs(simulationGraph); if (isTopLevelSystem()) getModel().emit(time, false); From 3989562b160ba20901ee01a5bdf3b646032ec8fa Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Fri, 24 Oct 2025 17:15:21 +0300 Subject: [PATCH 10/11] Fix some issues related to termination request form FMUs - Termination requests from completedIntegratorStep were not handled. - Unnecessary change to System::time in event-related termination with CVODE. refs #1515 --- src/OMSimulatorLib/SystemSC.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index 3172e3c68..04f0526a8 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -680,6 +680,13 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) { fmistatus = fmi2_completedIntegratorStep(fmus[i]->getFMU(), fmi2True, &callEventUpdate[i], &terminateSimulation[i]); if (fmi2OK != fmistatus) return logError_FMUCall("fmi2_completedIntegratorStep", fmus[i]); + + if(terminateSimulation[i]) + { + logInfo("Simulation terminated by FMU " + std::string(fmus[i]->getFullCref()) + " at time " + std::to_string(time)); + getModel().setStopTime(time); + terminated = true; + } } logDebug("integrate normally to the end time if no events are ahead"); @@ -716,6 +723,13 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) fmistatus = fmi2_completedIntegratorStep(fmus[i]->getFMU(), fmi2True, &callEventUpdate[i], &terminateSimulation[i]); if (fmi2OK != fmistatus) return logError_FMUCall("fmi2_completedIntegratorStep", fmus[i]); + if(terminateSimulation[i]) + { + logInfo("Simulation terminated by FMU " + std::string(fmus[i]->getFullCref()) + " at time " + std::to_string(time)); + getModel().setStopTime(time); + terminated = true; + } + fmistatus = fmi2_enterEventMode(fmus[i]->getFMU()); if (fmi2OK != fmistatus) logError_FMUCall("fmi2_enterEventMode", fmus[i]); @@ -884,6 +898,12 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) fmistatus = fmi2_completedIntegratorStep(fmus[i]->getFMU(), fmi2True, &callEventUpdate[i], &terminateSimulation[i]); if (fmi2OK != fmistatus) return logError_FMUCall("fmi2_completedIntegratorStep", fmus[i]); + if (terminateSimulation[i]) + { + logInfo("Simulation terminated by FMU " + std::string(fmus[i]->getFullCref()) + " at time " + std::to_string(time)); + getModel().setStopTime(time); + } + immediateEvent = immediateEvent || callEventUpdate[i]; } @@ -923,7 +943,6 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) { logInfo("Simulation terminated by FMU " + std::string(fmus[i]->getFullCref()) + " at time " + std::to_string(time)); getModel().setStopTime(time); - time = end_time; } } From 414b5a6bedd091c70cf218bd592afac0c333aa19 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Mon, 27 Oct 2025 14:43:53 +0200 Subject: [PATCH 11/11] Fix condition for resetting the CVODE solver refs #1516 It is necessary to reset the solver when the state variable values change. --- src/OMSimulatorLib/SystemSC.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index 04f0526a8..bfbff3933 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -962,22 +962,33 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) if (0 == nStates[i]) continue; + std::vector prev_values; + prev_values.reserve(nStates[i]); + + // Check whether state values have changed due to the event + prev_values.assign(states[i], states[i] + nStates[i]); + status = fmus[i]->getContinuousStates(states[i]); if (oms_status_ok != status) return status; - // Check whether dervative values have changed due to the event - std::vector prevDer; - prevDer.reserve(nStates[i]); - prevDer.assign(states_der[i], states_der[i] + nStates[i]); + for (int k = 0; k < nStates[i]; k++) { + double diff = states[i][k] - prev_values[k]; + if (fabs(diff) > absoluteTolerance && fabs(diff) > relativeTolerance * fabs(prev_values[k])) + resetSolver = true; + } + + // Check whether derivative values have changed due to the event + prev_values.assign(states_der[i], states_der[i] + nStates[i]); status = fmus[i]->getDerivatives(states_der[i]); if (oms_status_ok != status) return status; for (int k = 0; k < nStates[i]; k++) { - double diff = states_der[i][k] - prevDer[k]; - if (fabs(diff) > absoluteTolerance && fabs(diff) > relativeTolerance * fabs(prevDer[k])) + double diff = states_der[i][k] - prev_values[k]; + if (fabs(diff) > absoluteTolerance && fabs(diff) > relativeTolerance * fabs(prev_values[k])) resetSolver = true; } + } for (size_t j=0, k=0; j < fmus.size(); ++j)