www.mooseframework.org
GlobalDisplacementAux.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 "GlobalDisplacementAux.h"
12 
13 // MOOSE includes
14 #include "Assembly.h"
15 #include "SystemBase.h"
16 #include "RankTwoTensor.h"
17 
18 registerMooseObject("TensorMechanicsApp", GlobalDisplacementAux);
19 
21 
22 InputParameters
24 {
25  InputParameters params = AuxKernel::validParams();
26  params.addClassDescription(
27  "AuxKernel to visualize the displacements generated by the global strain tensor");
28  params.addCoupledVar("scalar_global_strain",
29  "Scalar variable providing global strain components");
30  params.addCoupledVar("displacements", "The name of the displacement variables");
31  params.addRequiredParam<unsigned int>("component",
32  "The displacement component to consider for this kernel");
33  params.addParam<bool>(
34  "output_global_displacement", false, "Option to output global displacement only");
35  params.addRequiredParam<UserObjectName>("global_strain_uo",
36  "The name of the GlobalStrainUserObject");
37  params.addParam<Point>("reference_point",
38  Point(0, 0, 0),
39  "The coordinate of the center/fixed point of the simulation");
40 
41  // Default this object to get executed before the displaced mesh update.
42  // This way the AuxVars set by this object can be used as mesh displacements.
43  params.set<ExecFlagEnum>("execute_on") = EXEC_PRE_DISPLACE;
44 
45  return params;
46 }
47 
48 GlobalDisplacementAux::GlobalDisplacementAux(const InputParameters & parameters)
49  : AuxKernel(parameters),
50  _scalar_global_strain(coupledScalarValue("scalar_global_strain")),
51  _component(getParam<unsigned int>("component")),
52  _output_global_disp(getParam<bool>("output_global_displacement")),
53  _pst(getUserObject<GlobalStrainUserObjectInterface>("global_strain_uo")),
54  _periodic_dir(_pst.getPeriodicDirections()),
55  _ref_point(parameters.get<Point>("reference_point")),
56  _dim(_mesh.dimension()),
57  _ndisp(coupledComponents("displacements")),
58  _disp(_ndisp)
59 {
60  if (!isNodal())
61  paramError("variable", "GlobalDisplacementAux must be used on a nodal auxiliary variable");
62 
63  if (_component >= _dim)
64  paramError("component",
65  "The component ",
66  _component,
67  " does not exist for ",
68  _dim,
69  " dimensional problems");
70 
71  for (unsigned int i = 0; i < _ndisp; ++i)
72  _disp[i] = &coupledValue("displacements", i);
73 }
74 
75 Real
77 {
78  RankTwoTensor strain;
79  strain.fillFromScalarVariable(_scalar_global_strain);
80 
81  for (unsigned int dir = 0; dir < _dim; ++dir)
82  if (!_periodic_dir(dir))
83  for (unsigned int var = 0; var < _ndisp; ++var)
84  strain(dir, var) = 0.0;
85 
86  const RealVectorValue & global_disp = strain * ((*_current_node) - _ref_point);
87 
89  return global_disp(_component);
90  else
91  return global_disp(_component) + (*_disp[_component])[_qp];
92 }
GlobalStrainUserObjectInterface
This class provides interface for extracting the periodic directions, residual, and jacobian values f...
Definition: GlobalStrainUserObjectInterface.h:19
GlobalDisplacementAux::_disp
std::vector< const VariableValue * > _disp
Definition: GlobalDisplacementAux.h:45
GlobalDisplacementAux::_ref_point
const Point _ref_point
Definition: GlobalDisplacementAux.h:41
GlobalDisplacementAux::_scalar_global_strain
const VariableValue & _scalar_global_strain
Definition: GlobalDisplacementAux.h:34
GlobalDisplacementAux::computeValue
virtual Real computeValue() override
Definition: GlobalDisplacementAux.C:76
GlobalDisplacementAux.h
GlobalDisplacementAux
Definition: GlobalDisplacementAux.h:24
GlobalDisplacementAux::_ndisp
const unsigned int _ndisp
Definition: GlobalDisplacementAux.h:44
defineLegacyParams
defineLegacyParams(GlobalDisplacementAux)
validParams
InputParameters validParams()
GlobalDisplacementAux::GlobalDisplacementAux
GlobalDisplacementAux(const InputParameters &parameters)
Definition: GlobalDisplacementAux.C:48
GlobalDisplacementAux::_component
const unsigned int _component
Definition: GlobalDisplacementAux.h:35
GlobalDisplacementAux::validParams
static InputParameters validParams()
Definition: GlobalDisplacementAux.C:23
GlobalDisplacementAux::_dim
const unsigned int _dim
Definition: GlobalDisplacementAux.h:43
GlobalDisplacementAux::_output_global_disp
bool _output_global_disp
Definition: GlobalDisplacementAux.h:37
GlobalDisplacementAux::_periodic_dir
const VectorValue< bool > & _periodic_dir
Definition: GlobalDisplacementAux.h:40
RankTwoTensorTempl< Real >
GlobalStrainUserObjectInterface.h
registerMooseObject
registerMooseObject("TensorMechanicsApp", GlobalDisplacementAux)