You present a case where the one level method should be a direct solve. I don't think this disproves my point that there is NO correct general abstract or practical answer to what it should be.
Perhaps this should be a property of PCMG, if in the one level case it is a direct solve or an iterative. Then when you create the PCMG for grid sequencing you call something like PCMGSetOneLevelDefaultDirectSolver() or some similar ugly name. Barry On May 6, 2012, at 5:31 PM, Jed Brown wrote: > On Sat, Feb 18, 2012 at 11:59 AM, Barry Smith <bsmith at mcs.anl.gov> wrote: > > -pc_type mg with one level just applies a normal smoother. I've sometimes > > thought it should do a coarse-level solve instead, but I haven't messed > > with it. Barry, why doesn't it do a direct solve? > > > 1) Because MG is an accelerator of the basic smoother, MG is not a > deccelerator of a direct solver. That is the action of adding a coarser > level is suppose to improve the convergence of the solver. > > 2) Because if you used a direct solver and the user switched from one to two > levels they would be dismayed at the worsening of the convergence. If the > user ran a large problem on one level it would run out of memory. > > 3) I don't think there is really a "correct" abstract or practical answer to > which it should be (hence my two snide answers above) I am happy with the > current default > > So with -snes_grid_sequence, the first solve should do something reasonable. > If we give -pc_type mg, the first solve in the sequence (-mg_levels_0_, not > -mg_coarse_) is doing a crappy iterative solve. It's obnoxious to have to > specify what to do for both of these separately, even though the problem is > of the same size in both cases, so it's usually desirable for the same method > to be used in both cases.