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*.