www.mooseframework.org
GeneralizedPlaneStrainOffDiag.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 
11 
12 // MOOSE includes
13 #include "Assembly.h"
14 #include "Material.h"
15 #include "MooseVariable.h"
16 #include "MooseVariableScalar.h"
17 #include "RankTwoTensor.h"
18 #include "RankFourTensor.h"
19 
20 #include "libmesh/quadrature.h"
21 
23 
25 
26 InputParameters
28 {
29  InputParameters params = Kernel::validParams();
30  params.addClassDescription("Generalized Plane Strain kernel to provide contribution of the "
31  "out-of-plane strain to other kernels");
32  params.addRequiredParam<std::vector<VariableName>>("displacements",
33  "Variable for the displacements");
34  params.addParam<VariableName>("temperature", "Variable for the temperature");
35 
36  params.addCoupledVar("scalar_out_of_plane_strain",
37  "Scalar variable for generalized plane strain");
38  MooseEnum outOfPlaneDirection("x y z", "z");
39  params.addParam<MooseEnum>(
40  "out_of_plane_direction", outOfPlaneDirection, "The direction of the out-of-plane strain.");
41  params.addParam<UserObjectName>("subblock_index_provider",
42  "SubblockIndexProvider user object name");
43  params.addParam<unsigned int>(
44  "scalar_out_of_plane_strain_index",
45  "The index number of scalar_out_of_plane_strain this kernel acts on");
46  params.addParam<std::string>("base_name", "Material property base name");
47  params.addParam<std::vector<MaterialPropertyName>>(
48  "eigenstrain_names", "List of eigenstrains to be applied in this strain calculation");
49 
50  return params;
51 }
52 
54  : DerivativeMaterialInterface<Kernel>(parameters),
55  _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
56  _Jacobian_mult(getMaterialProperty<RankFourTensor>(_base_name + "Jacobian_mult")),
57  _eigenstrain_names(getParam<std::vector<MaterialPropertyName>>("eigenstrain_names")),
58  _deigenstrain_dT(_eigenstrain_names.size()),
59  _scalar_out_of_plane_strain_var(coupledScalar("scalar_out_of_plane_strain")),
60  _subblock_id_provider(isParamValid("subblock_index_provider")
61  ? &getUserObject<SubblockIndexProvider>("subblock_index_provider")
62  : nullptr),
63  _scalar_var_id(isParamValid("scalar_out_of_plane_strain_index")
64  ? getParam<unsigned int>("scalar_out_of_plane_strain_index")
65  : 0),
66  _temp_var(isParamValid("temperature")
67  ? &_subproblem.getStandardVariable(_tid, getParam<VariableName>("temperature"))
68  : NULL),
69  _num_disp_var(getParam<std::vector<VariableName>>("displacements").size()),
70  _scalar_out_of_plane_strain_direction(getParam<MooseEnum>("out_of_plane_direction"))
71 {
72  const std::vector<VariableName> & nl_vnames(getParam<std::vector<VariableName>>("displacements"));
73 
75  mooseError("For 1D axisymmetric or 2D cartesian simulations where the out-of-plane direction "
76  "is z, the number of supplied displacements to GeneralizedPlaneStrainOffDiag must "
77  "be less than three.");
79  mooseError("For 2D cartesian simulations where the out-of-plane direction is x or y the number "
80  "of supplied displacements must be three.");
81 
82  for (unsigned int i = 0; i < _num_disp_var; ++i)
83  _disp_var.push_back(&_subproblem.getStandardVariable(_tid, nl_vnames[i]));
84 
85  for (unsigned int i = 0; i < _deigenstrain_dT.size(); ++i)
86  _deigenstrain_dT[i] = &getMaterialPropertyDerivative<RankTwoTensor>(
88 
89  if (isParamValid("scalar_variable_index_provider") &&
90  !isParamValid("scalar_out_of_plane_strain_index"))
91  mooseError("scalar_out_of_plane_strain_index should be provided if more "
92  "than one is available");
93 }
94 
95 void
97 {
98  const unsigned int elem_scalar_var_id =
100 
101  if (elem_scalar_var_id == _scalar_var_id)
102  {
103  if (_assembly.coordSystem() == Moose::COORD_RZ)
105 
106  if (_var.number() == _disp_var[0]->number())
108  else if (_num_disp_var == 2 && _var.number() == _disp_var[1]->number())
110  else if (isParamValid("temperature") ? _var.number() == _temp_var->number() : 0)
112  }
113 }
114 
115 void
117  unsigned int jvar)
118 {
120  {
121  DenseMatrix<Number> & ken = _assembly.jacobianBlock(_var.number(), jvar);
122  DenseMatrix<Number> & kne = _assembly.jacobianBlock(jvar, _var.number());
123  MooseVariableScalar & jv = _sys.getScalarVariable(_tid, jvar);
124 
125  // Set appropriate components for scalar kernels, including in the cases where a planar model is
126  // running in planes other than the x-y plane (defined by _out_of_plane_strain_direction).
128  component += 1;
129  else if (_scalar_out_of_plane_strain_direction == 1 && component == 1)
130  component += 1;
131 
132  for (_i = 0; _i < _test.size(); ++_i)
133  for (_j = 0; _j < jv.order(); ++_j)
134  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
135  {
136  ken(_i, _j) += _JxW[_qp] * _coord[_qp] *
139  component,
140  component) *
141  _grad_test[_i][_qp](component);
142  kne(_j, _i) += _JxW[_qp] * _coord[_qp] *
145  component,
146  component) *
147  _grad_test[_i][_qp](component);
148  }
149  }
150 }
151 
152 void
154 {
156  {
157  DenseMatrix<Number> & kne = _assembly.jacobianBlock(jvar, _var.number());
158  MooseVariableScalar & jv = _sys.getScalarVariable(_tid, jvar);
159  unsigned int n_eigenstrains = _deigenstrain_dT.size();
160 
161  for (_i = 0; _i < _test.size(); ++_i)
162  for (_j = 0; _j < jv.order(); ++_j)
163  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
164  for (unsigned int ies = 0; ies < n_eigenstrains; ++ies)
165  kne(_j, _i) +=
166  _JxW[_qp] * _coord[_qp] *
167  (_Jacobian_mult[_qp] * (*_deigenstrain_dT[ies])[_qp])(
169  _test[_i][_qp];
170  }
171 }
GeneralizedPlaneStrainOffDiag::validParams
static InputParameters validParams()
Definition: GeneralizedPlaneStrainOffDiag.C:27
GeneralizedPlaneStrainOffDiag.h
GeneralizedPlaneStrainOffDiag::_subblock_id_provider
const SubblockIndexProvider * _subblock_id_provider
Definition: GeneralizedPlaneStrainOffDiag.h:56
GeneralizedPlaneStrainOffDiag::_num_disp_var
const unsigned int _num_disp_var
Definition: GeneralizedPlaneStrainOffDiag.h:61
registerMooseObject
registerMooseObject("TensorMechanicsApp", GeneralizedPlaneStrainOffDiag)
SubblockIndexProvider::getSubblockIndex
virtual unsigned int getSubblockIndex(const Elem &) const =0
The index of subblock this element is on.
SubblockIndexProvider
Abstract base class for user objects that provide an index for a given element that is independent of...
Definition: SubblockIndexProvider.h:24
GeneralizedPlaneStrainOffDiag::computeOffDiagJacobianScalar
void computeOffDiagJacobianScalar(unsigned int jvar) override
These methods are used to compute the off-diagonal jacobian for the coupling between scalar variable ...
Definition: GeneralizedPlaneStrainOffDiag.C:96
GeneralizedPlaneStrainOffDiag::computeDispOffDiagJacobianScalar
virtual void computeDispOffDiagJacobianScalar(unsigned int component, unsigned int jvar)
Definition: GeneralizedPlaneStrainOffDiag.C:116
GeneralizedPlaneStrainOffDiag::_disp_var
std::vector< MooseVariable * > _disp_var
Definition: GeneralizedPlaneStrainOffDiag.h:62
GeneralizedPlaneStrainOffDiag::_eigenstrain_names
const std::vector< MaterialPropertyName > _eigenstrain_names
Definition: GeneralizedPlaneStrainOffDiag.h:52
GeneralizedPlaneStrainOffDiag::_deigenstrain_dT
std::vector< const MaterialProperty< RankTwoTensor > * > _deigenstrain_dT
Definition: GeneralizedPlaneStrainOffDiag.h:53
GeneralizedPlaneStrainOffDiag::computeTempOffDiagJacobianScalar
virtual void computeTempOffDiagJacobianScalar(unsigned int jvar)
Definition: GeneralizedPlaneStrainOffDiag.C:153
GeneralizedPlaneStrainOffDiag::GeneralizedPlaneStrainOffDiag
GeneralizedPlaneStrainOffDiag(const InputParameters &parameters)
Definition: GeneralizedPlaneStrainOffDiag.C:53
GeneralizedPlaneStrainOffDiag::_Jacobian_mult
const MaterialProperty< RankFourTensor > & _Jacobian_mult
Definition: GeneralizedPlaneStrainOffDiag.h:51
GeneralizedPlaneStrainOffDiag::_scalar_var_id
const unsigned int _scalar_var_id
Definition: GeneralizedPlaneStrainOffDiag.h:57
GeneralizedPlaneStrainOffDiag::_base_name
const std::string _base_name
Definition: GeneralizedPlaneStrainOffDiag.h:49
validParams
InputParameters validParams()
defineLegacyParams
defineLegacyParams(GeneralizedPlaneStrainOffDiag)
MaterialTensorCalculatorTools::component
Real component(const SymmTensor &symm_tensor, unsigned int index)
Definition: MaterialTensorCalculatorTools.C:16
GeneralizedPlaneStrainOffDiag::_scalar_out_of_plane_strain_direction
unsigned int _scalar_out_of_plane_strain_direction
Definition: GeneralizedPlaneStrainOffDiag.h:64
RankFourTensorTempl< Real >
GeneralizedPlaneStrainOffDiag
Definition: GeneralizedPlaneStrainOffDiag.h:28
GeneralizedPlaneStrainOffDiag::_scalar_out_of_plane_strain_var
unsigned int _scalar_out_of_plane_strain_var
Definition: GeneralizedPlaneStrainOffDiag.h:55
GeneralizedPlaneStrainOffDiag::_temp_var
MooseVariable * _temp_var
Definition: GeneralizedPlaneStrainOffDiag.h:59