src/grid/neighbors.h

    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
    47
    48
    49
    50
    51
    52
    53
    54
    
    #if dimension == 1
    @def foreach_neighbor(_s) {
      int _nn = _s + 0 ? _s + 0 : GHOSTS;
      int _i = point.i;
      for (int _k = - _nn; _k <= _nn; _k++) {
        point.i = _i + _k;
        POINT_VARIABLES;
    @
    @def end_foreach_neighbor()
      }
      point.i = _i;
    }
    @
    @define foreach_neighbor_break() _k = _nn + 1
    
    #elif dimension == 2
    @def foreach_neighbor(_s) {
      int _nn = _s + 0 ? _s + 0 : GHOSTS;
      int _i = point.i, _j = point.j;
      for (int _k = - _nn; _k <= _nn; _k++) {
        point.i = _i + _k;
        for (int _l = - _nn; _l <= _nn; _l++) {
          point.j = _j + _l;
          POINT_VARIABLES;
    @
    @def end_foreach_neighbor()
        }
      }
      point.i = _i; point.j = _j;
    }
    @
    @define foreach_neighbor_break() _k = _l = _nn + 1
    
    #else // dimension == 3
    @def foreach_neighbor(_s) {
      int _nn = _s + 0 ? _s + 0 : GHOSTS;
      int _i = point.i, _j = point.j, _k = point.k;
      for (int _l = - _nn; _l <= _nn; _l++) {
        point.i = _i + _l;
        for (int _m = - _nn; _m <= _nn; _m++) {
          point.j = _j + _m;
          for (int _n = - _nn; _n <= _nn; _n++) {
    	point.k = _k + _n;
    	POINT_VARIABLES;
    @
    @def end_foreach_neighbor()
          }
        }
      }
      point.i = _i; point.j = _j; point.k = _k;
    }
    @
    @define foreach_neighbor_break() _l = _m = _n = _nn + 1  
    #endif // dimension == 3