Go to the documentation of this file.
15 #include "MooseVariable.h"
16 #include "PermutationTensor.h"
17 #include "RankFourTensor.h"
18 #include "RankTwoTensor.h"
28 params.addRequiredRangeCheckedParam<
unsigned int>(
31 "An integer corresponding to the direction the variable this "
32 "kernel acts in. (0 for x, 1 for y, 2 for z)");
33 params.addParam<std::string>(
34 "appended_property_name",
"",
"Name appended to material properties to make them unique");
35 params.addRequiredCoupledVar(
"Cosserat_rotations",
"The 3 Cosserat rotation variables");
36 params.addRequiredCoupledVar(
"displacements",
"The 3 displacement variables");
37 params.set<
bool>(
"use_displaced_mesh") =
false;
45 getParam<std::string>(
"appended_property_name"))),
47 "Jacobian_mult" + getParam<std::string>(
"appended_property_name"))),
48 _component(getParam<unsigned int>(
"component")),
49 _nrots(coupledComponents(
"Cosserat_rotations")),
51 _ndisp(coupledComponents(
"displacements")),
55 mooseError(
"MomentBalancing: This Kernel is only defined for 3-dimensional simulations so 3 "
56 "Cosserat rotation variables are needed");
57 for (
unsigned i = 0; i <
_nrots; ++i)
58 _wc_var[i] = coupled(
"Cosserat_rotations", i);
61 mooseError(
"MomentBalancing: This Kernel is only defined for 3-dimensional simulations so 3 "
62 "displacement variables are needed");
63 for (
unsigned i = 0; i <
_ndisp; ++i)
64 _disp_var[i] = coupled(
"displacements", i);
68 mooseError(
"MomentBalancing: The variable for this Kernel must be equal to the Cosserat "
69 "rotation variable defined by the \"component\" and the \"Cosserat_rotations\" "
77 for (
unsigned int j = 0; j < LIBMESH_DIM; ++j)
78 for (
unsigned int k = 0; k < LIBMESH_DIM; ++k)
80 return _test[_i][_qp] * the_sum;
94 for (
unsigned v = 0; v <
_ndisp; ++v)
100 for (
unsigned v = 0; v <
_nrots; ++v)
MomentBalancing(const InputParameters ¶meters)
const MaterialProperty< RankTwoTensor > & _stress
the stress tensor (not the moment stress) at the quad-point.
const MaterialProperty< RankFourTensor > & _Jacobian_mult
d(stress tensor)/(d strain tensor) Here strain_ij = grad_j disp_i + epsilon_ijk * wc_k
registerMooseObject("TensorMechanicsApp", MomentBalancing)
std::vector< unsigned int > _disp_var
the moose variable numbers for the displacements
const unsigned int _ndisp
virtual Real computeQpResidual()
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
static InputParameters validParams()
const unsigned int _nrots
This Kernel computes epsilon_ijk * stress_jk (sum over j and k) "i" is called _component in this clas...
InputParameters validParams()
const unsigned int _component
The Kernel computes epsilon_{component j k}*stress_{j k}.
defineLegacyParams(MomentBalancing)
virtual Real computeQpJacobian()
std::vector< unsigned int > _wc_var
the moose variable numbers for the Cosserat rotation degrees of freedom