sandbox/Antoonvh/refine2D.c

    Test for refinement in 2D

    set logscale x 2
    set logscale y
    set grid
    set xr [ 17:1000]
    set xlabel 'N'
    set ylabel 'L_1 error'
    set key box bottom left
    set size square
    plot 'out' u 1:2 t '1^2 stencil', '' u 1:4 t '2^2 stencil',\
     '' u 1:6 t '3^2 stencil', '' u 1:8 t '4^2 stencil', '' u 1:10 t '5^2 stencil',\
    0.4*x**-1 lw 2  t'1st order', 2e4*x**-5 lw 2 t '5th order'
    Average error (script)

    Average error (script)

    set logscale x 2
    set logscale y
    set grid
    set xr [ 17:1000]
    set xlabel 'N'
    set ylabel 'L_{\inf} error'
    set key box bottom left
    set size square
    plot 'out' u 1:3 t '1^2 stencil', '' u 1:5 t '2^2 stencil',\
     '' u 1:7 t '3^2 stencil', '' u 1:9 t '4^2 stencil', '' u 1:11 t '5^2 stencil',\
    8*x**-1 lw 2  t'1st order', 1e6*x**-5 lw 2 t '5th order'
    Max. error (script)

    Max. error (script)

    #include "grid/multigrid.h"
    #include "higher-order.h"
    #include "utils.h"
    
    scalar s[], w[];
    int main () {
      L0 = 10;
      X0 = Y0 = Z0 = -L0/2.;
      for (int l = 4; l < 10 ; l++) {
        init_grid (1 << l);
        foreach()
          s[] = exp (-(sq(x) + sq(y) + sq(z)));
        boundary ({s});
        
        printf ("%d ", N);
        
        s.prolongation = refine_1st;
        wavelet (s, w);
        norm f = normf (w);
        printf ("%g %g ", f.avg, f.max);
        
        s.prolongation = refine_2nd;
        wavelet (s, w);
        f = normf (w);
        printf ("%g %g ", f.avg, f.max);
        
        s.prolongation = refine_3rd;
        wavelet (s, w);
        f = normf (w);
        printf ("%g %g ", f.avg, f.max);
       
        s.prolongation = refine_4th;
        wavelet (s, w);
        f = normf (w);
        printf ("%g %g ", f.avg, f.max);
       
        s.prolongation = refine_5th;
        wavelet (s, w);
        f = normf (w);
        printf ("%g %g\n", f.avg, f.max);
    
        fflush (stdout);
      }
    }