11 #include "libmesh/utility.h" 21 params.
addClassDescription(
"Computes Cosserat elasticity and flexural bending rigidity tensors " 22 "relevant for simulations with layered materials. The layering " 23 "direction is assumed to be perpendicular to the 'z' direction.");
27 "layer_thickness",
"layer_thickness>=0",
"The layer thickness");
29 "joint_normal_stiffness",
"joint_normal_stiffness>=0",
"The joint normal stiffness");
31 "joint_shear_stiffness",
"joint_shear_stiffness>=0",
"The joint shear stiffness");
41 _elastic_flexural_rigidity_tensor(
42 declareProperty<
RankFourTensor>(
"elastic_flexural_rigidity_tensor")),
43 _compliance(declareProperty<
RankFourTensor>(_base_name +
"compliance_tensor"))
48 const Real E = getParam<Real>(
"young");
49 const Real nu = getParam<Real>(
"poisson");
50 const Real b = getParam<Real>(
"layer_thickness");
51 const Real kn = getParam<Real>(
"joint_normal_stiffness");
52 const Real ks = getParam<Real>(
"joint_shear_stiffness");
55 const Real G = 0.5 * E / (1.0 + nu);
57 const Real Gprime =
G *
b * ks / (
b * ks +
G);
61 ? E / (1.0 - nu * nu - Utility::pow<2>(nu * (1.0 + nu)) / (1.0 - nu * nu + E /
b / kn))
62 : E / (1.0 - nu * nu);
63 const Real a0011 = nu * a0000 / (1.0 - nu);
65 (
b * kn > 0.0) ? 1.0 / ((1.0 + nu) * (1.0 - 2.0 * nu) / E / (1.0 - nu) + 1.0 /
b / kn) : 0.0;
66 const Real a0022 = nu * a2222 / (1.0 - nu);
68 const Real a66 = Gprime;
69 const Real a77 = 0.5 * (
G + Gprime);
74 _Eijkl(2, 2, 2, 2) = a2222;
75 _Eijkl(0, 0, 2, 2) =
_Eijkl(1, 1, 2, 2) =
_Eijkl(2, 2, 0, 0) =
_Eijkl(2, 2, 1, 1) = a0022;
76 _Eijkl(0, 1, 0, 1) =
_Eijkl(0, 1, 1, 0) =
_Eijkl(1, 0, 0, 1) =
_Eijkl(1, 0, 1, 0) = a0101;
77 _Eijkl(0, 2, 0, 2) =
_Eijkl(0, 2, 2, 0) =
_Eijkl(2, 0, 0, 2) =
_Eijkl(1, 2, 1, 2) =
83 const Real D0 = E * Utility::pow<3>(
b) / 12.0 / (1.0 - nu * nu);
84 const Real b0101 = D0 /
b *
G / (2.0 *
b * ks +
G);
85 const Real b0110 = -nu * b0101;
92 const Real pre = (nu - 1.0) / (a0000 * (nu - 1.0) + 2.0 * a2222 * Utility::pow<2>(nu));
94 ((a2222 - a0000) * nu * nu + 2.0 * a0000 * nu - a0000) / (2.0 * a0000 * nu - a0000);
95 const Real cp0011 = -((a0000 + a2222) * nu * nu - a0000 * nu) / (2.0 * a0000 * nu - a0000);
98 _Cijkl(2, 2, 2, 2) = pre * a0000 / a2222;
99 _Cijkl(0, 0, 2, 2) =
_Cijkl(1, 1, 2, 2) =
_Cijkl(2, 2, 0, 0) =
_Cijkl(2, 2, 1, 1) = -nu * pre;
100 _Cijkl(0, 1, 0, 1) =
_Cijkl(0, 1, 1, 0) =
_Cijkl(1, 0, 0, 1) =
_Cijkl(1, 0, 1, 0) = 0.25 / a0101;
101 const Real slip = 2.0 / (
G - Gprime);
102 _Cijkl(0, 2, 2, 0) =
_Cijkl(2, 0, 0, 2) =
_Cijkl(1, 2, 2, 1) =
_Cijkl(2, 1, 1, 2) = -slip;
103 _Cijkl(0, 2, 0, 2) =
_Cijkl(1, 2, 1, 2) = (
G + Gprime) * slip / 2.0 / Gprime;
const MooseArray< Point > & _q_point
RankFourTensor _Cijkl
Inverse of elasticity tensor.
ComputeElasticityTensorBase the base class for computing elasticity tensors.
void issueGuarantee(const MaterialPropertyName &prop_name, Guarantee guarantee)
GenericMaterialProperty< T, is_ad > & _elasticity_tensor
ComputeLayeredCosseratElasticityTensor(const InputParameters ¶meters)
ComputeLayeredCosseratElasticityTensor defines an elasticity tensor and an elastic flexural rigidity ...
RankFourTensor _Bijkl
Flexural rigidity tensor.
MaterialProperty< RankFourTensor > & _elastic_flexural_rigidity_tensor
Flexural rigidity tensor at the qps.
bool isParamValid(const std::string &name) const
static const std::string G
const Function *const _prefactor_function
prefactor function to multiply the elasticity tensor with
static InputParameters validParams()
registerMooseObject("SolidMechanicsApp", ComputeLayeredCosseratElasticityTensor)
MaterialProperty< RankFourTensor > & _compliance
Compliance tensor (_Eijkl^-1) at the qps.
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::string _elasticity_tensor_name
RankFourTensor _Eijkl
Conventional elasticity tensor.
virtual Real value(Real t, const Point &p) const
virtual void computeQpElasticityTensor()