#include "grid/multigrid1D.h" #include "utils.h" #include "poisson.h" scalar a[], b[]; double solution (double x) { return sin(3.*pi*x); } /* Dirichlet condition on all boundaries */ a[right] = dirichlet (solution(x)); a[left] = dirichlet (solution(x)); int main (int argc, char ** argv) { size (1.[0]); origin (-0.5, -0.5); for (int depth = 5; depth <= 8; depth++) { init_grid (1 << depth); foreach() { b[] = - sq(3.*pi)*sin (3.*pi*x); a[] = 0.; } TOLERANCE = 1e-4; poisson (a, b); double max = 0; foreach() { double e = a[] - solution(x); if (fabs(e) > max) max = fabs(e); printf ("%g %g %g %g\n", x, a[], b[], e); } fprintf (stderr, "%d %g\n", depth, max); } } /** After the program has finished we plot the error as a function of *n* ~~~gnuplot set logscale y set xlabel 'level' set ylabel 'normf(e).max' fit a*x+b 'log' u 1:(log($2)) via a,b plot [4:9]'log' pt 7 t '', exp(a*x+b) t sprintf("%.0f/n^{%4.2f}", exp(b), -a/log(2.)) ~~~ */