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++]);
95 std::vector<Real> scalar_residuals(_k_order);
97 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
99 initScalarQpResidual();
100 Real dV = _JxW[_qp] * _coord[_qp];
102 for (
auto && [indices, constraint] :
_cmap)
104 auto && [i,
j] = indices;
105 auto && [ctype, ctarget] = constraint;
125 unsigned int r_ind = -
_beta + _h;
130 scalar_residuals[r_ind] += dV * (
_pk1[_qp](i,
j) - ctarget->value(_t, _q_point[_qp]));
132 scalar_residuals[r_ind] +=
133 dV * (
_F[_qp](i,
j) - (
Real(i ==
j) + ctarget->value(_t, _q_point[_qp])));
135 mooseError(
"Unknown constraint type in the integral!");
140 scalar_residuals[r_ind] += dV * (
_pk1[_qp](i,
j) - ctarget->value(_t, _q_point[_qp]));
142 scalar_residuals[r_ind] += dV * (0.5 * (
_F[_qp](i,
j) +
_F[_qp](
j, i)) -
143 (
Real(i ==
j) + ctarget->value(_t, _q_point[_qp])));
145 mooseError(
"Unknown constraint type in the integral!");
151 _assembly, scalar_residuals, _kappa_var_ptr->dofIndices(), _kappa_var_ptr->scalingFactor());
157 _local_ke.resize(_k_order, _k_order);
159 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
161 initScalarQpJacobian(_kappa_var);
162 Real dV = _JxW[_qp] * _coord[_qp];
165 for (
auto && [indices1, constraint1] :
_cmap)
167 auto && [i,
j] = indices1;
168 auto && ctype = constraint1.first;
186 for (
auto && indices2 :
_cmap)
188 auto && [
a,
b] = indices2.first;
205 unsigned int c_ind = -
_beta + _l;
208 _local_ke(-
_beta + _h, c_ind) += dV * (
_dpk1[_qp](i,
j,
a,
b));
212 _local_ke(-
_beta + _h, c_ind) += dV * (
Real(i ==
a &&
j ==
b));
214 _local_ke(-
_beta + _h, c_ind) +=
215 dV * (0.5 *
Real(i ==
a &&
j ==
b) + 0.5 *
Real(i ==
b &&
j ==
a));
218 mooseError(
"Unknown constraint type in Jacobian calculator!");
224 addJacobian(_assembly,
226 _kappa_var_ptr->dofIndices(),
227 _kappa_var_ptr->dofIndices(),
228 _kappa_var_ptr->scalingFactor());
233 const unsigned int jvar_num)
239 const auto & jvar = getVariable(jvar_num);
240 _local_ke.resize(_k_order, _test.size());
242 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
246 Real dV = _JxW[_qp] * _coord[_qp];
247 for (
auto && [indices, constraint] :
_cmap)
266 _ctype = constraint.first;
267 initScalarQpOffDiagJacobian(_var);
268 for (_j = 0; _j < _test.size(); _j++)
274 addJacobian(_assembly,
276 _kappa_var_ptr->dofIndices(),
278 _kappa_var_ptr->scalingFactor());
284 const unsigned int svar_num)
287 if ((svar_num == _kappa_var) || (svar_num ==
_kappao_var))
290 const auto & svar = _sys.getScalarVariable(_tid, svar_num);
291 const unsigned int s_order = svar.order();
292 _local_ke.resize(_test.size(), s_order);
295 unsigned int beta = 0;
296 if (svar_num == _kappa_var)
301 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
305 Real dV = _JxW[_qp] * _coord[_qp];
306 for (
auto && [indices, constraint] :
_cmap)
325 _ctype = constraint.first;
326 initScalarQpJacobian(svar_num);
327 for (_i = 0; _i < _test.size(); _i++)
335 addJacobian(_assembly, _local_ke, _var.dofIndices(), svar.dofIndices(), _var.scalingFactor());
363 mooseError(
"Unknown constraint type in kernel calculation!");
371 const unsigned int svar_num)
378 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
380 initScalarQpJacobian(_kappa_var);
381 Real dV = _JxW[_qp] * _coord[_qp];
384 for (
auto && [indices1, constraint1] :
_cmap)
386 auto && [i,
j] = indices1;
387 auto && ctype = constraint1.first;
405 for (
auto && indices2 :
_cmap)
407 auto && [
a,
b] = indices2.first;
428 _local_ke(-
_beta + _h, c_ind) += dV * (
_dpk1[_qp](i,
j,
a,
b));
432 _local_ke(-
_beta + _h, c_ind) += dV * (
Real(i ==
a &&
j ==
b));
434 _local_ke(-
_beta + _h, c_ind) +=
435 dV * (0.5 *
Real(i ==
a &&
j ==
b) + 0.5 *
Real(i ==
b &&
j ==
a));
438 mooseError(
"Unknown constraint type in Jacobian calculator!");
444 addJacobian(_assembly,
446 _kappa_var_ptr->dofIndices(),
448 _kappa_var_ptr->scalingFactor());
static InputParameters validParams()
registerMooseObject("SolidMechanicsTestApp", HomogenizedTotalLagrangianStressDivergenceR)
std::vector< unsigned int > _disp_nums
The displacement numbers.
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.
void mooseError(Args &&... args)
HomogenizedTotalLagrangianStressDivergenceR(const InputParameters ¶meters)
static constexpr std::size_t dim
Total Lagrangian formulation with most homogenization terms (one disp_xyz field and one scalar) The m...
Enforce equilibrium with a total Lagrangian formulation.
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.
const unsigned int _kappao_var
The unknown scalar variable ID.
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...
virtual void computeOffDiagJacobianScalarLocal(const unsigned int svar_num) override
Method for computing an off-diagonal jacobian component d-_var-residual / d-svar. ...
HomogenizationR::ConstraintType _ctype
The constraint type; initialize with 'none'.
HomogenizationR::ConstraintMap _cmap
Type of each constraint (stress or strain) for each component.
const unsigned int _ndisp
Total number of displacements/size of residual vector.
virtual Real computeQpOffDiagJacobianScalar(const unsigned int) override
Method for computing d-_var-residual / d-_svar at quadrature points.
virtual Real computeQpResidual() override
Real f(Real x)
Test function for Brents method.
const unsigned int _ko_order
Order of the scalar variable, used in several places.
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...
virtual RankTwoTensor gradTest(unsigned int component) override
const MooseVariableScalar *const _kappao_var_ptr
(Pointer to) Scalar variable this kernel operates on
const JvarMap & getJvarMap()
virtual const std::vector< dof_id_type > & dofIndices() const
Real doubleContraction(const RankTwoTensorTempl< Real > &a) const
const MaterialProperty< RankTwoTensor > & _F
The actual (stabilized) deformation gradient.
unsigned int _m
Used internally to iterate over each scalar component.
static InputParameters validParams()
virtual Real computeQpJacobianDisplacement(unsigned int alpha, unsigned int beta) override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string alpha
virtual Real computeScalarQpOffDiagJacobian(const unsigned int jvar_num) override
Method for computing an off-diagonal jacobian component at quadrature points.
IntRange< T > make_range(T beg, T end)
const unsigned int _beta
Which component of the scalar vector residual this constraint is responsible for. ...
const MultiMooseEnum constraintType("strain stress none")
Moose constraint type, for input.
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.
ConstraintType
Constraint type: stress/PK stress or strain/deformation gradient.
void ErrorVector unsigned int
const MaterialProperty< RankTwoTensor > & _pk1
The 1st Piola-Kirchhoff stress.
virtual RankTwoTensor gradTrial(unsigned int component) override