https://mooseframework.inl.gov
TotalLagrangianWeakPlaneStress.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("Plane stress kernel to provide out-of-plane strain contribution.");
19  params.set<unsigned int>("component") = 0;
20  params.suppressParameter<unsigned int>("component");
21  params.suppressParameter<std::vector<VariableName>>("temperature");
22  params.suppressParameter<std::vector<MaterialPropertyName>>("eigenstrain_names");
23  params.suppressParameter<std::vector<VariableName>>("out_of_plane_strain");
24  return params;
25 }
26 
29 {
30 }
31 
32 Real
34 {
35  return _test[_i][_qp] * _pk1[_qp](2, 2);
36 }
37 
38 Real
40 {
41  // Diagonal Jacobian: d(R_zz)/d(strain_zz_j) = test * d(PK1_{2,2})/d(strain_zz_j).
42  // strain_zz feeds `_F[(2,2)]` AFTER F-bar runs, so strain_zz perturbations bypass
43  // F-bar's chain. Use `_dpk1_bypass_fbar` (pk1_jacobian with the F-bar
44  // `_d_F_stab_d_F_ust` factor REPLACED by identity in the sigma chain) for consistency.
45  return _test[_i][_qp] * _dpk1_bypass_fbar[_qp](2, 2, 2, 2) * _phi[_j][_qp];
46 }
47 
48 Real
50 {
51  for (auto beta : make_range(_ndisp))
52  if (jvar == _disp_nums[beta])
53  {
54  // Local PK1_{2,2} Jacobian via _dpk1 (includes local F-bar through the sigma chain).
55  // Displacement perturbations DO go through F-bar's chain, so use the regular
56  // `_dpk1` (= pk1_jacobian WITH the F-bar local correction).
57  Real J = _test[_i][_qp] * _dpk1[_qp].contractionIj(2, 2, gradTrial(beta));
58 
59  // Non-local F-bar contribution to PK1_{2,2}; helper handles the sigma-via-dL chain and
60  // the wrap branch. Guarded on `_stabilize_strain` because `_avg_grad_trial` is only
61  // populated when F-bar is on.
63  {
64  const RankTwoTensor delta_F_avg = _d_F_d_grad_u[_qp] * _avg_grad_trial[beta][_j];
65  J += _test[_i][_qp] * deltaPK1NonLocalFBar(delta_F_avg)(2, 2);
66  }
67  return J;
68  }
69 
70  return 0;
71 }
const MaterialProperty< RankTwoTensor > & _pk1
The 1st Piola-Kirchhoff stress.
std::vector< std::vector< RankTwoTensor > > _avg_grad_trial
static InputParameters validParams()
const bool _stabilize_strain
If true calculate the deformation gradient derivatives for F_bar.
RankTwoTensor deltaPK1NonLocalFBar(const RankTwoTensor &delta_F_avg) const
Non-local F-bar contribution to deltaPK1 at the current _qp, given the perturbation delta_F_avg of th...
T & set(const std::string &name, bool quiet_mode=false)
const MaterialProperty< RankFourTensor > & _dpk1_bypass_fbar
Variant of _dpk1 (= pk1_jacobian) computed WITHOUT the F-bar chain factor _d_F_stab_d_F_ust in the si...
TotalLagrangianWeakPlaneStress(const InputParameters &parameters)
void suppressParameter(const std::string &name)
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
std::vector< unsigned int > _disp_nums
The displacement numbers.
const MaterialProperty< RankFourTensor > & _d_F_d_grad_u
Derivative of F_{n+1} w.r.t. the displacement gradient.
const MaterialProperty< RankFourTensor > & _dpk1
The derivative of the PK1 stress with respect to the deformation gradient (F that the stress material...
const unsigned int _ndisp
Total number of displacements/size of residual vector.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Enforce equilibrium with a total Lagrangian formulation.
registerMooseObject("SolidMechanicsApp", TotalLagrangianWeakPlaneStress)
IntRange< T > make_range(T beg, T end)
void addClassDescription(const std::string &doc_string)
virtual RankTwoTensor gradTrial(unsigned int component) override