[bugfix] AMG::pre deadlock
I encountered a deadlock in the AMG::pre()
method. It occours if Level 0 is redistributed. Then the pre
method for Level 0 is not called on rank 0.
This MR changes the behavior to call the pre
method only for higher levels (for level 0 it is already called in line 591) and adds a test.
I'm not sure whether pre
has to be called for every smoother or for every lhs/rhs. If the latter is the case a proper bugfix would be to change line 626 to
for(; smoother != coarsest; ++smoother, ++lhs, ++rhs)
such that also rank 0 also calls pre
for the finest level again.
@markus.blatt: can you explain the exact idea of pre
?