[AMG] Add new implementation of commgraph-based repartitioning
This merge request adds a new implementation of the commgraph-based repartitioning already contained in AMG. The existing version unfortunately only performs the calculation of the new partitioning (i.e. the METIS call) on the commgraph and then falls back to the much more general matrix repartitioning which is able to handle parts of the rank-local matrix partition to move to different remote ranks. This is highly inefficient as it always involves global communication and also prevents a large number of algorithmic enhancements that are possible due to the fact that the local matrix partition always moves to a single target partition.
The new implementation makes use of this fact and also contains a reimplementation of the vector redistribution that is used when applying the AMG. For large number of processes, the new implementation shows a speedup of up to one order of magnitude during the AMG setup phase and also runs more reliably. As part of the new implementation, the AMG now also accepts a ParameterTree
object to control some of its parameters, and the CoarsenCriterion
stores an object that inherits from RepartitioningStrategy
. This object controls when and how to repartition the matrix if the default policy in AMG does not work optimally.
Finally, there are a few bug fixes, both in AMG and in other parts of ISTL.