20#include "libmesh/quadrature.h"
37 Moose::VarKindType::VAR_SOLVER,
38 std::is_same<T, Real>::value ?
Moose::VarFieldType::VAR_FIELD_STANDARD
39 :
Moose::VarFieldType::VAR_FIELD_VECTOR),
41 _var(*this->mooseVariable()),
42 _normals(_assembly.adNormals()),
43 _ad_q_points(_assembly.adQPointsFace()),
44 _test(_var.phiFace()),
45 _grad_test(_var.adGradPhiFace()),
47 _grad_u(_var.adGradSln()),
48 _ad_JxW(_assembly.adJxWFace()),
49 _ad_coord(_assembly.adCoordTransformation()),
50 _phi(_assembly.phi(_var)),
51 _use_displaced_mesh(getParam<bool>(
"use_displaced_mesh"))
67 "saved-in auxiliary variable is incompatible with the object's nonlinear variable: ",
83 "saved-in auxiliary variable is incompatible with the object's nonlinear variable: ",
98 _residuals.resize(_test.size(), 0);
99 for (
auto & r : _residuals)
102 precalculateResidual();
103 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
105 const auto jxw_c = _JxW[_qp] * _coord[_qp];
106 for (_i = 0; _i < _test.size(); _i++)
107 _residuals[_i] += jxw_c * raw_value(computeQpResidual());
110 addResiduals(_assembly, _residuals, _var.dofIndices(), _var.scalingFactor());
113 for (
unsigned int i = 0; i < _save_in.size(); i++)
114 _save_in[i]->sys().solution().add_vector(_residuals.data(), _save_in[i]->dofIndices());
121 if (_residuals_and_jacobians.size() != _test.size())
122 _residuals_and_jacobians.resize(_test.size(), 0);
123 for (
auto & r : _residuals_and_jacobians)
126 precalculateResidual();
127 if (_use_displaced_mesh)
128 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
131 _r *= _ad_coord[_qp];
132 for (_i = 0; _i < _test.size(); _i++)
133 _residuals_and_jacobians[_i] += _r * computeQpResidual();
136 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
138 const auto jxw_c = _JxW[_qp] * _coord[_qp];
139 for (_i = 0; _i < _test.size(); _i++)
140 _residuals_and_jacobians[_i] += jxw_c * computeQpResidual();
148 computeResidualsForJacobian();
149 addResidualsAndJacobian(
150 _assembly, _residuals_and_jacobians, _var.dofIndices(), _var.scalingFactor());
159 if (_has_diag_save_in && !_sys.computingScalingJacobian())
160 mooseError(
"_local_ke not computed for global AD indexing. Save-in is deprecated anyway. Use "
161 "the tagging system instead.");
168 computeResidualsForJacobian();
169 addJacobian(_assembly, _residuals_and_jacobians, _var.dofIndices(), _var.scalingFactor());
177 if (jvar == _var.number())
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
An interface for accessing Moose::Functors for systems that care about automatic differentiation,...
static InputParameters validParams()
Base class for deriving any boundary condition of a integrated type.
void computeOffDiagJacobianScalar(unsigned int jvar) override
Computes jacobian block with respect to a scalar variable.
void computeOffDiagJacobian(unsigned int jvar) override
Computes this object's contribution to off-diagonal blocks of the system Jacobian matrix.
ADIntegratedBCTempl(const InputParameters ¶meters)
void computeResidual() override
Compute this object's contribution to the residual.
void computeJacobian() override
Compute this object's contribution to the diagonal Jacobian entries.
virtual void computeResidualsForJacobian()
compute the _residuals member for filling the Jacobian.
void computeADJacobian()
compute all the Jacobian entries
void computeResidualAndJacobian() override
Compute this object's contribution to the residual and Jacobian simultaneously.
static InputParameters validParams()
MooseVariableFE< T > & _var
The variable that this IntegratedBC operates on.
Base class for deriving any boundary condition of a integrated type.
static InputParameters validParams()
bool _has_diag_save_in
The aux variables to save the diagonal Jacobian contributions to.
std::vector< AuxVariableName > _diag_save_in_strings
bool _has_save_in
The aux variables to save the residual contributions to.
std::vector< AuxVariableName > _save_in_strings
std::vector< MooseVariableFEBase * > _diag_save_in
std::vector< MooseVariableFEBase * > _save_in
void paramError(const std::string ¶m, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
const libMesh::FEType & feType() const
Get the type of finite element object.
SystemBase & sys()
Get the system this variable is part of.
void addMooseVariableDependency(MooseVariableFieldBase *var)
Call this function to add the passed in MooseVariableFieldBase as a variable that this object depends...
Interface for objects that need to get values of MooseVariables.
MooseVariableFE< T > * mooseVariable() const
Return the MooseVariableFE object that this interface acts on.
THREAD_ID _tid
The thread ID for this kernel.
SubProblem & _subproblem
Reference to this kernel's SubProblem.
virtual MooseVariable & getStandardVariable(const THREAD_ID tid, const std::string &var_name)=0
Returns the variable reference for requested MooseVariable which may be in any system.
virtual void haveADObjects(bool have_ad_objects)
Method for setting whether we have any ad objects.
virtual void addVariableToZeroOnJacobian(std::string var_name)
Adds this variable to the list of variables to be zeroed during each Jacobian evaluation.
virtual void addVariableToZeroOnResidual(std::string var_name)
Adds this variable to the list of variables to be zeroed during each residual evaluation.
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
std::string incompatVarMsg(MooseVariableFieldBase &var1, MooseVariableFieldBase &var2)
Builds and returns a string of the form: