diff --git a/examples/test_fmm.c b/examples/test_fmm.c index 63adabff545f6257034f70c7b5f3d5935821a61c..eaa89ee5a0d91c6b85eed1ae39924e843dd49044 100644 --- a/examples/test_fmm.c +++ b/examples/test_fmm.c @@ -629,81 +629,6 @@ static inline void iact_self_pc(struct cell *c, struct cell *leaf, } } -/** - * @brief Compute the interactions between all particles in a cell - * and all particles in the other cell (N^2 algorithm) - * - * @param ci The #cell containing the particles. - * @param cj The #cell containing the other particles - */ -static inline void iact_pair_direct_dp(struct cell *ci, struct cell *cj) { - - int i, j, k; - int count_i = ci->count, count_j = cj->count; - double xi[3]; - float dx[3], ai[3], mi, mj, r2, w, ir; - struct part *parts_i = ci->parts, *parts_j = cj->parts; - -#ifdef SANITY_CHECKS - - /* Bad stuff will happen if cell sizes are different */ - if (ci->h != cj->h) - error("Non matching cell sizes !! h_i=%f h_j=%f\n", ci->h, cj->h); - -#endif - - /* Loop over all particles in ci... */ - for (i = 0; i < count_i; i++) { - - /* Init the ith particle's data. */ - for (k = 0; k < 3; k++) { - xi[k] = parts_i[i].x[k]; - ai[k] = 0.0f; - } - mi = parts_i[i].mass; - - /* Loop over every particle in the other cell. */ - for (j = 0; j < count_j; j++) { - - /* Compute the pairwise distance. */ - for (r2 = 0.0, k = 0; k < 3; k++) { - dx[k] = xi[k] - parts_j[j].x[k]; - r2 += dx[k] * dx[k]; - } - - /* Apply the gravitational acceleration. */ - ir = 1.0f / sqrtf(r2); - w = const_G * ir * ir * ir; - mj = parts_j[j].mass; - for (k = 0; k < 3; k++) { - float wdx = w * dx[k]; - parts_j[j].a[k] += wdx * mi; - ai[k] -= wdx * mj; - } - -#ifdef COUNTERS - ++count_direct_unsorted; -#endif - -#if ICHECK >= 0 && 0 - if (parts_i[i].id == ICHECK) - printf( - "[NEW] Interaction with particle id= %d (pair i) a=( %e %e %e )\n", - parts_j[j].id, -mi * w * dx[0], -mi * w * dx[1], -mi * w * dx[2]); - - if (parts_j[j].id == ICHECK) - printf( - "[NEW] Interaction with particle id= %d (pair j) a=( %e %e %e )\n", - parts_i[i].id, mj * w * dx[0], mj * w * dx[1], mj * w * dx[2]); -#endif - - } /* loop over every other particle. */ - - /* Store the accumulated acceleration on the ith part. */ - for (k = 0; k < 3; k++) parts_i[i].a[k] += ai[k]; - - } /* loop over all particles. */ -} static inline void iact_pair_direct(struct cell *ci, struct cell *cj) { @@ -844,85 +769,6 @@ void iact_pair(struct cell *ci, struct cell *cj) { } } -/** - * @brief Compute the interactions between all particles in a cell. - * - * @param c The #cell. - */ -void iact_self_direct_dp(struct cell *c) { - int i, j, k, count = c->count; - double xi[3] = {0.0, 0.0, 0.0}; - float ai[3] = {0.0, 0.0, 0.0}, mi, mj, dx[3] = {0.0, 0.0, 0.0}, r2, ir, w; - struct cell *cp, *cps; - struct part *parts = c->parts; - -#ifdef SANITY_CHECKS - - /* Early abort? */ - if (count == 0) error("Empty cell !"); - -#endif - - /* If the cell is split, interact each progeny with itself, and with - each of its siblings. */ - if (c->split) { - for (cp = c->firstchild; cp != c->sibling; cp = cp->sibling) { - iact_self_direct_dp(cp); - for (cps = cp->sibling; cps != c->sibling; cps = cps->sibling) - iact_pair(cp, cps); - } - - /* Otherwise, compute the interactions directly. */ - } else { - - /* Loop over all particles... */ - for (i = 0; i < count; i++) { - - /* Init the ith particle's data. */ - for (k = 0; k < 3; k++) { - xi[k] = parts[i].x[k]; - ai[k] = 0.0; - } - mi = parts[i].mass; - - /* Loop over every following particle. */ - for (j = i + 1; j < count; j++) { - - /* Compute the pairwise distance. */ - for (r2 = 0.0, k = 0; k < 3; k++) { - dx[k] = xi[k] - parts[j].x[k]; - r2 += dx[k] * dx[k]; - } - - /* Apply the gravitational acceleration. */ - ir = 1.0f / sqrtf(r2); - w = const_G * ir * ir * ir; - mj = parts[j].mass; - for (k = 0; k < 3; k++) { - float wdx = w * dx[k]; - parts[j].a[k] += wdx * mi; - ai[k] -= wdx * mj; - } - -#if ICHECK >= 0 - if (parts[i].id == ICHECK) - message("[NEW] Interaction with particle id= %d (self i)", - parts[j].id); - - if (parts[j].id == ICHECK) - message("[NEW] Interaction with particle id= %d (self j)", - parts[i].id); -#endif - - } /* loop over every other particle. */ - - /* Store the accumulated acceleration on the ith part. */ - for (k = 0; k < 3; k++) parts[i].a[k] += ai[k]; - - } /* loop over all particles. */ - - } /* otherwise, compute interactions directly. */ -} void iact_self_direct(struct cell *c) { int i, j, k, count = c->count;