sandbox/Antoonvh/get-error-rise.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    #include "utils.h"
    
    #define OFFSET(l)  (((1 << ((2*l)+2)) - 1)/3)
    #define _O (-GHOSTS)
    #define C_IND(i,j,l) ((i + _O) + (1 << l)*(j + _O))
    #define INDEX (OFFSET(level - 1) + C_IND(point.i, point.j, level))
    
    scalar b[];
    
    int main() {
      foreach_dimension()
        periodic(left);
      int lm = 9;
      for (int l = 5; l < lm; l++) {
        for (int t = 1; t<= 5; t += 2) {
          char dname[99], fname[99];
          sprintf (dname, "%d-dump%d", t, l);
          sprintf (fname, "%d-risedata", t);
          restore (dname);
          FILE * fp = fopen (fname, "rb");
          double e = 0, em = -1;
          if (t == 1)
    	printf ("%d ", 1 << l);
          foreach(reduction(+:e) reduction(max:em)) {
    	fseek (fp, INDEX*sizeof(double), SEEK_SET);
    	double bi;
    	fread (&bi, 1, sizeof(double), fp);
    	double el = fabs(b[] - bi);
    	e += dv()*el;
    	if (el > em)
    	  em = el;
    	b[] = bi;
          }
          printf ("%g %g ", e, em);
          fclose (fp);
        }
        printf ("\n");
      }
    }