> On 21 Oct 2019, at 3:04 PM, Jed Brown <j...@jedbrown.org> wrote: > > 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.
I most often end up debugging bottom-up (or coarse to fine) instead of top-down, but you probably have some convincing arguments that I should do it the other way around.