www.mooseframework.org
GlobalStrain.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 "GlobalStrain.h"
12 
13 // MOOSE includes
14 #include "Assembly.h"
15 #include "MooseVariableScalar.h"
16 #include "SystemBase.h"
17 #include "RankTwoTensor.h"
18 #include "RankFourTensor.h"
19 
20 registerMooseObject("TensorMechanicsApp", GlobalStrain);
21 
23 
24 InputParameters
26 {
27  InputParameters params = ScalarKernel::validParams();
28  params.addClassDescription("Scalar Kernel to solve for the global strain");
29  params.addRequiredParam<UserObjectName>("global_strain_uo",
30  "The name of the GlobalStrainUserObject");
31 
32  return params;
33 }
34 
35 GlobalStrain::GlobalStrain(const InputParameters & parameters)
36  : ScalarKernel(parameters),
37  _pst(getUserObject<GlobalStrainUserObjectInterface>("global_strain_uo")),
38  _pst_residual(_pst.getResidual()),
39  _pst_jacobian(_pst.getJacobian()),
40  _periodic_dir(_pst.getPeriodicDirections()),
41  _components(_var.order()),
42  _dim(_mesh.dimension())
43 {
44  if ((_dim == 1 && _var.order() != FIRST) || (_dim == 2 && _var.order() != THIRD) ||
45  (_dim == 3 && _var.order() != SIXTH))
46  mooseError("PerdiodicStrain ScalarKernel is only compatible with scalar variables of order "
47  "FIRST in 1D, THIRD in 2D, and SIXTH in 3D. Please change the order of the scalar"
48  "variable according to the mesh dimension.");
49 
50  assignComponentIndices(_var.order());
51 }
52 
53 void
55 {
56  DenseVector<Number> & re = _assembly.residualBlock(_var.number());
57  for (_i = 0; _i < re.size(); ++_i)
58  {
59  if (_periodic_dir(_components[_i].first) || _periodic_dir(_components[_i].second))
60  re(_i) += _pst_residual(_components[_i].first, _components[_i].second);
61  }
62 }
63 
64 void
66 {
67  DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), _var.number());
68  for (_i = 0; _i < ke.m(); ++_i)
69  for (_j = 0; _j < ke.m(); ++_j)
70  // periodic direction check is not done for jacobian calculations to avoid zero pivot error
71  ke(_i, _j) += _pst_jacobian(_components[_i].first,
72  _components[_i].second,
73  _components[_j].first,
74  _components[_j].second);
75 }
76 
77 void
79 {
80 }
81 
82 void
84 {
85  switch (order)
86  {
87  case 1:
88  _components[0].first = 0;
89  _components[0].second = 0;
90  break;
91 
92  case 3:
93  _components[0].first = 0;
94  _components[0].second = 0;
95  _components[1].first = 1;
96  _components[1].second = 1;
97  _components[2].first = 0;
98  _components[2].second = 1;
99  break;
100 
101  case 6:
102  _components[0].first = 0;
103  _components[0].second = 0;
104  _components[1].first = 1;
105  _components[1].second = 1;
106  _components[2].first = 2;
107  _components[2].second = 2;
108  _components[3].first = 1;
109  _components[3].second = 2;
110  _components[4].first = 0;
111  _components[4].second = 2;
112  _components[5].first = 0;
113  _components[5].second = 1;
114  break;
115 
116  default:
117  mooseError("PerdiodicStrain ScalarKernel is only compatible with FIRST, THIRD, and SIXTH "
118  "order scalar variables.");
119  }
120 }
GlobalStrainUserObjectInterface
This class provides interface for extracting the periodic directions, residual, and jacobian values f...
Definition: GlobalStrainUserObjectInterface.h:19
GlobalStrain.h
registerMooseObject
registerMooseObject("TensorMechanicsApp", GlobalStrain)
GlobalStrain::_periodic_dir
const VectorValue< bool > & _periodic_dir
Definition: GlobalStrain.h:45
GlobalStrain::_components
std::vector< std::pair< unsigned int, unsigned int > > _components
Definition: GlobalStrain.h:47
GlobalStrain::_pst_jacobian
const RankFourTensor & _pst_jacobian
Definition: GlobalStrain.h:44
GlobalStrain::_pst_residual
const RankTwoTensor & _pst_residual
Definition: GlobalStrain.h:43
GlobalStrain::validParams
static InputParameters validParams()
Definition: GlobalStrain.C:25
defineLegacyParams
defineLegacyParams(GlobalStrain)
GlobalStrain::computeOffDiagJacobian
virtual void computeOffDiagJacobian(unsigned int)
Definition: GlobalStrain.C:78
GlobalStrain::assignComponentIndices
virtual void assignComponentIndices(Order var_order)
Definition: GlobalStrain.C:83
validParams
InputParameters validParams()
GlobalStrain::_dim
const unsigned int _dim
Definition: GlobalStrain.h:48
GlobalStrain::computeResidual
virtual void computeResidual()
Definition: GlobalStrain.C:54
GlobalStrainUserObjectInterface.h
GlobalStrain::GlobalStrain
GlobalStrain(const InputParameters &parameters)
Definition: GlobalStrain.C:35
GlobalStrain
Definition: GlobalStrain.h:27
GlobalStrain::computeJacobian
virtual void computeJacobian()
Definition: GlobalStrain.C:65