11 #include "RankTwoTensor.h"
12 #include "RankFourTensor.h"
16 #include "libmesh/quadrature.h"
26 params.addClassDescription(
27 "Generalized plane strain UserObject to provide residual and diagonal Jacobian entries.");
28 params.addParam<UserObjectName>(
"subblock_index_provider",
29 "SubblockIndexProvider user object name");
30 params.addParam<FunctionName>(
31 "out_of_plane_pressure",
33 "Function used to prescribe pressure in the out-of-plane direction");
34 MooseEnum outOfPlaneDirection(
"x y z",
"z");
35 params.addParam<MooseEnum>(
36 "out_of_plane_direction", outOfPlaneDirection,
"The direction of the out-of-plane strain.");
37 params.addParam<Real>(
"factor", 1.0,
"Scale factor applied to prescribed pressure");
38 params.addParam<std::string>(
"base_name",
"Material properties base name");
39 params.set<ExecFlagEnum>(
"execute_on") = EXEC_LINEAR;
45 const InputParameters & parameters)
46 : ElementUserObject(parameters),
47 _base_name(isParamValid(
"base_name") ? getParam<std::string>(
"base_name") +
"_" :
""),
48 _Cijkl(getMaterialProperty<
RankFourTensor>(_base_name +
"elasticity_tensor")),
49 _stress(getMaterialProperty<
RankTwoTensor>(_base_name +
"stress")),
50 _subblock_id_provider(nullptr),
51 _out_of_plane_pressure(getFunction(
"out_of_plane_pressure")),
52 _factor(getParam<Real>(
"factor"))
59 if (isParamValid(
"subblock_index_provider"))
61 if (_assembly.coordSystem() == Moose::COORD_XYZ)
63 else if (_assembly.coordSystem() == Moose::COORD_RZ)
66 mooseError(
"Unsupported coordinate system for generalized plane strain formulation");
77 const unsigned int subblock_id =
80 for (
unsigned int _qp = 0; _qp < _qrule->n_points(); _qp++)
83 _residual[subblock_id] += _JxW[_qp] * _coord[_qp] *
89 _JxW[_qp] * _coord[_qp] *
93 _jacobian[subblock_id] += _JxW[_qp] * _coord[_qp] *
105 static_cast<const GeneralizedPlaneStrainUserObject &>(uo);
106 for (
unsigned int i = 0; i <
_residual.size(); ++i)
126 mooseError(
"Index out of bounds!");
141 mooseError(
"Index out of bounds!");
150 mooseError(
"Index out of bounds!");