diff --git a/src/cell.h b/src/cell.h index f86ab765e75052c9231fdfebe225da0a5c72be68..97fb0d1a985013e0245ad57fd617f7a6b80f6f13 100644 --- a/src/cell.h +++ b/src/cell.h @@ -216,6 +216,9 @@ struct cell { #define cell_getid(cdim, i, j, k) \ ((int)(k) + (cdim)[2] * ((int)(j) + (cdim)[1] * (int)(i))) +#define cell_getid2(cdim_x, cdim_y, cdim_z, i, j, k) \ + ((int)(k) + cdim_z * ((int)(j) + cdim_y * (int)(i))) + /* Function prototypes. */ void cell_split(struct cell *c, ptrdiff_t parts_offset); void cell_sanitize(struct cell *c); diff --git a/src/space.c b/src/space.c index 1a323fdae213b94b3cdbc6b16ab59935402bf632..516350c5af42920c1bc8e934baa306c4082be10e 100644 --- a/src/space.c +++ b/src/space.c @@ -750,31 +750,42 @@ void space_parts_get_cell_index_mapper(void *map_data, int nr_parts, struct part *restrict parts = (struct part *)map_data; struct index_data *data = (struct index_data *)extra_data; struct space *s = data->s; - int *ind = data->ind + (ptrdiff_t)(parts - s->parts); - // struct cell *cells = data->cells; + int *const ind = data->ind + (ptrdiff_t)(parts - s->parts); /* Get some constants */ - const double dim[3] = {s->dim[0], s->dim[1], s->dim[2]}; - const int cdim[3] = {s->cdim[0], s->cdim[1], s->cdim[2]}; - const double ih[3] = {s->iwidth[0], s->iwidth[1], s->iwidth[2]}; + const double dim_x = s->dim[0]; + const double dim_y = s->dim[1]; + const double dim_z = s->dim[2]; + // const int cdim_x = s->cdim[0]; + const int cdim_y = s->cdim[1]; + const int cdim_z = s->cdim[2]; + const double ih_x = s->iwidth[0]; + const double ih_y = s->iwidth[1]; + const double ih_z = s->iwidth[2]; for (int k = 0; k < nr_parts; k++) { /* Get the particle */ struct part *restrict p = &parts[k]; + const double old_pos_x = p->x[0]; + const double old_pos_y = p->x[1]; + const double old_pos_z = p->x[2]; + /* Put it back into the simulation volume */ - p->x[0] = box_wrap(p->x[0], 0.0, dim[0]); - p->x[1] = box_wrap(p->x[1], 0.0, dim[1]); - p->x[2] = box_wrap(p->x[2], 0.0, dim[2]); + const double pos_x = box_wrap(old_pos_x, 0.0, dim_x); + const double pos_y = box_wrap(old_pos_y, 0.0, dim_y); + const double pos_z = box_wrap(old_pos_z, 0.0, dim_z); /* Get its cell index */ - const int index = - cell_getid(cdim, p->x[0] * ih[0], p->x[1] * ih[1], p->x[2] * ih[2]); + const int index = cell_getid2(0., cdim_y, cdim_z, pos_x * ih_x, + pos_y * ih_y, pos_z * ih_z); ind[k] = index; - /* Tell the cell it has a new member */ - // atomic_inc(&(cells[index].count)); + /* Update the position */ + p->x[0] = pos_x; + p->x[1] = pos_y; + p->x[2] = pos_z; } } @@ -792,8 +803,7 @@ void space_gparts_get_cell_index_mapper(void *map_data, int nr_gparts, struct gpart *restrict gparts = (struct gpart *)map_data; struct index_data *data = (struct index_data *)extra_data; struct space *s = data->s; - int *ind = data->ind + (ptrdiff_t)(gparts - s->gparts); - // struct cell *cells = data->cells; + int *const ind = data->ind + (ptrdiff_t)(gparts - s->gparts); /* Get some constants */ const double dim[3] = {s->dim[0], s->dim[1], s->dim[2]}; @@ -814,9 +824,6 @@ void space_gparts_get_cell_index_mapper(void *map_data, int nr_gparts, const int index = cell_getid(cdim, gp->x[0] * ih[0], gp->x[1] * ih[1], gp->x[2] * ih[2]); ind[k] = index; - - /* Tell the cell it has a new member */ - // atomic_inc(&(cells[index].gcount)); } }