PBP

Physics-based preconditioner (PBP) allows individual physics to have their own preconditioner.

Overview

Physics based preconditioning (PBP) is an advanced concept used to more efficiently solve using JFNK. The idea is to create a preconditioning process that targets each physics individually. In this way you can create a more effective preconditioner, while also maintaining efficiency. This object allows you to dial up a preconditioning matrix and the operations to be done on the different blocks of that matrix on the fly from the input file.

The PBP works by partially inverting a preconditioning matrix (usually an approximation of the true Jacobian) by partially inverting each block row in a Block-Gauss-Seidel way.

Example Input File Syntax

Set up a PBP object for a two variable system (consisting of variables "u" and "v"). Use ILU for the "u" block and AMG for "v". Use the lower diagonal (v,u) block. When using type = PBP, MOOSE will set solve_type = JFNK automatically.


[Preconditioning]
  active = 'myPBP'

  [myPBP]
    type = PBP
    solve_order = 'u v'
    preconditioner  = 'ILU AMG'
    off_diag_row    = 'v'
    off_diag_column = 'u'
  []
[]

Input Parameters

  • preconditionerTODO: docstring

    C++ Type:std::vector<std::string>

    Options:

    Description:TODO: docstring

  • solve_orderThe order the block rows will be solved in. Put the name of variables here to stand for solving that variable's block row. A variable may appear more than once (to create cylces if you like).

    C++ Type:std::vector<std::string>

    Options:

    Description:The order the block rows will be solved in. Put the name of variables here to stand for solving that variable's block row. A variable may appear more than once (to create cylces if you like).

Required Parameters

  • ksp_normunpreconditionedSets the norm that is used for convergence testing

    Default:unpreconditioned

    C++ Type:MooseEnum

    Options:none, preconditioned, unpreconditioned, natural, default

    Description:Sets the norm that is used for convergence testing

  • mffd_typewpSpecifies the finite differencing type for Jacobian-free solve types. Note that the default is wp (for Walker and Pernice).

    Default:wp

    C++ Type:MooseEnum

    Options:wp, ds

    Description:Specifies the finite differencing type for Jacobian-free solve types. Note that the default is wp (for Walker and Pernice).

  • off_diag_columnThe off diagonal column you want to add into the matrix, it will be associated with an off diagonal row from the same position in off_diag_row.

    C++ Type:std::vector<std::string>

    Options:

    Description:The off diagonal column you want to add into the matrix, it will be associated with an off diagonal row from the same position in off_diag_row.

  • off_diag_rowThe off diagonal row you want to add into the matrix, it will be associated with an off diagonal column from the same position in off_diag_colum.

    C++ Type:std::vector<std::string>

    Options:

    Description:The off diagonal row you want to add into the matrix, it will be associated with an off diagonal column from the same position in off_diag_colum.

  • pc_sidedefaultPreconditioning side

    Default:default

    C++ Type:MooseEnum

    Options:left, right, symmetric, default

    Description:Preconditioning side

  • petsc_optionsSingleton PETSc options

    C++ Type:MultiMooseEnum

    Options:-dm_moose_print_embedding, -dm_view, -ksp_converged_reason, -ksp_gmres_modifiedgramschmidt, -ksp_monitor, -ksp_monitor_snes_lg-snes_ksp_ew, -ksp_snes_ew, -snes_converged_reason, -snes_ksp, -snes_ksp_ew, -snes_linesearch_monitor, -snes_mf, -snes_mf_operator, -snes_monitor, -snes_test_display, -snes_view

    Description:Singleton PETSc options

  • petsc_options_inameNames of PETSc name/value pairs

    C++ Type:MultiMooseEnum

    Options:-ksp_atol, -ksp_gmres_restart, -ksp_max_it, -ksp_pc_side, -ksp_rtol, -ksp_type, -mat_fd_coloring_err, -mat_fd_type, -mat_mffd_type, -pc_asm_overlap, -pc_factor_levels, -pc_factor_mat_ordering_type, -pc_hypre_boomeramg_grid_sweeps_all, -pc_hypre_boomeramg_max_iter, -pc_hypre_boomeramg_strong_threshold, -pc_hypre_type, -pc_type, -snes_atol, -snes_linesearch_type, -snes_ls, -snes_max_it, -snes_rtol, -snes_divergence_tolerance, -snes_type, -sub_ksp_type, -sub_pc_type

    Description:Names of PETSc name/value pairs

  • petsc_options_valueValues of PETSc name/value pairs (must correspond with "petsc_options_iname"

    C++ Type:std::vector<std::string>

    Options:

    Description:Values of PETSc name/value pairs (must correspond with "petsc_options_iname"

  • solve_typePJFNK: Preconditioned Jacobian-Free Newton Krylov JFNK: Jacobian-Free Newton Krylov NEWTON: Full Newton Solve FD: Use finite differences to compute Jacobian LINEAR: Solving a linear problem

    C++ Type:MooseEnum

    Options:PJFNK, JFNK, NEWTON, FD, LINEAR

    Description:PJFNK: Preconditioned Jacobian-Free Newton Krylov JFNK: Jacobian-Free Newton Krylov NEWTON: Full Newton Solve FD: Use finite differences to compute Jacobian LINEAR: Solving a linear problem

Optional Parameters

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

    C++ Type:std::vector<std::string>

    Options:

    Description:Adds user-defined labels for accessing object parameters via control logic.

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Options:

    Description:Set the enabled status of the MooseObject.

Advanced Parameters