29 "homogenization constraint Jacobian terms");
31 "scalar_variable",
"macro_var",
"Optional scalar field with the macro gradient");
33 params.
addRequiredParam<
unsigned int>(
"prime_scalar",
"Either 0=_var or 1=_other scalar");
37 "Type of each constraint: strain, stress, or none. The types are specified in the " 38 "column-major order, and there must be 9 entries in total.");
40 "targets",
"Functions giving the targets to hit for constraint types that are not none.");
48 _beta(getParam<unsigned
int>(
"prime_scalar")),
49 _kappao_var_ptr(getScalarVar(
"macro_other", 0)),
50 _kappao_var(coupledScalar(
"macro_other")),
51 _ko_order(getScalarVar(
"macro_other", 0)->order()),
52 _kappa_other(coupledScalarValue(
"macro_other"))
55 auto types = getParam<MultiMooseEnum>(
"constraint_types");
57 mooseError(
"Number of constraint types must equal dim * dim. ", types.size(),
" are provided.");
60 const std::vector<FunctionName> & fnames = getParam<std::vector<FunctionName>>(
"targets");
63 unsigned int fcount = 0;
71 const Function *
const f = &getFunctionByName(fnames[fcount++]);
101 std::vector<Real> scalar_residuals(_k_order);
106 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
108 initScalarQpResidual();
109 Real dV = _JxW[_qp] * _coord[_qp];
111 for (
auto && [indices, constraint] :
_cmap)
113 auto && [i,
j] = indices;
114 auto && [ctype, ctarget] = constraint;
134 unsigned int r_ind = -
_beta + _h;
139 scalar_residuals[r_ind] += dV * (
_pk1[_qp](i,
j) - ctarget->value(_t, _q_point[_qp]));
141 scalar_residuals[r_ind] +=
142 dV * (
_F[_qp](i,
j) - (
Real(i ==
j) + ctarget->value(_t, _q_point[_qp])));
144 mooseError(
"Unknown constraint type in the integral!");
149 scalar_residuals[r_ind] += dV * (
_pk1[_qp](i,
j) - ctarget->value(_t, _q_point[_qp]));
151 scalar_residuals[r_ind] += dV * (0.5 * (
_F[_qp](i,
j) +
_F[_qp](
j, i)) -
152 (
Real(i ==
j) + ctarget->value(_t, _q_point[_qp])));
154 mooseError(
"Unknown constraint type in the integral!");
161 _assembly, scalar_residuals, _kappa_var_ptr->dofIndices(), _kappa_var_ptr->scalingFactor());
167 _local_ke.resize(_k_order, _k_order);
172 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
174 initScalarQpJacobian(_kappa_var);
175 Real dV = _JxW[_qp] * _coord[_qp];
178 for (
auto && [indices1, constraint1] :
_cmap)
180 auto && [i,
j] = indices1;
181 auto && ctype = constraint1.first;
199 for (
auto && indices2 :
_cmap)
201 auto && [
a,
b] = indices2.first;
218 unsigned int c_ind = -
_beta + _l;
221 _local_ke(-
_beta + _h, c_ind) += dV * (
_dpk1[_qp](i,
j,
a,
b));
225 _local_ke(-
_beta + _h, c_ind) += dV * (
Real(i ==
a &&
j ==
b));
227 _local_ke(-
_beta + _h, c_ind) +=
228 dV * (0.5 *
Real(i ==
a &&
j ==
b) + 0.5 *
Real(i ==
b &&
j ==
a));
231 mooseError(
"Unknown constraint type in Jacobian calculator!");
238 addJacobian(_assembly,
240 _kappa_var_ptr->dofIndices(),
241 _kappa_var_ptr->dofIndices(),
242 _kappa_var_ptr->scalingFactor());
247 const unsigned int jvar_num)
250 if (jvar_num == _var.number())
252 _local_ke.resize(_k_order, _test.size());
254 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
258 Real dV = _JxW[_qp] * _coord[_qp];
259 for (
auto && [indices, constraint] :
_cmap)
278 _ctype = constraint.first;
279 initScalarQpOffDiagJacobian(_var);
280 for (_j = 0; _j < _test.size(); _j++)
286 addJacobian(_assembly,
288 _kappa_var_ptr->dofIndices(),
290 _kappa_var_ptr->scalingFactor());
296 const unsigned int svar_num)
299 if (svar_num == _kappa_var)
301 _local_ke.resize(_test.size(), _k_order);
303 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
307 Real dV = _JxW[_qp] * _coord[_qp];
308 for (
auto && [indices, constraint] :
_cmap)
327 _ctype = constraint.first;
328 initScalarQpJacobian(svar_num);
329 for (_i = 0; _i < _test.size(); _i++)
337 addJacobian(_assembly,
340 _kappa_var_ptr->dofIndices(),
341 _var.scalingFactor());
348 if (svar_num == _kappa_var)
357 if (jvar_num == _var.number())
368 mooseError(
"Unknown constraint type in kernel calculation!");
376 const unsigned int svar_num)
386 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
388 initScalarQpJacobian(_kappa_var);
389 Real dV = _JxW[_qp] * _coord[_qp];
392 for (
auto && [indices1, constraint1] :
_cmap)
394 auto && [i,
j] = indices1;
395 auto && ctype = constraint1.first;
413 for (
auto && indices2 :
_cmap)
415 auto && [
a,
b] = indices2.first;
436 _local_ke(-
_beta + _h, c_ind) += dV * (
_dpk1[_qp](i,
j,
a,
b));
440 _local_ke(-
_beta + _h, c_ind) += dV * (
Real(i ==
a &&
j ==
b));
442 _local_ke(-
_beta + _h, c_ind) +=
443 dV * (0.5 *
Real(i ==
a &&
j ==
b) + 0.5 *
Real(i ==
b &&
j ==
a));
446 mooseError(
"Unknown constraint type in Jacobian calculator!");
453 addJacobian(_assembly,
455 _kappa_var_ptr->dofIndices(),
457 _kappa_var_ptr->scalingFactor());
static InputParameters validParams()
virtual Real computeScalarQpOffDiagJacobian(const unsigned int jvar_num) override
Method for computing an off-diagonal jacobian component at quadrature points.
const unsigned int _alpha
Which component of the vector residual this kernel is responsible for.
const bool _large_kinematics
If true use large deformation kinematics.
const unsigned int _ko_order
Order of the scalar variable, used in several places.
void mooseError(Args &&... args)
HomogenizedTotalLagrangianStressDivergenceA(const InputParameters ¶meters)
virtual void computeScalarOffDiagJacobian(const unsigned int jvar_num) override
Method for computing an off-diagonal jacobian component d-_kappa-residual / d-jvar jvar is looped ove...
static constexpr std::size_t dim
Enforce equilibrium with a total Lagrangian formulation.
HomogenizationA::ConstraintMap _cmap
Type of each constraint (stress or strain) for each component.
const MooseVariableScalar *const _kappao_var_ptr
(Pointer to) Scalar variable this kernel operates on
virtual Real computeQpJacobianDisplacement(unsigned int alpha, unsigned int beta) override
const MultiMooseEnum constraintType("strain stress none")
Moose constraint type, for input.
virtual void computeOffDiagJacobianScalarLocal(const unsigned int svar_num) override
Method for computing an off-diagonal jacobian component d-_var-residual / d-svar. ...
Real f(Real x)
Test function for Brents method.
const unsigned int _beta
Which component of the scalar vector residual this constraint is responsible for. ...
virtual RankTwoTensor gradTest(unsigned int component) override
Total Lagrangian formulation with most homogenization terms (one disp_xyz field and one scalar) The m...
virtual const std::vector< dof_id_type > & dofIndices() const
Real doubleContraction(const RankTwoTensorTempl< Real > &a) const
const unsigned int _kappao_var
The unknown scalar variable ID.
const MaterialProperty< RankTwoTensor > & _F
The actual (stabilized) deformation gradient.
registerMooseObject("SolidMechanicsTestApp", HomogenizedTotalLagrangianStressDivergenceA)
HomogenizationA::ConstraintType _ctype
The constraint type; initialize with 'none'.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string alpha
static InputParameters validParams()
virtual Real computeQpResidual() override
unsigned int _m
Used internally to iterate over each scalar component.
IntRange< T > make_range(T beg, T end)
ConstraintType
Constraint type: stress/PK stress or strain/deformation gradient.
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
const MaterialProperty< RankFourTensor > & _dpk1
The derivative of the PK1 stress with respect to the deformation gradient.
virtual void computeScalarOffDiagJacobianScalar(const unsigned int svar_num) override
Method for computing an off-diagonal jacobian component d-_kappa-residual / d-svar svar is looped ove...
void ErrorVector unsigned int
virtual Real computeQpOffDiagJacobianScalar(const unsigned int svar_num) override
Method for computing d-_var-residual / d-_svar at quadrature points.
const MaterialProperty< RankTwoTensor > & _pk1
The 1st Piola-Kirchhoff stress.
virtual RankTwoTensor gradTrial(unsigned int component) override
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...