19#include "libmesh/dense_vector.h"
20#include "metaphysicl/raw_type.h"
30#ifdef MOOSE_KOKKOS_ENABLED
62#ifdef MOOSE_KOKKOS_ENABLED
84#ifdef MOOSE_KOKKOS_ENABLED
105#ifdef MOOSE_KOKKOS_ENABLED
124 void useVectorTag(
const TagName & tag_name, VectorTagsKey);
126 void useMatrixTag(
const TagName & tag_name, MatrixTagsKey);
187 DenseMatrix<Number> & k)
const;
213 DenseMatrix<Number> & k)
const;
246 const DenseMatrix<Number> & k);
252 const DenseMatrix<Number> & k);
269 template <
typename Res
iduals,
typename Indices>
271 const Residuals & residuals,
272 const Indices & dof_indices,
273 Real scaling_factor);
275 template <
typename Res
iduals,
typename Indices>
277 const Residuals & residuals,
278 const Indices & dof_indices,
279 const std::vector<Real> & scaling_factors);
284 template <
typename T,
typename Indices>
286 const DenseVector<T> & residuals,
287 const Indices & dof_indices,
288 Real scaling_factor);
294 template <
typename Res
iduals,
typename Indices>
296 const Residuals & residuals,
297 const Indices & dof_indices,
298 Real scaling_factor);
303 template <
typename Res
iduals,
typename Indices>
305 const Residuals & residuals,
306 const Indices & dof_indices,
307 Real scaling_factor);
313 template <
typename Res
iduals,
typename Indices>
315 const Residuals & residuals,
316 const Indices & dof_indices,
317 const std::vector<Real> & scaling_factors);
340 template <
typename Res
iduals,
typename Indices>
342 const Residuals & residuals,
343 const Indices & dof_indices,
344 Real scaling_factor);
351 template <
typename Res
iduals,
typename Indices>
353 const Residuals & residuals,
354 const Indices & dof_indices,
355 Real scaling_factor);
362 template <
typename Res
iduals,
typename Indices>
364 const Residuals & residuals,
365 const Indices & dof_indices,
366 Real scaling_factor);
373 dof_id_type row_index,
374 dof_id_type column_index,
375 Real scaling_factor);
381 const DenseMatrix<Real> & local_k,
382 const std::vector<dof_id_type> & row_indices,
383 const std::vector<dof_id_type> & column_indices,
384 Real scaling_factor);
389 template <
typename T>
400 template <
typename SetRes
idualFunctor>
424 const std::set<TagID> & vector_tags,
425 const std::set<TagID> & absolute_value_vector_tags);
483#define usingTaggingInterfaceMembers \
484 using TaggingInterface::_subproblem; \
485 using TaggingInterface::accumulateTaggedLocalResidual; \
486 using TaggingInterface::accumulateTaggedLocalMatrix; \
487 using TaggingInterface::prepareVectorTag; \
488 using TaggingInterface::prepareMatrixTag; \
489 using TaggingInterface::prepareVectorTagNeighbor; \
490 using TaggingInterface::_local_re; \
491 using TaggingInterface::prepareVectorTagLower; \
492 using TaggingInterface::prepareMatrixTagNeighbor; \
493 using TaggingInterface::prepareMatrixTagLower; \
494 using TaggingInterface::_local_ke
496template <
typename Res
iduals,
typename Indices>
499 const Residuals & residuals,
500 const Indices & dof_indices,
501 const Real scaling_factor)
508 for (
const auto i : index_range(residuals))
519template <
typename Res
iduals,
typename Indices>
522 const Residuals & residuals,
523 const Indices & dof_indices,
524 const std::vector<Real> & scaling_factors)
526 const auto count = scaling_factors.size();
527 mooseAssert(dof_indices.size() %
count == 0,
528 "The number of dof indices should be divided cleanly by the variable count");
529 const auto nshapes = dof_indices.size() /
count;
531 for (
const auto j : make_range(
count))
540template <
typename T,
typename Indices>
543 const DenseVector<T> & residuals,
544 const Indices & dof_indices,
545 const Real scaling_factor)
547 addResiduals(assembly, residuals.get_values(), dof_indices, scaling_factor);
550template <
typename Res
iduals,
typename Indices>
553 const Residuals & residuals,
554 const Indices & dof_indices,
555 const Real scaling_factor)
562 for (
const auto i : index_range(residuals))
573template <
typename Res
iduals,
typename Indices>
576 const Residuals & residuals,
577 const Indices & dof_indices,
580 addResiduals(assembly, residuals, dof_indices, scaling_factor);
581 addJacobian(assembly, residuals, dof_indices, scaling_factor);
584template <
typename Res
iduals,
typename Indices>
587 const Residuals & residuals,
588 const Indices & dof_indices,
595template <
typename Res
iduals,
typename Indices>
598 const Residuals & residuals,
599 const Indices & dof_indices,
600 const std::vector<Real> & scaling_factors)
602 const auto count = scaling_factors.size();
603 mooseAssert(dof_indices.size() %
count == 0,
604 "The number of dof indices should be divided cleanly by the variable count");
605 const auto nshapes = dof_indices.size() /
count;
607 for (
const auto j : make_range(
count))
616template <
typename Res
iduals,
typename Indices>
619 const Residuals & residuals,
620 const Indices & dof_indices,
627template <
typename Res
iduals,
typename Indices>
630 const Residuals & residuals,
631 const Indices & dof_indices,
641 const dof_id_type row_index,
642 const dof_id_type column_index,
643 const Real scaling_factor)
651 const DenseMatrix<Real> & local_k,
652 const std::vector<dof_id_type> & row_indices,
653 const std::vector<dof_id_type> & column_indices,
654 const Real scaling_factor)
677template <
typename SetRes
idualFunctor>
683 set_residual_functor(sys.
getVector(tag_id));
InputParameters validParams()
Key structure for APIs adding/caching local element residuals/Jacobians.
Keeps track of stuff related to assembling.
void cacheResidualsWithoutConstraints(const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &vector_tags)
Process the supplied residual values.
void cacheResiduals(const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &vector_tags)
Process the supplied residual values.
void cacheJacobianBlock(const DenseMatrix< Number > &jac_block, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &tags)
Cache a local Jacobian block with the provided rows (idof_indices) and columns (jdof_indices) for eve...
void cacheJacobian(GlobalDataKey)
Takes the values that are currently in _sub_Kee and appends them to the cached values.
void cacheJacobianWithoutConstraints(const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &matrix_tags)
Process the derivatives() data of a vector of ADReals.
This is the common base class for objects that give contributions to a linear system.
A storage container for MooseObjects that inherit from SetupInterface.
Every object that can be built by the factory should be derived from this class.
Class for stuff related to variables.
void insertNodalValue(libMesh::NumericVector< libMesh::Number > &residual, const DofValue &v)
Write a nodal value to the passed-in solution vector.
The Kokkos FE system class.
Base class for Kokkos objects that contribute to a linear system, i.e.
The base class for Kokkos residual objects.
Nonlinear eigenvalue system to be solved.
Nonlinear system to be solved.
This is the common base class for objects that give residual contributions.
Generic class for solving transient nonlinear problems.
Base class for a system (of equations)
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
DenseMatrix< Number > _local_ke
Holds local Jacobian entries as they are accumulated by this Kernel.
SubProblem & _subproblem
SubProblem that contains tag info.
void addJacobianElement(Assembly &assembly, Real value, dof_id_type row_index, dof_id_type column_index, Real scaling_factor)
Add into a single Jacobian element.
void accumulateTaggedLocalMatrix()
Local Jacobian blocks will be appended by adding the current local kernel Jacobian.
std::vector< DenseMatrix< Number > * > _ke_blocks
Kernel blocks Vectors For each Tag.
virtual ~TaggingInterface()
const MooseObject & _moose_object
Moose objct this tag works on.
void addJacobianWithoutConstraints(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.
std::set< TagID > _abs_vector_tags
The absolute value residual tag ids.
void prepareVectorTagLower(Assembly &assembly, unsigned int ivar)
Prepare data for computing the residual according to active tags for mortar constraints.
std::vector< DenseVector< Number > * > _re_blocks
Residual blocks Vectors For each Tag.
bool hasVectorTags() const
void checkForNans() const
Checks _local_re for NaNs/Infs and returns an error if found.
void setResidual(SystemBase &sys, const T &residual, MooseVariableFE< T > &var)
Set residual using the variables' insertion API.
void addResidualsWithoutConstraints(Assembly &assembly, const Residuals &residuals, const Indices &dof_indices, Real scaling_factor)
Add the provided incoming residuals corresponding to the provided dof indices.
void prepareMatrixTag(Assembly &assembly, unsigned int ivar, unsigned int jvar)
Prepare data for computing element jacobian according to the active tags.
static InputParameters validParams()
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.
void useMatrixTag(const TagName &tag_name, MatrixTagsKey)
std::set< TagID > _vector_tags
The vector tag ids this Kernel will contribute to.
void accumulateTaggedNonlocalMatrix()
Nonlocal Jacobian blocks will be appended by adding the current nonlocal kernel Jacobian.
void accumulateTaggedLocalResidual()
Local residual blocks will be appended by adding the current local kernel residual.
std::set< TagID > _non_ref_vector_tags
A set to hold vector tags excluding the reference residual tag.
void prepareMatrixTagLower(Assembly &assembly, unsigned int ivar, unsigned int jvar, Moose::ConstraintJacobianType type)
Prepare data for computing the jacobian according to the active tags for mortar.
void prepareMatrixTagNonlocal(Assembly &assembly, unsigned int ivar, unsigned int jvar)
Prepare data for computing nonlocal element jacobian according to the active tags.
void addResidualsAndJacobian(Assembly &assembly, const Residuals &residuals, const Indices &dof_indices, Real scaling_factor)
Add the provided incoming residuals and derivatives for the Jacobian, corresponding to the provided d...
const std::set< TagID > & getMatrixTags(MatrixTagsKey) const
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...
void prepareVectorTagNeighbor(Assembly &assembly, unsigned int ivar)
Prepare data for computing element residual the according to active tags for DG and interface kernels...
std::vector< Real > _absolute_residuals
A container to hold absolute values of residuals passed into addResiduals.
void useVectorTag(const TagName &tag_name, VectorTagsKey)
const InputParameters & _tag_params
Parameters from moose object.
std::set< TagID > _ref_vector_tags
A set of either size 1 or 0.
void addResiduals(Assembly &assembly, const Residuals &residuals, const Indices &dof_indices, Real scaling_factor)
Add the provided incoming residuals corresponding to the provided dof indices.
std::set< TagID > _matrix_tags
The matrices this Kernel will contribute to.
void addResidualsAndJacobianWithoutConstraints(Assembly &assembly, const Residuals &residuals, const Indices &dof_indices, Real scaling_factor)
Add the provided incoming residuals and derivatives for the Jacobian, corresponding to the provided d...
const std::set< TagID > & getVectorTags(VectorTagsKey) const
void prepareVectorTag(Assembly &assembly, unsigned int ivar)
Prepare data for computing element residual according to active tags.
void assignTaggedLocalResidual()
Local residual blocks will assigned as the current local kernel residual.
DenseVector< Number > _local_re
Holds local residual entries as they are accumulated by this Kernel.
std::vector< DenseVector< Number > * > _absre_blocks
Residual blocks for absolute value residual tags.
ResidualTagType
Enumerate whether a (residual) vector tag is to be of a non-reference or reference tag type.
void assignTaggedLocalMatrix()
Local Jacobian blocks will assigned as the current local kernel Jacobian.
DenseMatrix< Number > _nonlocal_ke
Holds nonlocal Jacobian entries as they are accumulated by this Kernel.
void prepareVectorTagInternal(Assembly &assembly, unsigned int ivar, const std::set< TagID > &vector_tags, const std::set< TagID > &absolute_value_vector_tags)
Prepare data for computing element residual according to the specified tags Residual blocks for diffe...
std::set< TagID > _non_ref_abs_vector_tags
A set to hold absolute value vector tags excluding the reference residual tag.
std::set< TagID > _ref_abs_vector_tags
A set of either size 1 or 0.
virtual void set(const numeric_index_type i, const T value)=0
auto makeSpan(C &container, std::size_t offset, std::size_t n)
Helper function for creating a span from a given container.
Utility structure for packaging up all of the residual object's information needed to add into the sy...
const DenseVector< ADReal > & residuals
const std::vector< dof_id_type > & dof_indices
const Real scaling_factor