PenaltyWeightedGapUserObject

Description

The PenaltyWeightedGapUserObject object computes a normal weighted gap by looping over mortar segments and penalizes it by a penalty factor to create a distributed generalized force that can be directly applied as an interface action on both sides of the contact interface. The weighted gap that is acted on by the penalty factor contains the scaling associated with the mortar segments. A large enough value of the penalty parameter is required for the simulation to yield acceptable interpenetration values. A value too small is likely to underpredict the stress states of the bodies into contact.

The generalized force generated by this object contains Jacobian information as a consequence of using automatic differentiation objects. The normal contact pressure obtained this way is directly applied on the contacting surfaces by NormalMortarMechanicalContact. That is, the contact pressure computed by this object serves a purpose analogous to a Lagrange multiplier when exact enforcement is used (see ComputeWeightedGapLMMechanicalContact). This object is set up automatically when using the ContactAction.

This object is built from within the contact action when the formulation MORTAR_PENALTY and the model FRICTIONLESS is selected. The action sets the use_physical_gap parameter to true, which allows the user to select a normal contact penalty parameter on the order of the stiffness of the materials into contact. Also, to ensure solution stability, dual bases (i.e. use_dual = true) are employed by default to interpolate the contact traction when using the contact action.

An augmented Lagrange (AL) approach can be used to enforce the contact constraints to a user-prescribed tolerance. That tolerance parameter is the normal gap distance (distance to exact enforcement if in contact) for normal contact. The AL approach solves the original MOOSE problem, in which contact is enforced using a pure penalty approach, taking the necessary nonlinear iterations and updates "fixed" Lagrange multipliers in an outer loop. This process repeats until the contact-related tolerances are met. The "fixed" Lagrange multipliers represent accumulated normal tractions over the AL iterations (see (Wriggers, 2006)), thereby gradually fulfilling the contact constraints. Usage of AL with this mortar constraint allows for, simultaneously 1. Having a consistent contact formulation, 2. Enforcement of the contact constraint to a user-prescribed tolerance (analogous to Lagrange multiplier enforcement, see ComputeWeightedGapLMMechanicalContact), and 3. Keeps the system's condition number as if mechanical contact is not present; as long as the initial penalty coefficients are selected to be on the order of the material stiffnesses.

schooltip:Augmented Lagrange with mortar contact

For the reasons stated above, it is recommended to use an AL approach with the mortar penalty objects.

Example of usage:

[UserObjects<<<{"href": "../../syntax/UserObjects/index.html"}>>>]
  [friction_uo]
    type = PenaltyWeightedGapUserObject<<<{"description": "Computes the mortar normal contact force via a penalty approach.", "href": "PenaltyWeightedGapUserObject.html"}>>>
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = '2'
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = '3'
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = '10000'
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = '10001'
    disp_x<<<{"description": "The x displacement variable"}>>> = disp_x
    disp_y<<<{"description": "The y displacement variable"}>>> = disp_y
    penalty<<<{"description": "The penalty factor"}>>> = 1e7
    penetration_tolerance<<<{"description": "Acceptable penetration distance at which augmented Lagrange iterations can be stopped"}>>> = 1e-12
    use_physical_gap<<<{"description": "Whether to use the physical normal gap (not scaled by mortar integration) and normalize the penalty coefficient with a representative lower-dimensional volume assigned to the node in the contacting boundary. This parameter is defaulted to 'true' in the contact action."}>>> = true
  []
[]
(moose/modules/contact/test/tests/pdass_problems/cylinder_friction_penalty_normal_al.i)

which can be combined with an augmented Lagrange problem:

[Problem<<<{"href": "../../syntax/Problem/index.html"}>>>]
  type = AugmentedLagrangianContactFEProblem
  extra_tag_vectors = 'ref'
[]
(moose/modules/contact/test/tests/pdass_problems/cylinder_friction_penalty_normal_al.i)

See below an example of solver options with iterative preconditioners (e.g. algebraic multigrid) in a mortar mechanical contact problem. This solver selection can enable the simulation of very large contact mechanics problems with the more memory efficient iterative procedures:

[Executioner<<<{"href": "../../syntax/Executioner/index.html"}>>>]
  type = Transient
  solve_type = 'NEWTON'

  petsc_options = '-ksp_snes_ew'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = ' 201                hypre    boomeramg      8'

  line_search = 'none'

  nl_abs_tol = 1e-10
  nl_rel_tol = 1e-8
  nl_max_its = 50
  l_tol = 1e-05
  l_abs_tol = 1e-13

  start_time = 0.0
  end_time = 0.2 # 1.0
  dt = 0.1
  dtmin = 0.1

  [Predictor<<<{"href": "../../syntax/Executioner/Predictor/index.html"}>>>]
    type = SimplePredictor
    scale = 1.0
  []

  automatic_scaling = true
  compute_scaling_once = false
  off_diagonals_in_auto_scaling = true
[]
(moose/modules/contact/test/tests/pdass_problems/cylinder_friction_penalty_frictional_al_action_amg.i)

Input Parameters

  • disp_xThe x displacement variable

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

    Unit:(no unit assumed)

    Controllable:No

    Description:The x displacement variable

  • disp_yThe y displacement variable

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

    Unit:(no unit assumed)

    Controllable:No

    Description:The y displacement variable

  • penaltyThe penalty factor

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The penalty factor

  • primary_boundaryThe name of the primary boundary sideset.

    C++ Type:BoundaryName

    Controllable:No

    Description:The name of the primary boundary sideset.

  • primary_subdomainThe name of the primary subdomain.

    C++ Type:SubdomainName

    Controllable:No

    Description:The name of the primary subdomain.

  • secondary_boundaryThe name of the secondary boundary sideset.

    C++ Type:BoundaryName

    Controllable:No

    Description:The name of the secondary boundary sideset.

  • secondary_subdomainThe name of the secondary subdomain.

    C++ Type:SubdomainName

    Controllable:No

    Description:The name of the secondary subdomain.

