www.mooseframework.org
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
ComputeLayeredCosseratElasticityTensor Class Reference

ComputeLayeredCosseratElasticityTensor defines an elasticity tensor and an elastic flexural rigidity tensor for use in simulations with layered Cosserat materials. More...

#include <ComputeLayeredCosseratElasticityTensor.h>

Inheritance diagram for ComputeLayeredCosseratElasticityTensor:
[legend]

Public Member Functions

 ComputeLayeredCosseratElasticityTensor (const InputParameters &parameters)
 
bool hasGuarantee (const MaterialPropertyName &prop_name, Guarantee guarantee)
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual void computeQpElasticityTensor ()
 
virtual void computeQpProperties ()
 
void issueGuarantee (const MaterialPropertyName &prop_name, Guarantee guarantee)
 
void revokeGuarantee (const MaterialPropertyName &prop_name, Guarantee guarantee)
 

Protected Attributes

RankFourTensor _Eijkl
 Conventional elasticity tensor. More...
 
RankFourTensor _Bijkl
 Flexural rigidity tensor. More...
 
RankFourTensor _Cijkl
 Inverse of elasticity tensor. More...
 
MaterialProperty< RankFourTensor > & _elastic_flexural_rigidity_tensor
 Flexural rigidity tensor at the qps. More...
 
MaterialProperty< RankFourTensor > & _compliance
 Compliance tensor (_Eijkl^-1) at the qps. More...
 
const std::string _base_name
 
std::string _elasticity_tensor_name
 
MaterialProperty< RankFourTensor > & _elasticity_tensor
 
MaterialProperty< Real > & _effective_stiffness
 
const Function *const _prefactor_function
 prefactor function to multiply the elasticity tensor with More...
 

Private Attributes

std::map< MaterialPropertyName, std::set< Guarantee > > _guarantees
 

Detailed Description

ComputeLayeredCosseratElasticityTensor defines an elasticity tensor and an elastic flexural rigidity tensor for use in simulations with layered Cosserat materials.

The layering direction is assumed to be in the "z" direction.

Definition at line 26 of file ComputeLayeredCosseratElasticityTensor.h.

Constructor & Destructor Documentation

◆ ComputeLayeredCosseratElasticityTensor()

ComputeLayeredCosseratElasticityTensor::ComputeLayeredCosseratElasticityTensor ( const InputParameters &  parameters)

Definition at line 37 of file ComputeLayeredCosseratElasticityTensor.C.

39  : ComputeElasticityTensorBase(parameters),
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 }

Member Function Documentation

◆ computeQpElasticityTensor()

void ComputeLayeredCosseratElasticityTensor::computeQpElasticityTensor ( )
protectedvirtual

Implements ComputeElasticityTensorBase.

Definition at line 110 of file ComputeLayeredCosseratElasticityTensor.C.

111 {
112  _elasticity_tensor[_qp] = _Eijkl;
114  _compliance[_qp] = _Cijkl;
115 
117  _compliance[_qp] /= _prefactor_function->value(_t, _q_point[_qp]);
118 }

◆ computeQpProperties()

void ComputeElasticityTensorBase::computeQpProperties ( )
protectedvirtualinherited

Definition at line 43 of file ComputeElasticityTensorBase.C.

44 {
45  _effective_stiffness[_qp] = 0; // Currently overriden by ComputeIsotropicElasticityTensor
47 
48  // Multiply by prefactor
50  {
51  _elasticity_tensor[_qp] *= _prefactor_function->value(_t, _q_point[_qp]);
52  _effective_stiffness[_qp] *= std::sqrt(_prefactor_function->value(_t, _q_point[_qp]));
53  }
54 }

◆ hasGuarantee()

bool GuaranteeProvider::hasGuarantee ( const MaterialPropertyName &  prop_name,
Guarantee  guarantee 
)
inherited

Definition at line 16 of file GuaranteeProvider.C.

17 {
18  auto it = _guarantees.find(prop_name);
19  if (it == _guarantees.end())
20  return false;
21 
22  auto it2 = it->second.find(guarantee);
23  return it2 != it->second.end();
24 }

◆ issueGuarantee()

void GuaranteeProvider::issueGuarantee ( const MaterialPropertyName &  prop_name,
Guarantee  guarantee 
)
protectedinherited

◆ revokeGuarantee()

void GuaranteeProvider::revokeGuarantee ( const MaterialPropertyName &  prop_name,
Guarantee  guarantee 
)
protectedinherited

Definition at line 34 of file GuaranteeProvider.C.

35 {
36  auto it = _guarantees.find(prop_name);
37  if (it != _guarantees.end())
38  it->second.erase(guarantee);
39 }

Referenced by ComputeElasticityTensorCP::ComputeElasticityTensorCP().

◆ validParams()

InputParameters ComputeLayeredCosseratElasticityTensor::validParams ( )
static

Definition at line 20 of file ComputeLayeredCosseratElasticityTensor.C.

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 }

Member Data Documentation

◆ _base_name

const std::string ComputeElasticityTensorBase::_base_name
protectedinherited

◆ _Bijkl

