63 virtual void reset() = 0;
93 setup(inp_dt, inp_start, inp_end);
94 timers.assign(iotm_num_timers,
nullptr);
106 time = d_time * time_step;
109 if(t !=
nullptr) t->update();
120 if(t !=
nullptr) t->reset();
136 int add_eq_timer(
double istart,
double iend,
int ntrig,
double iintv,
double idur,
137 const char *iname,
const char *poolname =
nullptr);
139 int add_neq_timer(
const std::vector<double> & itrig,
double idur,
const char *iname,
140 const char *poolname =
nullptr);
144 const char *poolname =
nullptr)
146 return add_eq_timer(tg, tg, 0, 0, idur, iname, poolname);
149 void initialize_eq_timer(
double istart,
double iend,
int ntrig,
double iintv,
150 double idur,
int ID,
const char *iname,
const char* poolname =
nullptr);
152 void initialize_neq_timer(
const std::vector<double> & itrig,
double idur,
int ID,
153 const char *iname,
const char* poolname =
nullptr);
157 const char *poolname =
nullptr)
159 initialize_eq_timer(tg, tg, 0, 0, idur, ID, iname, poolname);
163 inline double timer_duration(
int ID)
const {
return ID > -1 ? timers[ID]->trigger_dur : 0.0;}
164 inline bool elapsed()
const {
return d_time > d_end;}
168 return ID > -1 && timers[ID] !=
nullptr && timers[ID]->triggered;
174 timers[ID] !=
nullptr &&
175 ((timers[ID]->d_trigger_dur) - (timers[ID]->
active)) == 1;
181 timers[ID] !=
nullptr &&
182 timers[ID]->triggered &&
188 if(ID > -1 && timers[ID] !=
nullptr)
189 return timers[ID]->d_trigger_dur - timers[ID]->active - 1;
197 if(ID > -1 && timers[ID] !=
nullptr)
198 return timers[ID]->triggered ? timers[ID]->d_trigger_dur - timers[ID]->active : 0;
212 void setup(
double inp_dt,
double inp_start,
double inp_end);
229 void initialize(
const timer_manager* t,
double istart,
double iend,
int ntrig,
double iintv,
230 double idur,
const char *iname);
242 void initialize(
const timer_manager* t,
const std::vector<double> & itrig,
243 const double idur,
const char *iname);
int trigger_elapse(int ID) const
double timer_duration(int ID) const
std::string pool
label of pool (IO || TS || STIM || ...) to which timer belongs
void assign_pool(const char *poolname)
void reset_timers()
Reset time in timer_manager and then reset registered timers.
bool triggered
flag indicating trigger at current time step
const timer_manager * mng
bool trigger_end(int ID) const
const timer_manager * mng
double time_step
global reference time step
std::vector< long > d_trig
the discrete times associated to trig
bool trigger(int ID) const
t_timer type
type of timer, continuous equidistant, or non-equidistant
long d_start
discrete start in multiples of dt
size_t num_timers() const
double intv
io interval in ms
int trigger_count
count number of triggered IO events
double trigger_dur
triggered event duration (e.g.,stim duration)
int active
count down to end of a trigger with duration
void initialize_singlestep_timer(double tg, double idur, int ID, const char *iname, const char *poolname=nullptr)
int d_nxt
next output index
long d_time
current time instance index
long d_trigger_dur
discrete duration
double end
Time when we stop I/O in mode _EQUDIST.
long d_start
initial index in multiples of dt
double nxt
next output time in ms
const char * name
timer name
io_time
The timers we always need are indexed in this enum.
timer_manager(double inp_dt, double inp_start, double inp_end)
long d_end
discrete stop index in multiples of dt
t_timer
We distinguish between equidistant and non-equidistant timers with an enum.
std::vector< base_timer * > timers
vector containing individual timers
std::vector< double > trig
the times that the timer will trigger
bool triggered_now(int ID) const
double start
Time when we start I/O in mode _EQUDIST.
int numIOs
total number of triggers during simulation
int active_ticks(int ID) const
return number of ticks elapsed after trigger
double start
initial time (nonzero when restarting)
long d_intv
discrete io interval in multiples of dt
centralize time managment and output triggering
long d_end
final index in multiples of dt
int add_singlestep_timer(double tg, double idur, const char *iname, const char *poolname=nullptr)