SNESFAS#
An implementation of the Full Approximation Scheme nonlinear multigrid solver, FAS, or nonlinear multigrid [BKST15] for solving nonlinear systems of equations with SNES. The nonlinear problem is solved by correction using coarse versions
of the nonlinear problem. This problem is perturbed so that a projected
solution of the fine problem elicits no correction from the coarse problem.
Options Database Keys and Prefixes#
-snes_fas_levels l - The number of levels
-snes_fas_cycles (1|2) - The number of cycles – 1 for V, 2 for W
-snes_fas_type (additive|multiplicative|full|kaskade) - Additive or multiplicative cycle
-snes_fas_galerkin (true|false) - Form coarse problems by projection back upon the fine problem
-snes_fas_smoothup u - The number of iterations of the post-smoother
-snes_fas_smoothdown d - The number of iterations of the pre-smoother
-snes_fas_monitor - Monitor progress of all of the levels
-snes_fas_full_downsweep (true|false) - Call the downsmooth on the initial downsweep of full FAS
-snes_fas_use_coarse_correction_linesearch (true|false) - Use a line search for the multiplicative coarse correction update on every level except the coarsest
-fas_coarse_correction_snes_linesearch_type (none|bt|secant|cp|nleqerr|bisection|shell) - Type of the enabled coarse correction line search, on all levels
-fas_coarse_correction_i_snes_linesearch_type (none|bt|secant|cp|nleqerr|bisection|shell) - Override the coarse correction line search type on level i only
-fas_levels_snes_ - Prefix for
SNESoptions for all smoothers-fas_levels_cycle_snes_ - Prefix for
SNESoptions for all cycles-fas_levels_i_snes_ - Prefix
SNESoptions for the smoothers on level i-fas_levels_i_cycle_snes_ - Prefix for
SNESoptions for the cycle on level i-fas_coarse_snes_ - Prefix for
SNESoptions for the coarsest smoother
Notes#
The organization of the SNESFAS solver is slightly different from the organization of PCMG
As each level has smoother SNES instances(down and potentially up) and a cycle SNES instance.
The cycle SNES instance may be used for monitoring convergence on a particular level.
The coarse correction \(X += I(x^c - Rx)\) is applied directly (a unit step, equivalent to the original FAS
correction) unless -snes_fas_use_coarse_correction_linesearch or SNESFASSetUseCoarseCorrectionLineSearch() is set, in which case a dedicated
SNESLineSearch is created on every level, except the coarsest, (one per recursive SNESFAS instance) and applied instead.
MG-Opt [Nas00] generalizes the correction this way, which is useful when monotonic decrease
in the residual norm or energy functional is desired (e.g., non-convex problems where the full coarse
correction may overshoot without an explicit convergence control strategy). As with PCMG’s
-mg_levels_pc_type vs. -mg_levels_2_pc_type pattern, -fas_coarse_correction_snes_linesearch_type
sets the line search type for all levels while -fas_coarse_correction_i_snes_linesearch_type overrides
only level i; the line search can be retrieved via SNESFASGetCoarseCorrectionLineSearch().
References#
Peter R. Brune, Matthew G. Knepley, Barry F. Smith, and Xuemin Tu. Composing scalable nonlinear algebraic solvers. SIAM Review, 57(4):535–565, 2015. http://www.mcs.anl.gov/papers/P2010-0112.pdf. URL: http://www.mcs.anl.gov/papers/P2010-0112.pdf, doi:10.1137/130936725.
S.G. Nash. A multigrid approach to discretized optimization problems. Optimization Methods and Software, 14(1-2):99–116, 2000.
See Also#
SNES: Nonlinear Solvers, PCMG, SNESCreate(), SNES, SNESSetType(), SNESType, SNESFASSetRestriction(), SNESFASSetInjection(),
SNESFASFullGetTotal(), SNESFASSetType(), SNESFASGetType(), SNESFASSetLevels(), SNESFASGetLevels(), SNESFASGetCycleSNES(),
SNESFASSetNumberSmoothUp(), SNESFASSetNumberSmoothDown(), SNESFASSetContinuation(), SNESFASSetCycles(), SNESFASSetMonitor(),
SNESFASSetLog(), SNESFASCycleSetCycles(), SNESFASCycleGetSmoother(), SNESFASCycleGetSmootherUp(), SNESFASCycleGetSmootherDown(),
SNESFASCycleGetCorrection(), SNESFASCycleGetInterpolation(), SNESFASCycleGetRestriction(), SNESFASCycleGetInjection(),
SNESFASCycleGetRScale(), SNESFASCycleIsFine(), SNESFASSetInterpolation(), SNESFASGetInterpolation(),
SNESFASGetRestriction(), SNESFASGetInjection(), SNESFASSetRScale(), SNESFASGetSmoother(),
SNESFASGetSmootherDown(), SNESFASGetSmootherUp(), SNESFASGetCoarseSolve(), SNESFASFullSetDownSweep(), SNESFASFullSetTotal(),
SNESFASSetUseCoarseCorrectionLineSearch(), SNESFASGetCoarseCorrectionLineSearch()
Level#
beginner
Location#
Index of all SNESFAS routines
Table of Contents for all manual pages
Index of all manual pages