RankFourTensor ComputeLayeredCosseratElasticityTensor::_Bijkl
protected

Flexural rigidity tensor.

Definition at line 40 of file ComputeLayeredCosseratElasticityTensor.h.

Referenced by ComputeLayeredCosseratElasticityTensor(), and computeQpElasticityTensor().

◆ _Cijkl

RankFourTensor ComputeLayeredCosseratElasticityTensor::_Cijkl
protected

Inverse of elasticity tensor.

The usual _Eijkl.invSymm() cannot be used here as _Eijkl does not possess the usual symmetries

Definition at line 47 of file ComputeLayeredCosseratElasticityTensor.h.

Referenced by ComputeLayeredCosseratElasticityTensor(), and computeQpElasticityTensor().

◆ _compliance

MaterialProperty<RankFourTensor>& ComputeLayeredCosseratElasticityTensor::_compliance
protected

Compliance tensor (_Eijkl^-1) at the qps.

Definition at line 53 of file ComputeLayeredCosseratElasticityTensor.h.

Referenced by computeQpElasticityTensor().

◆ _effective_stiffness

MaterialProperty<Real>& ComputeElasticityTensorBase::_effective_stiffness
protectedinherited

◆ _Eijkl

RankFourTensor ComputeLayeredCosseratElasticityTensor::_Eijkl
protected

Conventional elasticity tensor.

Definition at line 37 of file ComputeLayeredCosseratElasticityTensor.h.

Referenced by ComputeLayeredCosseratElasticityTensor(), and computeQpElasticityTensor().

◆ _elastic_flexural_rigidity_tensor

MaterialProperty<RankFourTensor>& ComputeLayeredCosseratElasticityTensor::_elastic_flexural_rigidity_tensor
protected

Flexural rigidity tensor at the qps.

Definition at line 50 of file ComputeLayeredCosseratElasticityTensor.h.

Referenced by computeQpElasticityTensor().

◆ _elasticity_tensor

MaterialProperty<RankFourTensor>& ComputeElasticityTensorBase::_elasticity_tensor
protectedinherited

◆ _elasticity_tensor_name

std::string ComputeElasticityTensorBase::_elasticity_tensor_name
protectedinherited

◆ _guarantees

std::map<MaterialPropertyName, std::set<Guarantee> > GuaranteeProvider::_guarantees
privateinherited

◆ _prefactor_function

const Function* const ComputeElasticityTensorBase::_prefactor_function
protectedinherited

prefactor function to multiply the elasticity tensor with

Definition at line 44 of file ComputeElasticityTensorBase.h.

Referenced by computeQpElasticityTensor(), and ComputeElasticityTensorBase::computeQpProperties().


The documentation for this class was generated from the following files:
ComputeLayeredCosseratElasticityTensor::_compliance
MaterialProperty< RankFourTensor > & _compliance
Compliance tensor (_Eijkl^-1) at the qps.
Definition: ComputeLayeredCosseratElasticityTensor.h:53
ComputeElasticityTensorBase::ComputeElasticityTensorBase
ComputeElasticityTensorBase(const InputParameters &parameters)
Definition: ComputeElasticityTensorBase.C:29
ComputeElasticityTensorBase::_effective_stiffness
MaterialProperty< Real > & _effective_stiffness
Definition: ComputeElasticityTensorBase.h:41
GuaranteeProvider::_guarantees
std::map< MaterialPropertyName, std::set< Guarantee > > _guarantees
Definition: GuaranteeProvider.h:37
GuaranteeProvider::issueGuarantee
void issueGuarantee(const MaterialPropertyName &prop_name, Guarantee guarantee)
Definition: GuaranteeProvider.C:27
Guarantee::CONSTANT_IN_TIME
ComputeElasticityTensorBase::computeQpElasticityTensor
virtual void computeQpElasticityTensor()=0
ComputeLayeredCosseratElasticityTensor::_Cijkl
RankFourTensor _Cijkl
Inverse of elasticity tensor.
Definition: ComputeLayeredCosseratElasticityTensor.h:47
ComputeLayeredCosseratElasticityTensor::_Bijkl
RankFourTensor _Bijkl
Flexural rigidity tensor.
Definition: ComputeLayeredCosseratElasticityTensor.h:40
ComputeElasticityTensorBase::_elasticity_tensor
MaterialProperty< RankFourTensor > & _elasticity_tensor
Definition: ComputeElasticityTensorBase.h:40
ComputeLayeredCosseratElasticityTensor::_Eijkl
RankFourTensor _Eijkl
Conventional elasticity tensor.
Definition: ComputeLayeredCosseratElasticityTensor.h:37
ComputeElasticityTensorBase::validParams
static InputParameters validParams()
Definition: ComputeElasticityTensorBase.C:16
ComputeElasticityTensorBase::_elasticity_tensor_name
std::string _elasticity_tensor_name
Definition: ComputeElasticityTensorBase.h:38
ComputeElasticityTensorBase::_base_name
const std::string _base_name
Definition: ComputeElasticityTensorBase.h:37
RankFourTensor
RankFourTensorTempl< Real > RankFourTensor
Definition: ACGrGrElasticDrivingForce.h:20
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