19 #include "libmesh/dof_map.h" 20 #include "libmesh/dense_vector.h" 21 #include "libmesh/numeric_vector.h" 22 #include "libmesh/dense_subvector.h" 23 #include "libmesh/libmesh_common.h" 24 #include "libmesh/quadrature.h" 37 _var(*mooseVariable()),
38 _u(_is_implicit ? _var.sln() : _var.slnOld()),
39 _grad_u(_is_implicit ? _var.gradSln() : _var.gradSlnOld()),
42 _grad_phi(_var.gradPhiFace()),
43 _array_grad_phi(_var.arrayGradPhiFace()),
45 _test(_var.phiFace()),
46 _grad_test(_var.gradPhiFace()),
47 _array_grad_test(_var.arrayGradPhiFace()),
49 _phi_neighbor(_var.phiFaceNeighbor()),
50 _grad_phi_neighbor(_var.gradPhiFaceNeighbor()),
51 _array_grad_phi_neighbor(_var.arrayGradPhiFaceNeighbor()),
53 _test_neighbor(_var.phiFaceNeighbor()),
54 _grad_test_neighbor(_var.gradPhiFaceNeighbor()),
55 _array_grad_test_neighbor(_var.arrayGradPhiFaceNeighbor()),
57 _u_neighbor(_is_implicit ? _var.slnNeighbor() : _var.slnOldNeighbor()),
58 _grad_u_neighbor(_is_implicit ? _var.gradSlnNeighbor() : _var.gradSlnOldNeighbor()),
60 _array_normals(_assembly.mappedNormals()),
79 " as a save_in variable in " +
name());
84 "saved-in auxiliary variable is incompatible with the object's nonlinear variable: ",
103 " as a diag_save_in variable in " +
name());
108 "saved-in auxiliary variable is incompatible with the object's nonlinear variable: ",
143 "Size of local residual is not equal to the number of array variable compoments");
158 mooseError(
"Save-in variable for an array kernel must be an array variable");
203 mooseError(
"Save-in variable for an array kernel must be an array variable");
206 avar->addSolution(diag);
208 avar->addSolutionNeighbor(diag);
215 return RealEigenVector::Zero(
_count);
261 : jv0.phiFaceNeighbor();
267 for (
_j = 0;
_j < loc_phi.size();
_j++)
286 : jv1.phiFaceNeighbor();
307 mooseError(
"Vector variable cannot be coupled into array DG kernel currently");
320 mooseError(
"Save-in variable for an array kernel must be an array variable");
323 avar->addSolution(diag);
325 avar->addSolutionNeighbor(diag);
virtual void computeOffDiagJacobian(unsigned int jvar) override
Override this function to consider couplings of components of the array variable. ...
const QBase *const & _qrule
Quadrature rule.
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.
void accumulateTaggedLocalResidual()
Local residual blocks will be appended by adding the current local kernel residual.
virtual void computeOffDiagElemNeighJacobian(Moose::DGJacobianType type, const MooseVariableFEBase &jvar) override
Computes the element-element off-diagonal Jacobian.
Class for stuff related to variables.
std::string incompatVarMsg(MooseVariableFieldBase &var1, MooseVariableFieldBase &var2)
Builds and returns a string of the form:
virtual void precalculateOffDiagJacobian(unsigned int)
unsigned int number() const
Get variable number coming from libMesh.
void saveDiagLocalArrayJacobian(DenseMatrix< Number > &ke, unsigned int i, unsigned int ntest, unsigned int j, unsigned int nphi, unsigned int ivar, const RealEigenVector &v) const
Helper function for assembling diagonal Jacobian contriubutions on local quadrature points for an arr...
std::vector< AuxVariableName > _save_in_strings
RealEigenVector _work_vector
Work vector for residual computation.
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one...
bool _has_diag_save_in
The aux variables to save the diagonal Jacobian contributions to.
virtual void initQpOffDiagJacobian(Moose::DGJacobianType, const MooseVariableFEBase &)
Put necessary evaluations depending on qp but independent on test and shape functions here for off-di...
This class provides an interface for common operations on field variables of both FE and FV types wit...
virtual void initQpResidual(Moose::DGResidualType)
Put necessary evaluations depending on qp but independent on test functions here. ...
std::vector< MooseVariableFEBase * > _diag_save_in
void saveLocalArrayResidual(DenseVector< Number > &re, unsigned int i, unsigned int ntest, const RealEigenVector &v) const
Helper function for assembling residual contriubutions on local quadrature points for an array kernel...
THREAD_ID _tid
The thread ID for this kernel.
DenseVector< Real > getJacobianDiagonal(DenseMatrix< Number > &ke)
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.
virtual void computeElemNeighJacobian(Moose::DGJacobianType type) override
Computes the element/neighbor-element/neighbor Jacobian.
static InputParameters validParams()
Factory constructor initializes all internal references needed for residual computation.
virtual void computeElemNeighResidual(Moose::DGResidualType type) override
Computes the residual for this element or the neighbor.
const ArrayVariableTestValue & _test
test functions
virtual RealEigenMatrix computeQpOffDiagJacobian(Moose::DGJacobianType type, const MooseVariableFEBase &jvar)
This is the virtual that derived classes should override for computing the off-diag Jacobian...
ArrayDGKernel(const InputParameters ¶meters)
SystemBase & _sys
Reference to the EquationSystem object.
void prepareMatrixTagNeighbor(Assembly &assembly, unsigned int ivar, unsigned int jvar, Moose::DGJacobianType type)
Prepare data for computing element jacobian according to the active tags for DG and interface kernels...
std::vector< MooseVariableFEBase * > _save_in
MooseVariableFE< RealEigenVector > * mooseVariable() const
Return the MooseVariableFE object that this interface acts on.
Enhances MooseVariableInterface interface provide values from neighbor elements.
const unsigned int _count
Number of components of the array variable.
unsigned int size() const
The number of elements that can currently be stored in the array.
OutputTools< Real >::VariableTestValue VariableTestValue
SubProblem & _subproblem
Reference to this kernel's SubProblem.
virtual void initQpJacobian(Moose::DGJacobianType)
Put necessary evaluations depending on qp but independent on test and shape functions here...
VarKindType
Framework-wide stuff.
std::vector< AuxVariableName > _diag_save_in_strings
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 ...
Eigen::Matrix< Real, Eigen::Dynamic, Eigen::Dynamic > RealEigenMatrix
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...
void accumulateTaggedLocalMatrix()
Local Jacobian blocks will be appended by adding the current local kernel Jacobian.
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.
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.
virtual RealEigenVector computeQpJacobian(Moose::DGJacobianType)
This is the virtual that derived classes should override for computing the Jacobian on neighboring el...
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.
virtual Moose::VarFieldType fieldType() const =0
Field type of this variable.
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type.
virtual void computeQpResidual(Moose::DGResidualType type, RealEigenVector &residual)=0
This is the virtual that derived classes should override for computing the residual on neighboring el...
virtual void addVariableToZeroOnJacobian(std::string var_name)
Adds this variable to the list of variables to be zeroed during each Jacobian evaluation.
const ArrayVariablePhiValue & _phi_neighbor
Side shape function.
const FieldVariablePhiValue & phiFace() const override final
Return the variable's shape functions on an element face.
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
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.
void prepareMatrixTag(Assembly &assembly, unsigned int ivar, unsigned int jvar)
Prepare data for computing element jacobian according to the active tags.
void saveFullLocalArrayJacobian(DenseMatrix< Number > &ke, unsigned int i, unsigned int ntest, unsigned int j, unsigned int nphi, unsigned int ivar, unsigned int jvar, const RealEigenMatrix &v) const
Helper function for assembling full Jacobian contriubutions on local quadrature points for an array k...
SystemBase & sys()
Get the system this variable is part of.
const ArrayVariableTestValue & _test_neighbor
Side test function.
static Threads::spin_mutex _jacoby_vars_mutex
ArrayMooseVariable & _var
Variable this kernel operates on.
const ArrayVariablePhiValue & _phi
Shape functions.
bool _has_save_in
The aux variables to save the residual contributions to.