44 d_end = lround(inp_end/time_step);
49 double idur,
int ID,
const char *iname,
const char* poolname)
52 tm->
initialize(
this, istart, iend, ntrig, iintv, idur, iname);
56 if(
int(
timers.size()) <= ID)
57 timers.resize(ID + 1,
nullptr);
64 const char *iname,
const char *poolname)
71 if(
int(
timers.size()) <= ID)
72 timers.resize(ID + 1,
nullptr);
79 double idur,
const char *iname,
const char *poolname)
82 tm->
initialize(
this, istart, iend, ntrig, iintv, idur, iname);
84 int ret_idx =
timers.size();
87 if(poolname)
timers[ret_idx]->assign_pool(poolname);
98 int ret_idx =
timers.size();
101 if(poolname)
timers[ret_idx]->assign_pool(poolname);
107 double iintv,
double idur,
const char *iname)
118 d_intv = iintv ? lround(iintv/t->
time_step) : 1;
136 d_nxt = t->
d_end + 1;
142 if (d_start < t->
d_time) {
165 if (mng->d_time == d_nxt) {
167 active = d_trigger_dur;
169 if (d_nxt >
d_end) d_nxt += mng->d_end;
170 nxt = d_nxt * mng->time_step;
173 if (triggered) trigger_count++;
185 initialize(mng,
start,
end, 0, intv, trigger_dur, name);
190 const double idur,
const char *iname)
199 d_trigger_dur = mng->time_step > 0. ? lround(idur/mng->time_step) : 0.;
202 d_trig.resize(trig.size());
203 int used_triggers = 0;
204 int max_time_less_than_current_time = 0;
205 int found_time_less_than_current_time = 0;
207 for (
size_t ii=0; ii < trig.size(); ii++) {
208 long this_d_tm = lround(trig[ii] / mng->time_step);
209 if (this_d_tm >= mng->d_time) {
210 d_trig[used_triggers++] = this_d_tm;
213 if (!found_time_less_than_current_time || this_d_tm > max_time_less_than_current_time) {
214 found_time_less_than_current_time = 1;
215 max_time_less_than_current_time = this_d_tm;
219 d_trig.resize(used_triggers);
221 std::sort(d_trig.begin(), d_trig.end());
222 std::unique(d_trig.begin(), d_trig.end());
225 trig.resize(d_trig.size());
226 for (
size_t ii=0; ii<d_trig.size(); ii++) {
227 trig[ii] = d_trig[ii] * mng->time_step;
229 numIOs = trig.size();
232 if (found_time_less_than_current_time && max_time_less_than_current_time + d_trigger_dur > mng->d_time) {
233 active = max_time_less_than_current_time + d_trigger_dur - mng->d_time;
243 if (trigger_count <
int(trig.size())) {
244 if (mng->d_time == d_trig[trigger_count]) {
246 active = d_trigger_dur;
250 if (triggered) trigger_count++;
261 std::vector<double> btrig(trig);
262 initialize(mng, btrig, trigger_dur, name);
char * dupstr(const char *old_str)
void assign_pool(const char *poolname)
void initialize_eq_timer(double istart, double iend, int ntrig, double iintv, double idur, int ID, const char *iname, const char *poolname=nullptr)
void initialize(const timer_manager *t, const std::vector< double > &itrig, const double idur, const char *iname)
int add_eq_timer(double istart, double iend, int ntrig, double iintv, double idur, const char *iname, const char *poolname=nullptr)
Add a equidistant step timer to the array of timers.
double time_step
global reference time step
void setup(double inp_dt, double inp_start, double inp_end)
Initialize the timer_manager.
Timers and timer manager.
void initialize(const timer_manager *t, double istart, double iend, int ntrig, double iintv, double idur, const char *iname)
long d_time
current time instance index
long d_start
initial index in multiples of dt
int add_neq_timer(const std::vector< double > &itrig, double idur, const char *iname, const char *poolname=nullptr)
std::vector< base_timer * > timers
vector containing individual timers
void initialize_neq_timer(const std::vector< double > &itrig, double idur, int ID, const char *iname, const char *poolname=nullptr)
Basic utility structs and functions, mostly IO related.
double start
initial time (nonzero when restarting)
centralize time managment and output triggering
long d_end
final index in multiples of dt