www.mooseframework.org
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
RANFSTieNode Class Reference

#include <RANFSTieNode.h>

Inheritance diagram for RANFSTieNode:
[legend]

Public Member Functions

 RANFSTieNode (const InputParameters &parameters)
 
bool shouldApply () override
 
void residualSetup () override
 
bool overwriteSlaveResidual () override
 
void computeSlaveValue (NumericVector< Number > &solution) override
 

Protected Member Functions

virtual Real computeQpSlaveValue () override
 
virtual Real computeQpResidual (Moose::ConstraintType type) override
 
virtual Real computeQpJacobian (Moose::ConstraintJacobianType type) override
 

Protected Attributes

const MooseEnum _component
 
const unsigned int _mesh_dimension
 
NumericVector< Number > & _residual_copy
 
std::vector< unsigned int > _vars
 
std::vector< MooseVariable * > _var_objects
 
Real _lagrange_multiplier
 
const Node * _nearest_node
 
std::unordered_map< dof_id_type, Real > _node_to_lm
 
dof_id_type _master_index
 
std::unordered_map< dof_id_type, Number > _dof_number_to_value
 

Detailed Description

Definition at line 31 of file RANFSTieNode.h.

Constructor & Destructor Documentation

◆ RANFSTieNode()

RANFSTieNode::RANFSTieNode ( const InputParameters &  parameters)

Definition at line 38 of file RANFSTieNode.C.

39  : NodeFaceConstraint(parameters),
40  _component(getParam<MooseEnum>("component")),
41  _mesh_dimension(_mesh.dimension()),
42  _residual_copy(_sys.residualGhosted())
43 {
44  // modern parameter scheme for displacements
45  for (unsigned int i = 0; i < coupledComponents("displacements"); ++i)
46  {
47  _vars.push_back(coupled("displacements", i));
48  _var_objects.push_back(getVar("displacements", i));
49  }
50 
51  if (_vars.size() != _mesh_dimension)
52  mooseError("The number of displacement variables does not match the mesh dimension!");
53 }

Member Function Documentation

◆ computeQpJacobian()

Real RANFSTieNode::computeQpJacobian ( Moose::ConstraintJacobianType  type)
overrideprotectedvirtual

Definition at line 134 of file RANFSTieNode.C.

135 {
136  switch (type)
137  {
138  case Moose::ConstraintJacobianType::SlaveSlave:
139  return _phi_slave[_j][_qp];
140 
141  case Moose::ConstraintJacobianType::SlaveMaster:
142  if (_master_index == _j)
143  return -1;
144  else
145  return 0;
146 
147  case Moose::ConstraintJacobianType::MasterSlave:
148  if (_i == _master_index)
149  {
150  mooseAssert(_dof_number_to_value.find(_connected_dof_indices[_j]) !=
151  _dof_number_to_value.end(),
152  "The connected dof index is not found in the _dof_number_to_value container. "
153  "This must mean that insufficient sparsity was allocated");
154  return _dof_number_to_value[_connected_dof_indices[_j]];
155  }
156  else
157  return 0;
158 
159  default:
160  return 0;
161  }
162 }

◆ computeQpResidual()

Real RANFSTieNode::computeQpResidual ( Moose::ConstraintType  type)
overrideprotectedvirtual

Definition at line 112 of file RANFSTieNode.C.

113 {
114  switch (type)
115  {
116  case Moose::ConstraintType::Slave:
117  return (*_current_node - *_nearest_node)(_component);
118 
119  case Moose::ConstraintType::Master:
120  {
121  if (_i == _master_index)
122  return _lagrange_multiplier;
123 
124  else
125  return 0;
126  }
127 
128  default:
129  return 0;
130  }
131 }

◆ computeQpSlaveValue()

Real RANFSTieNode::computeQpSlaveValue ( )
overrideprotectedvirtual

Definition at line 170 of file RANFSTieNode.C.

171 {
172  mooseError("We overrode commputeSlaveValue so computeQpSlaveValue should never get called");
173 }

◆ computeSlaveValue()

void RANFSTieNode::computeSlaveValue ( NumericVector< Number > &  solution)
override

Definition at line 165 of file RANFSTieNode.C.

166 {
167 }

◆ overwriteSlaveResidual()

bool RANFSTieNode::overwriteSlaveResidual ( )
override

Definition at line 62 of file RANFSTieNode.C.

63 {
64  return _nearest_node;
65 }

◆ residualSetup()

void RANFSTieNode::residualSetup ( )
override

Definition at line 56 of file RANFSTieNode.C.

57 {
58  _node_to_lm.clear();
59 }

◆ shouldApply()

bool RANFSTieNode::shouldApply ( )
override

Definition at line 68 of file RANFSTieNode.C.

