36 const std::size_t END = std::numeric_limits<std::size_t>::max();
48 parallel_dims[0] = !(globDomain[0]==locDomain[0]);
49 parallel_dims[1] = !(globDomain[1]==locDomain[1]);
50 parallel_dims[2] = !(globDomain[2]==locDomain[2]);
53 period=extend_r-extend_l;
57 for (
unsigned i=0; i<3; ++i) {
58 extend_l_local[i] = locDomain[i].first()*
hr_m[i]+extend_l[i];
59 extend_r_local[i] = extend_l[i]+(locDomain[i].last()+1)*
hr_m[i];
60 domain_width_local[i] = extend_r_local[i]-extend_l_local[i];
68 for (
unsigned dim = 0; dim<3; ++dim)
84 std::size_t *buckets =
new size_t[Nbucket];
85 std::size_t *next =
new size_t[size];
86 std::fill(buckets, buckets+Nbucket, END);
87 std::fill(next, next+size, END);
92 int offset[14][3] = {{ 1, 1, 1}, { 0, 1, 1}, {-1, 1, 1},
93 { 1, 0, 1}, { 0, 0, 1}, {-1, 0, 1},
94 { 1,-1, 1}, { 0,-1, 1}, {-1,-1, 1},
95 { 1, 1, 0}, { 0, 1, 0}, {-1, 1, 0},
96 { 1, 0, 0}, { 0, 0, 0}};
99 for(std::size_t i = 0;i<size;++i)
103 next[i] = buckets[bucket_id];
104 buckets[bucket_id] = i;
108 for (
int bx=0+
int(!parallel_dims[0]); bx<
buckets_per_dim[0]-int(!parallel_dims[0]); ++bx) {
109 for (
int by=0+
int(!parallel_dims[1]); by<
buckets_per_dim[1]-int(!parallel_dims[1]); ++by) {
110 for (
int bz=0+
int(!parallel_dims[2]); bz<
buckets_per_dim[2]-int(!parallel_dims[2]); ++bz) {
113 for (
unsigned n=0; n<neigh;++n){
114 int bx_neigh, by_neigh, bz_neigh;
117 bx_neigh = bx+offset[n][0];
119 if (!parallel_dims[0]) {
123 shift[0] = -period[0];
128 shift[0] = period[0];
132 by_neigh = by+offset[n][1];
133 if (!parallel_dims[1]) {
136 shift[1] = -period[0];
140 shift[1] = period[1];
144 bz_neigh = bz+offset[n][2];
145 if (!parallel_dims[2]) {
148 shift[2] = -period[2];
152 shift[2] = period[2];
160 unsigned bucket_id_neigh =
164 std::size_t i = buckets[bucket_id_self];
171 j = buckets[bucket_id_neigh];
173 for (
int o=0;o<self_offset;o++){
186 if (bucket_id_self==bucket_id_neigh)