12 #ifdef MOOSE_KOKKOS_SCOPE 16 #include <unordered_map> 25 #define usingCoupleableMembers \ 26 using Coupleable::_zero; \ 27 using Coupleable::_grad_zero; \ 28 using Coupleable::_ad_zero; \ 29 using Coupleable::_ad_grad_zero; \ 30 using Coupleable::coupled; \ 31 using Coupleable::isCoupled; \ 32 using Coupleable::coupledComponents 63 #ifdef MOOSE_KOKKOS_ENABLED 74 const std::unordered_map<std::string, std::vector<MooseVariableFieldBase *>> &
157 virtual bool isCoupled(
const std::string & var_name,
unsigned int i = 0)
const;
179 VariableName
coupledName(
const std::string & var_name,
unsigned int comp = 0)
const;
186 std::vector<VariableName>
coupledNames(
const std::string & var_name)
const;
195 virtual unsigned int coupled(
const std::string & var_name,
unsigned int comp = 0)
const;
202 std::vector<unsigned int>
coupledIndices(
const std::string & var_name)
const;
212 unsigned int comp = 0)
const;
219 std::vector<const VariableValue *>
coupledValues(
const std::string & var_name)
const;
226 std::vector<const VectorVariableValue *>
coupledVectorValues(
const std::string & var_name)
const;
234 template <
bool is_ad>
236 unsigned int comp = 0)
const;
245 template <
bool is_ad>
247 unsigned int comp = 0)
const;
255 template <
bool is_ad>
256 std::vector<const GenericVariableValue<is_ad> *>
265 template <
bool is_ad>
267 unsigned int comp = 0)
const;
276 template <
bool is_ad>
278 unsigned int comp = 0)
const;
287 template <
bool is_ad>
289 unsigned int comp = 0)
const;
298 unsigned int comp = 0)
const;
314 std::vector<const ADVariableValue *>
adCoupledValues(
const std::string & var_name)
const;
323 unsigned int comp = 0)
const;
333 unsigned int comp = 0)
const;
341 std::vector<const ADVectorVariableValue *>
356 const std::string & tag_name,
357 unsigned int index = 0)
const;
369 const std::string & tag_name)
const;
381 unsigned int index = 0)
const;
384 const std::string & tag_name,
385 unsigned int index = 0)
const;
396 std::vector<const ArrayVariableValue *>
411 const std::string & tag_name,
412 unsigned int index = 0)
const;
423 std::vector<const VariableGradient *>
437 unsigned int index = 0)
const;
440 const std::string & tag_name,
441 unsigned int index = 0)
const;
449 std::vector<const ArrayVariableGradient *>
452 std::vector<const ArrayVariableGradient *>
466 const std::string & tag_name,
467 unsigned int index = 0)
const;
476 const std::string & tag_name,
477 unsigned int comp = 0)
const;
489 const std::string & tag_name)
const;
503 const std::string & tag_name,
504 unsigned int index = 0)
const;
516 const std::string & tag_name)
const;
526 unsigned int comp = 0)
const;
536 unsigned int comp = 0)
const;
543 std::vector<const ArrayVariableValue *>
coupledArrayValues(
const std::string & var_name)
const;
583 unsigned int comp = 0)
const;
590 std::vector<const VariableValue *>
coupledValuesOld(
const std::string & var_name)
const;
597 std::vector<const VectorVariableValue *>
608 unsigned int comp = 0)
const;
615 std::vector<const VariableValue *>
coupledValuesOlder(
const std::string & var_name)
const;
624 unsigned int comp = 0)
const;
634 unsigned int comp = 0)
const;
644 unsigned int comp = 0)
const;
654 unsigned int comp = 0)
const;
664 unsigned int comp = 0)
const;
674 unsigned int comp = 0)
const;
681 std::vector<const VariableGradient *>
coupledGradients(
const std::string & var_name)
const;
691 unsigned int comp = 0)
const;
701 unsigned int comp = 0)
const;
709 std::vector<const ADVariableGradient *>
adCoupledGradients(
const std::string & var_name)
const;
718 template <
bool is_ad>
720 unsigned int comp = 0)
const;
728 template <
bool is_ad>
729 std::vector<const GenericVariableGradient<is_ad> *>
740 unsigned int comp = 0)
const;
749 unsigned int comp = 0)
const;
759 unsigned int comp = 0)
const;
769 unsigned int comp = 0)
const;
776 std::vector<const VariableGradient *>
coupledGradientsOld(
const std::string & var_name)
const;
786 unsigned int comp = 0)
const;
795 unsigned int comp = 0)
const;
805 unsigned int comp = 0)
const;
815 unsigned int comp = 0)
const;
825 unsigned int comp = 0)
const;
835 unsigned int comp = 0)
const;
845 unsigned int comp = 0)
const;
855 unsigned int comp = 0)
const;
865 unsigned int comp = 0)
const;
875 unsigned int comp = 0)
const;
885 unsigned int comp = 0)
const;
895 unsigned int comp = 0)
const;
905 unsigned int comp = 0)
const;
915 unsigned int comp = 0)
const;
925 unsigned int comp = 0)
const;
936 unsigned int comp = 0)
const;
947 unsigned int comp = 0)
const;
958 unsigned int comp = 0)
const;
968 unsigned int comp = 0)
const;
979 unsigned int comp = 0)
const;
990 unsigned int comp = 0)
const;
999 unsigned int comp = 0)
const;
1008 unsigned int comp = 0)
const;
1015 std::vector<const VariableValue *>
coupledDots(
const std::string & var_name)
const;
1025 unsigned int comp = 0)
const;
1034 unsigned int comp = 0)
const;
1044 unsigned int comp = 0)
const;
1060 std::vector<const ADVariableValue *>
adCoupledDots(
const std::string & var_name)
const;
1070 unsigned int comp = 0)
const;
1081 unsigned int comp = 0)
const;
1091 unsigned int comp = 0)
const;
1101 unsigned int comp = 0)
const;
1111 unsigned int comp = 0)
const;
1121 unsigned int comp = 0)
const;
1131 unsigned int comp = 0)
const;
1141 unsigned int comp = 0)
const;
1151 unsigned int comp = 0)
const;
1161 unsigned int comp = 0)
const;
1171 unsigned int comp = 0)
const;
1181 unsigned int comp = 0)
const;
1191 unsigned int comp = 0)
const;
1201 unsigned int comp = 0)
const;
1211 unsigned int comp = 0)
const;
1219 template <
typename T>
1220 const T &
coupledNodalValue(
const std::string & var_name,
unsigned int comp = 0)
const;
1228 template <
typename T>
1230 unsigned int comp = 0)
const;
1238 template <
typename T>
1247 template <
typename T>
1256 template <
typename T>
1266 template <
typename T>
1267 const T &
coupledNodalDot(
const std::string & var_name,
unsigned int comp = 0)
const;
1277 unsigned int comp = 0)
const;
1287 unsigned int comp = 0)
const;
1297 unsigned int comp = 0)
const;
1306 unsigned int comp = 0)
const;
1314 std::vector<const VariableValue *>
coupledAllDofValues(
const std::string & var_name)
const;
1323 unsigned int comp = 0)
const;
1340 unsigned int comp = 0)
const;
1357 unsigned int comp = 0)
const;
1367 unsigned int comp = 0)
const;
1390 template <
bool is_ad>
1397 template <
bool is_ad>
1404 template <
bool is_ad>
1423 std::unordered_map<std::string, std::vector<MooseVariableFieldBase *>>
_coupled_vars;
1456 mutable std::unordered_map<std::string, std::vector<std::unique_ptr<VariableValue>>>
1463 mutable std::unordered_map<std::string, std::unique_ptr<VectorVariableValue>>
1470 mutable std::unordered_map<std::string, std::unique_ptr<MooseArray<ADRealVectorValue>>>
1549 checkVar(
const std::string & var_name,
unsigned int comp = 0,
unsigned int comp_bound = 0)
const;
1555 template <
typename T>
1562 template <
typename T>
1564 const std::string & tag_name,
1565 unsigned int index = 0)
const;
1570 template <
typename T>
1577 template <
typename T>
1579 const std::string & var_name,
const std::string & tag_name,
unsigned int comp = 0)
const;
1586 template <
typename T>
1588 requestStates(
const std::string & var_name,
const TagName & tag_name,
const unsigned int comp);
1640 template <
typename T>
1641 const T *
getVarHelper(
const std::string & var_name,
unsigned int comp)
const;
1646 template <
typename T>
1647 T *
getVarHelper(
const std::string & var_name,
unsigned int comp);
1705 template <
typename T,
typename Func>
1709 std::vector<T> vals(components);
1710 for (MooseIndex(components) comp = 0; comp < components; ++comp)
1711 vals[comp] = func(comp);
1795 template <
typename T>
1798 template <
typename T>
1832 #ifdef MOOSE_KOKKOS_SCOPE 1834 const std::string & tag_name,
1835 unsigned int comp)
const;
1837 const std::string & tag_name)
const;
1842 const std::string & tag_name,
1843 unsigned int comp = 0)
const;
1846 const std::string & tag_name)
const;
1848 const std::string & tag_name,
1849 unsigned int comp = 0)
const;
1852 const std::string & tag_name)
const;
1854 const std::string & tag_name,
1855 unsigned int comp = 0)
const;
1858 const std::string & tag_name)
const;
1860 const std::string & tag_name,
1861 unsigned int comp = 0)
const;
1864 const std::string & tag_name)
const;
1867 const std::string & tag_param_name,
1868 unsigned int comp = 0)
const;
1871 const std::string & tag_param_name)
const;
1873 const std::string & tag_param_name,
1874 unsigned int comp = 0)
const;
1877 const std::string & tag_param_name)
const;
1879 const std::string & tag_param_name,
1880 unsigned int comp = 0)
const;
1883 const std::string & tag_param_name)
const;
1885 const std::string & tag_param_name,
1886 unsigned int comp = 0)
const;
1889 const std::string & tag_param_name)
const;
1892 unsigned int comp = 0)
const;
1895 unsigned int comp = 0)
const;
1898 unsigned int comp = 0)
const;
1901 unsigned int comp = 0)
const;
1905 unsigned int comp = 0)
const;
1908 unsigned int comp = 0)
const;
1911 unsigned int comp = 0)
const;
1914 unsigned int comp = 0)
const;
1918 unsigned int comp = 0)
const;
1921 unsigned int comp = 0)
const;
1924 unsigned int comp = 0)
const;
1927 unsigned int comp = 0)
const;
1931 unsigned int comp = 0)
const;
1934 unsigned int comp = 0)
const;
1938 unsigned int comp = 0)
const;
1946 template <
typename T>
1951 auto name_to_use = var_name;
1962 auto deprecated_name = it->second;
1963 if (
checkVar(deprecated_name, comp, 0))
1964 name_to_use = deprecated_name;
1973 "Trying to get a coupled var " << name_to_use <<
" that doesn't exist");
1975 if (
auto coupled_var = dynamic_cast<T *>(coupled_vars_it->second[comp]))
1980 if (var->name() == name_to_use)
1981 mooseError(
"The named variable is a standard variable, try a " 1982 "'coupled[Value/Gradient/Dot/etc]...' function instead");
1984 if (var->name() == name_to_use)
1985 mooseError(
"The named variable is a vector variable, try a " 1986 "'coupledVector[Value/Gradient/Dot/etc]...' function instead");
1988 if (var->name() == name_to_use)
1989 mooseError(
"The named variable is an array variable, try a " 1990 "'coupledArray[Value/Gradient/Dot/etc]...' function instead");
1992 if (var->name() == name_to_use)
1993 mooseError(
"The named variable is a finite volume variable, which the coupled[...] routine " 1994 "used does not support. Try using the functor system routines instead.");
1996 "Variable '", name_to_use,
"' is of a different C++ type than you tried to fetch it as.");
2000 template <
typename T>
2004 return const_cast<Coupleable *
>(
this)->getVarHelper<T>(var_name, comp);
virtual const ArrayVariableValue & coupledArrayDotDotOld(const std::string &var_name, unsigned int comp=0) const
Old second time derivative of a coupled array variable.
virtual const VariableValue & coupledDofValues(const std::string &var_name, unsigned int comp=0) const
Returns DoFs in the current solution vector of a coupled variable for the local element.
virtual const VariableValue & coupledVectorTagValue(const std::string &var_names, TagID tag, unsigned int index=0) const
Returns value of a coupled variable for a given tag.
virtual const VariableGradient & coupledVectorTagGradient(const std::string &var_names, TagID tag, unsigned int index=0) const
Returns gradient of a coupled variable for a given tag.
virtual const ArrayVariableValue & coupledArrayValueOlder(const std::string &var_name, unsigned int comp=0) const
Returns an old value from two time steps previous of a coupled array variable.
OutputTools< Real >::VariableGradient VariableGradient
const T & coupledNodalDot(const std::string &var_name, unsigned int comp=0) const
Nodal values of time derivative of a coupled variable.
Moose::Kokkos::VariableValue kokkosCoupledDot(const std::string &var_name, unsigned int comp=0) const
OutputTools< RealVectorValue >::VariableDivergence VectorVariableDivergence
Moose::Kokkos::VariableValue kokkosCoupledNodalValues(const std::string &var_name) const
void validateExecutionerType(const std::string &name, const std::string &fn_name) const
Checks to make sure that the current Executioner has set "_is_transient" when old/older values are co...
virtual bool isCoupled(const std::string &var_name, unsigned int i=0) const
Returns true if a variables has been coupled as name.
virtual const VectorVariableGradient & coupledVectorGradient(const std::string &var_name, unsigned int comp=0) const
Returns gradient of a coupled vector variable.
const std::vector< ArrayMooseVariable * > & getCoupledArrayMooseVars() const
Get the list of array coupled variables.
Moose::Kokkos::VariableValue kokkosCoupledVectorTagDofValueByName(const std::string &var_name, const std::string &tag_name, unsigned int comp=0) const
bool _c_nodal
True if we provide coupling to nodal values.
void checkFuncType(const std::string var_name, VarType t, FuncAge age) const
Moose::Kokkos::Variable kokkosZeroVariable() const
const std::vector< VectorMooseVariable * > & getCoupledVectorMooseVars() const
Get the list of vector coupled variables.
VectorVariableCurl _default_vector_curl
This will always be zero because the default values for optionally coupled variables is always consta...
Moose::GenericType< VectorVariableValue, is_ad > GenericVectorVariableValue
VectorMooseVariable * getVectorVar(const std::string &var_name, unsigned int comp)
Extract pointer to a coupled vector variable.
const VariableValue & _zero
Zero value of a variable.
const VariablePhiGradient & _grad_phi_zero
Zero gradient of trial function.
virtual unsigned int coupled(const std::string &var_name, unsigned int comp=0) const
Returns the index for a coupled variable by name.
virtual const VectorVariableValue & coupledVectorDotDot(const std::string &var_name, unsigned int comp=0) const
Second time derivative of a coupled vector variable.
const VariablePhiSecond & _second_phi_zero
Zero second derivative of a test function.
virtual const VariableSecond & coupledSecondPreviousNL(const std::string &var_name, unsigned int comp=0) const
Returns second derivative of a coupled variable for the previous Newton iterate.
std::unordered_map< std::string, std::unique_ptr< MooseArray< ADRealVectorValue > > > _ad_default_vector_value
Will hold the default value for optional vector coupled variables for automatic differentiation.
const ArrayVariableValue * getDefaultArrayValue(const std::string &var_name) const
Helper method to return (and insert if necessary) the default value for an uncoupled array variable...
const GenericVariableGradient< is_ad > & coupledGenericGradient(const std::string &var_name, unsigned int comp=0) const
Returns gradient of a coupled variable for use in templated automatic differentiation.
std::vector< const VariableValue * > coupledValuesOlder(const std::string &var_name) const
Returns the older values for all of a coupled variable's components.
const ADVariableSecond & adZeroSecond() const
Retrieve a zero second for automatic differentiation.
const ADVectorVariableValue * getADDefaultVectorValue(const std::string &var_name) const
Helper method to return (and insert if necessary) the default vector value for Automatic Differentiat...
virtual const VariableSecond & coupledSecond(const std::string &var_name, unsigned int comp=0) const
Returns second spatial derivatives of a coupled variable.
virtual bool isCoupledConstant(const std::string &var_name) const
Returns true if a variable passed as a coupled value is really a constant.
virtual const VariableValue & coupledDotOld(const std::string &var_name, unsigned int comp=0) const
Old time derivative of a coupled variable.
Moose::Kokkos::VariableValue kokkosCoupledValuesOlder(const std::string &var_name) const
virtual const VectorVariableValue & coupledVectorValueOld(const std::string &var_name, unsigned int comp=0) const
Returns an old value from previous time step of a coupled vector variable.
Moose::Kokkos::Variable kokkosCoupledVectorTagVariable(const std::string &var_name, const std::string &tag_name, unsigned int comp) const
std::vector< const ArrayVariableValue * > coupledArrayValues(const std::string &var_name) const
Returns the values for all of a coupled array variable's components.
std::vector< const VariableValue * > coupledDots(const std::string &var_name) const
Returns the time derivatives for all of a coupled variable's components.
virtual const ArrayVariableValue & coupledArrayValueOld(const std::string &var_name, unsigned int comp=0) const
Returns an old value from previous time step of a coupled array variable.
VariableName coupledName(const std::string &var_name, unsigned int comp=0) const
Names of the variable in the Coupleable interface.
virtual const VectorVariableGradient & coupledVectorGradientOld(const std::string &var_name, unsigned int comp=0) const
Returns an old gradient from previous time step of a coupled vector variable.
Moose::Kokkos::VariableValue kokkosCoupledNodalValueOld(const std::string &var_name, unsigned int comp=0) const
MooseVariableField< Real > MooseWritableVariable
Class for stuff related to variables.
const VectorVariableValue & _vector_zero
Zero value of a vector variable.
const VariableGradient & _grad_zero
Zero gradient of a variable.
std::unordered_map< std::string, std::vector< MooseVariableFieldBase * > > _coupled_vars
Coupled vars whose values we provide.
std::set< TagID > _fe_coupleable_matrix_tags
const MooseArray< ADRealVectorValue > & _ad_grad_zero
virtual const VectorVariableValue & coupledVectorDot(const std::string &var_name, unsigned int comp=0) const
Time derivative of a coupled vector variable.
virtual const VariableValue & coupledDotDotDu(const std::string &var_name, unsigned int comp=0) const
Second time derivative of a coupled variable with respect to the coefficients.
void checkWritableVar(MooseWritableVariable *var)
Checks that the passed in variable is only accessed writable by one object in a given subdomain...
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
const bool _is_fv
Whether the MooseObject is a finite volume object.
virtual const VariableValue & coupledDofValuesOld(const std::string &var_name, unsigned int comp=0) const
Returns DoFs in the old solution vector of a coupled variable for the local element.
const TagName OLDER_SOLUTION_TAG
Moose::Kokkos::VariableValue kokkosCoupledVectorTagNodalValueByName(const std::string &var_name, const std::string &tag_name, unsigned int comp=0) const
std::vector< const GenericVariableValue< is_ad > * > coupledGenericValues(const std::string &var_name) const
Returns the values for all of a coupled variable's components for use in templated automatic differen...
std::vector< ArrayMooseVariable * > _coupled_array_moose_vars
Vector of array coupled variables.
const ArrayVariableValue & coupledVectorTagArrayDofValue(const std::string &var_name, const std::string &tag_name, unsigned int comp=0) const
Returns evaluations of a tagged vector at the requested variable's degree of freedom indices...
const VariableSecond & _second_zero
Zero second derivative of a variable.
std::vector< const VectorVariableValue * > coupledVectorValuesOld(const std::string &var_name) const
Returns the old values for all of a coupled vector variable's components.
const T & coupledNodalValue(const std::string &var_name, unsigned int comp=0) const
Returns nodal values of a coupled variable.
std::vector< T > coupledVectorHelper(const std::string &var_name, const Func &func) const
virtual const VariableValue & coupledVectorTagDofValue(const std::string &var_name, TagID tag, unsigned int index=0) const
Returns dof value of a coupled variable for a given tag.
OutputTools< RealVectorValue >::VariableValue VectorVariableValue
const ADVariableGradient & adCoupledGradient(const std::string &var_name, unsigned int comp=0) const
Returns gradient of a coupled variable for use in Automatic Differentiation.
VectorVariableDivergence _default_div
This will always be zero because the default values for optionally coupled variables is always consta...
const bool _c_allow_element_to_nodal_coupling
std::vector< const ArrayVariableValue * > coupledVectorTagArrayValues(const std::string &var_names, TagID tag) const
Returns the values for all the coupled variables desired for a given tag.
virtual const ArrayVariableValue & coupledArrayDofValues(const std::string &var_name, unsigned int comp=0) const
Returns DoFs in the current solution vector of a coupled array variable for the local element...
std::vector< const VariableGradient * > coupledVectorTagGradients(const std::string &var_names, TagID tag) const
Returns gradients for all the coupled variables desired for a given tag.
std::set< TagID > _fe_coupleable_vector_tags
This is a wrapper that forwards calls to the implementation, which can be switched out at any time wi...
MooseArray< ADRealVectorValue > _ad_default_curl
This will always be zero because the default values for optionally coupled vector variables is always...
virtual const VariableValue & coupledDot(const std::string &var_name, unsigned int comp=0) const
Time derivative of a coupled variable.
Moose::Kokkos::VariableGradient kokkosCoupledVectorTagGradients(const std::string &var_name, const std::string &tag_param_name) const
THREAD_ID _c_tid
Thread ID of the thread using this object.
const ADVariableValue & adCoupledValue(const std::string &var_name, unsigned int comp=0) const
Returns value of a coupled variable for use in Automatic Differentiation.
Moose::Kokkos::VariableGradient kokkosCoupledGradient(const std::string &var_name, unsigned int comp=0) const
virtual const VariableValue & coupledNodalDotDot(const std::string &var_name, unsigned int comp=0) const
Nodal values of second time derivative of a coupled variable.
Moose::Kokkos::Variable kokkosCoupledVectorTagVariables(const std::string &var_name, const std::string &tag_name) const
const ADVariableGradient & getADDefaultGradient() const
Helper method to return (and insert if necessary) the default gradient for Automatic Differentiation ...
const VectorVariableValue * getDefaultVectorValue(const std::string &var_name) const
Helper method to return (and insert if necessary) the default value for an uncoupled vector variable...
std::vector< std::set< MooseWritableVariable * > > _writable_coupled_variables
keep a set of allocated writable variable references to make sure only one object can obtain them per...
virtual const VariableGradient & coupledGradientDotDot(const std::string &var_name, unsigned int comp=0) const
Second time derivative of the gradient of a coupled variable.
OutputTools< Real >::VariablePhiValue VariablePhiValue
std::unordered_map< std::string, std::vector< MooseVariableScalar * > > _c_coupled_scalar_vars
Scalar variables coupled into this object (for error checking)
VariableValue _default_value_zero
This will always be zero because the default values for optionally coupled variables is always consta...
MooseVariable * getVar(const std::string &var_name, unsigned int comp)
Extract pointer to a coupled variable.
const ADVectorVariableCurl & getADDefaultCurl() const
Helper method to return (and insert if necessary) the default curl value for Automatic Differentiatio...
const GenericVariableGradient< is_ad > & genericZeroGradient()
Returns zero gradient templated with automatic differentiation boolean.
Moose::Kokkos::VariableValue kokkosCoupledDofValue(const std::string &var_name, unsigned int comp=0) const
OutputTools< RealVectorValue >::VariableCurl VectorVariableCurl
virtual const ArrayVariableValue & coupledArrayDotOld(const std::string &var_name, unsigned int comp=0) const
Old time derivative of a coupled array variable.
virtual const VariableValue & coupledValueOld(const std::string &var_name, unsigned int comp=0) const
Returns an old value from previous time step of a coupled variable.
This class provides an interface for common operations on field variables of both FE and FV types wit...
virtual const ArrayVariableValue & coupledArrayDot(const std::string &var_name, unsigned int comp=0) const
Time derivative of a coupled array variable.
Moose::Kokkos::VariableGradient kokkosZeroGradient() const
const GenericVariableValue< is_ad > & coupledGenericDotDot(const std::string &var_name, unsigned int comp=0) const
Returns the second time derivative of a coupled variable for use in templated automatic differentiati...
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
virtual const VariableValue & coupledMatrixTagValue(const std::string &var_names, TagID tag, unsigned int index=0) const
Returns value of a coupled variable for a given tag.
virtual void coupledCallback(const std::string &, bool) const
A call-back function provided by the derived object for actions before coupling a variable with funct...
const ADVariableGradient & adZeroGradient() const
method that returns _grad_zero to RESIDUAL computing objects and _ad_grad_zero to JACOBIAN computing ...
MooseWritableVariable & writableVariable(const std::string &var_name, unsigned int comp=0)
Returns a writable MooseVariable object for a nodal or elemental variable.
Base class for a system (of equations)
Moose::Kokkos::Scalar< const Real > kokkosCoupledDotDu(const std::string &var_name, unsigned int comp=0) const
virtual const VectorVariableDivergence & coupledDivOlder(const std::string &var_name, unsigned int comp=0) const
Returns an old divergence from two time steps previous of a coupled variable.
std::unordered_map< std::string, std::unique_ptr< VectorVariableValue > > _default_vector_value
Will hold the default value for optional vector coupled variables.
virtual VariableValue & writableCoupledValue(const std::string &var_name, unsigned int comp=0)
Returns a writable reference to a coupled variable for writing to multiple AuxVariables from a single...
std::vector< VariableName > coupledNames(const std::string &var_name) const
Names of the variables in the Coupleable interface.
Moose::Kokkos::VariableGradient kokkosCoupledVectorTagGradientsByName(const std::string &var_name, const std::string &tag_name) const
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
Moose::Kokkos::VariableValue kokkosCoupledVectorTagNodalValue(const std::string &var_name, const std::string &tag_param_name, unsigned int comp=0) const
virtual const VariableGradient & coupledGradient(const std::string &var_name, unsigned int comp=0) const
Returns gradient of a coupled variable.
Moose::Kokkos::VariableValue kokkosCoupledNodalDot(const std::string &var_name, unsigned int comp=0) const
const T * getVarHelper(const std::string &var_name, unsigned int comp) const
Helper that that be used to retrieve a variable of arbitrary type T.
OutputTools< Real >::VariablePhiSecond VariablePhiSecond
const T & coupledNodalValuePreviousNL(const std::string &var_name, unsigned int comp=0) const
Returns nodal values of a coupled variable for previous Newton iterate.
std::vector< const ADVariableValue * > adCoupledValues(const std::string &var_name) const
Returns the values for all of a coupled variable's components for use in Automatic Differentiation...
virtual const VariableValue & coupledValueOlder(const std::string &var_name, unsigned int comp=0) const
Returns an old value from two time steps previous of a coupled variable.
std::vector< MooseVariable * > _coupled_standard_moose_vars
Vector of standard coupled variables.
const std::vector< MooseVariable * > & getCoupledStandardMooseVars() const
Get the list of standard coupled variables.
const ADVariableValue & adCoupledDotDot(const std::string &var_name, unsigned int comp=0) const
Second time derivative of a coupled variable for ad simulations.
const SystemBase *const _c_sys
Pointer to the system object if the moose object this is an interface for has one.
FEProblemBase & _c_fe_problem
virtual const ArrayVariableValue & coupledVectorTagArrayValue(const std::string &var_names, TagID tag, unsigned int index=0) const
Returns value of a coupled array variable for a given tag.
const GenericVectorVariableValue< is_ad > & coupledGenericVectorValue(const std::string &var_name, unsigned int comp=0) const
Returns value of a coupled vector variable for use in templated automatic differentiation classes...
virtual const VariableSecond & coupledSecondOlder(const std::string &var_name, unsigned int comp=0) const
Returns an old second derivative from two time steps previous of a coupled variable.
Moose::Kokkos::VariableValue kokkosZeroNodalValue() const
const OutputTools< T >::VariableValue & vectorTagDofValueHelper(const std::string &var_name, TagID tag, unsigned int comp=0) const
Generic helper method to get vector tag degree of freedom values based on tag ID. ...
bool _c_is_implicit
True if implicit value is required.
virtual const VariableValue & coupledValue(const std::string &var_name, unsigned int comp=0) const
Returns value of a coupled variable.
const ADVariableValue & adCoupledLowerValue(const std::string &var_name, unsigned int comp=0) const
Returns value of a coupled lower-dimensional variable for use in Automatic Differentiation.
virtual const VectorVariableValue & coupledVectorValueOlder(const std::string &var_name, unsigned int comp=0) const
Returns an old value from two time steps previous of a coupled vector variable.
Moose::Kokkos::VariableValue kokkosCoupledValue(const std::string &var_name, unsigned int comp=0) const
const ADVectorVariableSecond & adCoupledVectorSecond(const std::string &var_name, unsigned int comp=0) const
Returns second derivatives of a coupled vector variable for use in Automatic Differentiation.
std::vector< VectorMooseVariable * > _coupled_vector_moose_vars
Vector of vector coupled variables.
void requestStates(const std::string &var_name, const TagName &tag_name, const unsigned int comp)
Method that may request additional solution states from the variable's system depending on the value ...
virtual const VariableValue & coupledValueLower(const std::string &var_name, unsigned int comp=0) const
Returns value of a coupled lower-dimensional variable.
Coupleable(const MooseObject *moose_object, bool nodal, bool is_fv=false)
Constructing the object.
virtual const VariableGradient & coupledGradientOld(const std::string &var_name, unsigned int comp=0) const
Returns an old gradient from previous time step of a coupled variable.
std::vector< const VariableValue * > coupledVectorTagDofValues(const std::string &var_names, TagID tag) const
Returns the dof values for all the coupled variables desired for a given tag.
const Real _kokkos_default_value_zero
kokkos-related variables and methods
OutputTools< RealEigenVector >::VariableValue ArrayVariableValue
virtual const VariableValue & coupledVectorDotDu(const std::string &var_name, unsigned int comp=0) const
Time derivative of a coupled vector variable with respect to the coefficients.
void addFEVariableCoupleableVectorTag(TagID tag)
virtual const VariableSecond & coupledSecondOld(const std::string &var_name, unsigned int comp=0) const
Returns an old second spatial derivatives from previous time step of a coupled variable.
Moose::GenericType< VariableValue, is_ad > GenericVariableValue
auto & getWritableCoupledVariables() const
returns a reference to the set of writable coupled variables
const TagName OLD_SOLUTION_TAG
Every object that can be built by the factory should be derived from this class.
Moose::GenericType< VariableGradient, is_ad > GenericVariableGradient
virtual const ArrayVariableValue & coupledArrayValue(const std::string &var_name, unsigned int comp=0) const
Returns value of a coupled array variable.
const OutputTools< T >::VariableValue & vectorTagValueHelper(const std::string &var_names, TagID tag, unsigned int index=0) const
Generic helper method to get vector tag values based on tag ID.
Moose::Kokkos::VariableValue kokkosCoupledValues(const std::string &var_name) const
std::vector< const VariableGradient * > coupledGradientsOld(const std::string &var_name) const
Returns the old gradients for all of a coupled variable's components.
virtual const ArrayVariableGradient & coupledVectorTagArrayGradient(const std::string &var_names, TagID tag, unsigned int index=0) const
Returns gradient of a coupled array variable for a given tag.
VariableGradient _default_gradient
This will always be zero because the default values for optionally coupled variables is always consta...
VariableSecond _default_second
This will always be zero because the default values for optionally coupled variables is always consta...
std::unordered_map< std::string, std::unique_ptr< MooseArray< ADReal > > > _ad_default_value
Will hold the default value for optional coupled variables for automatic differentiation.
const VariableValue * getDefaultValue(const std::string &var_name, unsigned int comp) const
Helper method to return (and insert if necessary) the default value for an uncoupled variable...
std::vector< const ADVariableValue * > adCoupledDots(const std::string &var_name) const
Returns the time derivatives for all of a coupled variable's components for ad simulations.
const GenericVariableValue< is_ad > & coupledGenericValue(const std::string &var_name, unsigned int comp=0) const
Returns value of a coupled variable for use in templated automatic differentiation classes...
Moose::Kokkos::VariableGradient kokkosCoupledGradients(const std::string &var_name) const
Moose::Kokkos::VariableValue kokkosCoupledVectorTagNodalValues(const std::string &var_name, const std::string &tag_param_name) const
virtual const VariableGradient & coupledGradientDot(const std::string &var_name, unsigned int comp=0) const
Time derivative of the gradient of a coupled variable.
Moose::Kokkos::VariableValue kokkosCoupledDofValues(const std::string &var_name) const
const ADVariableValue * getADDefaultValue(const std::string &var_name) const
Helper method to return (and insert if necessary) the default value for Automatic Differentiation for...
const ADVariableValue & adCoupledDot(const std::string &var_name, unsigned int comp=0) const
Time derivative of a coupled variable for ad simulations.
const std::string & _c_name
The name of the object this interface is part of.
Moose::Kokkos::VariableValue kokkosCoupledNodalValueOlder(const std::string &var_name, unsigned int comp=0) const
Moose::Kokkos::VariableValue kokkosCoupledDofValuesOlder(const std::string &var_name) const
const GenericVariableValue< is_ad > & coupledGenericDofValue(const std::string &var_name, unsigned int comp=0) const
Returns DOF value of a coupled variable for use in templated automatic differentiation classes...
virtual const VectorVariableCurl & coupledCurlOld(const std::string &var_name, unsigned int comp=0) const
Returns an old curl from previous time step of a coupled variable.
virtual const ADVariableValue & adCoupledDofValues(const std::string &var_name, unsigned int comp=0) const
Returns DOF value of a coupled variable for use in Automatic Differentiation.
virtual const VariableValue & coupledNodalDotDotOld(const std::string &var_name, unsigned int comp=0) const
Nodal values of old second time derivative of a coupled variable.
Moose::Kokkos::VariableValue kokkosZeroValue() const
std::vector< const VariableValue * > coupledAllDofValuesOld(const std::string &var_name) const
Returns DoFs in the old solution vector of all of a coupled variable's components for the local eleme...
Moose::Kokkos::VariableValue kokkosCoupledVectorTagValueByName(const std::string &var_name, const std::string &tag_name, unsigned int comp=0) const
std::vector< const VariableGradient * > coupledGradients(const std::string &var_name) const
Returns the gradients for all of a coupled variable's components.
Moose::Kokkos::VariableValue kokkosCoupledDofValueOlder(const std::string &var_name, unsigned int comp=0) const
Moose::Kokkos::VariableValue kokkosCoupledNodalValuesOlder(const std::string &var_name) const
std::vector< const VariableValue * > coupledAllDofValuesOlder(const std::string &var_name) const
Returns DoFs in the older solution vector of all of a coupled variable's components for the local ele...
Moose::Kokkos::VariableValue kokkosCoupledNodalValuesOld(const std::string &var_name) const
const std::set< TagID > & getFEVariableCoupleableMatrixTags() const
const ADVectorVariableValue & adCoupledVectorDot(const std::string &var_name, unsigned int comp=0) const
Time derivative of a vector coupled variable for ad simulations.
const Moose::Functor< T > & getDefaultFunctor(const std::string &var_name) const
virtual const VariableValue & coupledDofValuesOlder(const std::string &var_name, unsigned int comp=0) const
Returns DoFs in the older solution vector of a coupled variable for the local element.
Moose::Kokkos::VariableValue kokkosCoupledVectorTagValue(const std::string &var_name, const std::string &tag_param_name, unsigned int comp=0) const
const VectorVariableCurl & _vector_curl_zero
Zero value of the curl of a vector variable.
const ADVectorVariableGradient & getADDefaultVectorGradient() const
Helper method to return (and insert if necessary) the default gradient for Automatic Differentiation ...
const ADVariableValue & adZeroValue() const
method that returns _zero to RESIDUAL computing objects and _ad_zero to JACOBIAN computing objects ...
std::vector< unsigned int > coupledIndices(const std::string &var_name) const
Returns the indices for a coupled variable's components.
Moose::Kokkos::VariableValue kokkosCoupledDofValueOld(const std::string &var_name, unsigned int comp=0) const
const T & coupledNodalValueOlder(const std::string &var_name, unsigned int comp=0) const
Returns an old nodal value from two time steps previous of a coupled variable.
Moose::Kokkos::VariableGradient kokkosCoupledVectorTagGradient(const std::string &var_name, const std::string &tag_param_name, unsigned int comp=0) const
Moose::Kokkos::VariableValue kokkosCoupledVectorTagDofValuesByName(const std::string &var_name, const std::string &tag_name) const
const std::vector< MooseVariableFieldBase * > & getCoupledMooseVars() const
Get the list of all coupled variables.
const GenericVariableValue< is_ad > & coupledGenericDot(const std::string &var_name, unsigned int comp=0) const
Returns time derivative of a coupled variable for use in templated automatic differentiation classes...
const MooseObject *const _obj
VectorVariableGradient _default_vector_gradient
This will always be zero because the default values for optionally coupled variables is always consta...
Moose::Kokkos::VariableValue kokkosCoupledVectorTagDofValue(const std::string &var_name, const std::string &tag_param_name, unsigned int comp=0) const
std::vector< MooseVariableFieldBase * > _coupled_moose_vars
Vector of all coupled variables.
virtual const VectorVariableCurl & coupledCurl(const std::string &var_name, unsigned int comp=0) const
Returns curl of a coupled variable.
OutputTools< Real >::VariableValue VariableValue
std::set< TagID > & getFEVariableCoupleableMatrixTags()
virtual const ArrayVariableGradient & coupledArrayGradient(const std::string &var_name, unsigned int comp=0) const
Returns gradient of a coupled array variable.
virtual const VariableValue & coupledDotDu(const std::string &var_name, unsigned int comp=0) const
Time derivative of a coupled variable with respect to the coefficients.
OutputTools< Real >::VariablePhiGradient VariablePhiGradient
unsigned int coupledComponents(const std::string &var_name) const
Number of coupled components.
bool _coupleable_neighbor
Whether or not this object is a "neighbor" object: ie all of it's coupled values should be neighbor v...
virtual const ArrayVariableGradient & coupledArrayGradientOlder(const std::string &var_name, unsigned int comp=0) const
Returns an old gradient from two time steps previous of a coupled array variable. ...
virtual const VariableValue & coupledVectorDotDotDu(const std::string &var_name, unsigned int comp=0) const
Second time derivative of a coupled vector variable with respect to the coefficients.
std::vector< const ADVariableGradient * > adCoupledGradients(const std::string &var_name) const
Returns the gradients for all of a coupled variable's components for use in Automatic Differentiation...
Interface for objects that needs coupling capabilities.
std::vector< MooseVariableField< Real > * > _coupled_fv_moose_vars
Vector of all finite volume coupled variables.
const GenericVariableSecond< is_ad > & genericZeroSecond()
Returns zero second derivative templated with automatic differentiation boolean.
std::vector< const VariableValue * > coupledValues(const std::string &var_name) const
Returns the values for all of a coupled variable components.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< const ArrayVariableGradient * > coupledVectorTagArrayGradients(const std::string &var_names, TagID tag) const
Returns gradients for all the coupled variables desired for a given tag.
const T & getDefaultNodalValue(const std::string &var_name, unsigned int comp=0) const
Get nodal default value.
const std::string & _c_type
The type of the object this interface is part of.
virtual const VectorVariableGradient & coupledVectorGradientOlder(const std::string &var_name, unsigned int comp=0) const
Returns an old gradient from two time steps previous of a coupled vector variable.
const MooseArray< ADRealTensorValue > & _ad_second_zero
VectorVariableValue _default_vector_value_zero
This will always be zero because the default values for optionally coupled variables is always consta...
bool checkVar(const std::string &var_name, unsigned int comp=0, unsigned int comp_bound=0) const
Check that the right kind of variable is being coupled in.
virtual const VariableValue & coupledValuePreviousNL(const std::string &var_name, unsigned int comp=0) const
Returns value of previous Newton iterate of a coupled variable.
Moose::Kokkos::VariableGradient kokkosCoupledGradientsOld(const std::string &var_name) const
MooseArray< ADRealTensorValue > _ad_default_vector_gradient
This will always be zero because the default values for optionally coupled vector variables is always...
virtual const VectorVariableValue & coupledVectorValue(const std::string &var_name, unsigned int comp=0) const
Returns value of a coupled vector variable.
const std::set< TagID > & getFEVariableCoupleableVectorTags() const
virtual const VariableValue & coupledDotDotOld(const std::string &var_name, unsigned int comp=0) const
Old second time derivative of a coupled variable.
The Kokkos variable object that carries the coupled variable and tag information. ...
MooseArray< ADRealTensorValue > _ad_default_second
This will always be zero because the default values for optionally coupled variables is always consta...
const VariableValue & coupledArrayDotDu(const std::string &var_name, unsigned int comp=0) const
Time derivative of a coupled array variable with respect to the coefficients.
std::vector< const VariableValue * > coupledVectorTagValues(const std::string &var_names, TagID tag) const
Returns the values for all the coupled variables desired for a given tag.
const VariablePhiValue & _phi_zero
ArrayMooseVariable * getArrayVar(const std::string &var_name, unsigned int comp)
Extract pointer to a coupled array variable.
virtual const ArrayVariableValue & coupledArrayDotDot(const std::string &var_name, unsigned int comp=0) const
Second time derivative of a coupled array variable.
Moose::Kokkos::VariableValue kokkosCoupledNodalValue(const std::string &var_name, unsigned int comp=0) const
Class for scalar variables (they are different).
const ADVectorVariableGradient & adCoupledVectorGradient(const std::string &var_name, unsigned int comp=0) const
Returns gradient of a coupled vector variable for use in Automatic Differentiation.
Moose::Kokkos::VariableValue kokkosCoupledDots(const std::string &var_name) const
std::unordered_map< std::string, std::vector< unsigned int > > _optional_var_index
Unique indices for optionally coupled vars that weren't provided.
const MooseVariableFieldBase * getFEVar(const std::string &var_name, unsigned int comp) const
Deprecated method.
std::unordered_map< std::string, std::vector< std::unique_ptr< VariableValue > > > _default_value
Will hold the default value for optional coupled variables.
std::vector< const VariableValue * > coupledMatrixTagValues(const std::string &var_names, TagID tag) const
Returns the diagonal matrix values for all the coupled variables desired for a given tag...
Moose::GenericType< VariableSecond, is_ad > GenericVariableSecond
const InputParameters & _c_parameters
Moose::Kokkos::VariableValue kokkosCoupledVectorTagDofValues(const std::string &var_name, const std::string &tag_param_name) const
OutputTools< Real >::VariableSecond VariableSecond
Moose::Kokkos::VariableGradient kokkosCoupledGradientsOlder(const std::string &var_name) const
const MooseArray< ADReal > & _ad_zero
virtual const ArrayVariableGradient & coupledArrayGradientOld(const std::string &var_name, unsigned int comp=0) const
Returns an old gradient from previous time step of a coupled array variable.
Moose::Kokkos::VariableValue kokkosCoupledValuesOld(const std::string &var_name) const
Moose::Kokkos::VariableValue kokkosCoupledValueOlder(const std::string &var_name, unsigned int comp=0) const
const Moose::ADType< T >::type & adCoupledNodalValue(const std::string &var_name, unsigned int comp=0) const
Returns AD nodal values of a coupled variable.
virtual const VariableValue & coupledNodalDotOld(const std::string &var_name, unsigned int comp=0) const
Nodal values of old time derivative of a coupled variable.
const GenericVariableValue< is_ad > & genericZeroValue()
Returns zero value templated with automatic differentiation boolean.
std::unordered_map< std::string, std::unique_ptr< ArrayVariableValue > > _default_array_value
Will hold the default value for optional array coupled variables.
OutputTools< RealVectorValue >::VariableGradient VectorVariableGradient
ArrayVariableGradient _default_array_gradient
This will always be zero because the default values for optionally coupled variables is always consta...
Moose::Kokkos::VariableGradient kokkosCoupledGradientOld(const std::string &var_name, unsigned int comp=0) const
const ADVariableSecond & getADDefaultSecond() const
Helper method to return (and insert if necessary) the default second derivatives for Automatic Differ...
The Kokkos wrapper classes for MOOSE-like variable value access.
const std::set< std::string > _older_state_tags
vector tag names for which we need to request older solution states from the system ...
virtual const VectorVariableCurl & coupledCurlOlder(const std::string &var_name, unsigned int comp=0) const
Returns an old curl from two time steps previous of a coupled variable.
virtual const VectorVariableDivergence & coupledDiv(const std::string &var_name, unsigned int comp=0) const
Returns divergence of a coupled variable.
Moose::Kokkos::VariableValue kokkosCoupledVectorTagNodalValuesByName(const std::string &var_name, const std::string &tag_name) const
virtual const VariableGradient & coupledGradientPreviousNL(const std::string &var_name, unsigned int comp=0) const
Returns gradient of a coupled variable for previous Newton iterate.
ArrayVariableValue _default_array_value_zero
This will always be zero because the default values for optionally coupled variables is always consta...
Moose::Kokkos::VariableValue kokkosCoupledDofValuesOld(const std::string &var_name) const
unsigned int _coupleable_max_qps
Maximum qps for any element in this system.
OutputTools< RealEigenVector >::VariableGradient ArrayVariableGradient
void addFEVariableCoupleableMatrixTag(TagID tag)
std::vector< const ADVectorVariableValue * > adCoupledVectorValues(const std::string &var_name) const
Returns the values for all of a coupled vector variable's components for use in Automatic Differentia...
std::vector< const VectorVariableValue * > coupledVectorValues(const std::string &var_name) const
Returns the values for all of a coupled vector variable's components.
Moose::Kokkos::VariableGradient kokkosCoupledGradientOlder(const std::string &var_name, unsigned int comp=0) const
virtual const VariableValue & coupledDotDot(const std::string &var_name, unsigned int comp=0) const
Second time derivative of a coupled variable.
Moose::Kokkos::VariableGradient kokkosCoupledVectorTagGradientByName(const std::string &var_name, const std::string &tag_name, unsigned int comp=0) const
Moose::Kokkos::VariableValue kokkosCoupledVectorTagValuesByName(const std::string &var_name, const std::string &tag_name) const
virtual const ArrayVariableGradient & coupledArrayGradientDot(const std::string &var_name, unsigned int comp=0) const
Retun a gradient of a coupled array variable's time derivative.
Moose::Kokkos::VariableValue kokkosCoupledVectorTagValues(const std::string &var_name, const std::string &tag_param_name) const
std::vector< const GenericVariableGradient< is_ad > * > coupledGenericGradients(const std::string &var_name) const
Returns the gradients for all of a coupled variable's components for use in templated automatic diffe...
const std::unordered_map< std::string, std::vector< MooseVariableFieldBase * > > & getCoupledVars() const
Get the list of coupled variables.
std::set< TagID > & getFEVariableCoupleableVectorTags()
virtual const VectorVariableValue & coupledVectorDotOld(const std::string &var_name, unsigned int comp=0) const
Old time derivative of a coupled vector variable.
const ADVariableGradient & adCoupledGradientDot(const std::string &var_name, unsigned int comp=0) const
Returns gradient of a coupled variable's time derivative for use in Automatic Differentiation.
const ADVariableSecond & adCoupledSecond(const std::string &var_name, unsigned int comp=0) const
Returns second derivatives of a coupled variable for use in Automatic Differentiation.
bool hasWritableCoupledVariables() const
Checks whether the object has any writable coupled variables.
virtual const VectorVariableValue & coupledVectorDotDotOld(const std::string &var_name, unsigned int comp=0) const
Old second time derivative of a coupled vector variable.
const ADVectorVariableCurl & adCoupledCurl(const std::string &var_name, unsigned int comp=0) const
Returns curl of a coupled variable for use in objects utilizing Automatic Differentiation.
const ADVectorVariableValue & adCoupledVectorValue(const std::string &var_name, unsigned int comp=0) const
Returns value of a coupled vector variable for use in Automatic Differentiation.
const T & coupledNodalValueOld(const std::string &var_name, unsigned int comp=0) const
Returns an old nodal value from previous time step of a coupled variable.
MooseArray< ADRealVectorValue > _ad_default_gradient
This will always be zero because the default values for optionally coupled variables is always consta...
std::vector< const VariableValue * > coupledValuesOld(const std::string &var_name) const
Returns the old values for all of a coupled variable's components.
virtual const VariableGradient & coupledGradientOlder(const std::string &var_name, unsigned int comp=0) const
Returns an old gradient from two time steps previous of a coupled variable.
const std::unordered_map< std::string, std::string > & _new_to_deprecated_coupled_vars
map from new to deprecated variable names
std::vector< const VariableValue * > coupledAllDofValues(const std::string &var_name) const
Returns DoFs in the current solution vector of all of a coupled variable's components for the local e...
const MooseVariableFieldBase * getFieldVar(const std::string &var_name, unsigned int comp) const
Moose::Kokkos::VariableValue kokkosCoupledNodalDots(const std::string &var_name) const
Moose::Kokkos::VariableValue kokkosCoupledValueOld(const std::string &var_name, unsigned int comp=0) const
virtual const VectorVariableDivergence & coupledDivOld(const std::string &var_name, unsigned int comp=0) const
Returns an old divergence from previous time step of a coupled variable.