src/test/mpi-refine.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
  
#include "refine_unbalanced.h"

  #define BGHOSTS 2

  int main (int argc, char * argv[])
  {
    X0 = Y0 = -0.5;
    init_grid (2);

    int depth = argc > 1 ? atoi(argv[1]) : 6;
    refine_unbalanced ((level <= depth && x <= -0.25 && y < 0 && y >= -0.25) ||
  		     (level <= depth - 1 && y < 0), NULL);
    output_cells (stdout);

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

    // check boundary conditions on leaves
    foreach()
      foreach_neighbor()
        assert (s[] == 1.);

    // rebalancing
    int nf = 0;
    foreach(reduction(+:nf))
      nf++;
    int npe;
    MPI_Comm_size (MPI_COMM_WORLD, &npe);
    nf = max(1, nf/npe);
    scalar index[];
    z_indexing (index, true);
    foreach()
      fprintf (stderr, "%g %g %g %d\n", x, y, z, min(npe - 1, (int)(index[]/nf)));
  }