Basilisk CFD
Adaptive Cartesian mesh PDE framework
Loading...
Searching...
No Matches
progress.h
Go to the documentation of this file.
1/** @file progress.h
2 */
3static int _ilast = -1;
4static double _tlast = -1;
6static int _progressn = 0;
7
8static void last_events()
9{
11 t = 0., iter = 0;
12 // look for events happening at specific times
13 while (events (false) && tnext < HUGE)
14 t = tnext, iter = inext;
15 if (t > 0.)
16 _ilast = 0, _tlast = t;
17 else {
18 // look for condition on maximum time
19 double tmin = 0., tmax = HUGE;
20 while ((tmax - tmin)/(tmax + tmin) > 0.01 && tmax - tmin > 1e-30) {
21 t = (tmin + tmax)/2.;
22 if (events (false))
23 tmin = t;
24 else
25 tmax = t;
26 }
27 if (t < HUGE/2. && t > 1e-30)
28 _ilast = 0, _tlast = t;
29 else {
30 // look for condition on maximum number of iterations
31 _tlast = t = 0.;
32 iter = 0;
33 while (events (false) && iter < 1<<16)
34 iter = inext;
35 _ilast = iter < 1<<16 ? iter : 0;
36 }
37 }
39#if 0
40 fprintf (stderr, "_tlast: %g _ilast: %d\n", _tlast, _ilast);
41 exit (1);
42#endif
43}
44
45/** @brief Event: _progress (i += 5) */
46void event__progress (void)
47{
48 static FILE * fp = fopen ("progress", "w");
49 if (i == 0) {
51 _progressn++;
52 }
53 double peri = _ilast ? i/(double)_ilast : 1.,
54 pert = _tlast ? t/_tlast : 1., per = min(peri, pert);
55 if (per > 0.01 && per < 1.) {
56 fprintf (fp, "%2.0f%% done", floor(per*100.));
57 double rem = per ? timer_elapsed (_progresst)*(1. - per)/per : 0.;
58 if (rem > 0.) {
59 double min = floor(rem/60.);
60 fprintf (fp, ", %02.0f:%02.0f remaining", min, rem - 60.*min);
61 }
62 if (_progressn > 1)
63 fprintf (fp, " (run #%d)", _progressn);
64 }
65 fputc ('\r', fp);
66 fflush (fp);
67}
int min
Definition balance.h:192
int x
Definition common.h:76
#define HUGE
Definition common.h:6
double timer_elapsed(timer t)
Definition common.h:379
timer timer_start(void)
Definition common.h:368
if __APPLE__ include< stdint.h > include fp_osx h endif if _GPU define enable_fpe(flags) @else @ define enable_fpe(flags) feenableexcept(flags) @endif @ define disable_fpe(flags) fedisableexcept(flags) static void set_fpe(void)
Definition config.h:603
scalar int i
Definition embed.h:74
double t
Definition events.h:24
int inext
Definition events.h:23
int iter
Definition events.h:23
double tnext
Definition events.h:24
FILE * fp
Definition mtrace.h:7
void event__progress(void)
Event: _progress (i += 5)
Definition progress.h:46
static double _tlast
Definition progress.h:4
static void last_events()
Definition progress.h:8
static int _ilast
Definition progress.h:3
static int _progressn
Definition progress.h:6
static timer _progresst
Definition progress.h:5
int events
Definition qcc.c:60
src vof fflush(ferr)