https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
31
32Real
34{
35 return _test[_i][_qp] * _pk1[_qp](2, 2);
36}
37
38Real
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
48Real
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}
registerMooseObject("SolidMechanicsApp", TotalLagrangianWeakPlaneStress)
void suppressParameter(const std::string &name)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
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...
const bool _stabilize_strain
If true calculate the deformation gradient derivatives for F_bar.
const unsigned int _ndisp
Total number of displacements/size of residual vector.
std::vector< unsigned int > _disp_nums
The displacement numbers.
std::vector< std::vector< RankTwoTensor > > _avg_grad_trial
const MaterialProperty< RankFourTensor > & _d_F_d_grad_u
Derivative of F_{n+1} w.r.t. the displacement gradient.
Enforce equilibrium with a total Lagrangian formulation.
virtual RankTwoTensor gradTrial(unsigned int component) override
const MaterialProperty< RankTwoTensor > & _pk1
The 1st Piola-Kirchhoff stress.
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...
const MaterialProperty< RankFourTensor > & _dpk1
The derivative of the PK1 stress with respect to the deformation gradient (F that the stress material...
static InputParameters validParams()
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
TotalLagrangianWeakPlaneStress(const InputParameters &parameters)