https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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{
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
37void
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
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 // dF/d(dL) as the inverse of the stored d(dL)/dF, instead of hard-coding the
70 // linear-approximation factorization f.times<i, k, l, j>(F).
73 C +
74 (dFddL.singleProductJ((C0.tripleProductJkl(F, F, F) * dL).transpose()) +
75 dFddL.singleProductJ(C0.tripleProductIkl(F, F, F) * dL).transposeIj() +
76 FF * C0.singleProductL(F * dL).transposeKl() * dFddL +
77 FF * C0.singleProductK(dL.transpose() * F) * dFddL) /
78 J -
79 dS.outerProduct(_inv_def_grad[_qp].transpose().initialContraction(dFddL));
80 }
81}
registerMooseObject("SolidMechanicsApp", ComputeHypoelasticStVenantKirchhoffStress)
const MaterialProperty< RankTwoTensor > & _def_grad
The deformation gradient.
virtual void computeQpSmallStress()
Implement the elastic small stress update.
ComputeHypoelasticStVenantKirchhoffStress(const InputParameters &parameters)
const MaterialProperty< RankFourTensor > & _elasticity_tensor
The elasticity tensor.
Provide the Cauchy stress via an objective integration of a small stress.
const MaterialProperty< RankTwoTensor > & _small_stress_old
We need the old value to get the increment.
const MaterialProperty< RankTwoTensor > & _vorticity_increment
Provided for material models that use the vorticity increment.
MaterialProperty< RankTwoTensor > & _small_stress
The updated small stress.
const MaterialProperty< RankTwoTensor > & _strain_increment
Provided for material models that use the strain increment.
const MaterialProperty< RankFourTensor > & _d_deformation_gradient_increment_d_F
d(dL)/dF, stored by the strain calculator
MaterialProperty< RankFourTensor > & _small_jacobian
The updated small algorithmic tangent.
bool _large_kinematics
If true use large deformations.
const MaterialProperty< RankTwoTensor > & _inv_def_grad
Inverse F-bar-stabilized deformation gradient (= _F^{-1}).
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
unsigned int _qp
FEProblemBase & _fe_problem
RankFourTensorTempl< T > singleProductL(const RankTwoTensorTempl< T > &) const
RankFourTensorTempl< T > inverse() const
RankFourTensorTempl< T > singleProductK(const RankTwoTensorTempl< T > &) const
RankFourTensorTempl< T > singleProductJ(const RankTwoTensorTempl< T > &) const
RankFourTensorTempl< T > times(const RankTwoTensorTempl< T > &b) const
RankFourTensorTempl< T > outerProduct(const RankTwoTensorTempl< T > &b) const
const bool & currentlyComputingJacobian() const