17 #include "libmesh/threads.h" 36 prepareVectorTag(_assembly, _var.number());
38 precalculateResidual();
39 const unsigned int n_test = _grad_test.size();
41 if (_use_displaced_mesh)
42 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
44 const auto value = precomputeQpStrongResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
45 for (_i = 0; _i < n_test; _i++)
46 _local_re(_i) +=
raw_value(_grad_test[_i][_qp] * computeQpStabilization() *
value);
49 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
51 const auto value = precomputeQpStrongResidual() * _JxW[_qp] * _coord[_qp];
52 for (_i = 0; _i < n_test; _i++)
53 _local_re(_i) +=
raw_value(_regular_grad_test[_i][_qp] * computeQpStabilization() *
value);
56 accumulateTaggedLocalResidual();
60 Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
61 for (
unsigned int i = 0; i < _save_in.size(); i++)
62 _save_in[i]->sys().solution().add_vector(_local_re, _save_in[i]->dofIndices());
70 if (_residuals.size() != _grad_test.size())
71 _residuals.resize(_grad_test.size(), 0);
72 for (
auto & r : _residuals)
75 precalculateResidual();
77 if (_use_displaced_mesh)
78 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
80 const auto value = precomputeQpStrongResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
81 for (_i = 0; _i < _grad_test.size(); _i++)
82 _residuals[_i] += _grad_test[_i][_qp] * computeQpStabilization() *
value;
85 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
87 const auto value = precomputeQpStrongResidual() * _JxW[_qp] * _coord[_qp];
88 for (_i = 0; _i < _grad_test.size(); _i++)
89 _residuals[_i] += _regular_grad_test[_i][_qp] * computeQpStabilization() *
value;
97 mooseError(
"Override precomputeQpStrongResidual() in your ADKernelStabilized derived class!");
virtual ADReal computeQpResidual() override final
Compute this Kernel's contribution to the residual at the current quadrature point.
void computeResidualsForJacobian() override
compute the _residuals member for filling the Jacobian.
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
DualNumber< Real, DNDerivativeType, true > ADReal
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
static InputParameters validParams()
ADKernelStabilizedTempl(const InputParameters ¶meters)
static InputParameters validParams()
virtual void computeResidual() override
Compute this object's contribution to the residual.