@@ -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 */
407411double bisection (DATA * data , threadData_t * threadData , double * a , double * b , double * states_a , double * states_b , LIST * tmpEventList , LIST * eventList )
408412{
0 commit comments