www.mooseframework.org
RANFSNormalMechanicalContact.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 "MooseEnum.h"
15 
16 #include "libmesh/coupling_matrix.h"
17 
18 #include <vector>
19 #include <unordered_map>
20 
22 class PenetrationInfo;
23 
24 namespace libMesh
25 {
26 template <typename>
28 }
29 
30 template <>
32 
33 class RANFSNormalMechanicalContact : public NodeFaceConstraint
34 {
35 public:
36  RANFSNormalMechanicalContact(const InputParameters & parameters);
37 
38  bool shouldApply() override;
39  void residualSetup() override;
40  void timestepSetup() override;
41  void initialSetup() override;
42  bool overwriteSlaveResidual() override;
43  void computeSlaveValue(NumericVector<Number> & solution) override;
44 
45 protected:
46  virtual Real computeQpSlaveValue() override;
47 
48  virtual Real computeQpResidual(Moose::ConstraintType type) override;
49  virtual Real computeQpJacobian(Moose::ConstraintJacobianType type) override;
50 
51  const MooseEnum _component;
52  const unsigned int _mesh_dimension;
53  NumericVector<Number> & _residual_copy;
54 
55  unsigned int _largest_component;
56  std::vector<unsigned int> _vars;
57  std::vector<MooseVariable *> _var_objects;
58  std::unordered_map<dof_id_type, Real> _node_to_contact_lm;
59  std::unordered_map<dof_id_type, Real> _node_to_tied_lm;
60  std::unordered_map<dof_id_type, std::vector<const Elem *>> _node_to_master_elem_sequence;
62  Real _tied_lm;
63  PenetrationInfo * _pinfo;
64  std::unordered_map<dof_id_type, const Node *> _ping_pong_slave_node_to_master_node;
65  Real _distance;
66  bool _tie_nodes;
67  unsigned int _master_index;
68  RealVectorValue _res_vec;
69  const Node * _nearest_node;
70  std::vector<std::unordered_map<dof_id_type, Number>> _dof_number_to_value;
71  CouplingMatrix _disp_coupling;
72 };
RANFSNormalMechanicalContact::computeQpJacobian
virtual Real computeQpJacobian(Moose::ConstraintJacobianType type) override
Definition: RANFSNormalMechanicalContact.C:303
validParams< RANFSNormalMechanicalContact >
InputParameters validParams< RANFSNormalMechanicalContact >()
Definition: RANFSNormalMechanicalContact.C:25
RANFSNormalMechanicalContact::RANFSNormalMechanicalContact
RANFSNormalMechanicalContact(const InputParameters &parameters)
Definition: RANFSNormalMechanicalContact.C:42
RANFSNormalMechanicalContact::residualSetup
void residualSetup() override
Definition: RANFSNormalMechanicalContact.C:83
libMesh
Definition: RANFSNormalMechanicalContact.h:24
RANFSNormalMechanicalContact
Definition: RANFSNormalMechanicalContact.h:33
RANFSNormalMechanicalContact::shouldApply
bool shouldApply() override
Definition: RANFSNormalMechanicalContact.C:100
RANFSNormalMechanicalContact::_node_to_tied_lm
std::unordered_map< dof_id_type, Real > _node_to_tied_lm
Definition: RANFSNormalMechanicalContact.h:59
RANFSNormalMechanicalContact::_largest_component
unsigned int _largest_component
Definition: RANFSNormalMechanicalContact.h:55
RANFSNormalMechanicalContact::_tied_lm
Real _tied_lm
Definition: RANFSNormalMechanicalContact.h:62
RANFSNormalMechanicalContact::_contact_lm
Real _contact_lm
Definition: RANFSNormalMechanicalContact.h:61
RANFSNormalMechanicalContact::_disp_coupling
CouplingMatrix _disp_coupling
Definition: RANFSNormalMechanicalContact.h:71
libMesh::NumericVector
Definition: RANFSNormalMechanicalContact.h:27
RANFSNormalMechanicalContact::computeSlaveValue
void computeSlaveValue(NumericVector< Number > &solution) override
Definition: RANFSNormalMechanicalContact.C:414
RANFSNormalMechanicalContact::_mesh_dimension
const unsigned int _mesh_dimension
Definition: RANFSNormalMechanicalContact.h:52
RANFSNormalMechanicalContact::_var_objects
std::vector< MooseVariable * > _var_objects
Definition: RANFSNormalMechanicalContact.h:57
RANFSNormalMechanicalContact::initialSetup
void initialSetup() override
Definition: RANFSNormalMechanicalContact.C:66
RANFSNormalMechanicalContact::_residual_copy
NumericVector< Number > & _residual_copy
Definition: RANFSNormalMechanicalContact.h:53
RANFSNormalMechanicalContact::_master_index
unsigned int _master_index
Definition: RANFSNormalMechanicalContact.h:67
RANFSNormalMechanicalContact::computeQpResidual
virtual Real computeQpResidual(Moose::ConstraintType type) override
Definition: RANFSNormalMechanicalContact.C:259
RANFSNormalMechanicalContact::_vars
std::vector< unsigned int > _vars
Definition: RANFSNormalMechanicalContact.h:56
RANFSNormalMechanicalContact::_res_vec
RealVectorValue _res_vec
Definition: RANFSNormalMechanicalContact.h:68
RANFSNormalMechanicalContact::timestepSetup
void timestepSetup() override
Definition: RANFSNormalMechanicalContact.C:76
RANFSNormalMechanicalContact::_node_to_master_elem_sequence
std::unordered_map< dof_id_type, std::vector< const Elem * > > _node_to_master_elem_sequence
Definition: RANFSNormalMechanicalContact.h:60
RANFSNormalMechanicalContact::_node_to_contact_lm
std::unordered_map< dof_id_type, Real > _node_to_contact_lm
Definition: RANFSNormalMechanicalContact.h:58
RANFSNormalMechanicalContact::_distance
Real _distance
Definition: RANFSNormalMechanicalContact.h:65
RANFSNormalMechanicalContact::computeQpSlaveValue
virtual Real computeQpSlaveValue() override
Definition: RANFSNormalMechanicalContact.C:419
RANFSNormalMechanicalContact::overwriteSlaveResidual
bool overwriteSlaveResidual() override
Definition: RANFSNormalMechanicalContact.C:91
RANFSNormalMechanicalContact::_dof_number_to_value
std::vector< std::unordered_map< dof_id_type, Number > > _dof_number_to_value
Definition: RANFSNormalMechanicalContact.h:70
RANFSNormalMechanicalContact::_nearest_node
const Node * _nearest_node
Definition: RANFSNormalMechanicalContact.h:69
RANFSNormalMechanicalContact::_pinfo
PenetrationInfo * _pinfo
Definition: RANFSNormalMechanicalContact.h:63
RANFSNormalMechanicalContact::_ping_pong_slave_node_to_master_node
std::unordered_map< dof_id_type, const Node * > _ping_pong_slave_node_to_master_node
Definition: RANFSNormalMechanicalContact.h:64
RANFSNormalMechanicalContact::_component
const MooseEnum _component
Definition: RANFSNormalMechanicalContact.h:51
RANFSNormalMechanicalContact::_tie_nodes
bool _tie_nodes
Definition: RANFSNormalMechanicalContact.h:66