src/test/mpi-flux.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
  
/* parallel boundary conditions for fluxes */

  int main (int argc, char ** argv)
  {
    int minlevel = argc > 1 ? atoi(argv[1]) : 5;

    init_grid (1);
    refine (level <= minlevel*(1. - sqrt(sq((y - 0.5) - 0.1) +
  				       sq((0.5 - x) - 0.1))));

    output_cells (stdout);

    scalar s[];
    foreach()
      s[] = noise();
    boundary ({s});

    face vector g[];
    foreach_face()
      g.x[] = (s[] - s[-1,0])/Delta;
    boundary_flux ({g});

    foreach_face(x)
      fprintf (stderr, "%g %g %g\n", x, y, g.x[]);

    double sum = 0.;
    foreach (reduction(+:sum))
      sum += Delta*(g.x[1,0] - g.x[] + g.y[0,1] - g.y[]);
    fprintf (stderr, "sum: %g\n", sum);
    assert (fabs(sum) < 1e-10);
  }