ContactSplit

Description

The ContactSplit class is used to create a split-based preconditioner for contact problems. The idea is to separate the DOFs on the contact interface from the DOFs in the rest of the domain. This allows users to apply different preconditioners for each DOF type. As a common practice, a direct preconditioner (e.g., LU) is often utilized for the interface problem, where the problem size is relatively small while the condition number is large. An iterative preconditioner (e.g., boomeramg) is often employed for the interior problem, where the problem is often better conditioned while the problem size is usually large.

Split-based preconditioner that partitions the domain into DOFs directly involved in contact (on contact surfaces) and those that are not

Example Input Syntax

[Preconditioning]
  [./FSP]
    type = FSP
    # It is the starting point of splitting
    topsplit = 'contact_interior' # 'contact_interior' should match the following block name
    [./contact_interior]
      splitting = 'contact interior'
      splitting_type = multiplicative
    [../]
    [./interior]
      type = ContactSplit
      vars = 'disp_x disp_y disp_z'
      uncontact_primary = '3'
      uncontact_secondary = '2'
      uncontact_displaced = '1'
      blocks = '1 2'
      include_all_contact_nodes = 1
      petsc_options_iname = '-ksp_type -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter -pc_hypre_boomeramg_strong_threshold'
      petsc_options_value = 'preonly   hypre    boomeramg      1                            0.25'
    [../]
    [./contact]
      type = ContactSplit
      vars = 'disp_x disp_y disp_z'
      contact_primary = '3'
      contact_secondary = '2'
      contact_displaced = '1'
      include_all_contact_nodes = 1
      petsc_options_iname = '-ksp_type -pc_type -pc_asm_overlap -sub_pc_type'
      petsc_options_value = 'preonly   asm      1               lu'
    [../]
  [../]
[]
(modules/contact/test/tests/fieldsplit/2blocks3d.i)

Input Parameters

  • include_all_contact_nodesFalseWhether to include all nodes on the contact surfaces

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Whether to include all nodes on the contact surfaces

Required Parameters

  • blocksMesh blocks Split operates on (omitting this implies "all blocks"

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Mesh blocks Split operates on (omitting this implies "all blocks"

  • contact_displacedList of indicators whether displaced mesh is used to define included contact

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

    Unit:(no unit assumed)

    Controllable:No

    Description:List of indicators whether displaced mesh is used to define included contact

  • contact_primaryPrimary surface list for included contacts

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Primary surface list for included contacts

  • contact_secondarySecondary surface list for included contacts

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Secondary surface list for included contacts

  • petsc_optionsPETSc flags for the FieldSplit solver

    C++ Type:MultiMooseEnum

    Unit:(no unit assumed)

    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

    Controllable:No

    Description:PETSc flags for the FieldSplit solver

  • petsc_options_inamePETSc option names for the FieldSplit solver

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

    Unit:(no unit assumed)

    Controllable:No

    Description:PETSc option names for the FieldSplit solver

  • petsc_options_valuePETSc option values for the FieldSplit solver

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

    Unit:(no unit assumed)

    Controllable:No

    Description:PETSc option values for the FieldSplit solver

  • schur_preSType of Schur complement preconditioner matrix

    Default:S

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:S, Sp, A11

    Controllable:No

    Description:Type of Schur complement preconditioner matrix

  • schur_typefullType of Schur complement

    Default:full

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:full, upper, lower

    Controllable:No

    Description:Type of Schur complement

  • sidesSidesets Split operates on (omitting this implies "no sidesets"

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Sidesets Split operates on (omitting this implies "no sidesets"

  • splittingThe names of the splits (subsystems) in the decomposition of this split

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

    Unit:(no unit assumed)

    Controllable:No

    Description:The names of the splits (subsystems) in the decomposition of this split

  • splitting_typeadditiveSplit decomposition type

    Default:additive

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:additive, multiplicative, symmetric_multiplicative, schur

    Controllable:No

    Description:Split decomposition type

  • uncontact_displacedList of indicators whether displaced mesh is used to define excluded contact

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

    Unit:(no unit assumed)

    Controllable:No

    Description:List of indicators whether displaced mesh is used to define excluded contact

  • uncontact_primaryPrimary surface list for excluded contacts

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Primary surface list for excluded contacts

  • uncontact_secondarySecondary surface list for excluded contacts

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Secondary surface list for excluded contacts

  • unside_by_var_boundary_nameA map from boundary name to unside by variable, e.g. only unside for a given variable.

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

    Unit:(no unit assumed)

    Controllable:No

    Description:A map from boundary name to unside by variable, e.g. only unside for a given variable.

  • unside_by_var_var_nameA map from boundary name to unside by variable, e.g. only unside for a given variable.

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

    Unit:(no unit assumed)

    Controllable:No

    Description:A map from boundary name to unside by variable, e.g. only unside for a given variable.

  • unsidesSidesets Split excludes (omitting this implies "do not exclude any sidesets"

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Sidesets Split excludes (omitting this implies "do not exclude any sidesets"

  • varsVariables Split operates on (omitting this implies "all variables"

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Variables Split operates on (omitting this implies "all variables"

Optional Parameters

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

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

    Unit:(no unit assumed)

    Controllable:No

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

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Set the enabled status of the MooseObject.

Advanced Parameters

Input Files