From 25e1a2bfe8a48748b8acc09c3229f6b4a37f393d Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Thu, 24 Oct 2024 16:32:03 +0300 Subject: [PATCH 01/10] 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 4c3fe7910cca84b0dd478c8f688c2d26923a6d2c Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Fri, 10 Oct 2025 16:08:11 +0300 Subject: [PATCH 02/10] 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 e3fe9b162..10007a56e 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 { @@ -819,8 +824,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); @@ -829,24 +841,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) { @@ -904,29 +912,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 fa4500b84bdba8c30dcd4a48f9d64ba3f5f30e6f Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Wed, 4 Dec 2024 10:45:04 +0200 Subject: [PATCH 03/10] Use a stable initial guess for algebraic loop solution refs #1333 --- src/OMSimulatorLib/SystemSC.cpp | 82 ++++++++++++++++++++++++++++++++- src/OMSimulatorLib/SystemSC.h | 6 +++ 2 files changed, 87 insertions(+), 1 deletion(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index 10007a56e..783999514 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -64,6 +64,8 @@ int oms::cvode_rhs(realtype t, N_Vector y, N_Vector ydot, void* user_data) if (oms_status_ok != status) return status; } + system->restoreInputs(system->eventGraph, system->initial_guess); + system->updateInputs(system->eventGraph); // get state derivatives @@ -106,6 +108,8 @@ int oms::cvode_roots(realtype t, N_Vector y, realtype *gout, void *user_data) if (oms_status_ok != status) return status; } + system->restoreInputs(system->eventGraph, system->initial_guess); + system->updateInputs(system->eventGraph); for (size_t i = 0, j=0; i < system->fmus.size(); ++i) @@ -610,6 +614,10 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) if(tnext < event_time) event_time = tnext; + std::vector savedInputs; + saveInputs(simulationGraph, savedInputs); + saveInputs(eventGraph, initial_guess); + step_size_adjustment *= 0.5; // reduce the step size in each iteration // a. Evaluate derivatives for each FMU @@ -670,6 +678,7 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) } // emit the left limit of the event (if it hasn't already been emitted) + restoreInputs(simulationGraph, savedInputs); updateInputs(simulationGraph); //pass the continuousTimeMode dependency graph which involves only connections of type Real if (isTopLevelSystem()) getModel().emit(time, false); @@ -713,6 +722,7 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) if (fmi2OK != fmistatus) logError_FMUCall("fmi2_enterContinuousTimeMode", fmus[i]); } + restoreInputs(eventGraph, initial_guess); updateInputs(eventGraph); // emit the right limit of the event @@ -803,6 +813,9 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) //while (time < end_time) //{ logDebug("CVode: " + std::to_string(time) + " -> " + std::to_string(end_time)); + + saveInputs(eventGraph, initial_guess); + 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]; @@ -841,6 +854,7 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) if (oms_status_ok != status) return status; } + restoreInputs(eventGraph, initial_guess); updateInputs(eventGraph); if (isTopLevelSystem()) getModel().emit(time, false); @@ -855,6 +869,8 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) { logDebug("event found!!! " + std::to_string(time)); + saveInputs(eventGraph, initial_guess); + // Enter event mode and handle discrete state updates for each FMU for (size_t i = 0; i < fmus.size(); ++i) { @@ -887,8 +903,10 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) logDebug("tnext: " + std::to_string(tnext)); - // emit the right limit of the event + restoreInputs(eventGraph, initial_guess); updateInputs(eventGraph); + + // emit the right limit of the event if (isTopLevelSystem()) getModel().emit(time, true); @@ -1017,3 +1035,65 @@ oms_status_enu_t oms::SystemSC::updateInputs(DirectedGraph& graph) } return oms_status_ok; } + +oms_status_enu_t oms::SystemSC::saveInputs(DirectedGraph& graph, std::vector& saved_inputs) +{ + CallClock callClock(clock); + oms_status_enu_t status; + int loopNum = 0; + + // input := output + const std::vector< scc_t >& sortedConnections = graph.getSortedConnections(); + updateAlgebraicLoops(sortedConnections, graph); + + saved_inputs.clear(); + + for (int i = 0; i < sortedConnections.size(); i++) + { + if (!sortedConnections[i].thisIsALoop) + continue; + + for (std::pair conn : sortedConnections[i].connections) { + int input = conn.second; + + if (graph.getNodes()[input].getType() == oms_signal_type_real) + { + double value = 0.0; + if (oms_status_ok != getReal(graph.getNodes()[input].getName(), value)) return oms_status_error; + + saved_inputs.push_back(value); + } + } + } + + return oms_status_ok; +} + +oms_status_enu_t oms::SystemSC::restoreInputs(DirectedGraph& graph, const std::vector& saved_inputs) +{ + CallClock callClock(clock); + oms_status_enu_t status; + + // input := output + const std::vector< scc_t >& sortedConnections = graph.getSortedConnections(); + + auto it = saved_inputs.cbegin(); + + for (int i = 0; i < sortedConnections.size(); i++) + { + if (!sortedConnections[i].thisIsALoop) + continue; + + for (std::pair conn : sortedConnections[i].connections) { + int input = conn.second; + + if (graph.getNodes()[input].getType() == oms_signal_type_real) + { + double value = *it++; + if (oms_status_ok != setReal(graph.getNodes()[input].getName(), value)) return oms_status_error; + } + } + } + + return oms_status_ok; +} diff --git a/src/OMSimulatorLib/SystemSC.h b/src/OMSimulatorLib/SystemSC.h index 8b7ae7924..6bd118c0c 100644 --- a/src/OMSimulatorLib/SystemSC.h +++ b/src/OMSimulatorLib/SystemSC.h @@ -65,6 +65,10 @@ namespace oms oms_status_enu_t updateInputs(DirectedGraph& graph); + oms_status_enu_t saveInputs(DirectedGraph& graph, std::vector &saved_inputs); + + oms_status_enu_t restoreInputs(DirectedGraph& graph, const std::vector& saved_outputs); + std::string getSolverName() const; oms_status_enu_t setSolverMethod(std::string); @@ -95,6 +99,8 @@ namespace oms std::vector event_indicators; std::vector event_indicators_prev; + std::vector initial_guess; // Initial guess for all algebraic loops + struct SolverDataEuler_t { }; From c6fe68328c69e0fa44e1eaa41995aa5b61f80564 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Thu, 23 Oct 2025 17:24:55 +0300 Subject: [PATCH 04/10] 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 05/10] 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 06/10] 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 8c4fa1a5f9d907d90072578f86a7c1ce46f6c2f7 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Thu, 30 Oct 2025 14:01:00 +0200 Subject: [PATCH 07/10] Change CVODE stopping to use CVodeSetStopTime() refs #1530 --- src/OMSimulatorLib/SystemSC.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index fc4dca000..a8a14ccbc 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -802,13 +802,21 @@ 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]; + // This will force the solver to take a step only to tnext + // The 'tout' argument for CVode will integrate beyond it and return an interpolant + CVodeSetStopTime(solverData.cvode.mem, tnext); + // 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); + 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)); - + + // CVode will return an interpolant for roots. In that case it should always be reset at the root. + // Otherwise it will make use of rhs calculations made before the event. + // This will cause it to ignore any changes in the rhs from current time to cv_mem->cv_tn. + bool is_interpolated = flag == CV_ROOT_RETURN; + // 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) From d11ce7619ffe7768347dbcfcd0af412fce19d090 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Thu, 30 Oct 2025 20:48:32 +0200 Subject: [PATCH 08/10] Update test cases refs #1530 --- testsuite/reference-fmus/Dahlquist.lua | 2 +- testsuite/simulation/DualMassOscillator.lua | 6 +- testsuite/simulation/Makefile | 1 + testsuite/simulation/integratorTest.lua | 79 +++++++++++++++++++++ 4 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 testsuite/simulation/integratorTest.lua diff --git a/testsuite/reference-fmus/Dahlquist.lua b/testsuite/reference-fmus/Dahlquist.lua index 0d14840d8..9910e1905 100644 --- a/testsuite/reference-fmus/Dahlquist.lua +++ b/testsuite/reference-fmus/Dahlquist.lua @@ -58,7 +58,7 @@ end -- info: maximum step size for 'model.root': 0.001000 -- info: Result file: Dahlquist-me.mat (bufferSize=1) -- info: Final Statistics for 'model.root': --- NumSteps = 10001 NumRhsEvals = 10002 NumLinSolvSetups = 501 +-- NumSteps = 10001 NumRhsEvals = 10002 NumLinSolvSetups = 502 -- NumNonlinSolvIters = 10001 NumNonlinSolvConvFails = 0 NumErrTestFails = 0 -- signal x is equal -- endResult diff --git a/testsuite/simulation/DualMassOscillator.lua b/testsuite/simulation/DualMassOscillator.lua index 962a072c4..a0c20fdaa 100644 --- a/testsuite/simulation/DualMassOscillator.lua +++ b/testsuite/simulation/DualMassOscillator.lua @@ -50,9 +50,9 @@ oms_delete("DualMassOscillator") -- info: system1.x1: 0.0 -- info: system2.x2: 0.5 -- info: Simulation --- info: system1.x1: 0.051037644866066 --- info: system2.x2: 0.031639500249976 +-- info: system1.x1: 0.051037644963887 +-- info: system2.x2: 0.031639500306724 -- info: Final Statistics for 'DualMassOscillator.root': --- NumSteps = 10007 NumRhsEvals = 10008 NumLinSolvSetups = 507 +-- NumSteps = 10007 NumRhsEvals = 10008 NumLinSolvSetups = 508 -- NumNonlinSolvIters = 10007 NumNonlinSolvConvFails = 0 NumErrTestFails = 0 -- endResult diff --git a/testsuite/simulation/Makefile b/testsuite/simulation/Makefile index 1a0a65f9f..cbdcce975 100644 --- a/testsuite/simulation/Makefile +++ b/testsuite/simulation/Makefile @@ -50,6 +50,7 @@ importPartialSnapshot.lua \ importStartValues.lua \ importStartValues1.lua \ importSuppressUnitConversion.lua \ +integratorTest.lua \ listVariants1.lua \ multipleConnections.lua \ multipleInstance.lua \ diff --git a/testsuite/simulation/integratorTest.lua b/testsuite/simulation/integratorTest.lua new file mode 100644 index 000000000..abe471046 --- /dev/null +++ b/testsuite/simulation/integratorTest.lua @@ -0,0 +1,79 @@ +-- status: correct +-- teardown_command: rm -rf integratorTest_lua/ +-- linux: yes +-- ucrt64: yes +-- win: yes +-- mac: no + +function readFile(filename) + local f = assert(io.open(filename, "r")) + local content = f:read("*all") + print(content) + f:close() +end + +oms_setCommandLineOption("--suppressPath=true") +oms_setTempDirectory("./integratorTest_lua/") +oms_setWorkingDirectory("./integratorTest_lua/") + +oms_newModel("IntegratorTest") +oms_addSystem("IntegratorTest.root", oms_system_sc) +oms_addSubModel("IntegratorTest.root.integrator", "../../resources/Modelica.Blocks.Continuous.Integrator.fmu") + +-- simulation settings +oms_setSolver("IntegratorTest.root", oms_solver_sc_cvode) +oms_setResultFile("IntegratorTest", "integratorTest_lua.csv") +oms_setStopTime("IntegratorTest", 10.0) +oms_setVariableStepSize("IntegratorTest.root", 1.0, 1e-8, 1.0) + +oms_instantiate("IntegratorTest") +oms_initialize("IntegratorTest") + +oms_setReal("IntegratorTest.root.integrator.u", 0.0) +print(string.format("t = 0.0: y = %g", oms_getReal("IntegratorTest.root.integrator.y"))) +oms_stepUntil("IntegratorTest", 2.5) +oms_setReal("IntegratorTest.root.integrator.u", 10.0) + +print(string.format("t = 2.5: y = %g", oms_getReal("IntegratorTest.root.integrator.y"))) +oms_stepUntil("IntegratorTest", 5.0) +print(string.format("t = 5.0: y = %g", oms_getReal("IntegratorTest.root.integrator.y"))) +oms_stepUntil("IntegratorTest", 10.0) +print(string.format("t = 10.0: y = %g", oms_getReal("IntegratorTest.root.integrator.y"))) + +oms_delete("IntegratorTest") + +readFile("integratorTest_lua.csv") + +-- Result: +-- info: maximum step size for 'IntegratorTest.root': 1.000000 +-- info: Result file: integratorTest_lua.csv (bufferSize=1) +-- t = 0.0: y = 0 +-- t = 2.5: y = 0 +-- t = 5.0: y = 25 +-- t = 10.0: y = 75 +-- info: Final Statistics for 'IntegratorTest.root': +-- NumSteps = 16 NumRhsEvals = 26 NumLinSolvSetups = 13 +-- NumNonlinSolvIters = 24 NumNonlinSolvConvFails = 0 NumErrTestFails = 4 +-- time,IntegratorTest.root.integrator._D_outputAlias_y,IntegratorTest.root.integrator.der(_D_outputAlias_y),IntegratorTest.root.integrator.local_set,IntegratorTest.root.integrator.u,IntegratorTest.root.integrator.y,IntegratorTest.root.integrator.initType,IntegratorTest.root.integrator.local_reset,IntegratorTest.root.integrator.use_reset,IntegratorTest.root.integrator.use_set +-- 0, 0, 0, 0, 0, 0, 3, 0, 0, 0 +-- 1, 0, 0, 0, 0, 0, 3, 0, 0, 0 +-- 2, 0, 0, 0, 0, 0, 3, 0, 0, 0 +-- 2.5, 0, 0, 0, 0, 0, 3, 0, 0, 0 +-- 2.5, 0, 0, 0, 0, 0, 3, 0, 0, 0 +-- 2.5001, 0.001, 10, 0, 10, 0.001, 3, 0, 0, 0 +-- 2.5002, 0.002, 10, 0, 10, 0.002, 3, 0, 0, 0 +-- 2.5012, 0.012, 10, 0, 10, 0.012, 3, 0, 0, 0 +-- 2.5112, 0.112, 10, 0, 10, 0.112, 3, 0, 0, 0 +-- 2.6112, 1.112, 10, 0, 10, 1.112, 3, 0, 0, 0 +-- 3.6112, 11.112, 10, 0, 10, 11.112, 3, 0, 0, 0 +-- 4.6112, 21.112, 10, 0, 10, 21.112, 3, 0, 0, 0 +-- 5, 25, 10, 0, 10, 25, 3, 0, 0, 0 +-- 5, 25, 10, 0, 10, 25, 3, 0, 0, 0 +-- 6, 35, 10, 0, 10, 35, 3, 0, 0, 0 +-- 7, 45, 10, 0, 10, 45, 3, 0, 0, 0 +-- 8, 55, 10, 0, 10, 55, 3, 0, 0, 0 +-- 9, 65, 10, 0, 10, 65, 3, 0, 0, 0 +-- 10, 75, 10, 0, 10, 75, 3, 0, 0, 0 +-- 10, 75, 10, 0, 10, 75, 3, 0, 0, 0 +-- +-- endResult From 5e7f2936904998872d88fd4f697447cd042894bd Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Fri, 24 Oct 2025 17:02:08 +0300 Subject: [PATCH 09/10] 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 | 35 ++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index 26773272f..b469db702 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -620,10 +620,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 + // 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)); @@ -671,18 +671,23 @@ 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 + // restoreInputs(simulationGraph, savedInputs); + // 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) - restoreInputs(simulationGraph, savedInputs); - 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 @@ -703,6 +708,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); @@ -717,9 +726,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]); } restoreInputs(eventGraph, initial_guess); @@ -729,6 +735,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 2b6519c79d53c05d312a9e46767e74087f2dca18 Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Fri, 24 Oct 2025 17:05:31 +0300 Subject: [PATCH 10/10] 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 | 43 +++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/OMSimulatorLib/SystemSC.cpp b/src/OMSimulatorLib/SystemSC.cpp index b469db702..26a793fb4 100644 --- a/src/OMSimulatorLib/SystemSC.cpp +++ b/src/OMSimulatorLib/SystemSC.cpp @@ -64,9 +64,9 @@ int oms::cvode_rhs(realtype t, N_Vector y, N_Vector ydot, void* user_data) if (oms_status_ok != status) return status; } - system->restoreInputs(system->eventGraph, system->initial_guess); + system->restoreInputs(system->simulationGraph, system->initial_guess); - system->updateInputs(system->eventGraph); + system->updateInputs(system->simulationGraph); // get state derivatives for (size_t j=0, k=0; j < system->fmus.size(); ++j) @@ -108,9 +108,9 @@ int oms::cvode_roots(realtype t, N_Vector y, realtype *gout, void *user_data) if (oms_status_ok != status) return status; } - system->restoreInputs(system->eventGraph, system->initial_guess); + system->restoreInputs(system->simulationGraph, system->initial_guess); - system->updateInputs(system->eventGraph); + system->updateInputs(system->simulationGraph); for (size_t i = 0, j=0; i < system->fmus.size(); ++i) { @@ -608,16 +608,14 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) } } + saveInputs(simulationGraph, initial_guess); + // Step 3: Main integration loop while (time < end_time && !terminated) { if(tnext < event_time) event_time = tnext; - std::vector savedInputs; - saveInputs(simulationGraph, savedInputs); - saveInputs(eventGraph, initial_guess); - step_size_adjustment *= 0.5; // reduce the step size in each iteration // a. Evaluate states at time 'event_time' for each FMU @@ -639,7 +637,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; @@ -688,6 +686,9 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) if (fmi2OK != fmistatus) return logError_FMUCall("fmi2_completedIntegratorStep", fmus[i]); } + // Save new initial guesses for algebraic loops + saveInputs(simulationGraph, initial_guess); + logDebug("integrate normally to the end time if no events are ahead"); } else @@ -728,7 +729,7 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) fmus[i]->doEventIteration(); } - restoreInputs(eventGraph, initial_guess); + // Update all inputs, including non-continuous ones updateInputs(eventGraph); // emit the right limit of the event @@ -742,6 +743,9 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) if (fmi2OK != fmistatus) logError_FMUCall("fmi2_enterContinuousTimeMode", fmus[i]); } + // Save new initial guesses for algebraic loops + saveInputs(simulationGraph, initial_guess); + for (size_t i = 0; i < fmus.size(); ++i) { if (nStates[i] > 0) @@ -778,6 +782,9 @@ oms_status_enu_t oms::SystemSC::doStepEuler(double stopTime) { // Ok, event must be little earlier event_time -= step_size_adjustment; + + // Put algebraic loop inputs back to the values at the last finished time step + restoreInputs(simulationGraph, initial_guess); } } } @@ -827,7 +834,7 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) //{ logDebug("CVode: " + std::to_string(time) + " -> " + std::to_string(end_time)); - saveInputs(eventGraph, initial_guess); + saveInputs(simulationGraph, initial_guess); for (size_t j=0, k=0; j < fmus.size(); ++j) for (size_t i=0; i < nStates[j]; ++i, ++k) @@ -891,8 +898,8 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) if (oms_status_ok != status) return status; } - restoreInputs(eventGraph, initial_guess); - updateInputs(eventGraph); + restoreInputs(simulationGraph, initial_guess); + updateInputs(simulationGraph); if (isTopLevelSystem()) getModel().emit(time, false); @@ -906,8 +913,6 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) { logDebug("event found!!! " + std::to_string(time)); - saveInputs(eventGraph, initial_guess); - // Enter event mode and handle discrete state updates for each FMU for (size_t i = 0; i < fmus.size(); ++i) { @@ -915,7 +920,12 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) if (fmi2OK != fmistatus) logError_FMUCall("fmi2_enterEventMode", fmus[i]); fmus[i]->doEventIteration(); + } + updateInputs(eventGraph); + + for (size_t i = 0; i < fmus.size(); ++i) + { fmistatus = fmi2_enterContinuousTimeMode(fmus[i]->getFMU()); if (fmi2OK != fmistatus) logError_FMUCall("fmi2_enterContinuousTimeMode", fmus[i]); } @@ -940,9 +950,6 @@ oms_status_enu_t oms::SystemSC::doStepCVODE(double stopTime) logDebug("tnext: " + std::to_string(tnext)); - restoreInputs(eventGraph, initial_guess); - updateInputs(eventGraph); - // emit the right limit of the event if (isTopLevelSystem()) getModel().emit(time, true);