69 {
70  auto & nearest_node_loc = _penetration_locator._nearest_node;
71  _nearest_node = nearest_node_loc.nearestNode(_current_node->id());
72  if (_nearest_node)
73  {
74  auto slave_dof_number = _current_node->dof_number(0, _vars[_component], 0);
75  // We overwrite the slave residual so we cannot use the residual
76  // copy for determining the Lagrange multiplier when computing the Jacobian
77  if (!_subproblem.currentlyComputingJacobian())
78  _node_to_lm.insert(std::make_pair(_current_node->id(),
79  _residual_copy(slave_dof_number) /
80  _var_objects[_component]->scalingFactor()));
81  else
82  {
83  std::vector<dof_id_type> master_cols;
84  std::vector<Number> master_values;
85 
86  _jacobian->get_row(slave_dof_number, master_cols, master_values);
87  mooseAssert(master_cols.size() == master_values.size(),
88  "The size of the dof container and value container are different");
89 
90  _dof_number_to_value.clear();
91 
92  for (MooseIndex(master_cols) i = 0; i < master_cols.size(); ++i)
93  _dof_number_to_value.insert(
94  std::make_pair(master_cols[i], master_values[i] / _var.scalingFactor()));
95  }
96 
97  mooseAssert(_node_to_lm.find(_current_node->id()) != _node_to_lm.end(),
98  "The node " << _current_node->id() << " should map to a lagrange multiplier");
99  _lagrange_multiplier = _node_to_lm[_current_node->id()];
100 
101  _master_index = _current_master->get_node_index(_nearest_node);
102  mooseAssert(_master_index != libMesh::invalid_uint,
103  "nearest node not a node on the current master element");
104 
105  return true;
106  }
107 
108  return false;
109 }

Member Data Documentation

◆ _component

const MooseEnum RANFSTieNode::_component
protected

Definition at line 47 of file RANFSTieNode.h.

Referenced by computeQpResidual(), and shouldApply().

◆ _dof_number_to_value

std::unordered_map<dof_id_type, Number> RANFSTieNode::_dof_number_to_value
protected

Definition at line 58 of file RANFSTieNode.h.

Referenced by computeQpJacobian(), and shouldApply().

◆ _lagrange_multiplier

Real RANFSTieNode::_lagrange_multiplier
protected

Definition at line 53 of file RANFSTieNode.h.

Referenced by computeQpResidual(), and shouldApply().

◆ _master_index

dof_id_type RANFSTieNode::_master_index
protected

Definition at line 56 of file RANFSTieNode.h.

Referenced by computeQpJacobian(), computeQpResidual(), and shouldApply().

◆ _mesh_dimension

const unsigned int RANFSTieNode::_mesh_dimension
protected

Definition at line 48 of file RANFSTieNode.h.

Referenced by RANFSTieNode().

◆ _nearest_node

const Node* RANFSTieNode::_nearest_node
protected

Definition at line 54 of file RANFSTieNode.h.

Referenced by computeQpResidual(), overwriteSlaveResidual(), and shouldApply().

◆ _node_to_lm

std::unordered_map<dof_id_type, Real> RANFSTieNode::_node_to_lm
protected

Definition at line 55 of file RANFSTieNode.h.

Referenced by residualSetup(), and shouldApply().

◆ _residual_copy

NumericVector<Number>& RANFSTieNode::_residual_copy
protected

Definition at line 49 of file RANFSTieNode.h.

Referenced by shouldApply().

◆ _var_objects

std::vector<MooseVariable *> RANFSTieNode::_var_objects
protected

Definition at line 52 of file RANFSTieNode.h.

Referenced by RANFSTieNode(), and shouldApply().

◆ _vars

std::vector<unsigned int> RANFSTieNode::_vars
protected

Definition at line 51 of file RANFSTieNode.h.

Referenced by RANFSTieNode(), and shouldApply().


The documentation for this class was generated from the following files:
RANFSTieNode::_master_index
dof_id_type _master_index
Definition: RANFSTieNode.h:56
RANFSTieNode::_mesh_dimension
const unsigned int _mesh_dimension
Definition: RANFSTieNode.h:48
RANFSTieNode::_node_to_lm
std::unordered_map< dof_id_type, Real > _node_to_lm
Definition: RANFSTieNode.h:55
RANFSTieNode::_residual_copy
NumericVector< Number > & _residual_copy
Definition: RANFSTieNode.h:49
RANFSTieNode::_vars
std::vector< unsigned int > _vars
Definition: RANFSTieNode.h:51
RANFSTieNode::_var_objects
std::vector< MooseVariable * > _var_objects
Definition: RANFSTieNode.h:52
RANFSTieNode::_lagrange_multiplier
Real _lagrange_multiplier
Definition: RANFSTieNode.h:53
RANFSTieNode::_nearest_node
const Node * _nearest_node
Definition: RANFSTieNode.h:54
RANFSTieNode::_dof_number_to_value
std::unordered_map< dof_id_type, Number > _dof_number_to_value
Definition: RANFSTieNode.h:58
RANFSTieNode::_component
const MooseEnum _component
Definition: RANFSTieNode.h:47