FDP

Finite difference preconditioner (FDP) builds a numerical Jacobian for preconditioning, only use for testing and verification.

Overview

The Finite Difference Preconditioner (FDP) forms a "Numerical Jacobian" by doing direct finite differences of residual statements. This is extremely slow and inefficient, but is a great debugging tool because it allows you to form a nearly perfect preconditioner. FDP contains the same options for specifying off-diagonal blocks as SMP. Since FDP builds the perfect approximate Jacobian it can be useful to use it directly to solve instead of using JFNK. The finite differencing is sensitive to the differencing parameter which can be specified using:


petsc_options_iname = '-mat_fd_coloring_err -mat_fd_type'
petsc_options_value = '1e-6                 ds'

Example Input File Syntax

[Preconditioning]
  active = 'FDP_jfnk'

  [./FDP_jfnk]
    type = FDP

    off_diag_row = 'forced'
    off_diag_column = 'diffused'

    #Preconditioned JFNK (default)
    solve_type = 'PJFNK'

    petsc_options_iname = '-pc_type -mat_fd_coloring_err -mat_fd_type'
    petsc_options_value = 'lu       1e-6                 ds'
  [../]

  [./FDP_n]
    type = FDP

    off_diag_row = 'forced'
    off_diag_column = 'diffused'

    solve_type = 'NEWTON'

    petsc_options_iname = '-pc_type -mat_fd_coloring_err -mat_fd_type'
    petsc_options_value = 'lu       1e-6                 ds'
  [../]

  [./FDP_n_full]
    type = FDP

    full = true

    solve_type = 'NEWTON'

    petsc_options_iname = '-pc_type -mat_fd_coloring_err -mat_fd_type'
    petsc_options_value = 'lu       1e-6                 ds'
  [../]
[]
(examples/ex11_prec/fdp.i)

Input Parameters

  • finite_difference_typecoloringstandard: standard finite differencecoloring: finite difference based on coloring

    Default:coloring

    C++ Type:MooseEnum

    Options:standard, coloring

    Description:standard: standard finite differencecoloring: finite difference based on coloring

  • fullFalseSet to true if you want the full set of couplings. Simply for convenience so you don't have to set every off_diag_row and off_diag_column combination.

    Default:False

    C++ Type:bool

    Options:

    Description:Set to true if you want the full set of couplings. Simply for convenience so you don't have to set every off_diag_row and off_diag_column combination.

  • implicit_geometric_couplingFalseSet to true if you want to add entries into the matrix for degrees of freedom that might be coupled by inspection of the geometric search objects.

    Default:False

    C++ Type:bool

    Options:

    Description:Set to true if you want to add entries into the matrix for degrees of freedom that might be coupled by inspection of the geometric search objects.

  • 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