Required Parameters

  • adaptivity_penalty_normalSIMPLEThe augmented Lagrange update strategy used on the normal penalty coefficient.

    Default:SIMPLE

    C++ Type:MooseEnum

    Options:SIMPLE, BUSSETTA

    Controllable:No

    Description:The augmented Lagrange update strategy used on the normal penalty coefficient.

  • aux_lmAuxiliary variable that is utilized together with the penalty approach to interpolate the resulting contact tractions using dual bases.

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Auxiliary variable that is utilized together with the penalty approach to interpolate the resulting contact tractions using dual bases.

  • correct_edge_droppingFalseWhether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0.

  • debug_meshFalseWhether this constraint is going to enable mortar segment mesh debug information. An exodusfile will be generated if the user sets this flag to true

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether this constraint is going to enable mortar segment mesh debug information. An exodusfile will be generated if the user sets this flag to true

  • disp_zThe z displacement variable

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

    Unit:(no unit assumed)

    Controllable:No

    Description:The z displacement variable

  • ghost_higher_d_neighborsFalseWhether we should ghost higher-dimensional neighbors. This is necessary when we are doing second order mortar with finite volume primal variables, because in order for the method to be second order we must use cell gradients, which couples in the neighbor cells.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether we should ghost higher-dimensional neighbors. This is necessary when we are doing second order mortar with finite volume primal variables, because in order for the method to be second order we must use cell gradients, which couples in the neighbor cells.

  • ghost_point_neighborsFalseWhether we should ghost point neighbors of secondary face elements, and consequently also their mortar interface couples.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether we should ghost point neighbors of secondary face elements, and consequently also their mortar interface couples.

  • interpolate_normalsFalseWhether to interpolate the nodal normals (e.g. classic idea of evaluating field at quadrature points). If this is set to false, then non-interpolated nodal normals will be used, and then the _normals member should be indexed with _i instead of _qp

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to interpolate the nodal normals (e.g. classic idea of evaluating field at quadrature points). If this is set to false, then non-interpolated nodal normals will be used, and then the _normals member should be indexed with _i instead of _qp

  • minimum_projection_angle40Parameter to control which angle (in degrees) is admissible for the creation of mortar segments. If set to a value close to zero, very oblique projections are allowed, which can result in mortar segments solving physics not meaningfully, and overprojection of primary nodes onto the mortar segment mesh in extreme cases. This parameter is mostly intended for mortar mesh debugging purposes in two dimensions.

    Default:40

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Parameter to control which angle (in degrees) is admissible for the creation of mortar segments. If set to a value close to zero, very oblique projections are allowed, which can result in mortar segments solving physics not meaningfully, and overprojection of primary nodes onto the mortar segment mesh in extreme cases. This parameter is mostly intended for mortar mesh debugging purposes in two dimensions.

  • periodicFalseWhether this constraint is going to be used to enforce a periodic condition. This has the effect of changing the normals vector for projection from outward to inward facing

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether this constraint is going to be used to enforce a periodic condition. This has the effect of changing the normals vector for projection from outward to inward facing

  • use_physical_gapFalseWhether to use the physical normal gap (not scaled by mortar integration) and normalize the penalty coefficient with a representative lower-dimensional volume assigned to the node in the contacting boundary. This parameter is defaulted to 'true' in the contact action.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to use the physical normal gap (not scaled by mortar integration) and normalize the penalty coefficient with a representative lower-dimensional volume assigned to the node in the contacting boundary. This parameter is defaulted to 'true' in the contact action.

Optional Parameters

  • allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).

    Default:False

    C++ Type:bool

    Controllable:No

    Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).

  • execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.

    Default:0

    C++ Type:int

    Controllable:No

    Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.

  • force_postauxFalseForces the UserObject to be executed in POSTAUX

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Forces the UserObject to be executed in POSTAUX

  • force_preauxFalseForces the UserObject to be executed in PREAUX

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Forces the UserObject to be executed in PREAUX

  • force_preicFalseForces the UserObject to be executed in PREIC during initial setup

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Forces the UserObject to be executed in PREIC during initial setup

Execution Scheduling Parameters

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

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

    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

    Controllable:Yes

    Description:Set the enabled status of the MooseObject.

  • use_displaced_meshTrueWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.

Advanced Parameters

  • max_penalty_multiplier1000Maximum multiplier applied to penalty factors when adaptivity is used in an augmented Lagrange setting. The penalty factor supplied by the user is used as a reference.

    Default:1000

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Maximum multiplier applied to penalty factors when adaptivity is used in an augmented Lagrange setting. The penalty factor supplied by the user is used as a reference.

  • penalty_multiplier1The penalty growth factor between augmented Lagrange iterations if weighted gap does not get closed fast enough. For frictional simulations, values smaller than 100 are recommended, e.g. 5.

    Default:1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The penalty growth factor between augmented Lagrange iterations if weighted gap does not get closed fast enough. For frictional simulations, values smaller than 100 are recommended, e.g. 5.

  • penetration_toleranceAcceptable penetration distance at which augmented Lagrange iterations can be stopped

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Acceptable penetration distance at which augmented Lagrange iterations can be stopped

Augmented Lagrange Parameters

  • prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.

  • use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

Material Property Retrieval Parameters

References

  1. Peter Wriggers. Computational Contact Mechanics. Springer Berlin Heidelberg, Berlin, Heidelberg, 2006.[BibTeX]