18 _stress(getMaterialPropertyByName<
RankTwoTensor>(_base_name +
"cauchy_stress")),
19 _material_jacobian(getMaterialPropertyByName<
RankFourTensor>(_base_name +
"cauchy_jacobian")),
22 _assembly_undisplaced(_fe_problem.assembly(_tid, this->_sys.number())),
23 _grad_phi_undisplaced(_assembly_undisplaced.gradPhi()),
24 _JxW_undisplaced(_assembly_undisplaced.JxW()),
25 _coord_undisplaced(_assembly_undisplaced.coordTransformation()),
26 _q_point_undisplaced(_assembly_undisplaced.qPoints())
34 mooseError(
"The UpdatedLagrangianStressDivergence kernels do not yet support the weak plane "
35 "stress formulation. Please use the TotalLagrangianStressDivergecen kernels.");
42 mooseError(
"`F_bar_mode = incremental` is not yet supported with the UpdatedLagrangian "
43 "kernels; use TotalLagrangianStressDivergence (or `F_bar_mode = total`).");
51 return G::gradOp(component, _grad_test[_i][_qp], _test[_i][_qp], _q_point[_qp]);
61 return gradTrialUnstabilized(component);
69 return G::gradOp(component, _grad_phi[_j][_qp], _phi[_j][_qp], _q_point[_qp]);
78 for (
auto j : make_range(_phi.size()))
81 [
this, component, j](
unsigned int qp)
84 component, _grad_phi_undisplaced[j][qp], _phi[j][qp], _q_point_undisplaced[qp]);
88 if (_large_kinematics)
91 _avg_grad_trial[component][j] *= _F_avg[0].inverse();
99 return gradTest(_alpha).doubleContraction(_stress[_qp]);
107 const auto grad_test = gradTest(alpha);
108 const auto grad_trial = gradTrialUnstabilized(beta);
119 _large_kinematics ? grad_trial * _F_actual[_qp] : grad_trial;
120 const RankTwoTensor delta_F_ust_local = _d_F_d_grad_u[_qp] * delta_grad_u_local;
127 if (_stabilize_strain)
130 _large_kinematics ? _avg_grad_trial[beta][_j] * _F_avg[_qp] : _avg_grad_trial[beta][_j];
131 delta_F_avg = _d_F_d_grad_u[_qp] * delta_grad_u_avg;
137 _d_F_stab_d_F_ust[_qp] * delta_F_ust_local + _d_F_stab_d_F_avg[_qp] * delta_F_avg;
139 const RankTwoTensor delta_dL = _d_deformation_gradient_increment_d_F[_qp] * delta_F_stab;
142 Real J = grad_test.doubleContraction(_material_jacobian[_qp] * delta_dL);
145 if (_large_kinematics)
147 J += _stress[_qp].doubleContraction(grad_test) * grad_trial.trace() -
148 _stress[_qp].doubleContraction(grad_test * grad_trial);
160 for (
const auto deigen_darg : _deigenstrain_dargs[cvar])
161 total_deigen += (*deigen_darg)[_qp];
166 return -(Csym * total_deigen).doubleContraction(gradTest(_alpha)) * _temperature->phi()[_j][_qp];
void mooseError(Args &&... args)
registerMooseObject("SolidMechanicsApp", UpdatedLagrangianStressDivergence)
Base class of the "Lagrangian" kernel system.
const bool _stabilize_strain
If true calculate the deformation gradient derivatives for F_bar.
const MooseVariable * _out_of_plane_strain
Out-of-plane strain, if provided.
const FBarMode _F_bar_mode
What F gets F-bar volumetric correction (Total vs.
RankFourTensorTempl< T > transposeMajor() const
Enforce equilibrium with an updated Lagrangian formulation.
virtual RankTwoTensor gradTest(unsigned int component) override
virtual RankTwoTensor gradTrialUnstabilized(unsigned int component)
The unstabilized trial function gradient.
virtual void precalculateJacobianDisplacement(unsigned int component) override
Prepare the average shape function gradients for stabilization.
UpdatedLagrangianStressDivergenceBase(const InputParameters ¶meters)
virtual Real computeQpJacobianTemperature(unsigned int cvar) override
virtual RankTwoTensor gradTrial(unsigned int component) override
virtual Real computeQpResidual() override
virtual Real computeQpJacobianDisplacement(unsigned int alpha, unsigned int beta) override
auto elementAverage(const Functor &f, const MooseArray< Real > &JxW, const MooseArray< Real > &coord)