diff --git a/src/runner_doiact_vec.c b/src/runner_doiact_vec.c index 5db0ec6f89168f2d8cc9f4da574aeaab9ba54ca1..b91d288529c0706693d74b0c54d688ee0944aa29 100644 --- a/src/runner_doiact_vec.c +++ b/src/runner_doiact_vec.c @@ -20,6 +20,8 @@ /* Config parameters. */ #include "../config.h" +#include "active.h" + /* This object's header. */ #include "runner_doiact_vec.h" @@ -270,7 +272,7 @@ __attribute__((always_inline)) INLINE void runner_doself1_density_vec( struct runner *r, struct cell *restrict c) { #ifdef WITH_VECTORIZATION - const int ti_current = r->e->ti_current; + const struct engine *e = r->e; int doi_mask; struct part *restrict pi; int count_align; @@ -283,8 +285,9 @@ __attribute__((always_inline)) INLINE void runner_doself1_density_vec( TIMER_TIC - if (c->ti_end_min > ti_current) return; - if (c->ti_end_max < ti_current) error("Cell in an impossible time-zone"); + if (!cell_is_active(c, e)) return; + + if (!cell_is_drifted(c, e)) cell_drift(c, e); /* Get the particle cache from the runner and re-allocate * the cache if it is not big enough for the cell. */ @@ -308,7 +311,7 @@ __attribute__((always_inline)) INLINE void runner_doself1_density_vec( pi = &parts[pid]; /* Is the ith particle active? */ - if (pi->ti_end > ti_current) continue; + if (!part_is_active(pi, e)) continue; vector pix, piy, piz; @@ -509,6 +512,7 @@ __attribute__((always_inline)) INLINE void runner_doself1_density_vec( /** * @brief Compute the cell self-interaction (non-symmetric) using vector * intrinsics with two particle pis at a time. + * * CURRENTLY BROKEN DO NOT USE. * * @param r The #runner. @@ -518,7 +522,7 @@ __attribute__((always_inline)) INLINE void runner_doself1_density_vec_2( struct runner *r, struct cell *restrict c) { #ifdef WITH_VECTORIZATION - const int ti_current = r->e->ti_current; + const struct engine *e = r->e; int doi_mask; int doi2_mask; struct part *restrict pi; @@ -530,9 +534,11 @@ __attribute__((always_inline)) INLINE void runner_doself1_density_vec_2( TIMER_TIC + if (!cell_is_active(c, e)) return; + + if (!cell_is_drifted(c, e)) cell_drift(c, e); + /* TODO: Need to find two active particles, not just one. */ - if (c->ti_end_min > ti_current) return; - if (c->ti_end_max < ti_current) error("Cell in an impossible time-zone"); struct part *restrict parts = c->parts; const int count = c->count; @@ -563,7 +569,7 @@ __attribute__((always_inline)) INLINE void runner_doself1_density_vec_2( pi2 = &parts[pid + 1]; /* Is the ith particle active? */ - if (pi->ti_end > ti_current) continue; + if (!part_is_active(pi, e)) continue; vector pix, piy, piz; vector pix2, piy2, piz2;