sandbox/bugs/event_time.c

This sample code shows a bug with the time marching event. Time marching events sometimes incomplete at the end of time when events with the step-marching and time-marching are defined and set to finish at the same time. For instance below, this test case finishes without running a sequence at t_end (t=1e-3), but a sequence at i_end (i=10) is done. However, when i_end and t_end are set to 5 and 5e-4, respectively, a sequence at t_end (t=5e-4) is correctly done.

#include "grid/cartesian.h"
#include "run.h"

int i_end = 10;
double t_end = 10e-4;

int main(){
  init_grid(16);
  L0 = 1.0;
  dt = 1e-4;
  run(); 
}

Step-marching event

event ievent (i = 0; i++; i <= i_end){
  dt = (double)dtnext(dt);
  printf("ievent i = %d t = %5.3e\n", i, t);
}

Time-marching event

SP: this is not really a bug. Due to round-off errors, the test t<= t_end* dos not produce the intended result. The solution is to *remove the test or add an epsilon i.e. t <= t_end + 1e-5.

event tevnet (t = 0; t += 1e-4 /*t <= t_end*/ ){
  printf("tevent i = %d t = %5.3e\n", i, t);
}