diff --git a/src/space.c b/src/space.c index 160952f05eabe3f39ecb96717cbc2edc668b23e2..4dab9346fa8a0af0d04984d2f3c43437eaa877e5 100644 --- a/src/space.c +++ b/src/space.c @@ -2657,6 +2657,14 @@ void space_first_init_sparts(struct space *s) { } } +void space_init_parts_mapper(void *restrict map_data, int count, + void *restrict extra_data) { + + struct part *restrict parts = map_data; + const struct hydro_space *restrict hs = extra_data; + for (int k = 0; k < count; k++) hydro_init_part(&parts[k], hs); +} + /** * @brief Calls the #part initialisation function on all particles in the space. * @@ -2667,14 +2675,21 @@ void space_init_parts(struct space *s, int verbose) { const ticks tic = getticks(); - for (size_t k = 0; k < s->nr_parts; k++) - hydro_init_part(&s->parts[k], &s->hs); - + if (s->nr_parts > 0) + threadpool_map(&s->e->threadpool, space_init_parts_mapper, s->parts, + s->nr_parts, sizeof(struct part), 0, &s->hs); if (verbose) message("took %.3f %s.", clocks_from_ticks(getticks() - tic), clocks_getunit()); } +void space_init_gparts_mapper(void *restrict map_data, int count, + void *restrict extra_data) { + + struct gpart *gparts = map_data; + for (int k = 0; k < count; k++) gravity_init_gpart(&gparts[k]); +} + /** * @brief Calls the #gpart initialisation function on all particles in the * space. @@ -2686,13 +2701,24 @@ void space_init_gparts(struct space *s, int verbose) { const ticks tic = getticks(); - for (size_t k = 0; k < s->nr_gparts; k++) gravity_init_gpart(&s->gparts[k]); - + if (s->nr_gparts > 0) + threadpool_map(&s->e->threadpool, space_init_gparts_mapper, s->gparts, + s->nr_gparts, sizeof(struct part), 0, NULL); if (verbose) message("took %.3f %s.", clocks_from_ticks(getticks() - tic), clocks_getunit()); } +void space_convert_quantities_mapper(void *restrict map_data, int count, + void *restrict extra_data) { + struct space *s = extra_data; + struct part *restrict parts = map_data; + const ptrdiff_t index = parts - s->parts; + struct xpart *restrict xparts = s->xparts + index; + for (int k = 0; k < count; k++) + hydro_convert_quantities(&parts[k], &xparts[k]); +} + /** * @brief Calls the #part quantities conversion function on all particles in the * space. @@ -2704,9 +2730,9 @@ void space_convert_quantities(struct space *s, int verbose) { const ticks tic = getticks(); - /* Apply the conversion */ - for (size_t i = 0; i < s->nr_parts; ++i) - hydro_convert_quantities(&s->parts[i], &s->xparts[i]); + if (s->nr_parts > 0) + threadpool_map(&s->e->threadpool, space_convert_quantities_mapper, s->parts, + s->nr_parts, sizeof(struct part), 0, s); if (verbose) message("took %.3f %s.", clocks_from_ticks(getticks() - tic),