https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | 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 Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 ComputeLayeredCosseratElasticityTensor (const InputParameters &parameters)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialPropertyByName (const std::string &name)
 
void validateDerivativeMaterialPropertyBase (const std::string &base)
 
const MaterialPropertyName derivativePropertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName derivativePropertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName derivativePropertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName derivativePropertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
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.
 
RankFourTensor _Bijkl
 Flexural rigidity tensor.
 
RankFourTensor _Cijkl
 Inverse of elasticity tensor.
 
MaterialProperty< RankFourTensor > & _elastic_flexural_rigidity_tensor
 Flexural rigidity tensor at the qps.
 
MaterialProperty< RankFourTensor > & _compliance
 Compliance tensor (_Eijkl^-1) at the qps.
 
const std::string _base_name
 Base name of the material system.
 
std::string _elasticity_tensor_name
 
GenericMaterialProperty< T, is_ad > & _elasticity_tensor
 
GenericMaterialProperty< Real, is_ad > & _effective_stiffness
 
const Function *const _prefactor_function
 prefactor function to multiply the elasticity tensor with
 

Private Member Functions

bool haveMaterialProperty (const std::string &prop_name)
 
std::vector< VariableName > buildVariableVector (const VariableName &c1, const VariableName &c2, const VariableName &c3)
 
void validateCouplingHelper (const MaterialPropertyName &base, const std::vector< VariableName > &c, const System &system, std::vector< VariableName > &missing)
 
bool isNotObjectVariable (const VariableName &name)
 

Private Attributes

FEProblemBase_dmi_fe_problem
 
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 21 of file ComputeLayeredCosseratElasticityTensor.h.

Constructor & Destructor Documentation

◆ ComputeLayeredCosseratElasticityTensor()

ComputeLayeredCosseratElasticityTensor::ComputeLayeredCosseratElasticityTensor ( const InputParameters parameters)

Definition at line 35 of file ComputeLayeredCosseratElasticityTensor.C.

37 : ComputeElasticityTensorBase(parameters),
42 declareProperty<RankFourTensor>("elastic_flexural_rigidity_tensor")),
43 _compliance(declareProperty<RankFourTensor>(_base_name + "compliance_tensor"))
44{
45 if (!isParamValid("elasticity_tensor_prefactor"))
47
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");
53
54 // shear modulus of solid
55 const Real G = 0.5 * E / (1.0 + nu);
56 // shear modulus of jointed material
57 const Real Gprime = G * b * ks / (b * ks + G);
58
59 const Real a0000 =
60 (b * kn > 0.0)
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);
64 const Real a2222 =
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);
67 const Real a0101 = G;
68 const Real a66 = Gprime;
69 const Real a77 = 0.5 * (G + Gprime);
70
71 // Eijkl does not obey the usual symmetries, viz Eijkl != Ejikl, so must fill manually
72 _Eijkl(0, 0, 0, 0) = _Eijkl(1, 1, 1, 1) = a0000;
73 _Eijkl(0, 0, 1, 1) = _Eijkl(1, 1, 0, 0) = a0011;
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) =
78 _Eijkl(1, 2, 2, 1) = _Eijkl(2, 1, 1, 2) = a66;
79 _Eijkl(2, 0, 2, 0) = _Eijkl(2, 1, 2, 1) = a77;
80
81 // most of Bijkl is zero since the only nonzero moment stresses are m01 and m10.
82 // It also does not have the usual symmetries.
83 const Real D0 = E * Utility::pow<3>(b) / 12.0 / (1.0 - nu * nu); // bending rigidity of a layer
84 const Real b0101 = D0 / b * G / (2.0 * b * ks + G);
85 const Real b0110 = -nu * b0101;
86 _Bijkl(0, 1, 0, 1) = _Bijkl(1, 0, 1, 0) = b0101;
87 _Bijkl(0, 1, 1, 0) = _Bijkl(1, 0, 0, 1) = b0110;
88
89 // The compliance tensor also does not obey the usual symmetries, and
90 // this is the main reason it is calculated here, since we can't use
91 // _Eijkl.invSymm()
92 const Real pre = (nu - 1.0) / (a0000 * (nu - 1.0) + 2.0 * a2222 * Utility::pow<2>(nu));
93 const Real cp0000 =
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);
96 _Cijkl(0, 0, 0, 0) = _Cijkl(1, 1, 1, 1) = pre * cp0000;
97 _Cijkl(0, 0, 1, 1) = _Cijkl(1, 1, 0, 0) = pre * cp0011;
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;
104 _Cijkl(2, 0, 2, 0) = _Cijkl(2, 1, 2, 1) = slip;
105}
ComputeElasticityTensorBaseTempl< false > ComputeElasticityTensorBase
@ CONSTANT_IN_TIME
const std::string _base_name
Base name of the material system.
MaterialProperty< RankFourTensor > & _elastic_flexural_rigidity_tensor
Flexural rigidity tensor at the qps.
RankFourTensor _Eijkl
Conventional elasticity tensor.
RankFourTensor _Cijkl
Inverse of elasticity tensor.
MaterialProperty< RankFourTensor > & _compliance
Compliance tensor (_Eijkl^-1) at the qps.
void issueGuarantee(const MaterialPropertyName &prop_name, Guarantee guarantee)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Member Function Documentation

