I've encountered a residual jump at each restart step within the inner iteration of a restarted GMRES while using geometrical multigrid precondition and matrix free operator.
To simplify the test, I modify the
step-66 to solve the Gelfand problem using both
GMG + Matrix-free method and
AMG + sparse matrix respectively with a restarted GMRES(4) (
max_n_tmp_vectors=6).
For the GMG case, there're clearly two jumps within one Newton step solving:
DEAL:GMRES::Check 0 60.1874
DEAL:GMRES::Starting value 60.1874
DEAL:GMRES::Check 1 0.0551893
DEAL:GMRES::Check 2 0.000396485
DEAL:GMRES::Check 3 5.95803e-06
DEAL:GMRES::Check 4 1.09095e-07
DEAL:GMRES::Check 4 1.00888e-05 <-- JUMP HEREDEAL:GMRES::Check 5 2.19635e-07DEAL:GMRES::Check 6 3.17790e-09DEAL:GMRES::Check 7 6.61810e-11DEAL:GMRES::Check 8 1.82112e-12DEAL:GMRES::Check 8 6.59447e-12 <-- JUMP HEREDEAL:GMRES::Check 9 1.15358e-13DEAL:GMRES::Convergence step 9 value 1.15358e-13And for the AMG case, the residual goes all the way down normally:
DEAL:GMRES::Check 0 25.2492
DEAL:GMRES::Starting value 25.2492
DEAL:GMRES::Check 1 1.02964
DEAL:GMRES::Check 2 0.464888
DEAL:GMRES::Check 3 0.263190
DEAL:GMRES::Check 4 0.0703056
DEAL:GMRES::Check 4 0.0703056
DEAL:GMRES::Check 5 0.0580013
DEAL:GMRES::Check 6 0.0363219
DEAL:GMRES::Check 7 0.0330487
DEAL:GMRES::Check 8 0.0222448
DEAL:GMRES::Check 8 0.0222448
DEAL:GMRES::Check 9 0.0200449
DEAL:GMRES::Check 10 0.0173175
DEAL:GMRES::Check 11 0.0106881
DEAL:GMRES::Check 12 0.00388264
DEAL:GMRES::Check 12 0.00388264
DEAL:GMRES::Check 13 0.00140426
DEAL:GMRES::Check 14 0.00116016
DEAL:GMRES::Check 15 0.000288553
DEAL:GMRES::Check 16 0.000219209
DEAL:GMRES::Check 16 0.000219209
DEAL:GMRES::Check 17 0.000169839
DEAL:GMRES::Check 18 6.81943e-05
DEAL:GMRES::Check 19 6.79830e-05
DEAL:GMRES::Check 20 1.91041e-05
...
Complete test code & log file is attached below, the first half of the log file is GMG and the latter is AMG.
I'm not an expert in the linear solvers but GMRES(m) residual should remains unchanged during each restart since all its value are untouched, just throw away the Arnoldi basis? And thus that seem to me like a misbehave related to PreconditionMG.
Does anyone have idea on how this happens or why it should just jump if I get it wrong. Thanks!
Regards,
Chengjiang Yin
P.S. I've already opened an
issue about this on the github repo and no reply has been received till now. Sorry for the duplicate and I will keep update on both side