Skip to content

Commit

Permalink
No states da emode fix (#8655)
Browse files Browse the repository at this point in the history
* Fixed handling of events in daeMode with no states

* Fixed DAE mode when number of states is zero
  • Loading branch information
bernhardbachmann committed Mar 8, 2022
1 parent 30bf246 commit fa6f392
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 4 deletions.
Expand Up @@ -753,6 +753,7 @@ static int callSolver(DATA* simData, threadData_t *threadData, string init_initM
if (compiledInDAEMode)
{
simData->callback->functionDAE = evaluateDAEResiduals_wrapperEventUpdate;
simData->callback->function_ZeroCrossingsEquations = evaluateDAEResiduals_wrapperZeroCrossingsEquations;
}
}

Expand Down
12 changes: 12 additions & 0 deletions OMCompiler/SimulationRuntime/c/simulation/solver/dae_mode.c
Expand Up @@ -61,6 +61,18 @@ int evaluateDAEResiduals_wrapperEventUpdate(DATA* data, threadData_t* threadData
return retVal;
}

/*! \fn void evaluateDAEResiduals_wrapperZeroCrossingsEquations
*
* wrapper function of the ZeroCrossing function for DAE mode
*/
int evaluateDAEResiduals_wrapperZeroCrossingsEquations(DATA* data, threadData_t* threadData)
{
int retVal;
retVal = data->simulationInfo->daeModeData->evaluateDAEResiduals(data, threadData, EVAL_ZEROCROSS);

return retVal;
}

/*! \fn void getAlgebraicDAEVarNominals
*
* collects DAE mode algebraic nominal values from modelData
Expand Down
Expand Up @@ -49,6 +49,7 @@ extern "C" {
#endif

int evaluateDAEResiduals_wrapperEventUpdate(DATA* data, threadData_t* threadData);
int evaluateDAEResiduals_wrapperZeroCrossingsEquations(DATA* data, threadData_t* threadData);

void getAlgebraicDAEVarNominals(DATA*, double*);
void getAlgebraicDAEVars(DATA*, double*);
Expand Down
Expand Up @@ -72,9 +72,7 @@ static void prefixedName_updateContinuousSystem(DATA *data, threadData_t *thread

if (compiledInDAEMode) /* dae mode */
{
if (data->simulationInfo->daeModeData->nResidualVars > 0) {
data->simulationInfo->daeModeData->evaluateDAEResiduals(data, threadData, EVAL_ALGEBRAIC);
}
data->simulationInfo->daeModeData->evaluateDAEResiduals(data, threadData, EVAL_ALGEBRAIC);
}
else /* ode mode */
{
Expand Down Expand Up @@ -473,7 +471,7 @@ int prefixedName_performSimulation(DATA* data, threadData_t *threadData, SOLVER_
printAllVars(data, 0, LOG_SOLVER_V);

clear_rt_step(data);
if (!compiledInDAEMode) { /* do not use ringbuffer for daeMode */
if (!compiledInDAEMode || data->modelData->nStates == 0) { /* do not use ringbuffer for daeMode */
rotateRingBuffer(data->simulationData, 1, (void**) data->localData);
}

Expand Down

0 comments on commit fa6f392

Please sign in to comment.