@@ -162,6 +162,7 @@ ida_solver_initial(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo
162162 idaData -> residualFunction = residualFunctionIDA ;
163163 idaData -> N = (long int )data -> modelData -> nStates ;
164164
165+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
165166
166167 /* change parameter for DAE mode */
167168 if (compiledInDAEMode )
@@ -660,6 +661,8 @@ ida_solver_initial(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo
660661 }
661662 messageClose (LOG_SOLVER );
662663
664+ if (measure_time_flag ) rt_clear (SIM_TIMER_SOLVER ); /* Initialization should not add this timer... */
665+
663666 free (tmp );
664667 TRACE_POP
665668 return 0 ;
@@ -719,8 +722,10 @@ ida_event_update(DATA* data, threadData_t *threadData)
719722 memcpy (idaData -> statesDer , data -> localData [0 ]-> realVars + data -> modelData -> nStates , sizeof (double )* data -> modelData -> nStates );
720723
721724 /* update inner algebraic get new values from data */
725+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
722726 evaluateDAEResiduals_wrapperEventUpdate (data , threadData );
723727 getAlgebraicDAEVars (data , idaData -> states + data -> modelData -> nStates );
728+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
724729
725730 infoStreamPrint (LOG_SOLVER , 0 , "##IDA## do event update at %.15g" , data -> localData [0 ]-> timeValue );
726731 flag = IDAReInit (idaData -> ida_mem ,
@@ -763,19 +768,23 @@ ida_event_update(DATA* data, threadData_t *threadData)
763768 IDAGetConsistentIC (idaData -> ida_mem , idaData -> y , idaData -> yp );
764769
765770 /* update inner algebraic variables */
771+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
766772 evaluateDAEResiduals_wrapperEventUpdate (data , threadData );
767773
768774 memcpy (data -> localData [0 ]-> realVars , idaData -> states , sizeof (double )* data -> modelData -> nStates );
769775 // and also algebraic vars
770776 setAlgebraicDAEVars (data , idaData -> states + data -> modelData -> nStates );
771777 memcpy (data -> localData [0 ]-> realVars + data -> modelData -> nStates , idaData -> statesDer , sizeof (double )* data -> modelData -> nStates );
778+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
772779
773780 /* reset initial step size again to default */
774781 IDASetInitStep (idaData -> ida_mem , 0.0 );
775782 }
776783 }
777784 else {
785+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
778786 data -> callback -> functionDAE (data , threadData );
787+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
779788 }
780789}
781790
@@ -793,6 +802,8 @@ ida_solver_step(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo)
793802 int stepsMode ;
794803 int restartAfterLSFail = 0 ;
795804
805+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
806+
796807 IDA_SOLVER * idaData = (IDA_SOLVER * ) solverInfo -> solverData ;
797808
798809 SIMULATION_DATA * sData = data -> localData [0 ];
@@ -895,6 +906,7 @@ ida_solver_step(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo)
895906 NV_Ith_S (idaData -> y , i ) = NV_Ith_S (idaData -> y , i ) + NV_Ith_S (idaData -> yp , i ) * solverInfo -> currentStepSize ;
896907 }
897908 sData -> timeValue = solverInfo -> currentTime + solverInfo -> currentStepSize ;
909+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
898910 data -> callback -> functionODE (data , threadData );
899911 solverInfo -> currentTime = sData -> timeValue ;
900912
@@ -932,9 +944,11 @@ ida_solver_step(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo)
932944 {
933945 infoStreamPrint (LOG_SOLVER , 1 , "##IDA## new step from %.15g to %.15g" , solverInfo -> currentTime , tout );
934946
947+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
935948 /* read input vars */
936949 externalInputUpdate (data );
937950 data -> callback -> input_function (data , threadData );
951+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
938952
939953 if (omc_flag [FLAG_IDA_SCALING ])
940954 {
@@ -1123,6 +1137,7 @@ ida_solver_step(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo)
11231137 }
11241138
11251139 infoStreamPrint (LOG_SOLVER , 0 , "##IDA## Finished Integrator step." );
1140+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
11261141
11271142 TRACE_POP
11281143 return retVal ;
@@ -1191,13 +1206,17 @@ int residualFunctionIDA(double time, N_Vector yy, N_Vector yp, N_Vector res, voi
11911206 }
11921207
11931208 /* read input vars */
1209+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
11941210 externalInputUpdate (data );
11951211 data -> callback -> input_function (data , threadData );
1212+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
11961213
11971214 if (idaData -> daeMode )
11981215 {
11991216 /* eval residual vars */
1217+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
12001218 data -> simulationInfo -> daeModeData -> evaluateDAEResiduals (data , threadData , EVAL_DYNAMIC );
1219+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
12011220 /* get residual variables */
12021221 for (i = 0 ; i < idaData -> N ; i ++ )
12031222 {
@@ -1208,7 +1227,9 @@ int residualFunctionIDA(double time, N_Vector yy, N_Vector yp, N_Vector res, voi
12081227 else
12091228 {
12101229 /* eval function ODE */
1230+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
12111231 data -> callback -> functionODE (data , threadData );
1232+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
12121233 for (i = 0 ; i < idaData -> N ; i ++ )
12131234 {
12141235 NV_Ith_S (res , i ) = data -> localData [0 ]-> realVars [data -> modelData -> nStates + i ] - NV_Ith_S (yp , i );
@@ -1241,6 +1262,7 @@ int residualFunctionIDA(double time, N_Vector yy, N_Vector yp, N_Vector res, voi
12411262 unsetContext (data );
12421263 }
12431264 messageClose (LOG_SOLVER_V );
1265+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
12441266
12451267 TRACE_POP
12461268 return retVal ;
@@ -1283,6 +1305,7 @@ int rootsFunctionIDA(double time, N_Vector yy, N_Vector yp, double *gout, void*
12831305 data -> localData [0 ]-> timeValue = time ;
12841306
12851307 /* read input vars */
1308+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
12861309 externalInputUpdate (data );
12871310 data -> callback -> input_function (data , threadData );
12881311 /* eval needed equations*/
@@ -1295,6 +1318,7 @@ int rootsFunctionIDA(double time, N_Vector yy, N_Vector yp, double *gout, void*
12951318 }
12961319
12971320 data -> callback -> function_ZeroCrossings (data , threadData , gout );
1321+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
12981322
12991323 threadData -> currentErrorStage = saveJumpState ;
13001324
@@ -1308,6 +1332,7 @@ int rootsFunctionIDA(double time, N_Vector yy, N_Vector yp, double *gout, void*
13081332 unsetContext (data );
13091333 }
13101334 messageClose (LOG_SOLVER_V );
1335+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
13111336
13121337 TRACE_POP
13131338 return 0 ;
@@ -1493,6 +1518,7 @@ static int callDenseJacobian(long int Neq, double tt, double cj,
14931518 int retVal ;
14941519
14951520 /* profiling */
1521+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
14961522 rt_tick (SIM_TIMER_JACOBIAN );
14971523
14981524 if (idaData -> jacobianMethod == COLOREDNUMJAC || idaData -> jacobianMethod == NUMJAC )
@@ -1508,9 +1534,6 @@ static int callDenseJacobian(long int Neq, double tt, double cj,
15081534 throwStreamPrint (threadData , "##IDA## Something goes wrong while obtain jacobian matrix!" );
15091535 }
15101536
1511- /* profiling */
1512- rt_accumulate (SIM_TIMER_JACOBIAN );
1513-
15141537 /* debug */
15151538 if (ACTIVE_STREAM (LOG_JAC )){
15161539 _omc_matrix * dumpJac = _omc_createMatrix (idaData -> N , idaData -> N , Jac -> data );
@@ -1528,6 +1551,10 @@ static int callDenseJacobian(long int Neq, double tt, double cj,
15281551 }
15291552 }
15301553
1554+ /* profiling */
1555+ rt_accumulate (SIM_TIMER_JACOBIAN );
1556+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
1557+
15311558 TRACE_POP
15321559 return retVal ;
15331560}
@@ -1775,6 +1802,7 @@ static int callSparseJacobian(double tt, double cj,
17751802 threadData_t * threadData = (threadData_t * )(((IDA_USERDATA * )((IDA_SOLVER * )user_data )-> simData )-> threadData );
17761803
17771804 /* profiling */
1805+ if (measure_time_flag ) rt_accumulate (SIM_TIMER_SOLVER );
17781806 rt_tick (SIM_TIMER_JACOBIAN );
17791807
17801808 if (idaData -> jacobianMethod == COLOREDSYMJAC || idaData -> jacobianMethod == SYMJAC )
@@ -1786,9 +1814,6 @@ static int callSparseJacobian(double tt, double cj,
17861814 retVal = jacoColoredNumericalSparse (tt , yy , yp , rr , Jac , cj , user_data );
17871815 }
17881816
1789- /* profiling */
1790- rt_accumulate (SIM_TIMER_JACOBIAN );
1791-
17921817 /* debug */
17931818 if (ACTIVE_STREAM (LOG_JAC )){
17941819 infoStreamPrint (LOG_JAC , 0 , "##IDA## Sparse Matrix A." );
@@ -1808,6 +1833,10 @@ static int callSparseJacobian(double tt, double cj,
18081833 SlsAddMat (Jac , idaData -> tmpJac );
18091834 }
18101835
1836+ /* profiling */
1837+ rt_accumulate (SIM_TIMER_JACOBIAN );
1838+ if (measure_time_flag ) rt_tick (SIM_TIMER_SOLVER );
1839+
18111840 TRACE_POP
18121841 return retVal ;
18131842}
0 commit comments