19#include "libmesh/threads.h"
20#include "libmesh/quadrature.h"
35 Moose::VarKindType::VAR_SOLVER,
36 Moose::VarFieldType::VAR_FIELD_ARRAY),
37 _var(*mooseVariable()),
39 _grad_test(_var.gradPhi()),
40 _array_grad_test(_var.arrayGradPhi()),
41 _phi(_assembly.phi(_var)),
42 _grad_phi(_assembly.gradPhi(_var)),
43 _u(_is_implicit ? _var.sln() : _var.slnOld()),
44 _grad_u(_is_implicit ? _var.gradSln() : _var.gradSlnOld()),
58 paramError(
"save_in",
"cannot use solution variable as save-in variable");
63 "saved-in auxiliary variable is incompatible with the object's nonlinear variable: ",
78 paramError(
"diag_save_in",
"cannot use solution variable as diag save-in variable");
83 "saved-in auxiliary variable is incompatible with the object's nonlinear variable: ",
108 "Size of local residual is not equal to the number of array variable compoments");
124 mooseError(
"Save-in variable for an array kernel must be an array variable");
158 mooseError(
"Save-in variable for an array kernel must be an array variable");
166 return RealEigenVector::Zero(
_var.
count());
202 mooseError(
"Save-in variable for an array kernel must be an array variable");
236 return RealEigenMatrix::Zero(
_var.
count(), (
unsigned int)jvar.
order() + 1);
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
virtual RealEigenMatrix computeQpOffDiagJacobianScalar(const MooseVariableScalar &jvar)
This is the virtual that derived classes should override for computing a full Jacobian component.
const ArrayVariableTestValue & _test
the current test function
ArrayKernel(const InputParameters ¶meters)
virtual void initQpJacobian()
Put necessary evaluations depending on qp but independent on test and shape functions here.
static InputParameters validParams()
const unsigned int _count
Number of components of the array variable.
virtual void computeJacobian() override
Compute this ArrayKernel's contribution to the diagonal Jacobian entries.
virtual void computeResidual() override
Compute this ArrayKernel's contribution to the residual.
RealEigenMatrix _work_matrix
Work vector for off diag jacobian.
ArrayMooseVariable & _var
This is an array kernel so we cast to a ArrayMooseVariable.
RealEigenVector _work_vector
Work vector for residual and diag jacobian.
virtual RealEigenMatrix computeQpOffDiagJacobian(const MooseVariableFEBase &jvar)
This is the virtual that derived classes should override for computing a full Jacobian component.
virtual void initQpResidual()
Put necessary evaluations depending on qp but independent on test functions here.
virtual void initQpOffDiagJacobian(const MooseVariableFEBase &jvar)
Put necessary evaluations depending on qp but independent on test and shape functions here for off-di...
virtual void computeOffDiagJacobianScalar(unsigned int jvar) override
Computes jacobian block with respect to a scalar variable.
virtual RealEigenVector computeQpJacobian()
Compute this Kernel's contribution to the diagonal Jacobian at the current quadrature point.
const ArrayVariablePhiValue & _phi
the current shape functions
virtual void computeQpResidual(RealEigenVector &residual)=0
Compute this Kernel's contribution to the residual at the current quadrature point,...
virtual void computeOffDiagJacobian(unsigned int jvar) override
Computes full Jacobian of jvar and the array variable this kernel operates on.
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...
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...
DenseVector< Real > getJacobianDiagonal(const DenseMatrix< Number > &ke)
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...
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
This is the common base class for the three main kernel types implemented in MOOSE,...
std::vector< MooseVariableFEBase * > _save_in
bool _has_diag_save_in
The aux variables to save the diagonal Jacobian contributions to.
std::vector< AuxVariableName > _save_in_strings
static InputParameters validParams()
const MooseArray< Real > & _coord
The scaling factor to convert from cartesian to another coordinate system (e.g rz,...
unsigned int _qp
The current quadrature point index.
bool _has_save_in
The aux variables to save the residual contributions to.
const MooseArray< Real > & _JxW
The current quadrature point weight value.
unsigned int _j
current index for the shape function
std::vector< MooseVariableFEBase * > _diag_save_in
std::vector< AuxVariableName > _diag_save_in_strings
unsigned int _i
current index for the test function
const QBase *const & _qrule
active quadrature rule
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.
libMesh::Order order() const
Get the order of this variable Note: Order enum can be implicitly converted to unsigned int.
unsigned int number() const
Get variable number coming from libMesh.
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one.
void addMooseVariableDependency(MooseVariableFieldBase *var)
Call this function to add the passed in MooseVariableFieldBase as a variable that this object depends...
void addSolution(const DenseVector< libMesh::Number > &v)
Add passed in local DOF values onto the current solution.
This class provides an interface for common operations on field variables of both FE and FV types wit...
Interface for objects that need to get values of MooseVariables.
MooseVariableFE< RealEigenVector > * mooseVariable() const
Return the MooseVariableFE object that this interface acts on.
Class for scalar variables (they are different).
THREAD_ID _tid
The thread ID for this kernel.
virtual void precalculateJacobian()
Assembly & _assembly
Reference to this Kernel's assembly object.
const MooseVariableFieldBase & getVariable(unsigned int jvar_num) const
Retrieve the variable object from our system associated with jvar_num.
SubProblem & _subproblem
Reference to this kernel's SubProblem.
SystemBase & _sys
Reference to the EquationSystem object.
virtual void precalculateOffDiagJacobian(unsigned int)
virtual void precalculateResidual()
FEProblemBase & _fe_problem
Reference to this kernel's FEProblemBase.
virtual ArrayMooseVariable & getArrayVariable(const THREAD_ID tid, const std::string &var_name)=0
Returns the variable reference for requested ArrayMooseVariable which may be in any system.
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.
unsigned int number() const
Gets the number of this system.
virtual MooseVariableScalar & getScalarVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a scalar variable with specified number.
virtual bool hasVariable(const std::string &var_name) const
Query a system for a variable.
DenseMatrix< Number > _local_ke
Holds local Jacobian entries as they are accumulated by this Kernel.
void accumulateTaggedLocalMatrix()
Local Jacobian blocks will be appended by adding the current local kernel Jacobian.
void prepareMatrixTag(Assembly &assembly, unsigned int ivar, unsigned int jvar)
Prepare data for computing element jacobian according to the active tags.
void accumulateTaggedLocalResidual()
Local residual blocks will be appended by adding the current local kernel residual.
void prepareVectorTag(Assembly &assembly, unsigned int ivar)
Prepare data for computing element residual according to active tags.
DenseVector< Number > _local_re
Holds local residual entries as they are accumulated by this Kernel.
virtual unsigned int size() const override final
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: