18 params.
addClassDescription(
"Compute an isotropic elasticity tensor for elastic constants that " 19 "change as a function of material properties");
21 "youngs_modulus",
"Name of material property defining the Young's Modulus");
23 "poissons_ratio",
"Name of material property defining the Poisson's Ratio");
25 "args",
"Variable dependence for the Young's Modulus and Poisson's Ratio materials");
32 _youngs_modulus(getMaterialProperty<
Real>(
"youngs_modulus")),
33 _poissons_ratio(getMaterialProperty<
Real>(
"poissons_ratio")),
34 _num_args(coupledComponents(
"args")),
35 _dyoungs_modulus(_num_args),
36 _d2youngs_modulus(_num_args),
37 _dpoissons_ratio(_num_args),
38 _d2poissons_ratio(_num_args),
39 _delasticity_tensor(_num_args),
40 _d2elasticity_tensor(_num_args),
41 _isotropic_elastic_constants(2)
47 for (
unsigned int i = 0; i <
_num_args; ++i)
49 const VariableName & iname =
coupledName(
"args", i);
50 _dyoungs_modulus[i] = &getMaterialPropertyDerivative<Real>(
"youngs_modulus", iname);
51 _dpoissons_ratio[i] = &getMaterialPropertyDerivative<Real>(
"poissons_ratio", iname);
64 &getMaterialPropertyDerivative<Real>(
"youngs_modulus", iname, jname);
66 &getMaterialPropertyDerivative<Real>(
"poissons_ratio", iname, jname);
76 validateCoupling<Real>(
"youngs_modulus");
77 validateCoupling<Real>(
"poissons_ratio");
78 for (
unsigned int i = 0; i <
_num_args; ++i)
80 const VariableName & iname =
coupledName(
"args", i);
110 for (
unsigned int i = 0; i <
_num_args; ++i)
117 const Real dlambda = (E * dnu + dE * nu) / ((1.0 + nu) * (1.0 - 2.0 * nu)) -
118 E * nu * dnu / ((1.0 + nu) * (1.0 + nu) * (1.0 - 2.0 * nu)) +
119 2.0 * E * nu * dnu / ((1.0 + nu) * (1.0 - 2.0 * nu) * (1.0 - 2.0 * nu));
120 const Real dG = dE / (2.0 * (1.0 + nu)) - 2.0 * E * dnu / (4.0 * (1.0 + nu) * (1.0 + nu));
137 const Real d2lambda =
138 1.0 / ((1.0 + nu) * (2.0 * nu - 1.0)) *
139 (-E * d2nu - nu * d2E - dEi * dnuj - dEj * dnui +
140 (2.0 * E * d2nu * nu + 4.0 * dnui * dnuj * E + 2.0 * dEi * dnuj * nu +
141 2.0 * dEj * dnui * nu) /
143 8.0 * dnui * dnuj * E * nu / ((2.0 * nu - 1.0) * (2.0 * nu - 1.0)) +
144 (E * d2nu * nu + 2.0 * E * dnui * dnuj + dEi * dnuj * nu + dEj * dnui * nu) /
146 4.0 * E * nu * dnui * dnuj / ((1.0 + nu) * (2.0 * nu - 1.0)) -
147 2.0 * E * dnui * dnuj * nu / ((nu + 1.0) * (nu + 1.0)));
148 const Real d2G = 1.0 / (nu + 1.0) *
149 (0.5 * d2E - (E * d2nu + dEi * dnuj + dEj * dnui) / (2.0 * nu + 2.0) +
150 dnui * dnuj * E / ((nu + 1.0) * (nu + 1.0)));
const MaterialProperty< Real > & _youngs_modulus
Material defining the Young's Modulus.
std::vector< std::vector< const MaterialProperty< Real > * > > _d2poissons_ratio
second derivatives of the Poisson's Ratio with respect to the args
virtual void initQpStatefulProperties() override
FEProblemBase & _fe_problem
const MaterialProperty< Real > & _poissons_ratio
Material defining the Poisson's Ratio.
VariableName coupledName(const std::string &var_name, unsigned int comp=0) const
ComputeElasticityTensorBase the base class for computing elasticity tensors.
const MaterialPropertyName derivativePropertyNameSecond(const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
void issueGuarantee(const MaterialPropertyName &prop_name, Guarantee guarantee)
GenericMaterialProperty< T, is_ad > & _elasticity_tensor
ComputeVariableIsotropicElasticityTensor defines an elasticity tensor material for isotropic material...
const MaterialPropertyName derivativePropertyNameFirst(const MaterialPropertyName &base, const SymbolName &c1) const
std::vector< std::vector< MaterialProperty< RankFourTensor > * > > _d2elasticity_tensor
second derivatives of the elasticity tensor with respect to the args
const unsigned int _num_args
number of variables the moduli depend on
virtual bool isMatPropRequested(const std::string &prop_name) const
static InputParameters validParams()
std::vector< const MaterialProperty< Real > * > _dpoissons_ratio
first derivatives of the Poisson's Ratio with respect to the args
ComputeVariableIsotropicElasticityTensor(const InputParameters ¶meters)
virtual void computeQpElasticityTensor() override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
registerMooseObject("SolidMechanicsApp", ComputeVariableIsotropicElasticityTensor)
std::string _elasticity_tensor_name
std::vector< MaterialProperty< RankFourTensor > * > _delasticity_tensor
first derivatives of the elasticity tensor with respect to the args
std::vector< std::vector< const MaterialProperty< Real > * > > _d2youngs_modulus
second derivatives of the Young's Modulus with respect to the args
virtual void initialSetup() override
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
std::vector< const MaterialProperty< Real > * > _dyoungs_modulus
first derivatives of the Young's Modulus with respect to the args
static InputParameters validParams()