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]);
69 return G::gradOp(
component, _grad_phi[_j][_qp], _phi[_j][_qp], _q_point[_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];
164 RankFourTensor Csym = 0.5 * (
C +
C.transposeMajor().transposeIj().transposeMajor());
166 return -(Csym * total_deigen).doubleContraction(gradTest(_alpha)) * _temperature->phi()[_j][_qp];
virtual RankTwoTensor gradTrial(unsigned int component) override
virtual RankTwoTensor gradTest(unsigned int component) override
void mooseError(Args &&... args)
static const std::string component
const bool _stabilize_strain
If true calculate the deformation gradient derivatives for F_bar.
virtual Real computeQpResidual() override
virtual Real computeQpJacobianDisplacement(unsigned int alpha, unsigned int beta) override
const MooseVariable * _out_of_plane_strain
Out-of-plane strain, if provided.
virtual RankTwoTensor gradTrialUnstabilized(unsigned int component)
The unstabilized trial function gradient.
registerMooseObject("SolidMechanicsApp", UpdatedLagrangianStressDivergence)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string alpha
const FBarMode _F_bar_mode
What F gets F-bar volumetric correction (Total vs.
IntRange< T > make_range(T beg, T end)
auto elementAverage(const Functor &f, const MooseArray< Real > &JxW, const MooseArray< Real > &coord)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
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
Base class of the "Lagrangian" kernel system.
static const std::string C
Enforce equilibrium with an updated Lagrangian formulation.