Time2Finish Class Reference

Estimates the total time, in seconds, left to reach the end of any simulation. First, the class needs to be initialized by calling set. After the class is initialized, an estimate of the total remaining time of the simulation can be found by calling getTime2Finish. The estimate is based on rate at which the simulation time progressed since initialization. More...

#include <MercuryTime.h>

Public Member Functions

 Time2Finish (Mdouble t, Mdouble tMax)
 Initialises the variable start with the current value of clock ticks, the current time and the final time of the simulation. More...
 
Mdouble getTime2Finish (Mdouble t)
 Estimates the total time, in seconds, left to reach the end of any simulation. After the class is initialized, an estimate of the total remaining time of the simulation can be found by calling getTime2Finish. The estimate is based on rate at which the simulation time progressed since initialization. More...
 
std::string getFinishTime (Mdouble t)
 Returns the estimated finish time based on the amount of time left to finish. More...
 

Private Attributes

clock_t startTime_
 Stores the current number of clock ticks at the start. More...
 
Mdouble time_
 Stores the simulation time (DPM units) More...
 
Mdouble timeMax_
 Stores the total simulation time (DPM units) More...
 

Detailed Description

Estimates the total time, in seconds, left to reach the end of any simulation. First, the class needs to be initialized by calling set. After the class is initialized, an estimate of the total remaining time of the simulation can be found by calling getTime2Finish. The estimate is based on rate at which the simulation time progressed since initialization.

E.g., assume that the class has been initialized at simulation time 0, with final time 10. Then, getTime2Finish is called after 1 hour at simulation time 2. Since the code required 0.5 hours per simulation time unit and there are 8 simulation time units left, it is likely to finish in 4 hours.

Constructor & Destructor Documentation

◆ Time2Finish()

Time2Finish::Time2Finish ( Mdouble  t,
Mdouble  tMax 
)
inline

Initialises the variable start with the current value of clock ticks, the current time and the final time of the simulation.

Parameters
[in]tcurrent simulation time.
[in]tMaxtotal simulation time for which the simulation is set to run.
140  {
141  startTime_ = clock();
142  time_ = t;
143  timeMax_ = tMax;
144  }
Mdouble timeMax_
Stores the total simulation time (DPM units)
Definition: MercuryTime.h:212
clock_t startTime_
Stores the current number of clock ticks at the start.
Definition: MercuryTime.h:206
Mdouble time_
Stores the simulation time (DPM units)
Definition: MercuryTime.h:209

References startTime_, time_, and timeMax_.

Member Function Documentation

◆ getFinishTime()

std::string Time2Finish::getFinishTime ( Mdouble  t)
inline

Returns the estimated finish time based on the amount of time left to finish.

Parameters
[in]tcurrent simulation time
Returns
time of the day, in hours, at which the simulation is predicted to end
184  {
185  // gets the estimated time left to finish.
186  Mdouble time2Finish = getTime2Finish(t);
187 
188  // adds to the estimated time to current time and also type-casting Mdouble to time_t.
189  time_t finish = time(nullptr) + time2Finish;
190 
191  std::stringstream ss;
192 
193  //write estimated end time
194  ss << ctime(&finish);
195 
196  //decrement put pointer by one to avoid line break
197  ss.seekp((long) ss.tellp() - 1);
198 
199  //write time to finish
200  ss << " (" << time2Finish / 3600 << "h)";
201  return ss.str();
202  }
double Mdouble
Definition: GeneralDefine.h:34
Mdouble getTime2Finish(Mdouble t)
Estimates the total time, in seconds, left to reach the end of any simulation. After the class is ini...
Definition: MercuryTime.h:159

References getTime2Finish().

Referenced by ChutePeriodic::printTime().

◆ getTime2Finish()

Mdouble Time2Finish::getTime2Finish ( Mdouble  t)
inline

Estimates the total time, in seconds, left to reach the end of any simulation. After the class is initialized, an estimate of the total remaining time of the simulation can be found by calling getTime2Finish. The estimate is based on rate at which the simulation time progressed since initialization.

E.g., assume that the class has been initialized at simulation time 0, with final time 10. Then, getTime2Finish is called after 1 hour at simulation time 2. Since the code required 0.5 hours per simulation time unit and there are 8 simulation time units left, it is likely to finish in 4 hours.

Parameters
[in]tcurrent simulation time.
Returns
Mdouble time, in seconds, left to reach the end of any simulation
160  {
161  clock_t finish = clock();
162  Mdouble elapsedTime = (Mdouble(finish) - Mdouble(startTime_)) / CLOCKS_PER_SEC;
163 
164  if (fabs(time_ - t) < 1.e-9)
165  {
166  logger(WARN, "Choose an other value for t");
167  return 0;
168  }
169  else
170  {
171  Mdouble time2Finish = elapsedTime * (timeMax_ - time_) / (t - time_);
172  startTime_ = finish;
173  time_ = t;
174  return time2Finish;
175  }
176  }
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
@ WARN

References logger, startTime_, time_, timeMax_, and WARN.

Referenced by getFinishTime().

Member Data Documentation

◆ startTime_

clock_t Time2Finish::startTime_
private

Stores the current number of clock ticks at the start.

Referenced by getTime2Finish(), and Time2Finish().

◆ time_

Mdouble Time2Finish::time_
private

Stores the simulation time (DPM units)

Referenced by getTime2Finish(), and Time2Finish().

◆ timeMax_

Mdouble Time2Finish::timeMax_
private

Stores the total simulation time (DPM units)

Referenced by getTime2Finish(), and Time2Finish().


The documentation for this class was generated from the following file: