Skip to content

Commit 34e4a4c

Browse files
lochelOpenModelica-Hudson
authored andcommitted
Clean up some runtime calls
1 parent 7086597 commit 34e4a4c

File tree

3 files changed

+23
-19
lines changed

3 files changed

+23
-19
lines changed

SimulationRuntime/c/simulation/solver/events.c

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -139,20 +139,21 @@ int checkForStateEvent(DATA* data, LIST *eventList)
139139
* then it de-activate the time events.
140140
*
141141
* \param [ref] [data]
142-
* \param [ref] [eventList]
143-
* \param [in] [eventTime]
144-
* \param [ref] [solverInfo]
142+
* \param [ref] [threadData]
143+
* \param [ref] [eventLst]
144+
* \param [in] [useRootFinding]
145+
* \param [out] [eventTime]
145146
* \return 0: no event; 1: time event; 2: state event
146147
*/
147-
int checkEvents(DATA* data, threadData_t *threadData, LIST* eventLst, double *eventTime, SOLVER_INFO* solverInfo)
148+
int checkEvents(DATA* data, threadData_t *threadData, LIST* eventLst, modelica_boolean useRootFinding, double *eventTime)
148149
{
149150
TRACE_PUSH
150151

151-
if (checkForStateEvent(data, solverInfo->eventLst))
152+
if (checkForStateEvent(data, eventLst))
152153
{
153-
if (!solverInfo->solverRootFinding)
154+
if (useRootFinding)
154155
{
155-
findRoot(data, threadData, solverInfo->eventLst, &(solverInfo->currentTime));
156+
*eventTime = findRoot(data, threadData, eventLst);
156157
}
157158
}
158159

@@ -284,15 +285,17 @@ void handleEvents(DATA* data, threadData_t *threadData, LIST* eventLst, double *
284285
/*! \fn findRoot
285286
*
286287
* \param [ref] [data]
287-
* \param [ref] [eventLst]
288-
* \param [in] [eventTime]
288+
* \param [ref] [threadData]
289+
* \param [ref] [eventList]
290+
* \return: first event of interval [oldTime, timeValue]
289291
*
290-
* This function perform a root finding for Intervall = [oldTime, timeValue]
292+
* This function perform a root finding for interval = [oldTime, timeValue]
291293
*/
292-
void findRoot(DATA* data, threadData_t *threadData, LIST *eventList, double *eventTime)
294+
double findRoot(DATA* data, threadData_t *threadData, LIST *eventList)
293295
{
294296
TRACE_PUSH
295297

298+
double eventTime;
296299
long event_id;
297300
LIST_NODE* it;
298301
fortran_integer i=0;
@@ -319,7 +322,7 @@ void findRoot(DATA* data, threadData_t *threadData, LIST *eventList, double *eve
319322
memcpy(states_right, data->localData[0]->realVars , data->modelData->nStates * sizeof(double));
320323

321324
/* Search for event time and event_id with bisection method */
322-
*eventTime = bisection(data, threadData, &time_left, &time_right, states_left, states_right, tmpEventList, eventList);
325+
eventTime = bisection(data, threadData, &time_left, &time_right, states_left, states_right, tmpEventList, eventList);
323326

324327
if(listLen(tmpEventList) == 0)
325328
{
@@ -366,8 +369,8 @@ void findRoot(DATA* data, threadData_t *threadData, LIST *eventList, double *eve
366369
listPushFront(eventList, &event_id);
367370
}
368371

369-
*eventTime = time_right;
370-
debugStreamPrint(LOG_EVENTS, 0, "time: %.10e", *eventTime);
372+
eventTime = time_right;
373+
debugStreamPrint(LOG_EVENTS, 0, "time: %.10e", eventTime);
371374

372375
data->localData[0]->timeValue = time_left;
373376
for(i=0; i < data->modelData->nStates; i++) {
@@ -379,7 +382,7 @@ void findRoot(DATA* data, threadData_t *threadData, LIST *eventList, double *eve
379382
updateRelationsPre(data);
380383
/*sim_result_emit(data);*/
381384

382-
data->localData[0]->timeValue = *eventTime;
385+
data->localData[0]->timeValue = eventTime;
383386
for(i=0; i < data->modelData->nStates; i++)
384387
{
385388
data->localData[0]->realVars[i] = states_right[i];
@@ -389,6 +392,7 @@ void findRoot(DATA* data, threadData_t *threadData, LIST *eventList, double *eve
389392
free(states_right);
390393

391394
TRACE_POP
395+
return eventTime;
392396
}
393397

394398
/*! \fn bisection
@@ -402,7 +406,7 @@ void findRoot(DATA* data, threadData_t *threadData, LIST *eventList, double *eve
402406
* \param [in] [eventList]
403407
* \return Founded event time
404408
*
405-
* Method to find root in Intervall [oldTime, timeValue]
409+
* Method to find root in interval [oldTime, timeValue]
406410
*/
407411
double bisection(DATA* data, threadData_t *threadData, double* a, double* b, double* states_a, double* states_b, LIST *tmpEventList, LIST *eventList)
408412
{

SimulationRuntime/c/simulation/solver/events.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ extern "C" {
4343
#endif
4444

4545
void checkForSampleEvent(DATA *data, SOLVER_INFO* solverInfo);
46-
int checkEvents(DATA* data, threadData_t *threadData, LIST* eventLst, double *eventTime, SOLVER_INFO* solverInfo);
46+
int checkEvents(DATA* data, threadData_t *threadData, LIST* eventLst, modelica_boolean useRootFinding, double *eventTime);
4747

4848
void handleEvents(DATA* data, threadData_t *threadData, LIST* eventLst, double *eventTime, SOLVER_INFO* solverInfo);
4949

50-
void findRoot(DATA *data, threadData_t *threadData, LIST *eventList, double*);
50+
double findRoot(DATA *data, threadData_t *threadData, LIST *eventList);
5151

5252
#ifdef __cplusplus
5353
}

SimulationRuntime/c/simulation/solver/perform_simulation.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ static int simulationUpdate(DATA* data, threadData_t *threadData, SOLVER_INFO* s
8787
int syncRet1;
8888
do
8989
{
90-
int eventType = checkEvents(data, threadData, solverInfo->eventLst, &(solverInfo->currentTime), solverInfo);
90+
int eventType = checkEvents(data, threadData, solverInfo->eventLst, !solverInfo->solverRootFinding, /*out*/ &solverInfo->currentTime);
9191
if(eventType > 0 || syncRet == 2) /* event */
9292
{
9393
threadData->currentErrorStage = ERROR_EVENTHANDLING;

0 commit comments

Comments
 (0)