www.mooseframework.org
ComputeLayeredCosseratElasticityTensor.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 #include "libmesh/utility.h"
12 #include "Function.h"
13 #include "RankTwoTensor.h"
14 
16 
18 
19 InputParameters
21 {
22  InputParameters params = ComputeElasticityTensorBase::validParams();
23  params.addClassDescription("Computes Cosserat elasticity and flexural bending rigidity tensors "
24  "relevant for simulations with layered materials. The layering "
25  "direction is assumed to be perpendicular to the 'z' direction.");
26  params.addRequiredParam<Real>("young", "The Young's modulus");
27  params.addRequiredParam<Real>("poisson", "The Poisson's ratio");
28  params.addRequiredRangeCheckedParam<Real>(
29  "layer_thickness", "layer_thickness>=0", "The layer thickness");
30  params.addRequiredRangeCheckedParam<Real>(
31  "joint_normal_stiffness", "joint_normal_stiffness>=0", "The joint normal stiffness");
32  params.addRequiredRangeCheckedParam<Real>(
33  "joint_shear_stiffness", "joint_shear_stiffness>=0", "The joint shear stiffness");
34  return params;
35 }
36 
38  const InputParameters & parameters)
39  : ComputeElasticityTensorBase(parameters),
40  _Eijkl(RankFourTensor()),
41  _Bijkl(RankFourTensor()),
42  _Cijkl(RankFourTensor()),
43  _elastic_flexural_rigidity_tensor(
44  declareProperty<RankFourTensor>("elastic_flexural_rigidity_tensor")),
45  _compliance(declareProperty<RankFourTensor>(_base_name + "compliance_tensor"))
46 {
47  if (!isParamValid("elasticity_tensor_prefactor"))
49 
50  const Real E = getParam<Real>("young");
51  const Real nu = getParam<Real>("poisson");
52  const Real b = getParam<Real>("layer_thickness");
53  const Real kn = getParam<Real>("joint_normal_stiffness");
54  const Real ks = getParam<Real>("joint_shear_stiffness");
55 
56  // shear modulus of solid
57  const Real G = 0.5 * E / (1.0 + nu);
58  // shear modulus of jointed material
59  const Real Gprime = G * b * ks / (b * ks + G);
60 
61  const Real a0000 =
62  (b * kn > 0.0)
63  ? E / (1.0 - nu * nu - Utility::pow<2>(nu * (1.0 + nu)) / (1.0 - nu * nu + E / b / kn))
64  : E / (1.0 - nu * nu);
65  const Real a0011 = nu * a0000 / (1.0 - nu);
66  const Real a2222 =
67  (b * kn > 0.0) ? 1.0 / ((1.0 + nu) * (1.0 - 2.0 * nu) / E / (1.0 - nu) + 1.0 / b / kn) : 0.0;
68  const Real a0022 = nu * a2222 / (1.0 - nu);
69  const Real a0101 = G;
70  const Real a66 = Gprime;
71  const Real a77 = 0.5 * (G + Gprime);
72 
73  // Eijkl does not obey the usual symmetries, viz Eijkl != Ejikl, so must fill manually
74  _Eijkl(0, 0, 0, 0) = _Eijkl(1, 1, 1, 1) = a0000;
75  _Eijkl(0, 0, 1, 1) = _Eijkl(1, 1, 0, 0) = a0011;
76  _Eijkl(2, 2, 2, 2) = a2222;
77  _Eijkl(0, 0, 2, 2) = _Eijkl(1, 1, 2, 2) = _Eijkl(2, 2, 0, 0) = _Eijkl(2, 2, 1, 1) = a0022;
78  _Eijkl(0, 1, 0, 1) = _Eijkl(0, 1, 1, 0) = _Eijkl(1, 0, 0, 1) = _Eijkl(1, 0, 1, 0) = a0101;
79  _Eijkl(0, 2, 0, 2) = _Eijkl(0, 2, 2, 0) = _Eijkl(2, 0, 0, 2) = _Eijkl(1, 2, 1, 2) =
80  _Eijkl(1, 2, 2, 1) = _Eijkl(2, 1, 1, 2) = a66;
81  _Eijkl(2, 0, 2, 0) = _Eijkl(2, 1, 2, 1) = a77;
82 
83  // most of Bijkl is zero since the only nonzero moment stresses are m01 and m10.
84  // It also does not have the usual symmetries.
85  const Real D0 = E * Utility::pow<3>(b) / 12.0 / (1.0 - nu * nu); // bending rigidity of a layer
86  const Real b0101 = D0 / b * G / (2.0 * b * ks + G);
87  const Real b0110 = -nu * b0101;
88  _Bijkl(0, 1, 0, 1) = _Bijkl(1, 0, 1, 0) = b0101;
89  _Bijkl(0, 1, 1, 0) = _Bijkl(1, 0, 0, 1) = b0110;
90 
91  // The compliance tensor also does not obey the usual symmetries, and
92  // this is the main reason it is calculated here, since we can't use
93  // _Eijkl.invSymm()
94  const Real pre = (nu - 1.0) / (a0000 * (nu - 1.0) + 2.0 * a2222 * Utility::pow<2>(nu));
95  const Real cp0000 =
96  ((a2222 - a0000) * nu * nu + 2.0 * a0000 * nu - a0000) / (2.0 * a0000 * nu - a0000);
97  const Real cp0011 = -((a0000 + a2222) * nu * nu - a0000 * nu) / (2.0 * a0000 * nu - a0000);
98  _Cijkl(0, 0, 0, 0) = _Cijkl(1, 1, 1, 1) = pre * cp0000;
99  _Cijkl(0, 0, 1, 1) = _Cijkl(1, 1, 0, 0) = pre * cp0011;
100  _Cijkl(2, 2, 2, 2) = pre * a0000 / a2222;
101  _Cijkl(0, 0, 2, 2) = _Cijkl(1, 1, 2, 2) = _Cijkl(2, 2, 0, 0) = _Cijkl(2, 2, 1, 1) = -nu * pre;
102  _Cijkl(0, 1, 0, 1) = _Cijkl(0, 1, 1, 0) = _Cijkl(1, 0, 0, 1) = _Cijkl(1, 0, 1, 0) = 0.25 / a0101;
103  const Real slip = 2.0 / (G - Gprime);
104  _Cijkl(0, 2, 2, 0) = _Cijkl(2, 0, 0, 2) = _Cijkl(1, 2, 2, 1) = _Cijkl(2, 1, 1, 2) = -slip;
105  _Cijkl(0, 2, 0, 2) = _Cijkl(1, 2, 1, 2) = (G + Gprime) * slip / 2.0 / Gprime;
106  _Cijkl(2, 0, 2, 0) = _Cijkl(2, 1, 2, 1) = slip;
107 }
108 
109 void
111 {
112  _elasticity_tensor[_qp] = _Eijkl;
114  _compliance[_qp] = _Cijkl;
115 
117  _compliance[_qp] /= _prefactor_function->value(_t, _q_point[_qp]);
118 }
ComputeLayeredCosseratElasticityTensor::_compliance
MaterialProperty< RankFourTensor > & _compliance
Compliance tensor (_Eijkl^-1) at the qps.
Definition: ComputeLayeredCosseratElasticityTensor.h:53
ComputeLayeredCosseratElasticityTensor.h
GuaranteeProvider::issueGuarantee
void issueGuarantee(const MaterialPropertyName &prop_name, Guarantee guarantee)
Definition: GuaranteeProvider.C:27
ComputeLayeredCosseratElasticityTensor::ComputeLayeredCosseratElasticityTensor
ComputeLayeredCosseratElasticityTensor(const InputParameters &parameters)
Definition: ComputeLayeredCosseratElasticityTensor.C:37
ComputeElasticityTensorBase
ComputeElasticityTensorBase the base class for computing elasticity tensors.
Definition: ComputeElasticityTensorBase.h:25
Guarantee::CONSTANT_IN_TIME
registerMooseObject
registerMooseObject("TensorMechanicsApp", ComputeLayeredCosseratElasticityTensor)
ComputeLayeredCosseratElasticityTensor::validParams
static InputParameters validParams()
Definition: ComputeLayeredCosseratElasticityTensor.C:20
ComputeLayeredCosseratElasticityTensor::_Cijkl
RankFourTensor _Cijkl
Inverse of elasticity tensor.
Definition: ComputeLayeredCosseratElasticityTensor.h:47
ComputeLayeredCosseratElasticityTensor
ComputeLayeredCosseratElasticityTensor defines an elasticity tensor and an elastic flexural rigidity ...
Definition: ComputeLayeredCosseratElasticityTensor.h:26
ComputeLayeredCosseratElasticityTensor::_Bijkl
RankFourTensor _Bijkl
Flexural rigidity tensor.
Definition: ComputeLayeredCosseratElasticityTensor.h:40
ComputeElasticityTensorBase::_elasticity_tensor
MaterialProperty< RankFourTensor > & _elasticity_tensor
Definition: ComputeElasticityTensorBase.h:40
ComputeLayeredCosseratElasticityTensor::computeQpElasticityTensor
virtual void computeQpElasticityTensor()
Definition: ComputeLayeredCosseratElasticityTensor.C:110
ComputeLayeredCosseratElasticityTensor::_Eijkl
RankFourTensor _Eijkl
Conventional elasticity tensor.
Definition: ComputeLayeredCosseratElasticityTensor.h:37
defineLegacyParams
defineLegacyParams(ComputeLayeredCosseratElasticityTensor)
RankFourTensorTempl
Definition: ACGrGrElasticDrivingForce.h:20
ComputeElasticityTensorBase::validParams
static InputParameters validParams()
Definition: ComputeElasticityTensorBase.C:16
ComputeElasticityTensorBase::_elasticity_tensor_name
std::string _elasticity_tensor_name
Definition: ComputeElasticityTensorBase.h:38
ComputeElasticityTensorBase::_prefactor_function
const Function *const _prefactor_function
prefactor function to multiply the elasticity tensor with
Definition: ComputeElasticityTensorBase.h:44
ComputeLayeredCosseratElasticityTensor::_elastic_flexural_rigidity_tensor
MaterialProperty< RankFourTensor > & _elastic_flexural_rigidity_tensor
Flexural rigidity tensor at the qps.
Definition: ComputeLayeredCosseratElasticityTensor.h:50