Nonlinear Additive Schwarz solver [CK02], [BKST15]

Options Database Keys#

  • -snes_nasm_log - enable logging events for the communication and solve stages

  • -snes_nasm_type <basic,restrict> - type of subdomain update used

  • -snes_nasm_damping - the new solution is obtained as old solution plus dmp times (sum of the solutions on the subdomains)

  • -snes_nasm_finaljacobian - compute the local and global Jacobians of the final iterate

  • -snes_nasm_finaljacobian_type <finalinner,finalouter,initial> - pick state the Jacobian is calculated at

  • -sub_snes_ - options prefix of the subdomain nonlinear solves

  • -sub_ksp_ - options prefix of the subdomain Krylov solver

  • -sub_pc_ - options prefix of the subdomain preconditioner


This is not often used directly as a solver, it converges too slowly. However it works well as a nonlinear preconditioner for the SNESASPIN solver

Developer Note#

This is a non-Newton based nonlinear solver that does not directly require a Jacobian; hence the flag snes->usesksp is set to false and SNESView() and -snes_view do not display a KSP object. However, if the flag nasm->finaljacobian is set (for example, if SNESNASM is used as a nonlinear preconditioner for SNESASPIN) then SNESSetUpMatrices() is called to generate the Jacobian (needed by SNESASPIN) and this utilizes the inner KSP object for storing the matrices, but the KSP is never used for solving a linear system. When SNESNASM is used by SNESASPIN they share the same Jacobian matrices because SNESSetUp() (called on the outer SNESASPIN) causes the inner SNES object (in this case SNESNASM) to inherit the outer Jacobian matrices.



Peter R. Brune, Matthew G. Knepley, Barry F. Smith, and Xuemin Tu. Composing scalable nonlinear algebraic solvers. SIAM Review, 57(4):535–565, 2015. URL:, doi:10.1137/130936725.


X.-C. Cai and D. E. Keyes. Nonlinearly preconditioned inexact Newton algorithms. SIAM J. Sci. Comput., 24:183–200, 2002. URL:

See Also#

SNES: Nonlinear Solvers, SNESCreate(), SNES, SNESSetType(), SNESType, SNESNASMSetType(), SNESNASMGetType(), SNESNASMSetSubdomains(), SNESNASMGetSubdomains(), SNESNASMGetSubdomainVecs(), SNESNASMSetComputeFinalJacobian(), SNESNASMSetDamping(), SNESNASMGetDamping(), SNESNASMSetWeight(), SNESNASMGetSNES(), SNESNASMGetNumber()





Index of all SNES routines
Table of Contents for all manual pages
Index of all manual pages