src/test/mpi-restriction.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
    40
    41
    42
    43
    44
    45
    46
    
    #define BGHOSTS 2
    
    int main (int argc, char * argv[])
    {
      origin (-0.6, -0.6, -0.6);
      init_grid (1);
      int depth = argc > 1 ? atoi(argv[1]) : 4;
      refine (level < depth - 2 ||
    	  level <= depth*(1. - sqrt(sq(x) + sq(y) + sq(z))));
    
      scalar s[];
      foreach()
        s[] = 1;
      boundary ({s});
    
      output_cells (stdout);
    
      // check boundary conditions on leaves
      foreach()
        foreach_neighbor()
          assert (s[] == 1.);
    
      // check boundary conditions on levels
      scalar s1[];
      for (int l = 0; l <= depth(); l++) {
        foreach_level (l)
          s1[] = 2;
        boundary_level ({s1}, l);
        foreach_level_or_leaf (l)
          foreach_neighbor(1) // fixme: shoud work with foreach_neighbor()
            assert (s1[] == 2.);
      }
    
      // check restriction
      for (int l = 0; l < depth; l++)
        foreach_coarse_level (l) {
          fprintf (qerr, "res %g %g %g %g %d\n", x, y, z, s[], level);
          assert (s[] == 1.);
        }
    
      // check face traversal
      foreach_face() {
        fprintf (qerr, "face %g %g %g %g\n", x, y, z, s[] - s[-1]);
        assert (s[] == s[-1]);
      }
    }