www.mooseframework.org
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
NormalMortarLMMechanicalContact< compute_stage > Class Template Reference

#include <NormalMortarLMMechanicalContact.h>

Inheritance diagram for NormalMortarLMMechanicalContact< compute_stage >:
[legend]

Public Member Functions

 NormalMortarLMMechanicalContact (const InputParameters &parameters)
 

Protected Member Functions

ADReal computeQpResidual (Moose::MortarType) final
 
template<>
Real computeQpResidual (Moose::MortarType mortar_type)
 
template<>
DualReal computeQpResidual (Moose::MortarType mortar_type)
 

Protected Attributes

const MooseVariableFE< Real > * _slave_disp_y
 
const MooseVariableFE< Real > * _master_disp_y
 
bool _computing_gap_dependence
 
const ADVariableValue * _slave_disp_y_sln
 
const ADVariableValue * _master_disp_y_sln
 
const Real _epsilon
 
MooseEnum _ncp_type
 
 usingMortarConstraintMembers
 

Detailed Description

template<ComputeStage compute_stage>
class NormalMortarLMMechanicalContact< compute_stage >

Definition at line 15 of file NormalMortarLMMechanicalContact.h.

Constructor & Destructor Documentation

◆ NormalMortarLMMechanicalContact()

template<ComputeStage compute_stage>
NormalMortarLMMechanicalContact< compute_stage >::NormalMortarLMMechanicalContact ( const InputParameters &  parameters)

Definition at line 29 of file NormalMortarLMMechanicalContact.C.

31  : ADMortarConstraint<compute_stage>(parameters),
32  _slave_disp_y(isParamValid("slave_disp_y") ? &this->_subproblem.getStandardVariable(
33  _tid, parameters.getMooseType("slave_disp_y"))
34  : nullptr),
36  isParamValid("master_disp_y")
37  ? &this->_subproblem.getStandardVariable(_tid, parameters.getMooseType("master_disp_y"))
38  : isParamValid("slave_disp_y") ? &this->_subproblem.getStandardVariable(
39  _tid, parameters.getMooseType("slave_disp_y"))
40  : nullptr),
42  _slave_disp_y_sln(nullptr),
43  _master_disp_y_sln(nullptr),
44  _epsilon(std::numeric_limits<Real>::epsilon()),
45  _ncp_type(getParam<MooseEnum>("ncp_function_type"))
46 {
47  if (_slave_disp_y)
48  {
49  mooseAssert(_master_disp_y,
50  "It doesn't make any sense that we have a slave displacement variable and not a "
51  "master displacement variable");
53  _slave_disp_y_sln = &_slave_disp_y->template adSln<compute_stage>();
54  _master_disp_y_sln = &_master_disp_y->template adSlnNeighbor<compute_stage>();
55  }
56 }

Member Function Documentation

◆ computeQpResidual() [1/3]

template<>
Real NormalMortarLMMechanicalContact< RESIDUAL >::computeQpResidual ( Moose::MortarType  mortar_type)
protected

Definition at line 60 of file NormalMortarLMMechanicalContact.C.

61 {
62  switch (mortar_type)
63  {
64  case Moose::MortarType::Lower:
65  {
66  if (_has_master)
67  {
68  auto gap_vec = _phys_points_master[_qp] - _phys_points_slave[_qp];
69  auto gap = gap_vec * _normals[_qp];
70 
71  const auto & a = _lambda[_qp];
72  const auto & b = gap;
73 
74  Real fb_function;
75  if (_ncp_type == "fb")
76  // The FB function (in its pure form) is not differentiable at (0, 0) but if we add some
77  // constant > 0 into the root function, then it is
78  fb_function = a + b - std::sqrt(a * a + b * b + _epsilon);
79  else
80  fb_function = std::min(a, b);
81 
82  return _test[_i][_qp] * fb_function;
83  }
84  else
85  return _test[_i][_qp] * _lambda[_qp];
86  }
87 
88  default:
89  return 0;
90  }
91 }

◆ computeQpResidual() [2/3]

template<>
DualReal NormalMortarLMMechanicalContact< JACOBIAN >::computeQpResidual ( Moose::MortarType  mortar_type)
protected

Definition at line 95 of file NormalMortarLMMechanicalContact.C.

