sandbox/bugs/successive_runs.c
Running successive (identical) runs give slightly different results. It appears that the chosen timesteps differ from run to run, even if dt
is reset.
EDIT: adding the line
if (t < 1e-10) previous = 0.;
in timestep.h makes the timesteps identical in each run. The diagnostics on the field still differ from run to run (actually, they appear to differ between the first and the second run; then a ``steady state’’ is reached).
#include "navier-stokes/centered.h"
#include "two-phase.h"
#include "tension.h"
int LEVEL = 6;
int nrun = 1.;
int main()
{
f.sigma = 1.;
size (2.);
origin (-1., -1.);
for (int counter = 1; counter <= 5; counter++) {
init_grid (1 << LEVEL);
run();
nrun++;
}
}
event init (t = 0.) {
fraction (f, -(sq(x) + sq(y/0.25) - sq(0.5)));
}
event logfile (i++) {
if (i==1 || i ==2 || i==26) fprintf (stderr, "%d %g %g %g\n", i, t, dt, statsf(u.x).max);
}
event end (t = 0.05) {
scalar pos[];
foreach() pos[] = 0.;
position (f, pos, {0,1}, add = false);
boundary ({pos});
double maxrad = statsf(pos).max;
fprintf (stderr, "Run #%i ended | max = %g\n", nrun, maxrad);
}
$ cat test_multiple_runs/log
1 0.00028334 0.00028334 0.0384182
2 0.000823738 0.000540398 0.125714
26 0.05 0.0025419 1.84152
Run #1 ended | max = 0.126782
1 0.00028334 0.00028334 0.0364972
2 0.000823738 0.000540398 0.125097
26 0.05 0.0025419 1.84701
Run #2 ended | max = 0.126791
1 0.00028334 0.00028334 0.0364972
2 0.000823738 0.000540398 0.125097
26 0.05 0.0025419 1.84701
Run #3 ended | max = 0.126791
1 0.00028334 0.00028334 0.0364972
2 0.000823738 0.000540398 0.125097
26 0.05 0.0025419 1.84701
Run #4 ended | max = 0.126791
1 0.00028334 0.00028334 0.0364972
2 0.000823738 0.000540398 0.125097
26 0.05 0.0025419 1.84701
Run #5 ended | max = 0.126791