www.mooseframework.org
TorqueReaction.C
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 #include "TorqueReaction.h"
11 
12 // MOOSE includes
13 #include "AuxiliarySystem.h"
14 #include "MooseVariable.h"
15 
16 registerMooseObject("TensorMechanicsApp", TorqueReaction);
17 
19 
20 InputParameters
22 {
23  InputParameters params = NodalPostprocessor::validParams();
24  params.addClassDescription("TorqueReaction calculates the torque in 2D and 3D"
25  "about a user-specified axis of rotation centered"
26  "at a user-specied origin.");
27  params.addRequiredParam<std::vector<AuxVariableName>>("reaction_force_variables",
28  "The reaction variables");
29  params.addParam<RealVectorValue>(
30  "axis_origin", Point(), "Origin of the axis of rotation used to calculate the torque");
31  params.addRequiredParam<RealVectorValue>("direction_vector",
32  "The direction vector of the axis "
33  "of rotation about which the "
34  "calculated torque is calculated");
35  params.set<bool>("use_displaced_mesh") = true;
36  return params;
37 }
38 
39 TorqueReaction::TorqueReaction(const InputParameters & parameters)
40  : NodalPostprocessor(parameters),
41  _aux(_fe_problem.getAuxiliarySystem()),
42  _axis_origin(getParam<RealVectorValue>("axis_origin")),
43  _direction_vector(getParam<RealVectorValue>("direction_vector"))
44 {
45  std::vector<AuxVariableName> reacts =
46  getParam<std::vector<AuxVariableName>>("reaction_force_variables");
47  _nrt = reacts.size();
48 
49  for (unsigned int i = 0; i < _nrt; ++i)
50  _react.push_back(&_aux.getFieldVariable<Real>(_tid, reacts[i]).dofValues());
51 }
52 
53 void
55 {
56  _sum = 0.0;
57 }
58 
59 void
61 {
62  // Tranform the node coordinates into the coordinate system specified by the user
63  Point position = (*_current_node) - _axis_origin;
64 
65  // Determine the component of the vector in the direction of the rotation direction vector
66  Point normal_position_component =
67  position - (position * _direction_vector) / _direction_vector.norm_sq() * _direction_vector;
68 
69  // Define the force vector from the reaction force/ residuals from the stress divergence kernel
70  Real _rz;
71  if (_nrt == 3)
72  _rz = (*_react[2])[_qp];
73  else
74  _rz = 0.0;
75 
76  Point force((*_react[0])[_qp], (*_react[1])[_qp], _rz);
77 
78  // Cross the normal component of the position vector with the force
79  RealVectorValue torque = normal_position_component.cross(force);
80 
81  // Find the component of the torque vector acting along the given axis of rotation direction
82  // vector
83  RealVectorValue parallel_torque_component =
84  (torque * _direction_vector) / _direction_vector.norm_sq() * _direction_vector;
85 
86  // Add the magnitude of the parallel torque component to the sum of the acting torques
87  _sum += parallel_torque_component.norm();
88 }
89 
90 Real
92 {
93  gatherSum(_sum);
94 
95  return _sum;
96 }
97 
98 void
99 TorqueReaction::threadJoin(const UserObject & y)
100 {
101  const TorqueReaction & pps = static_cast<const TorqueReaction &>(y);
102  _sum += pps._sum;
103 }
TorqueReaction::getValue
virtual Real getValue()
Definition: TorqueReaction.C:91
TorqueReaction
Definition: TorqueReaction.h:36
TorqueReaction::_nrt
unsigned int _nrt
Definition: TorqueReaction.h:56
TorqueReaction.h
TorqueReaction::threadJoin
void threadJoin(const UserObject &y)
Definition: TorqueReaction.C:99
registerMooseObject
registerMooseObject("TensorMechanicsApp", TorqueReaction)
TorqueReaction::initialize
virtual void initialize()
Definition: TorqueReaction.C:54
TorqueReaction::_aux
AuxiliarySystem & _aux
Definition: TorqueReaction.h:49
TorqueReaction::_axis_origin
const Point _axis_origin
Definition: TorqueReaction.h:53
TorqueReaction::_direction_vector
const Point _direction_vector
Definition: TorqueReaction.h:54
TorqueReaction::validParams
static InputParameters validParams()
Definition: TorqueReaction.C:21
validParams
InputParameters validParams()
TorqueReaction::_sum
Real _sum
Definition: TorqueReaction.h:58
TorqueReaction::_react
std::vector< const VariableValue * > _react
Definition: TorqueReaction.h:51
TorqueReaction::execute
virtual void execute()
Definition: TorqueReaction.C:60
TorqueReaction::TorqueReaction
TorqueReaction(const InputParameters &parameters)
Definition: TorqueReaction.C:39
defineLegacyParams
defineLegacyParams(TorqueReaction)