diff --git a/src/part.c b/src/part.c index 6a99325ef23a7062fafb387fa3f3bd6b2203d057..00b90d99f94ebdcc1a3b9184c7513f9e52644d3e 100644 --- a/src/part.c +++ b/src/part.c @@ -28,6 +28,34 @@ /* This object's header. */ #include "part.h" +/** + * @brief Re-link the #gparts associated with the list of #parts. + * + * @param parts The list of #part. + * @param N The number of particles to re-link; + * @param offset The offset of #parts relative to the global parts list. + */ +void part_relink_gparts(struct part *parts, size_t N, ptrdiff_t offset) { + for (size_t k = 0; k < N; k++) { + parts[k]->gpart->id_or_neg_offset = -(k + offset); + } +} + +/** + * @brief Re-link the #gparts associated with the list of #parts. + * + * @param gparts The list of #gpart. + * @param N The number of particles to re-link; + * @param parts The global part array in which to find the #gpart offsets. + */ +void part_relink_parts(struct gpart *gparts, size_t N, struct part *parts) { + for (size_t k = 0; k < N; k++) { + if (gparts[k].id_or_neg_offset < 0) { + parts[-gparts[k].id_or_neg_offset].gpart = &gparts[k]; + } + } +} + #ifdef WITH_MPI /** * @brief Registers and returns an MPI type for the particles diff --git a/src/part.h b/src/part.h index 865403e8c2c157dc5a8ff7a32bc41be676d7919b..7cd74fada98855c82addf844bff6ee72ce5429ce 100644 --- a/src/part.h +++ b/src/part.h @@ -51,6 +51,8 @@ #include "./gravity/Default/gravity_part.h" +void part_relink_gparts(struct parts *parts, size_t N, ptrdiff_t offset); +void part_relink_parts(struct gparts *parts, size_t N); #ifdef WITH_MPI void part_create_mpi_type(MPI_Datatype* part_type); void xpart_create_mpi_type(MPI_Datatype* xpart_type);