Pierre Jolivet via petsc-dev <petsc-dev@mcs.anl.gov> writes: > On Oct 20, 2019, at 6:07 PM, "Smith, Barry F." <bsm...@mcs.anl.gov> wrote: > >> >> The reason the code works this way is that normally >> -ksp_error_if_not_converged is propagated into the inner (and innerer) >> solves and normally it is desirable that these inner solves do not error >> simply because they reach the maximum number of iterations since for nested >> iterative methods generally we don't need or care if the inner solves >> "converge". > > I fully agree with you on the last part of the above sentence. Thus, this > makes me question the first part (which I wasn't aware of): why is > error_if_not_converged being propagated to inner solves? > I'm sure there are good usages, but if one cares that ksp_1 (which depends on > ksp_2) converges, why should an error be thrown if ksp_2 does not converge as > long as ksp_1 does (I guess this goes along your last paragraph)?
What if the user is debugging a singular or indefinite coarse operator when they expect it to be SPD? Sure, they could set that flag directly for the coarse KSP via the options database.