WIP: MPI FOF implementation without MPI_ALLGATHERV calls
This modifies the FOF implementation to avoid gathering information about all groups on any one node. There are two main changes:
- Uses the algorithm described in #551 (closed) for stitching together fragments of FoF groups on different nodes
- Group IDs are no longer assigned in descending order of mass across all nodes, so we don't need to globally sort the groups by mass. Instead we assign group IDs by node and then by mass within the node.
This appears to be working on the EAGLE_6 box in that it generates the same set of groups as the FOF branch, although they get assigned different group IDs. Still need to test on larger boxes and investigate scaling.
Currently it doesn't calculate group centres of mass. Any aggregate group properties probably should be computed after the FOF calculation is done so that we only store centres, masses etc for groups above the minimum particle number instead of for every particle.
Edited by John Helly