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())
31 mooseError(
"The UpdatedLagrangianStressDivergence kernels requires " 32 "used_displaced_mesh = true for large_kinematics = true");
36 mooseError(
"The UpdatedLagrangianStressDivergence kernels requires " 37 "used_displaced_mesh = false for large_kinematics = false");
41 mooseError(
"The UpdatedLagrangianStressDivergence kernels do not yet support the weak plane " 42 "stress formulation. Please use the TotalLagrangianStressDivergecen kernels.");
50 return G::gradOp(
component, _grad_test[_i][_qp], _test[_i][_qp], _q_point[_qp]);
57 return _stabilize_strain ? gradTrialStabilized(
component) : gradTrialUnstabilized(
component);
65 return G::gradOp(
component, _grad_phi[_j][_qp], _phi[_j][_qp], _q_point[_qp]);
73 const auto Gb = G::gradOp(
component, _grad_phi[_j][_qp], _phi[_j][_qp], _q_point[_qp]);
75 const auto Ga = _avg_grad_trial[
component][_j];
92 component, _grad_phi_undisplaced[
j][qp], _phi[
j][qp], _q_point_undisplaced[qp]);
96 if (_large_kinematics)
99 _avg_grad_trial[
component][
j] *= _F_avg[0].inverse();
107 return gradTest(_alpha).doubleContraction(_stress[_qp]);
115 const auto grad_test = gradTest(
alpha);
116 const auto grad_trial = gradTrial(beta);
124 Real J = grad_test.doubleContraction(_material_jacobian[_qp] * (_f_inv[_qp] * grad_trial));
127 if (_large_kinematics)
130 const auto grad_trial_ust = gradTrialUnstabilized(beta);
131 J += _stress[_qp].doubleContraction(grad_test) * grad_trial_ust.trace() -
132 _stress[_qp].doubleContraction(grad_test * grad_trial_ust);
144 for (
const auto deigen_darg : _deigenstrain_dargs[cvar])
145 total_deigen += (*deigen_darg)[_qp];
148 RankFourTensor Csym = 0.5 * (
C +
C.transposeMajor().transposeIj().transposeMajor());
150 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
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.
static RankTwoTensorTempl Identity()
virtual RankTwoTensor gradTrialStabilized(unsigned int component)
The stabilized trial function gradient.
const bool _large_kinematics
If true use large deformation kinematics.
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
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.