◆ computeQpElasticityTensor()

void ComputeLayeredCosseratElasticityTensor::computeQpElasticityTensor ( )
protectedvirtual

Implements ComputeElasticityTensorBaseTempl< is_ad, T >.

Definition at line 108 of file ComputeLayeredCosseratElasticityTensor.C.

109{
112 _compliance[_qp] = _Cijkl;
113
115 _compliance[_qp] /= _prefactor_function->value(_t, _q_point[_qp]);
116}
GenericMaterialProperty< T, is_ad > & _elasticity_tensor
const Function *const _prefactor_function
prefactor function to multiply the elasticity tensor with
virtual Real value(Real t, const Point &p) const

◆ computeQpProperties()

template<bool is_ad, typename T = RankFourTensor>
virtual void ComputeElasticityTensorBaseTempl< is_ad, T >::computeQpProperties ( )
protectedvirtualinherited

◆ 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}
std::map< MaterialPropertyName, std::set< Guarantee > > _guarantees

◆ 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 18 of file ComputeLayeredCosseratElasticityTensor.C.

19{
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.");
24 params.addRequiredParam<Real>("young", "The Young's modulus of the layered materials");
25 params.addRequiredParam<Real>("poisson", "The Poisson's ratio of the layered materials");
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");
32 return params;
33}
static InputParameters validParams()
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _base_name

template<bool is_ad, typename T = RankFourTensor>
const std::string ComputeElasticityTensorBaseTempl< is_ad, T >::_base_name
protectedinherited

◆ _Bijkl

RankFourTensor ComputeLayeredCosseratElasticityTensor::_Bijkl
protected

Flexural rigidity tensor.

Definition at line 35 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 42 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 48 of file ComputeLayeredCosseratElasticityTensor.h.

Referenced by computeQpElasticityTensor().

◆ _effective_stiffness

template<bool is_ad, typename T = RankFourTensor>
GenericMaterialProperty<Real, is_ad>& ComputeElasticityTensorBaseTempl< is_ad, T >::_effective_stiffness
protectedinherited

Definition at line 40 of file ComputeElasticityTensorBase.h.

◆ _Eijkl

RankFourTensor ComputeLayeredCosseratElasticityTensor::_Eijkl
protected

Conventional elasticity tensor.

Definition at line 32 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 45 of file ComputeLayeredCosseratElasticityTensor.h.

Referenced by computeQpElasticityTensor().

◆ _elasticity_tensor

template<bool is_ad, typename T = RankFourTensor>
GenericMaterialProperty<T, is_ad>& ComputeElasticityTensorBaseTempl< is_ad, T >::_elasticity_tensor
protectedinherited

◆ _elasticity_tensor_name

template<bool is_ad, typename T = RankFourTensor>
std::string ComputeElasticityTensorBaseTempl< is_ad, T >::_elasticity_tensor_name
protectedinherited

◆ _guarantees

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

◆ _prefactor_function

template<bool is_ad, typename T = RankFourTensor>
const Function* const ComputeElasticityTensorBaseTempl< is_ad, T >::_prefactor_function
protectedinherited

prefactor function to multiply the elasticity tensor with

Definition at line 43 of file ComputeElasticityTensorBase.h.

Referenced by computeQpElasticityTensor().


The documentation for this class was generated from the following files: