13 #include "MooseMesh.h"
14 #include "MooseVariable.h"
15 #include "RankTwoTensor.h"
16 #include "RankFourTensor.h"
26 params.addClassDescription(
"Plane stress kernel to provide out-of-plane strain contribution.");
27 params.addCoupledVar(
"displacements",
28 "The string of displacements suitable for the problem statement");
29 params.addCoupledVar(
"temperature",
30 "The name of the temperature variable used in the "
31 "ComputeThermalExpansionEigenstrain. (Not required for "
32 "simulations without temperature coupling.)");
33 params.addParam<std::string>(
34 "thermal_eigenstrain_name",
35 "thermal_eigenstrain",
36 "The eigenstrain_name used in the ComputeThermalExpansionEigenstrain.");
37 params.addParam<std::string>(
"base_name",
"Material property base name");
39 MooseEnum direction(
"x y z",
"z");
40 params.addDeprecatedParam<MooseEnum>(
43 "The direction of the out-of-plane strain variable",
44 "Use the new parameter name 'out_of_plane_strain_direction'");
45 params.addParam<MooseEnum>(
"out_of_plane_strain_direction",
47 "The direction of the out-of-plane strain variable");
49 params.set<
bool>(
"use_displaced_mesh") =
false;
55 : DerivativeMaterialInterface<Kernel>(parameters),
56 _base_name(isParamValid(
"base_name") ? getParam<std::string>(
"base_name") +
"_" :
""),
57 _stress(getMaterialProperty<
RankTwoTensor>(_base_name +
"stress")),
58 _Jacobian_mult(getMaterialProperty<
RankFourTensor>(_base_name +
"Jacobian_mult")),
59 _direction(parameters.isParamSetByUser(
"direction")
60 ? getParam<MooseEnum>(
"direction")
61 : getParam<MooseEnum>(
"out_of_plane_strain_direction")),
62 _disp_coupled(isCoupled(
"displacements")),
63 _ndisp(_disp_coupled ? coupledComponents(
"displacements") : 0),
65 _temp_coupled(isCoupled(
"temperature")),
66 _temp_var(_temp_coupled ? coupled(
"temperature") : 0),
67 _deigenstrain_dT(_temp_coupled ? &getMaterialPropertyDerivative<
RankTwoTensor>(
68 getParam<std::string>(
"thermal_eigenstrain_name"),
69 getVar(
"temperature", 0)->
name())
73 for (
unsigned int i = 0; i <
_ndisp; ++i)
74 _disp_var[i] = coupled(
"displacements", i);
76 if (parameters.isParamSetByUser(
"direction") &&
77 parameters.isParamSetByUser(
"out_of_plane_strain_direction"))
78 mooseError(
"Cannot specify both 'direction' and 'out_of_plane_strain_direction'! Use "
79 "'out_of_plane_strain_direction'.");
83 mooseError(
"The number of displacement variables supplied must match the mesh dimension.");
107 for (
unsigned int coupled_direction = 0; coupled_direction <
_ndisp; ++coupled_direction)
109 if (jvar ==
_disp_var[coupled_direction])
111 unsigned int coupled_direction_index = 0;
116 if (coupled_direction == 0)
117 coupled_direction_index = 1;
119 coupled_direction_index = 2;
124 if (coupled_direction == 0)
125 coupled_direction_index = 0;
127 coupled_direction_index = 2;
132 coupled_direction_index = coupled_direction;
139 _test[_i][_qp] * _grad_phi[_j][_qp](coupled_direction_index);
148 for (
unsigned int i = 0; i < 3; ++i)
151 val = -sum * _test[_i][_qp] * _phi[_j][_qp];