23 "homogenization constraint Jacobian terms");
25 "scalar_variable",
"macro_var",
"Optional scalar field with the macro gradient");
28 "off_diagonal_jacobian",
true,
"Include the off diagonal parts of the constraint Jacobian");
36 _use_off_diagonal(getParam<bool>(
"off_diagonal_jacobian"))
44 std::set<std::string>
vars = TotalLagrangianStressDivergence::additionalROVariables();
45 vars.insert(_kappa_var_ptr->name());
55 std::vector<Real> scalar_residuals(_k_order);
58 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
60 initScalarQpResidual();
61 const auto dV = _JxW[_qp] * _coord[_qp];
66 for (
const auto & [indices, constraint] :
cmap())
68 const auto [i, j] = indices;
69 const auto [ctype, ctarget] = constraint;
70 const auto cval = ctarget->value(_t, _q_point[_qp]);
77 val =
_pk1[_qp](i, j);
79 val =
_F[_qp](i, j) - (Real(i == j));
81 mooseError(
"Unknown constraint type in the integral!");
86 val =
_pk1[_qp](i, j);
88 val = 0.5 * (
_F[_qp](i, j) +
_F[_qp](j, i)) - (Real(i == j));
90 mooseError(
"Unknown constraint type in the integral!");
93 scalar_residuals[h++] += (val - cval) * dV;
98 _assembly, scalar_residuals, _kappa_var_ptr->dofIndices(), _kappa_var_ptr->scalingFactor());
107 _local_ke.resize(_k_order, _k_order);
110 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
112 initScalarQpJacobian(_kappa_var);
113 const auto dV = _JxW[_qp] * _coord[_qp];
118 for (
const auto & [indices1, constraint1] :
cmap())
120 const auto [i, j] = indices1;
121 const auto ctype = constraint1.first;
126 for (
const auto & [indices2, constraint2] :
cmap())
128 const auto [k, l] = indices2;
137 _local_ke(h, m++) += dV * (Real(i == k && j == l));
139 _local_ke(h, m++) += dV * (0.5 * Real(i == k && j == l) + 0.5 * Real(i == l && j == k));
142 mooseError(
"Unknown constraint type in Jacobian calculator!");
148 addJacobian(_assembly,
150 _kappa_var_ptr->dofIndices(),
151 _kappa_var_ptr->dofIndices(),
152 _kappa_var_ptr->scalingFactor());
157 const unsigned int jvar_num)
164 if (jvar_num != _var.number())
167 const auto & jvar = getVariable(jvar_num);
168 const auto jvar_size = jvar.phiSize();
169 _local_ke.resize(_k_order, jvar_size);
177 _fe_problem.prepareShapes(jvar_num, _tid);
182 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
184 const auto dV = _JxW[_qp] * _coord[_qp];
189 for (
const auto & [indices, constraint] :
cmap())
191 std::tie(
_m,
_n) = indices;
192 _ctype = constraint.first;
193 initScalarQpOffDiagJacobian(jvar);
194 for (_j = 0; _j < jvar_size; _j++)
200 addJacobian(_assembly,
202 _kappa_var_ptr->dofIndices(),
204 _kappa_var_ptr->scalingFactor());
209 const unsigned int svar_num)
215 if (svar_num != _kappa_var)
218 _local_ke.resize(_test.size(), _k_order);
220 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
223 const auto dV = _JxW[_qp] * _coord[_qp];
224 for (
const auto & [indices, constraint] :
cmap())
227 std::tie(
_m,
_n) = indices;
228 _ctype = constraint.first;
229 initScalarQpJacobian(svar_num);
230 for (_i = 0; _i < _test.size(); _i++)
237 _assembly, _local_ke, _var.dofIndices(), _kappa_var_ptr->dofIndices(), _var.scalingFactor());
287 return delta_F_stab(
_m,
_n);
289 return 0.5 * (delta_F_stab(
_m,
_n) + delta_F_stab(
_n,
_m));
292 mooseError(
"Unknown constraint type in kernel calculation!");
registerMooseObject("SolidMechanicsApp", HomogenizedTotalLagrangianStressDivergence)
void mooseError(Args &&... args)
Interface for objects that use the homogenization constraint.
static InputParameters validParams()
const Homogenization::ConstraintMap & cmap() const
Get the constraint map.
Total Lagrangian formulation with all homogenization terms (one disp_xyz field and macro_gradient sca...
virtual void computeScalarOffDiagJacobian(const unsigned int jvar_num) override
Method for computing an off-diagonal jacobian component d-_kappa-residual / d-jvar.
virtual Real computeQpOffDiagJacobianScalar(const unsigned int svar_num) override
Method for computing d-_var-residual / d-svar at quadrature points.
const bool _use_off_diagonal
Whether to use the off diagonal term.
Homogenization::ConstraintType _ctype
Type of current homogenization constraint.
virtual Real computeScalarQpOffDiagJacobian(const unsigned int jvar_num) override
Method for computing an off-diagonal jacobian component at quadrature points.
static InputParameters validParams()
virtual std::set< std::string > additionalROVariables() override
Inform moose that this kernel covers the constraint scalar variable.
virtual void computeScalarJacobian() override
Method for computing the scalar variable part of Jacobian for d-_kappa-residual / d-_kappa.
virtual void computeScalarResidual() override
Method for computing the scalar part of residual for _kappa.
virtual void computeOffDiagJacobianScalarLocal(const unsigned int svar_num) override
Method for computing an off-diagonal jacobian component d-_var-residual / d-svar.
unsigned int _m
Indices for off-diagonal Jacobian components.
HomogenizedTotalLagrangianStressDivergence(const InputParameters ¶meters)
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 MaterialProperty< RankTwoTensor > & _F
The actual (stabilized) deformation gradient.
const bool _stabilize_strain
If true calculate the deformation gradient derivatives for F_bar.
const unsigned int _alpha
Which component of the vector residual this kernel is responsible for.
bool _large_kinematics
If true use large deformation kinematics.
const MaterialProperty< RankFourTensor > & _d_F_stab_d_F_avg
const MaterialProperty< RankFourTensor > & _d_F_stab_d_F_ust
Partials of the F-bar-stabilized deformation gradient.
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
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.
virtual RankTwoTensor gradTest(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...