35 prepareVectorTag(_assembly, _var.number());
37 precalculateResidual();
38 const unsigned int n_test = _test.size();
40 if (_use_displaced_mesh)
41 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
43 const auto value = precomputeQpResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
44 for (_i = 0; _i < n_test; _i++)
45 _local_re(_i) += raw_value(value * _test[_i][_qp]);
48 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
50 const auto value = precomputeQpResidual() * _JxW[_qp] * _coord[_qp];
51 for (_i = 0; _i < n_test; _i++)
52 _local_re(_i) += raw_value(value * _test[_i][_qp]);
55 accumulateTaggedLocalResidual();
58 for (
unsigned int i = 0; i < _save_in.size(); i++)
59 _save_in[i]->sys().solution().add_vector(_local_re, _save_in[i]->dofIndices());
66 if (_residuals.size() != _test.size())
67 _residuals.resize(_test.size(), 0);
68 for (
auto & r : _residuals)
71 precalculateResidual();
73 if (_use_displaced_mesh)
74 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
76 const auto value = precomputeQpResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
77 for (_i = 0; _i < _test.size(); _i++)
78 _residuals[_i] += value * _test[_i][_qp];
81 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
83 const auto value = precomputeQpResidual() * _JxW[_qp] * _coord[_qp];
84 for (_i = 0; _i < _test.size(); _i++)
85 _residuals[_i] += value * _test[_i][_qp];