Commit 78f0419b authored by Peter W. Draper's avatar Peter W. Draper
Browse files

Merge branch 'style' into 'master'

Style

Here is an improvement to the `runner_shift` poor style. I changed the semantic of the array to better reflect what the array actually contains. As a bonus, the formatting script treats it correctly.
Also it should have been a double and not a float.

While at it I also cleaned out the 'do_gsort()' function which is not used and won't be in the future. 



See merge request !177
parents e58c7743 3ca46f1d
......@@ -57,46 +57,20 @@
#include "timestep.h"
/* Orientation of the cell pairs */
const float runner_shift[13 * 3] = {
5.773502691896258e-01,
5.773502691896258e-01,
5.773502691896258e-01,
7.071067811865475e-01,
7.071067811865475e-01,
0.0,
5.773502691896258e-01,
5.773502691896258e-01,
-5.773502691896258e-01,
7.071067811865475e-01,
0.0,
7.071067811865475e-01,
1.0,
0.0,
0.0,
7.071067811865475e-01,
0.0,
-7.071067811865475e-01,
5.773502691896258e-01,
-5.773502691896258e-01,
5.773502691896258e-01,
7.071067811865475e-01,
-7.071067811865475e-01,
0.0,
5.773502691896258e-01,
-5.773502691896258e-01,
-5.773502691896258e-01,
0.0,
7.071067811865475e-01,
7.071067811865475e-01,
0.0,
1.0,
0.0,
0.0,
7.071067811865475e-01,
-7.071067811865475e-01,
0.0,
0.0,
1.0,
const double runner_shift[13][3] = {
{5.773502691896258e-01, 5.773502691896258e-01, 5.773502691896258e-01},
{7.071067811865475e-01, 7.071067811865475e-01, 0.0},
{5.773502691896258e-01, 5.773502691896258e-01, -5.773502691896258e-01},
{7.071067811865475e-01, 0.0, 7.071067811865475e-01},
{1.0, 0.0, 0.0},
{7.071067811865475e-01, 0.0, -7.071067811865475e-01},
{5.773502691896258e-01, -5.773502691896258e-01, 5.773502691896258e-01},
{7.071067811865475e-01, -7.071067811865475e-01, 0.0},
{5.773502691896258e-01, -5.773502691896258e-01, -5.773502691896258e-01},
{0.0, 7.071067811865475e-01, 7.071067811865475e-01},
{0.0, 1.0, 0.0},
{0.0, 7.071067811865475e-01, -7.071067811865475e-01},
{0.0, 0.0, 1.0},
};
/* Does the axis need flipping ? */
......@@ -255,8 +229,8 @@ void runner_do_sort(struct runner *r, struct cell *c, int flags, int clock) {
struct entry *sort;
int j, k, count = c->count;
int i, ind, off[8], inds[8], temp_i, missing;
// float shift[3];
float buff[8], px[3];
float buff[8];
double px[3];
TIMER_TIC
......@@ -360,9 +334,9 @@ void runner_do_sort(struct runner *r, struct cell *c, int flags, int clock) {
for (j = 0; j < 13; j++)
if (flags & (1 << j)) {
sort[j * (count + 1) + k].i = k;
sort[j * (count + 1) + k].d = px[0] * runner_shift[3 * j + 0] +
px[1] * runner_shift[3 * j + 1] +
px[2] * runner_shift[3 * j + 2];
sort[j * (count + 1) + k].d = px[0] * runner_shift[j][0] +
px[1] * runner_shift[j][1] +
px[2] * runner_shift[j][2];
}
}
......@@ -392,151 +366,6 @@ void runner_do_sort(struct runner *r, struct cell *c, int flags, int clock) {
if (clock) TIMER_TOC(timer_dosort);
}
void runner_do_gsort(struct runner *r, struct cell *c, int flags, int clock) {
struct entry *finger;
struct entry *fingers[8];
struct gpart *gparts = c->gparts;
struct entry *gsort;
int j, k, count = c->gcount;
int i, ind, off[8], inds[8], temp_i, missing;
// float shift[3];
float buff[8], px[3];
TIMER_TIC
/* Clean-up the flags, i.e. filter out what's already been sorted. */
flags &= ~c->gsorted;
if (flags == 0) return;
/* start by allocating the entry arrays. */
if (c->gsort == NULL || c->gsortsize < count) {
if (c->gsort != NULL) free(c->gsort);
c->gsortsize = count * 1.1;
if ((c->gsort = (struct entry *)malloc(sizeof(struct entry) *
(c->gsortsize + 1) * 13)) == NULL)
error("Failed to allocate sort memory.");
}
gsort = c->gsort;
/* Does this cell have any progeny? */
if (c->split) {
/* Fill in the gaps within the progeny. */
for (k = 0; k < 8; k++) {
if (c->progeny[k] == NULL) continue;
missing = flags & ~c->progeny[k]->gsorted;
if (missing) runner_do_gsort(r, c->progeny[k], missing, 0);
}
/* Loop over the 13 different sort arrays. */
for (j = 0; j < 13; j++) {
/* Has this sort array been flagged? */
if (!(flags & (1 << j))) continue;
/* Init the particle index offsets. */
for (off[0] = 0, k = 1; k < 8; k++)
if (c->progeny[k - 1] != NULL)
off[k] = off[k - 1] + c->progeny[k - 1]->gcount;
else
off[k] = off[k - 1];
/* Init the entries and indices. */
for (k = 0; k < 8; k++) {
inds[k] = k;
if (c->progeny[k] != NULL && c->progeny[k]->gcount > 0) {
fingers[k] = &c->progeny[k]->gsort[j * (c->progeny[k]->gcount + 1)];
buff[k] = fingers[k]->d;
off[k] = off[k];
} else
buff[k] = FLT_MAX;
}
/* Sort the buffer. */
for (i = 0; i < 7; i++)
for (k = i + 1; k < 8; k++)
if (buff[inds[k]] < buff[inds[i]]) {
temp_i = inds[i];
inds[i] = inds[k];
inds[k] = temp_i;
}
/* For each entry in the new sort list. */
finger = &gsort[j * (count + 1)];
for (ind = 0; ind < count; ind++) {
/* Copy the minimum into the new sort array. */
finger[ind].d = buff[inds[0]];
finger[ind].i = fingers[inds[0]]->i + off[inds[0]];
/* Update the buffer. */
fingers[inds[0]] += 1;
buff[inds[0]] = fingers[inds[0]]->d;
/* Find the smallest entry. */
for (k = 1; k < 8 && buff[inds[k]] < buff[inds[k - 1]]; k++) {
temp_i = inds[k - 1];
inds[k - 1] = inds[k];
inds[k] = temp_i;
}
} /* Merge. */
/* Add a sentinel. */
gsort[j * (count + 1) + count].d = FLT_MAX;
gsort[j * (count + 1) + count].i = 0;
/* Mark as sorted. */
c->gsorted |= (1 << j);
} /* loop over sort arrays. */
} /* progeny? */
/* Otherwise, just sort. */
else {
/* Fill the sort array. */
for (k = 0; k < count; k++) {
px[0] = gparts[k].x[0];
px[1] = gparts[k].x[1];
px[2] = gparts[k].x[2];
for (j = 0; j < 13; j++)
if (flags & (1 << j)) {
gsort[j * (count + 1) + k].i = k;
gsort[j * (count + 1) + k].d = px[0] * runner_shift[3 * j + 0] +
px[1] * runner_shift[3 * j + 1] +
px[2] * runner_shift[3 * j + 2];
}
}
/* Add the sentinel and sort. */
for (j = 0; j < 13; j++)
if (flags & (1 << j)) {
gsort[j * (count + 1) + count].d = FLT_MAX;
gsort[j * (count + 1) + count].i = 0;
runner_do_sort_ascending(&gsort[j * (count + 1)], count);
c->gsorted |= (1 << j);
}
}
/* Verify the sorting. */
/* for ( j = 0 ; j < 13 ; j++ ) {
if ( !( flags & (1 << j) ) )
continue;
finger = &c->gsort[ j*(count + 1) ];
for ( k = 1 ; k < count ; k++ ) {
if ( finger[k].d < finger[k-1].d )
error( "Sorting failed, ascending array." );
if ( finger[k].i < 0 || finger[k].i >= count )
error( "Sorting failed, indices borked." );
}
} */
if (clock) TIMER_TOC(timer_dosort);
}
/**
* @brief Initialize the particles before the density calculation
*
......
......@@ -27,7 +27,7 @@
#include "cell.h"
#include "inline.h"
extern const float runner_shift[13 * 3];
extern const double runner_shift[13][3];
extern const char runner_flip[27];
/* A struct representing a runner's thread and its data. */
......
......@@ -376,9 +376,8 @@ void DOPAIR_SUBSET(struct runner *r, struct cell *restrict ci,
for (k = 0; k < 3; k++) pix[k] = pi->x[k] - shift[k];
hi = pi->h;
hig2 = hi * hi * kernel_gamma2;
di = hi * kernel_gamma + dxj + pix[0] * runner_shift[3 * sid + 0] +
pix[1] * runner_shift[3 * sid + 1] +
pix[2] * runner_shift[3 * sid + 2];
di = hi * kernel_gamma + dxj + pix[0] * runner_shift[sid][0] +
pix[1] * runner_shift[sid][1] + pix[2] * runner_shift[sid][2];
/* Loop over the parts in cj. */
for (pjd = 0; pjd < count_j && sort_j[pjd].d < di; pjd++) {
......@@ -439,9 +438,8 @@ void DOPAIR_SUBSET(struct runner *r, struct cell *restrict ci,
for (k = 0; k < 3; k++) pix[k] = pi->x[k] - shift[k];
hi = pi->h;
hig2 = hi * hi * kernel_gamma2;
di = -hi * kernel_gamma - dxj + pix[0] * runner_shift[3 * sid + 0] +
pix[1] * runner_shift[3 * sid + 1] +
pix[2] * runner_shift[3 * sid + 2];
di = -hi * kernel_gamma - dxj + pix[0] * runner_shift[sid][0] +
pix[1] * runner_shift[sid][1] + pix[2] * runner_shift[sid][2];
/* Loop over the parts in cj. */
for (pjd = count_j - 1; pjd >= 0 && di < sort_j[pjd].d; pjd--) {
......@@ -758,7 +756,7 @@ void DOPAIR1(struct runner *r, struct cell *ci, struct cell *cj) {
/* Get the cutoff shift. */
for (rshift = 0.0, k = 0; k < 3; k++)
rshift += shift[k] * runner_shift[3 * sid + k];
rshift += shift[k] * runner_shift[sid][k];
/* Pick-out the sorted lists. */
sort_i = &ci->sort[sid * (ci->count + 1)];
......@@ -952,7 +950,7 @@ void DOPAIR2(struct runner *r, struct cell *ci, struct cell *cj) {
/* Get the cutoff shift. */
for (rshift = 0.0, k = 0; k < 3; k++)
rshift += shift[k] * runner_shift[3 * sid + k];
rshift += shift[k] * runner_shift[sid][k];
/* Pick-out the sorted lists. */
sort_i = &ci->sort[sid * (ci->count + 1)];
......
......@@ -60,8 +60,8 @@ void runner_dopair_grav_new(struct runner *r, struct cell *ci,
sid = space_getsid(e->s, &ci, &cj, shift);
/* Make sure the cells are sorted. */
runner_do_gsort(r, ci, (1 << sid), 0);
runner_do_gsort(r, cj, (1 << sid), 0);
//runner_do_gsort(r, ci, (1 << sid), 0);
//runner_do_gsort(r, cj, (1 << sid), 0);
/* Have the cells been sorted? */
if (!(ci->gsorted & (1 << sid)) || !(cj->gsorted & (1 << sid)))
......@@ -69,7 +69,7 @@ void runner_dopair_grav_new(struct runner *r, struct cell *ci,
/* Get the cutoff shift. */
for (rshift = 0.0, k = 0; k < 3; k++)
rshift += shift[k] * runner_shift[3 * sid + k];
rshift += shift[k] * runner_shift[sid][k];
/* Pick-out the sorted lists. */
sort_i = &ci->gsort[sid * (ci->count + 1)];
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment