19 #include "libmesh/threads.h" 26 "Base class for all DG kernels making use of automatic differentiation");
34 _var(*mooseVariable()),
35 _phi(_assembly.phiFace(_var)),
36 _grad_phi(_assembly.gradPhiFace(_var)),
38 _test(_var.phiFace()),
39 _grad_test(_var.gradPhiFace()),
41 _phi_neighbor(_assembly.phiFaceNeighbor(_var)),
42 _grad_phi_neighbor(_assembly.gradPhiFaceNeighbor(_var)),
44 _test_neighbor(_var.phiFaceNeighbor()),
45 _grad_test_neighbor(_var.gradPhiFaceNeighbor()),
48 _grad_u(_var.adGradSln()),
49 _u_neighbor(_var.adSlnNeighbor()),
50 _grad_u_neighbor(_var.adGradSlnNeighbor())
68 " as a save_in variable in " +
name());
73 "saved-in auxiliary variable is incompatible with the object's nonlinear variable: ",
92 " as a diag_save_in variable in " +
name());
97 "saved-in auxiliary variable is incompatible with the object's nonlinear variable: ",
125 for (
_i = 0;
_i < test_space.size();
_i++)
135 const std::vector<dof_id_type> & dof_indices =
136 is_elem ? var->dofIndices() : var->dofIndicesNeighbor();
137 var->sys().solution().add_vector(
_local_re, dof_indices);
158 "With AD you should need one call per side");
162 std::vector<ADReal> residuals(test_space.size(), 0);
165 for (
_i = 0;
_i < test_space.size();
_i++)
179 for (
unsigned int i = 0; i < rows; i++)
186 var->sys().solution().add_vector(diag, var->dofIndices());
188 var->sys().solution().add_vector(diag, var->dofIndicesNeighbor());
210 "With AD you should need one call per side");
214 std::vector<ADReal> residuals(test_space.size(), 0);
217 for (
_i = 0;
_i < test_space.size();
_i++)
const QBase *const & _qrule
Quadrature rule.
ADDGKernel(const InputParameters ¶meters)
static InputParameters validParams()
Factory constructor initializes all internal references needed for residual computation.
const libMesh::FEType & feType() const
Get the type of finite element object.
virtual void haveADObjects(bool have_ad_objects)
Method for setting whether we have any ad objects.
void accumulateTaggedLocalResidual()
Local residual blocks will be appended by adding the current local kernel residual.
std::string incompatVarMsg(MooseVariableFieldBase &var1, MooseVariableFieldBase &var2)
Builds and returns a string of the form:
unsigned int number() const
Get variable number coming from libMesh.
std::vector< AuxVariableName > _save_in_strings
bool _has_diag_save_in
The aux variables to save the diagonal Jacobian contributions to.
This class provides an interface for common operations on field variables of both FE and FV types wit...
static InputParameters validParams()
std::vector< MooseVariableFEBase * > _diag_save_in
THREAD_ID _tid
The thread ID for this kernel.
DenseMatrix< Number > _local_ke
Holds local Jacobian entries as they are accumulated by this Kernel.
virtual const std::string & name() const
Get the name of the class.
const MooseVariableFieldBase & getVariable(unsigned int jvar_num) const
Retrieve the variable object from our system associated with jvar_num.
Serves as a base class for DGKernel and ADDGKernel.
SystemBase & _sys
Reference to the EquationSystem object.
std::vector< MooseVariableFEBase * > _save_in
MooseVariableFE< Real > * mooseVariable() const
Return the MooseVariableFE object that this interface acts on.
void addJacobian(Assembly &assembly, const Residuals &residuals, const Indices &dof_indices, Real scaling_factor)
Add the provided residual derivatives into the Jacobian for the provided dof indices.
Enhances MooseVariableInterface interface provide values from neighbor elements.
const std::vector< dof_id_type > & dofIndices() const final
Get local DoF indices.
void computeElemNeighResidual(Moose::DGResidualType type) override final
Computes the residual for this element or the neighbor.
const VariableTestValue & _test_neighbor
Side test function.
OutputTools< Real >::VariableTestValue VariableTestValue
SubProblem & _subproblem
Reference to this kernel's SubProblem.
VarKindType
Framework-wide stuff.
std::vector< AuxVariableName > _diag_save_in_strings
void computeOffDiagJacobian(unsigned int jvar) override final
Computes d-residual / d-jvar...
bool excludeBoundary() const
Check current element if it contains broken boundary.
const std::string & type() const
Get the type of this class.
const MooseArray< Real > & _coord
Coordinate transform mainly for curvilinear coordinates.
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 ...
virtual const MooseVariableFieldBase & getVariable(const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type=Moose::VarKindType::VAR_ANY, Moose::VarFieldType expected_var_field_type=Moose::VarFieldType::VAR_FIELD_ANY) const =0
Returns the variable reference for requested variable which must be of the expected_var_type (Nonline...
static Threads::spin_mutex _resid_vars_mutex
virtual bool hasVariable(const std::string &var_name) const
Query a system for a variable.
Assembly & _assembly
Reference to this Kernel's assembly object.
MooseVariable & _var
Variable this kernel operates on.
void addMooseVariableDependency(MooseVariableFieldBase *var)
Call this function to add the passed in MooseVariableFieldBase as a variable that this object depends...
void prepareVectorTagNeighbor(Assembly &assembly, unsigned int ivar)
Prepare data for computing element residual the according to active tags for DG and interface kernels...
virtual void addVariableToZeroOnResidual(std::string var_name)
Adds this variable to the list of variables to be zeroed during each residual evaluation.
const std::vector< dof_id_type > & dofIndicesNeighbor() const final
Get neighbor DOF indices for currently selected element.
DenseVector< Number > _local_re
Holds local residual entries as they are accumulated by this Kernel.
const MooseArray< Real > & _JxW
Jacobian det times quadrature weighting on quadrature points.
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type.
virtual void addVariableToZeroOnJacobian(std::string var_name)
Adds this variable to the list of variables to be zeroed during each Jacobian evaluation.
void computeElemNeighJacobian(Moose::DGJacobianType type) override final
Computes the element/neighbor-element/neighbor Jacobian.
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
void prepareVectorTag(Assembly &assembly, unsigned int ivar)
Prepare data for computing element residual according to active tags.
virtual ADReal computeQpResidual(Moose::DGResidualType type)=0
Compute this Kernel's contribution to the residual at the current quadrature point.
void computeOffDiagElemNeighJacobian(Moose::DGJacobianType type, const MooseVariableFEBase &jvar) override final
Computes the element-element off-diagonal Jacobian.
SystemBase & sys()
Get the system this variable is part of.
const VariableTestValue & _test
test functions
static Threads::spin_mutex _jacoby_vars_mutex
void scalingFactor(const std::vector< Real > &factor)
Set the scaling factor for this variable.
bool _has_save_in
The aux variables to save the residual contributions to.
void computeJacobian() override final
Computes the jacobian for the current side.