23 "homogenization constraint Jacobian terms");
25 "scalar_variable",
"macro_var",
"Optional scalar field with the macro gradient");
40 std::set<std::string>
vars = TotalLagrangianStressDivergence::additionalROVariables();
41 vars.insert(_kappa_var_ptr->name());
51 std::vector<Real> scalar_residuals(_k_order);
54 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
56 initScalarQpResidual();
57 const auto dV = _JxW[_qp] * _coord[_qp];
62 for (
const auto & [indices, constraint] :
cmap())
64 const auto [i,
j] = indices;
65 const auto [ctype, ctarget] = constraint;
66 const auto cval = ctarget->value(_t, _q_point[_qp]);
73 val =
_pk1[_qp](i,
j);
75 val =
_F[_qp](i,
j) - (
Real(i ==
j));
77 mooseError(
"Unknown constraint type in the integral!");
82 val =
_pk1[_qp](i,
j);
84 val = 0.5 * (
_F[_qp](i,
j) +
_F[_qp](
j, i)) - (
Real(i ==
j));
86 mooseError(
"Unknown constraint type in the integral!");
89 scalar_residuals[h++] += (val - cval) * dV;
94 _assembly, scalar_residuals, _kappa_var_ptr->dofIndices(), _kappa_var_ptr->scalingFactor());
103 _local_ke.resize(_k_order, _k_order);
106 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
108 initScalarQpJacobian(_kappa_var);
109 const auto dV = _JxW[_qp] * _coord[_qp];
114 for (
const auto & [indices1, constraint1] :
cmap())
116 const auto [i,
j] = indices1;
117 const auto ctype = constraint1.first;
122 for (
const auto & [indices2, constraint2] :
cmap())
124 const auto [
k, l] = indices2;
126 _local_ke(h, m++) += dV * (
_dpk1[_qp](i,
j,
k, l));
130 _local_ke(h, m++) += dV * (
Real(i ==
k &&
j == l));
132 _local_ke(h, m++) += dV * (0.5 *
Real(i ==
k &&
j == l) + 0.5 *
Real(i == l &&
j ==
k));
135 mooseError(
"Unknown constraint type in Jacobian calculator!");
141 addJacobian(_assembly,
143 _kappa_var_ptr->dofIndices(),
144 _kappa_var_ptr->dofIndices(),
145 _kappa_var_ptr->scalingFactor());
150 const unsigned int jvar_num)
154 if (jvar_num != _var.number())
157 const auto & jvar = getVariable(jvar_num);
158 const auto jvar_size = jvar.phiSize();
159 _local_ke.resize(_k_order, jvar_size);
161 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
163 const auto dV = _JxW[_qp] * _coord[_qp];
168 for (
const auto & [indices, constraint] :
cmap())
170 std::tie(
_m,
_n) = indices;
171 _ctype = constraint.first;
172 initScalarQpOffDiagJacobian(jvar);
173 for (_j = 0; _j < jvar_size; _j++)
179 addJacobian(_assembly,
181 _kappa_var_ptr->dofIndices(),
183 _kappa_var_ptr->scalingFactor());
188 const unsigned int svar_num)
191 if (svar_num != _kappa_var)
194 _local_ke.resize(_test.size(), _k_order);
196 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
199 const auto dV = _JxW[_qp] * _coord[_qp];
200 for (
const auto & [indices, constraint] :
cmap())
203 std::tie(
_m,
_n) = indices;
204 _ctype = constraint.first;
205 initScalarQpJacobian(svar_num);
206 for (_i = 0; _i < _test.size(); _i++)
213 _assembly, _local_ke, _var.dofIndices(), _kappa_var_ptr->dofIndices(), _var.scalingFactor());
236 mooseError(
"Unknown constraint type in kernel calculation!");
const unsigned int _alpha
Which component of the vector residual this kernel is responsible for.
const MaterialProperty< RankTwoTensor > & _pk1
The 1st Piola-Kirchhoff stress.
void mooseError(Args &&... args)
static InputParameters validParams()
registerMooseObject("SolidMechanicsApp", HomogenizedTotalLagrangianStressDivergence)
virtual void computeScalarOffDiagJacobian(const unsigned int jvar_num) override
Method for computing an off-diagonal jacobian component d-_kappa-residual / d-jvar.
const MaterialProperty< RankTwoTensor > & _F
The actual (stabilized) deformation gradient.
virtual RankTwoTensor gradTest(unsigned int component) override
const bool _large_kinematics
If true use large deformation kinematics.
Interface for objects that use the homogenization constraint.
virtual Real computeQpOffDiagJacobianScalar(const unsigned int svar_num) override
Method for computing d-_var-residual / d-svar at quadrature points.
virtual void computeOffDiagJacobianScalarLocal(const unsigned int svar_num) override
Method for computing an off-diagonal jacobian component d-_var-residual / d-svar. ...
static InputParameters validParams()
virtual Real computeScalarQpOffDiagJacobian(const unsigned int jvar_num) override
Method for computing an off-diagonal jacobian component at quadrature points.
Total Lagrangian formulation with all homogenization terms (one disp_xyz field and macro_gradient sca...
const MaterialProperty< RankFourTensor > & _dpk1
The derivative of the PK1 stress with respect to the deformation gradient.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
unsigned int _m
Indices for off-diagonal Jacobian components.
Enforce equilibrium with a total Lagrangian formulation.
Homogenization::ConstraintType _ctype
Type of current homogenization constraint.
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
HomogenizedTotalLagrangianStressDivergence(const InputParameters ¶meters)
virtual void computeScalarResidual() override
Method for computing the scalar part of residual for _kappa.
virtual void computeScalarJacobian() override
Method for computing the scalar variable part of Jacobian for d-_kappa-residual / d-_kappa...
virtual RankTwoTensor gradTrial(unsigned int component) override
virtual std::set< std::string > additionalROVariables() override
Inform moose that this kernel covers the constraint scalar variable.
static const std::string k
const Homogenization::ConstraintMap & cmap() const
Get the constraint map.