Preconditioning System

Overview

See Steady for more details on how preconditioning is used in solving nonlinear systems in MOOSE. The Preconditioning block allows you to define which type of preconditioning matrix to build and what process to apply. You can define multiple blocks with different names, allowing you to quickly switch out preconditioning options. Within the sub-blocks you can also provide other options specific to that type of preconditioning matrix. You can also override PETSc options here. Only one block can be active at a time.

Default Preconditioning Matrix

Consider the fully coupled system of equations:

the fully coupled Jacobian is then approximated using a block-diagonal approach:

Thus, for this example, the default preconditioning matrix is defined as:

Example Input File Syntax

A single preconditioner may be specified as below:

[Preconditioning]
  [my_prec]
    type = SMP
    # SMP Options Go Here!
    # Override PETSc Options Here!
  []
[]

Nested preconditioners may be specified as below, for the FSP for example:

[Preconditioning]
  active = 'FSP'

  [./FSP]
    type = FSP
    # It is the starting point of splitting
    topsplit = 'uv' # 'uv' should match the following block name
    [./uv]
      splitting = 'u v' # 'u' and 'v' are the names of subsolvers
      # Generally speaking, there are four types of splitting we could choose
      # <additive,multiplicative,symmetric_multiplicative,schur>
      splitting_type = additive
      # An approximate solution to the original system
      # | A_uu  A_uv | | u | _ |f_u|
      # |  0    A_vv | | v | - |f_v|
      #  is obtained by solving the following subsystems
      #  A_uu u = f_u and A_vv v = f_v
      # If splitting type is specified as schur, we may also want to set more options to
      # control how schur works using PETSc options
      # petsc_options_iname = '-pc_fieldsplit_schur_fact_type -pc_fieldsplit_schur_precondition'
      # petsc_options_value = 'full selfp'
    [../]
    [./u]
      vars = 'u'
      # PETSc options for this subsolver
      # A prefix will be applied, so just put the options for this subsolver only
      petsc_options_iname = '-pc_type -ksp_type'
      petsc_options_value = '     hypre preonly'
    [../]
    [./v]
      vars = 'v'
      # PETSc options for this subsolver
      petsc_options_iname = '-pc_type -ksp_type'
      petsc_options_value = '     hypre  preonly'
    [../]
  [../]
[]
(test/tests/preconditioners/fsp/fsp_test.i)

Available Objects

  • Moose App
  • SplitField split based preconditioner for nonlinear solver.
  • FDPFinite difference preconditioner (FDP) builds a numerical Jacobian for preconditioning, only use for testing and verification.
  • FSPPreconditioner designed to map onto PETSc's PCFieldSplit.
  • PBPPhysics-based preconditioner (PBP) allows individual physics to have their own preconditioner.
  • SMPSingle matrix preconditioner (SMP) builds a preconditioner using user defined off-diagonal parts of the Jacobian.
  • VCPVarialble condensation preconditioner (VCP) condenses out specified variable(s) from the Jacobian matrix and produces a system of equations with less unkowns to be solved by the underlying preconditioners.
  • Contact App
  • ContactSplitSplit-based preconditioner that partitions the domain into DOFs directly involved in contact (on contact surfaces) and those that are not

Available Actions