https://mooseframework.inl.gov
ComputeHypoelasticStVenantKirchhoffStress.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
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 
13 
16 {
18  params.addClassDescription(
19  "Calculate a small strain elastic stress that is equivalent to the hyperelastic St. "
20  "Venant-Kirchhoff model if integrated using the Truesdell rate.");
21 
22  params.addParam<MaterialPropertyName>(
23  "elasticity_tensor", "elasticity_tensor", "The name of the elasticity tensor.");
24 
25  return params;
26 }
27 
29  const InputParameters & parameters)
31  _elasticity_tensor(getMaterialProperty<RankFourTensor>(
32  getParam<MaterialPropertyName>(_base_name + "elasticity_tensor"))),
33  _def_grad(getMaterialProperty<RankTwoTensor>(_base_name + "deformation_gradient"))
34 {
35 }
36 
37 void
39 {
40  usingTensorIndices(i, j, k, l);
41 
42  // The increment in the spatial velocity gradient
44 
45  // If small kinematics, it falls back to the grade-zero hypoelasticity
46  if (!_large_kinematics)
47  {
50  return;
51  }
52 
53  // Large kinematics:
54  // First push forward the elasticity tensor
55  const RankTwoTensor F = _def_grad[_qp];
56  const Real J = F.det();
57  const RankFourTensor FF = F.times<i, k, j, l>(F);
58  const RankFourTensor FtFt = F.times<k, i, l, j>(F);
60  const RankFourTensor C = FF * C0 * FtFt / J;
61 
62  // Update the small stress
63  const RankTwoTensor dS = C * dL;
65 
66  // Compute the small Jacobian
68  {
69  const RankFourTensor dFddL = _inv_df[_qp].inverse().times<i, k, l, j>(F);
71  C +
72  (dFddL.singleProductJ((C0.tripleProductJkl(F, F, F) * dL).transpose()) +
73  dFddL.singleProductJ(C0.tripleProductIkl(F, F, F) * dL).transposeIj() +
74  FF * C0.singleProductL(F * dL).transposeKl() * dFddL +
75  FF * C0.singleProductK(dL.transpose() * F) * dFddL) /
76  J -
77  dS.outerProduct(_inv_def_grad[_qp].transpose().initialContraction(dFddL));
78  }
79 }
RankFourTensorTempl< T > singleProductJ(const RankTwoTensorTempl< T > &) const
FEProblemBase & _fe_problem
RankFourTensorTempl< T > singleProductL(const RankTwoTensorTempl< T > &) const
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
const MaterialProperty< RankTwoTensor > & _inv_def_grad
Inverse deformation gradient.
const MaterialProperty< RankTwoTensor > & _strain_increment
Provided for material models that use the strain increment.
ComputeHypoelasticStVenantKirchhoffStress(const InputParameters &parameters)
const bool _large_kinematics
If true use large deformations.
static const std::string F
Definition: NS.h:165
unsigned int _qp
registerMooseObject("SolidMechanicsApp", ComputeHypoelasticStVenantKirchhoffStress)
const MaterialProperty< RankTwoTensor > & _vorticity_increment
Provided for material models that use the vorticity increment.
Provide the Cauchy stress via an objective integration of a small stress.
virtual void computeQpSmallStress()
Implement the elastic small stress update.
const MaterialProperty< RankFourTensor > & _elasticity_tensor
The elasticity tensor.
const MaterialProperty< RankTwoTensor > & _small_stress_old
We need the old value to get the increment.
const MaterialProperty< RankTwoTensor > & _inv_df
Inverse incremental deformation gradient.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
MaterialProperty< RankFourTensor > & _small_jacobian
The updated small algorithmic tangent.
MaterialProperty< RankTwoTensor > & _small_stress
The updated small stress.
void addClassDescription(const std::string &doc_string)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
RankFourTensorTempl< T > singleProductK(const RankTwoTensorTempl< T > &) const
const bool & currentlyComputingJacobian() const
RankFourTensorTempl< T > transposeKl() const
static const std::string k
Definition: NS.h:130
static const std::string C
Definition: NS.h:168
const MaterialProperty< RankTwoTensor > & _def_grad
The deformation gradient.