From 353082d6a1183a45912d2204f6a15c922d910f68 Mon Sep 17 00:00:00 2001 From: Andreas <38031952+AnHeuermann@users.noreply.github.com> Date: Thu, 24 Nov 2022 18:17:11 +0100 Subject: [PATCH] Throw error if delayTime becomes zero at runtime (#9753) --- OMCompiler/SimulationRuntime/c/simulation/solver/delay.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/OMCompiler/SimulationRuntime/c/simulation/solver/delay.c b/OMCompiler/SimulationRuntime/c/simulation/solver/delay.c index e3250adcd3b..1d3beceaefb 100644 --- a/OMCompiler/SimulationRuntime/c/simulation/solver/delay.c +++ b/OMCompiler/SimulationRuntime/c/simulation/solver/delay.c @@ -34,6 +34,7 @@ */ #include "delay.h" +#include "epsilon.h" #include "../../util/omc_error.h" #include "../../util/ringbuffer.h" #include "../../openmodelica.h" @@ -120,6 +121,7 @@ void storeDelayedExpression(DATA* data, threadData_t *threadData, int exprNumber assertStreamPrint(threadData, exprNumber < data->modelData->nDelayExpressions, "storeDelayedExpression: invalid expression number %d", exprNumber); assertStreamPrint(threadData, 0 <= exprNumber, "storeDelayedExpression: invalid expression number %d", exprNumber); assertStreamPrint(threadData, data->simulationInfo->startTime <= time, "storeDelayedExpression: time is smaller than starting time."); + assertStreamPrint(threadData, delayTime >= 0, "Negative delay requested: delayTime = %g", delayTime); /* Check if time is greater equal then last stored time in delay structure */ if (length > 0) { @@ -193,7 +195,9 @@ double delayImpl(DATA* data, threadData_t *threadData, int exprNumber, double ex /* Check for errors */ assertStreamPrint(threadData, 0 <= exprNumber, "invalid exprNumber = %d", exprNumber); assertStreamPrint(threadData, exprNumber < data->modelData->nDelayExpressions, "invalid exprNumber = %d", exprNumber); - assertStreamPrint(threadData, delayTime >= 0, "Negative delay requested: delayTime = %g", delayTime); + assertStreamPrint(threadData, delayTime >= 0, "Negative delay requested: delayTime = %g", delayTime); + assertStreamPrint(threadData, delayTime >= DASSL_STEP_EPS, "delayImpl: delayTime is zero or too small.\n" \ + "OpenModelica doesn't support delay operator with zero delay time."); /* Return expression value before simulation start */ if(time <= data->simulationInfo->startTime)