https://mooseframework.inl.gov
ComputeLagrangianStressPK1.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 
14 {
16 
17  params.addClassDescription("Stress update based on the first Piola-Kirchhoff stress");
18 
19  return params;
20 }
21 
23  : ComputeLagrangianStressBase(parameters),
24  _inv_df(getMaterialPropertyByName<RankTwoTensor>(_base_name +
25  "inverse_incremental_deformation_gradient")),
26  _F(getMaterialPropertyByName<RankTwoTensor>(_base_name + "deformation_gradient"))
27 {
28 }
29 
30 void
32 {
34  computeQpCauchyStress(); // This could be "switched"
35 }
36 
37 void
39 {
40  // Actually do the (annoying) wrapping
42  {
43  _cauchy_stress[_qp] = _pk1_stress[_qp] * _F[_qp].transpose() / _F[_qp].det();
44 
45  auto f = _inv_df[_qp].inverse();
46  usingTensorIndices(i_, j_, k_, l_);
47  _cauchy_jacobian[_qp] = _cauchy_stress[_qp].times<i_, l_, j_, k_>(f) -
48  _cauchy_stress[_qp].times<i_, j_, k_, l_>(f.transpose());
50  _pk1_jacobian[_qp].tripleProductJkl(_F[_qp], f.transpose(), _F[_qp]) / _F[_qp].det();
51  }
52  // Small deformations these are the same
53  else
54  {
57  }
58 }
const MaterialProperty< RankTwoTensor > & _F
Deformation gradient.
static InputParameters validParams()
MaterialProperty< RankTwoTensor > & _pk1_stress
The 1st Piola-Kirchhoff stress.
const bool _large_kinematics
If true use large deformations.
unsigned int _qp
MaterialProperty< RankFourTensor > & _pk1_jacobian
The derivative of the 1st PK stress wrt the deformation gradient.
virtual void computeQpCauchyStress()
Wrap the PK stress to get the Cauchy stress.
Real f(Real x)
Test function for Brents method.
MaterialProperty< RankTwoTensor > & _cauchy_stress
The Cauchy stress.
Provide stresses in the form required for the Lagrangian kernels.
ComputeLagrangianStressPK1(const InputParameters &parameters)
virtual void computeQpStressUpdate() override
Calculate the stress update to provide both measures (cauchy and pk1)
virtual void computeQpPK1Stress()=0
Provide for the actual PK stress update (just PK1)
static InputParameters validParams()
void addClassDescription(const std::string &doc_string)
MaterialProperty< RankFourTensor > & _cauchy_jacobian
The derivative of the Cauchy stress wrt the increment in the spatial velocity gradient.
const MaterialProperty< RankTwoTensor > & _inv_df
Inverse incremental deformation gradient.