www.mooseframework.org
MechanicalContactConstraint.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 // MOOSE includes
13 #include "NodeFaceConstraint.h"
14 #include "PenetrationLocator.h"
15 
16 // Forward Declarations
19 enum class ContactModel;
20 enum class ContactFormulation;
21 
22 template <>
24 
29 class MechanicalContactConstraint : public NodeFaceConstraint
30 {
31 public:
32  MechanicalContactConstraint(const InputParameters & parameters);
33 
34  virtual void timestepSetup() override;
35  virtual void jacobianSetup() override;
36  virtual void residualEnd() override;
37 
39 
40  virtual void updateAugmentedLagrangianMultiplier(bool beginning_of_step = false);
41 
42  virtual void updateContactStatefulData(bool beginning_of_step = false);
43 
44  virtual Real computeQpSlaveValue() override;
45 
46  virtual Real computeQpResidual(Moose::ConstraintType type) override;
47 
51  virtual void computeJacobian() override;
52 
57  virtual void computeOffDiagJacobian(unsigned int jvar) override;
58 
59  virtual Real computeQpJacobian(Moose::ConstraintJacobianType type) override;
60 
66  virtual Real computeQpOffDiagJacobian(Moose::ConstraintJacobianType type,
67  unsigned int jvar) override;
68 
74  virtual void getConnectedDofIndices(unsigned int var_num) override;
75 
83  bool getCoupledVarComponent(unsigned int var_num, unsigned int & component);
84 
85  virtual bool addCouplingEntriesToJacobian() override { return _master_slave_jacobian; }
86 
87  bool shouldApply() override;
88  void computeContactForce(PenetrationInfo * pinfo, bool update_contact_set);
89 
90 protected:
91  MooseSharedPointer<DisplacedProblem> _displaced_problem;
92  Real nodalArea(PenetrationInfo & pinfo);
93  Real getPenalty(PenetrationInfo & pinfo);
94  Real getTangentialPenalty(PenetrationInfo & pinfo);
95 
96  const unsigned int _component;
99  const bool _normalize_penalty;
100 
101  const Real _penalty;
104  const Real _tension_release;
105  const Real _capture_tolerance;
106  const unsigned int _stick_lock_iterations;
109 
110  NumericVector<Number> & _residual_copy;
111  // std::map<Point, PenetrationInfo *> _point_to_info;
112 
113  const unsigned int _mesh_dimension;
114 
115  std::vector<unsigned int> _vars;
116  std::vector<MooseVariable *> _var_objects;
117 
118  MooseVariable * _nodal_area_var;
119  SystemBase & _aux_system;
120  const NumericVector<Number> * _aux_solution;
121 
128 
135 
137  std::set<dof_id_type> _current_contact_state;
138  std::set<dof_id_type> _old_contact_state;
139 
141  static Threads::spin_mutex _contact_set_mutex;
142 };
MechanicalContactConstraint::_aux_solution
const NumericVector< Number > * _aux_solution
Definition: MechanicalContactConstraint.h:120
MechanicalContactConstraint
A MechanicalContactConstraint forces the value of a variable to be the same on both sides of an inter...
Definition: MechanicalContactConstraint.h:29
ContactModel
ContactModel
Definition: ContactAction.h:16
MechanicalContactConstraint::_current_contact_state
std::set< dof_id_type > _current_contact_state
Definition: MechanicalContactConstraint.h:137
MechanicalContactConstraint::computeQpResidual
virtual Real computeQpResidual(Moose::ConstraintType type) override
Definition: MechanicalContactConstraint.C:788
MechanicalContactConstraint::computeJacobian
virtual void computeJacobian() override
Computes the jacobian for the current element.
Definition: MechanicalContactConstraint.C:1684
MechanicalContactConstraint::shouldApply
bool shouldApply() override
Definition: MechanicalContactConstraint.C:462
MechanicalContactConstraint::_capture_tolerance
const Real _capture_tolerance
Definition: MechanicalContactConstraint.h:105
MechanicalContactConstraint::computeOffDiagJacobian
virtual void computeOffDiagJacobian(unsigned int jvar) override
Compute off-diagonal Jacobian entries.
Definition: MechanicalContactConstraint.C:1721
MechanicalContactConstraint::MechanicalContactConstraint
MechanicalContactConstraint(const InputParameters &parameters)
Definition: MechanicalContactConstraint.C:110
MechanicalContactConstraint::getConnectedDofIndices
virtual void getConnectedDofIndices(unsigned int var_num) override
Get the dof indices of the nodes connected to the slave node for a specific variable.
Definition: MechanicalContactConstraint.C:1757
MechanicalContactConstraint::updateAugmentedLagrangianMultiplier
virtual void updateAugmentedLagrangianMultiplier(bool beginning_of_step=false)
Definition: MechanicalContactConstraint.C:254
MechanicalContactConstraint::_al_incremental_slip_tolerance
Real _al_incremental_slip_tolerance
The tolerance of the incremental slip for augmented Lagrangian method.
Definition: MechanicalContactConstraint.h:132
MechanicalContactConstraint::_vars
std::vector< unsigned int > _vars
Definition: MechanicalContactConstraint.h:115
MechanicalContactConstraint::_master_slave_jacobian
const bool _master_slave_jacobian
Whether to include coupling between the master and slave nodes in the Jacobian.
Definition: MechanicalContactConstraint.h:123
MechanicalContactConstraint::getTangentialPenalty
Real getTangentialPenalty(PenetrationInfo &pinfo)
Definition: MechanicalContactConstraint.C:1674
MechanicalContactConstraint::getPenalty
Real getPenalty(PenetrationInfo &pinfo)
Definition: MechanicalContactConstraint.C:1664
MechanicalContactConstraint::_al_frictional_force_tolerance
Real _al_frictional_force_tolerance
The tolerance of the frictional force for augmented Lagrangian method.
Definition: MechanicalContactConstraint.h:134
MechanicalContactConstraint::_contact_set_mutex
static Threads::spin_mutex _contact_set_mutex
Definition: MechanicalContactConstraint.h:141
ContactLineSearchBase
This class implements a custom line search for use with mechanical contact.
Definition: ContactLineSearchBase.h:38
MechanicalContactConstraint::_connected_slave_nodes_jacobian
const bool _connected_slave_nodes_jacobian
Whether to include coupling terms with the nodes connected to the slave nodes in the Jacobian.
Definition: MechanicalContactConstraint.h:125
MechanicalContactConstraint::_old_contact_state
std::set< dof_id_type > _old_contact_state
Definition: MechanicalContactConstraint.h:138
MechanicalContactConstraint::_displaced_problem
MooseSharedPointer< DisplacedProblem > _displaced_problem
Definition: MechanicalContactConstraint.h:91
MechanicalContactConstraint::computeContactForce
void computeContactForce(PenetrationInfo *pinfo, bool update_contact_set)
Definition: MechanicalContactConstraint.C:496
MechanicalContactConstraint::_print_contact_nodes
const bool _print_contact_nodes
Definition: MechanicalContactConstraint.h:140
MechanicalContactConstraint::_component
const unsigned int _component
Definition: MechanicalContactConstraint.h:96
MechanicalContactConstraint::_penalty_tangential
Real _penalty_tangential
Definition: MechanicalContactConstraint.h:102
MechanicalContactConstraint::jacobianSetup
virtual void jacobianSetup() override
Definition: MechanicalContactConstraint.C:243
MechanicalContactConstraint::_stick_lock_iterations
const unsigned int _stick_lock_iterations
Definition: MechanicalContactConstraint.h:106
MechanicalContactConstraint::residualEnd
virtual void residualEnd() override
Definition: MechanicalContactConstraint.C:1809
MechanicalContactConstraint::_model
const ContactModel _model
Definition: MechanicalContactConstraint.h:97
MechanicalContactConstraint::_mesh_dimension
const unsigned int _mesh_dimension
Definition: MechanicalContactConstraint.h:113
MechanicalContactConstraint::addCouplingEntriesToJacobian
virtual bool addCouplingEntriesToJacobian() override
Definition: MechanicalContactConstraint.h:85
MechanicalContactConstraint::computeQpJacobian
virtual Real computeQpJacobian(Moose::ConstraintJacobianType type) override
Definition: MechanicalContactConstraint.C:835
MechanicalContactConstraint::nodalArea
Real nodalArea(PenetrationInfo &pinfo)
Definition: MechanicalContactConstraint.C:1646
MechanicalContactConstraint::_penalty
const Real _penalty
Definition: MechanicalContactConstraint.h:101
MechanicalContactConstraint::AugmentedLagrangianContactConverged
virtual bool AugmentedLagrangianContactConverged()
Definition: MechanicalContactConstraint.C:330
MechanicalContactConstraint::updateContactStatefulData
virtual void updateContactStatefulData(bool beginning_of_step=false)
Definition: MechanicalContactConstraint.C:423
MaterialTensorCalculatorTools::component
Real component(const SymmTensor &symm_tensor, unsigned int index)
Definition: MaterialTensorCalculatorTools.C:16
MechanicalContactConstraint::_stick_unlock_factor
const Real _stick_unlock_factor
Definition: MechanicalContactConstraint.h:107
ContactFormulation
ContactFormulation
Definition: ContactAction.h:23
MechanicalContactConstraint::_aux_system
SystemBase & _aux_system
Definition: MechanicalContactConstraint.h:119
MechanicalContactConstraint::_formulation
const ContactFormulation _formulation
Definition: MechanicalContactConstraint.h:98
MechanicalContactConstraint::_al_penetration_tolerance
Real _al_penetration_tolerance
The tolerance of the penetration for augmented Lagrangian method.
Definition: MechanicalContactConstraint.h:130
MechanicalContactConstraint::_normalize_penalty
const bool _normalize_penalty
Definition: MechanicalContactConstraint.h:99
MechanicalContactConstraint::_update_stateful_data
bool _update_stateful_data
Definition: MechanicalContactConstraint.h:108
MechanicalContactConstraint::_residual_copy
NumericVector< Number > & _residual_copy
Definition: MechanicalContactConstraint.h:110
MechanicalContactConstraint::computeQpSlaveValue
virtual Real computeQpSlaveValue() override
Definition: MechanicalContactConstraint.C:782
MechanicalContactConstraint::_friction_coefficient
const Real _friction_coefficient
Definition: MechanicalContactConstraint.h:103
MechanicalContactConstraint::_tension_release
const Real _tension_release
Definition: MechanicalContactConstraint.h:104
validParams< MechanicalContactConstraint >
InputParameters validParams< MechanicalContactConstraint >()
Definition: MechanicalContactConstraint.C:33
MechanicalContactConstraint::_contact_linesearch
ContactLineSearchBase * _contact_linesearch
Definition: MechanicalContactConstraint.h:136
MechanicalContactConstraint::getCoupledVarComponent
bool getCoupledVarComponent(unsigned int var_num, unsigned int &component)
Determine whether the coupled variable is one of the displacement variables, and find its component.
Definition: MechanicalContactConstraint.C:1792
MechanicalContactConstraint::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(Moose::ConstraintJacobianType type, unsigned int jvar) override
Compute off-diagonal Jacobian entries.
Definition: MechanicalContactConstraint.C:1286
MechanicalContactConstraint::timestepSetup
virtual void timestepSetup() override
Definition: MechanicalContactConstraint.C:227
MechanicalContactConstraint::_non_displacement_vars_jacobian
const bool _non_displacement_vars_jacobian
Whether to include coupling terms with non-displacement variables in the Jacobian.
Definition: MechanicalContactConstraint.h:127
MechanicalContactConstraint::_nodal_area_var
MooseVariable * _nodal_area_var
Definition: MechanicalContactConstraint.h:118
MechanicalContactConstraint::_var_objects
std::vector< MooseVariable * > _var_objects
Definition: MechanicalContactConstraint.h:116