96 {
97  switch (mortar_type)
98  {
99  case Moose::MortarType::Lower:
100  {
101  if (_has_master)
102  {
103  DualRealVectorValue gap_vec = _phys_points_master[_qp] - _phys_points_slave[_qp];
105  {
106  // Here we're assuming that the user provided the x-component as the slave/master
107  // variable!
108  gap_vec(0).derivatives() = _u_master[_qp].derivatives() - _u_slave[_qp].derivatives();
109  gap_vec(1).derivatives() =
110  (*_master_disp_y_sln)[_qp].derivatives() - (*_slave_disp_y_sln)[_qp].derivatives();
111  }
112 
113  auto gap = gap_vec * _normals[_qp];
114 
115  const auto & a = _lambda[_qp];
116  const auto & b = gap;
117 
118  DualReal fb_function;
119  if (_ncp_type == "fb")
120  // The FB function (in its pure form) is not differentiable at (0, 0) but if we add some
121  // constant > 0 into the root function, then it is
122  fb_function = a + b - std::sqrt(a * a + b * b + _epsilon);
123  else
124  fb_function = std::min(a, b);
125 
126  return _test[_i][_qp] * fb_function;
127  }
128  else
129  return _test[_i][_qp] * _lambda[_qp];
130  }
131 
132  default:
133  return 0;
134  }
135 }

◆ computeQpResidual() [3/3]

template<ComputeStage compute_stage>
ADReal NormalMortarLMMechanicalContact< compute_stage >::computeQpResidual ( Moose::MortarType  )
finalprotected

Member Data Documentation

◆ _computing_gap_dependence

template<ComputeStage compute_stage>
bool NormalMortarLMMechanicalContact< compute_stage >::_computing_gap_dependence
protected

◆ _epsilon

template<ComputeStage compute_stage>
const Real NormalMortarLMMechanicalContact< compute_stage >::_epsilon
protected

Definition at line 36 of file NormalMortarLMMechanicalContact.h.

◆ _master_disp_y

template<ComputeStage compute_stage>
const MooseVariableFE<Real>* NormalMortarLMMechanicalContact< compute_stage >::_master_disp_y
protected

◆ _master_disp_y_sln

template<ComputeStage compute_stage>
const ADVariableValue* NormalMortarLMMechanicalContact< compute_stage >::_master_disp_y_sln
protected

◆ _ncp_type

template<ComputeStage compute_stage>
MooseEnum NormalMortarLMMechanicalContact< compute_stage >::_ncp_type
protected

Definition at line 38 of file NormalMortarLMMechanicalContact.h.

◆ _slave_disp_y

template<ComputeStage compute_stage>
const MooseVariableFE<Real>* NormalMortarLMMechanicalContact< compute_stage >::_slave_disp_y
protected

◆ _slave_disp_y_sln

template<ComputeStage compute_stage>
const ADVariableValue* NormalMortarLMMechanicalContact< compute_stage >::_slave_disp_y_sln
protected

◆ usingMortarConstraintMembers

template<ComputeStage compute_stage>
NormalMortarLMMechanicalContact< compute_stage >::usingMortarConstraintMembers
protected

Definition at line 40 of file NormalMortarLMMechanicalContact.h.


The documentation for this class was generated from the following files:
NormalMortarLMMechanicalContact::_slave_disp_y
const MooseVariableFE< Real > * _slave_disp_y
Definition: NormalMortarLMMechanicalContact.h:28
NormalMortarLMMechanicalContact::_computing_gap_dependence
bool _computing_gap_dependence
Definition: NormalMortarLMMechanicalContact.h:31
NormalMortarLMMechanicalContact::_master_disp_y_sln
const ADVariableValue * _master_disp_y_sln
Definition: NormalMortarLMMechanicalContact.h:34
NormalMortarLMMechanicalContact::_ncp_type
MooseEnum _ncp_type
Definition: NormalMortarLMMechanicalContact.h:38
NormalMortarLMMechanicalContact::_master_disp_y
const MooseVariableFE< Real > * _master_disp_y
Definition: NormalMortarLMMechanicalContact.h:29
NormalMortarLMMechanicalContact::_epsilon
const Real _epsilon
Definition: NormalMortarLMMechanicalContact.h:36
NormalMortarLMMechanicalContact::_slave_disp_y_sln
const ADVariableValue * _slave_disp_y_sln
Definition: NormalMortarLMMechanicalContact.h:33