28 : _c_parameters(moose_object->parameters()),
29 _c_name(moose_object->
name()),
30 _c_type(moose_object->type()),
31 _c_fe_problem(*_c_parameters.getCheckedPointerParam<
FEProblemBase *>(
"_fe_problem_base")),
32 _c_sys(_c_parameters.isParamValid(
"_sys") ? _c_parameters.
get<
SystemBase *>(
"_sys") : nullptr),
33 _new_to_deprecated_coupled_vars(_c_parameters.getNewToDeprecatedVarMap()),
35 _c_is_implicit(_c_parameters.have_parameter<bool>(
"implicit")
36 ? _c_parameters.
get<bool>(
"implicit")
38 _c_allow_element_to_nodal_coupling(
39 _c_parameters.have_parameter<bool>(
"_allow_nodal_to_elemental_coupling")
40 ? _c_parameters.
get<bool>(
"_allow_nodal_to_elemental_coupling")
43 _zero(_c_fe_problem._zero[_c_tid]),
44 _phi_zero(_c_fe_problem._phi_zero[_c_tid]),
45 _ad_zero(_c_fe_problem._ad_zero[_c_tid]),
46 _grad_zero(_c_fe_problem._grad_zero[_c_tid]),
47 _ad_grad_zero(_c_fe_problem._ad_grad_zero[_c_tid]),
48 _grad_phi_zero(_c_fe_problem._grad_phi_zero[_c_tid]),
49 _second_zero(_c_fe_problem._second_zero[_c_tid]),
50 _ad_second_zero(_c_fe_problem._ad_second_zero[_c_tid]),
51 _second_phi_zero(_c_fe_problem._second_phi_zero[_c_tid]),
52 _vector_zero(_c_fe_problem._vector_zero[_c_tid]),
53 _vector_curl_zero(_c_fe_problem._vector_curl_zero[_c_tid]),
54 _coupleable_neighbor(_c_parameters.have_parameter<bool>(
"_neighbor")
55 ? _c_parameters.
get<bool>(
"_neighbor")
65 unsigned int optional_var_index_counter = 0;
70 std::string
name = *iter;
75 for (
const auto & coupled_var_name :
vars)
86 if (
auto * tmp_var = dynamic_cast<MooseVariable *>(moose_var))
88 else if (
auto * tmp_var = dynamic_cast<VectorMooseVariable *>(moose_var))
90 else if (
auto * tmp_var = dynamic_cast<ArrayMooseVariable *>(moose_var))
97 tmp_var->requireQpComputations();
121 ++optional_var_index_counter;
133 return (i < it->second.size());
139 ": The coupled variable \"",
141 "\" was never added to this object's " 142 "InputParameters, please double-check your " 163 var_name <<
" must not actually be coupled!");
179 const std::string & var_name)
181 if (bound > 0 && comp >= bound)
183 var_name,
"component ", comp,
" is out of range for this variable (max ", bound - 1,
")");
201 "' uses older variable values that are unavailable with explicit schemes");
209 unsigned int comp_bound)
const 216 for (
auto jt : it->second)
217 cvars +=
" " + jt->name();
222 "' to a scalar variable (",
224 ") where field variable is expected");
232 mooseError(
_c_name,
": Trying to get a coupled var ", var_name,
" that doesn't exist");
234 const auto & vars_vector = vars_vector_it->second;
236 auto bound = comp_bound ? comp_bound : vars_vector.size();
240 const auto * var = vars_vector[comp];
244 ": We did all our checks for the existence of a var, yet we still don't have a var!?");
251 if (!var->isFV() &&
_is_fv)
252 mooseError(
"Attempting to couple non-FV variable ",
254 " into an FV object ",
256 ". This is not currently supported");
268 mooseDeprecated(
"Coupleable::getFEVar is deprecated. Please use Coupleable::getFieldVar instead. " 269 "Note that this method could potentially return a finite volume variable");
276 return getVarHelper<MooseVariableFieldBase>(var_name, comp);
282 return getVarHelper<MooseVariableFieldBase>(var_name, comp);
288 return const_cast<MooseVariable *
>(getVarHelper<MooseVariable>(var_name, comp));
298 mooseError(
_c_name,
": Only LAGRANGE_VEC vector variables are defined at nodes");
306 return const_cast<ArrayMooseVariable *
>(getVarHelper<ArrayMooseVariable>(var_name, comp));
312 return getVarHelper<MooseVariable>(var_name, comp);
318 const auto *
const var = getVarHelper<VectorMooseVariable>(var_name, comp);
321 mooseError(
_c_name,
": Only LAGRANGE_VEC vector variables are defined at nodes");
329 return getVarHelper<ArrayMooseVariable>(var_name, comp);
341 _default_value[var_name].emplace_back(std::make_unique<VariableValue>(
344 _default_value[var_name].emplace_back(std::make_unique<VariableValue>(
349 const auto & default_value_vec = default_value_it->second;
350 const auto n_default_vals = default_value_vec.size();
351 if (comp >= n_default_vals)
354 " is equal to or greater than the number of default values ",
356 return default_value_vec[comp].get();
366 bool already_warned =
false;
374 catch (
const std::out_of_range &)
378 "You supplied less than 3 arguments for the default vector value for variable ",
380 ". Did you accidently leave something off? We are going to assign 0s, assuming " 383 already_warned =
true;
391 return default_value_it->second.get();
404 (*value)[qp].resize(n);
405 for (
unsigned int i = 0; i < n; ++i)
412 return default_value_it->second.get();
415 template <
typename T>
420 return *default_variable_value->data();
425 Coupleable::getDefaultNodalValue<RealVectorValue>(
const std::string & var_name,
unsigned int)
const 427 auto && default_variable_value = getDefaultVectorValue(var_name);
428 return *default_variable_value->data();
433 Coupleable::getDefaultNodalValue<RealEigenVector>(
const std::string & var_name,
unsigned int)
const 435 auto && default_variable_value = getDefaultArrayValue(var_name);
436 return *default_variable_value->data();
446 "optional var index for " << var_name <<
" does not exist!");
459 return var->number();
468 Coupleable::coupledGenericValue<false>(
const std::string & var_name,
unsigned int comp)
const 470 return coupledValue(var_name, comp);
475 Coupleable::coupledGenericValue<true>(
const std::string & var_name,
unsigned int comp)
const 477 return adCoupledValue(var_name, comp);
482 Coupleable::coupledGenericVectorValue<false>(
const std::string & var_name,
unsigned int comp)
const 484 return coupledVectorValue(var_name, comp);
489 Coupleable::coupledGenericVectorValue<true>(
const std::string & var_name,
unsigned int comp)
const 491 return adCoupledVectorValue(var_name, comp);
497 const auto *
const var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
512 return (
_c_is_implicit) ? var->dofValuesNeighbor() : var->dofValuesOldNeighbor();
514 return (
_c_is_implicit) ? var->slnNeighbor() : var->slnOldNeighbor();
518 template <
typename T>
522 const unsigned int index)
const 524 const auto *
const var = getVarHelper<MooseVariableField<T>>(var_names, index);
526 mooseError(var_names,
": invalid variable name for coupledVectorTagValue");
530 mooseError(
"Attempting to couple to vector tag with ID ",
534 ", but a vector tag with that ID does not exist");
539 return var->nodalVectorTagValue(tag);
541 return var->vectorTagValue(tag);
544 template <
typename T>
547 const TagName & tag_name,
548 const unsigned int comp)
553 mooseError(var_name,
": invalid variable name for tag coupling");
555 auto & var_sys = var->sys();
557 var_sys.needSolutionState(1);
559 var_sys.needSolutionState(2);
562 template <
typename T>
565 const std::string & tag_param_name,
566 const unsigned int index)
const 569 mooseError(
"Tag name parameter '", tag_param_name,
"' is invalid");
576 const_cast<Coupleable *
>(
this)->requestStates<T>(var_names, tag_name, index);
579 mooseError(
"Tagged vector with tag name '", tag_name,
"' does not exist");
582 return vectorTagValueHelper<T>(var_names, tag, index);
587 Coupleable::coupledGenericDofValue<false>(
const std::string & var_name,
unsigned int comp)
const 589 return coupledDofValues(var_name, comp);
594 Coupleable::coupledGenericDofValue<true>(
const std::string & var_name,
unsigned int comp)
const 596 return adCoupledDofValues(var_name, comp);
602 const auto * var =
getVar(var_name, comp);
608 mooseError(
_c_name,
":coupledValueLower cannot be called in a coupleable neighbor object");
619 unsigned int index)
const 621 return vectorTagValueHelper<Real>(var_names, tag, index);
626 const std::string & tag_name,
627 unsigned int index)
const 629 return vectorTagValueHelper<Real>(var_names, tag_name, index);
635 unsigned int index)
const 637 return vectorTagValueHelper<RealEigenVector>(var_names, tag, index);
642 const std::string & tag_name,
643 unsigned int index)
const 645 return vectorTagValueHelper<RealEigenVector>(var_names, tag_name, index);
651 unsigned int index)
const 653 const auto * var =
getVar(var_names, index);
655 mooseError(var_names,
": invalid variable name for coupledVectorTagGradient");
659 mooseError(
"Attempting to couple to vector tag with ID ",
663 ", but a vector tag with that ID does not exist");
667 return var->vectorTagGradient(tag);
672 const std::string & tag_name,
673 unsigned int index)
const 676 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
680 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
689 unsigned int index)
const 693 mooseError(var_names,
": invalid variable name for coupledVectorTagArrayGradient");
697 mooseError(
"Attempting to couple to vector tag with ID ",
701 ", but a vector tag with that ID does not exist");
705 return var->vectorTagGradient(tag);
710 const std::string & tag_name,
711 unsigned int index)
const 714 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
718 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
724 template <
typename T>
728 const unsigned int comp)
const 730 const auto * var = getVarHelper<MooseVariableField<T>>(var_name, comp);
732 mooseError(var_name,
": invalid variable name for coupledVectorTagDofValue");
737 return var->vectorTagDofValue(tag);
740 template <
typename T>
743 const std::string & tag_param_name,
744 const unsigned int comp)
const 747 mooseError(
"Tag name parameter '", tag_param_name,
"' is invalid");
754 const_cast<Coupleable *
>(
this)->requestStates<T>(var_name, tag_name, comp);
757 mooseError(
"Tagged vector with tag name '", tag_name,
"' does not exist");
761 return vectorTagDofValueHelper<T>(var_name, tag, comp);
767 unsigned int comp)
const 769 return vectorTagDofValueHelper<Real>(var_name, tag, comp);
774 const std::string & tag_name,
775 unsigned int comp)
const 777 return vectorTagDofValueHelper<Real>(var_name, tag_name, comp);
782 const std::string & tag_name,
783 unsigned int comp)
const 785 return vectorTagDofValueHelper<RealEigenVector>(var_name, tag_name, comp);
791 unsigned int index)
const 793 const auto * var = getVarHelper<MooseVariableField<Real>>(var_names, index);
795 mooseError(var_names,
": invalid variable name for coupledMatrixTagValue");
801 return var->nodalMatrixTagValue(tag);
802 return var->matrixTagValue(tag);
807 const std::string & tag_name,
808 unsigned int index)
const 811 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
815 mooseError(
"Matrix tag name '", tagname,
"' does not exist");
832 return _c_is_implicit ? var->nodalValueArray() : var->nodalValueOldArray();
840 return _c_is_implicit ? var->nodalValueArray() : var->nodalValueOldArray();
842 return _c_is_implicit ? var->slnNeighbor() : var->slnOldNeighbor();
863 return (
_c_is_implicit) ? var->dofValuesNeighbor() : var->dofValuesOldNeighbor();
864 return (
_c_is_implicit) ? var->slnNeighbor() : var->slnOldNeighbor();
868 std::vector<const ArrayVariableValue *>
871 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledArrayValue(var_name, comp); };
872 return coupledVectorHelper<const ArrayVariableValue *>(var_name, func);
878 auto * var = getVarHelper<MooseWritableVariable>(var_name, comp);
880 const auto * aux =
dynamic_cast<const AuxKernel *
>(
this);
886 if (!aux && !euo && !nuo && !nfc && !nec)
887 mooseError(
"writableVariable() can only be called from AuxKernels, ElementUserObjects, " 888 "NodalUserObjects, NodeFaceConstraints, or NodeElemConstraints. '",
890 "' is none of those.");
892 if (aux && !aux->isNodal() && var->isNodal())
895 "' cannot obtain a writable reference to the nodal variable '",
898 if (euo && var->isNodal())
901 "' cannot obtain a writable reference to the nodal variable '",
914 mooseDeprecated(
"Coupleable::writableCoupledValue is deprecated, please use " 915 "Coupleable::writableVariable instead. ");
918 auto *
const var =
getVar(var_name, comp);
921 "Unable to create a writable reference for '", var_name,
"', is it a constant expression?");
926 "'", var->name(),
"' must be an auxiliary variable in Coupleable::writableCoupledValue");
929 const auto * aux =
dynamic_cast<const AuxKernel *
>(
this);
932 mooseError(
"writableCoupledValue() can only be called from AuxKernels, but '",
934 "' is not an AuxKernel.");
936 if (!aux->isNodal() && var->isNodal())
939 "' cannot obtain a writable reference to the nodal variable '",
956 if (br && !var->
hasBlocks(br->blockIDs()))
959 "' must be defined on all blocks '",
963 if (nfc && !var->
hasBlocks(nfc->getSecondaryConnectedBlocks()))
966 " must be defined on all blocks '",
968 "'s secondary surface is defined on.");
972 if (ci !=
this && ci->_writable_coupled_variables[
_c_tid].count(var))
977 if (br && br_other && br->blockRestricted() && br_other->blockRestricted() &&
985 "' already obtained a writable reference to '",
987 "'. Only one object can obtain such a reference per variable and subdomain in a " 1001 const auto * var =
getVar(var_name, comp);
1009 return (
_c_is_implicit) ? var->dofValuesOld() : var->dofValuesOlder();
1015 return (
_c_is_implicit) ? var->dofValuesOldNeighbor() : var->dofValuesOlderNeighbor();
1016 return (
_c_is_implicit) ? var->slnOldNeighbor() : var->slnOlderNeighbor();
1023 const auto * var =
getVar(var_name, comp);
1031 return var->dofValuesOlder();
1032 return var->slnOlder();
1037 return var->dofValuesOlderNeighbor();
1038 return var->slnOlderNeighbor();
1045 const auto * var =
getVar(var_name, comp);
1054 return var->dofValuesPreviousNL();
1055 return var->slnPreviousNL();
1060 return var->dofValuesPreviousNLNeighbor();
1061 return var->slnPreviousNLNeighbor();
1074 return (
_c_is_implicit) ? var->nodalValueOldArray() : var->nodalValueOlderArray();
1077 return (
_c_is_implicit) ? var->slnOldNeighbor() : var->slnOlderNeighbor();
1089 return var->slnOlder();
1090 return var->slnOlderNeighbor();
1104 return (
_c_is_implicit) ? var->dofValuesOld() : var->dofValuesOlder();
1110 return (
_c_is_implicit) ? var->dofValuesOldNeighbor() : var->dofValuesOlderNeighbor();
1111 return (
_c_is_implicit) ? var->slnOldNeighbor() : var->slnOlderNeighbor();
1126 return var->dofValuesOlder();
1127 return var->slnOlder();
1132 return var->dofValuesOlderNeighbor();
1133 return var->slnOlderNeighbor();
1140 const auto * var =
getVar(var_name, comp);
1151 return var->dofValuesDot();
1157 return var->dofValuesDotNeighbor();
1158 return var->uDotNeighbor();
1165 const auto * var =
getVar(var_name, comp);
1176 return var->dofValuesDotDot();
1177 return var->uDotDot();
1182 return var->dofValuesDotDotNeighbor();
1183 return var->uDotDotNeighbor();
1189 Coupleable::coupledGenericDotDot<false>(
const std::string & var_name,
unsigned int comp)
const 1191 return coupledDotDot(var_name, comp);
1196 Coupleable::coupledGenericDotDot<true>(
const std::string & var_name,
unsigned int comp)
const 1198 return adCoupledDotDot(var_name, comp);
1204 const auto * var =
getVar(var_name, comp);
1215 return var->dofValuesDotOld();
1216 return var->uDotOld();
1221 return var->dofValuesDotOldNeighbor();
1222 return var->uDotOldNeighbor();
1229 const auto * var =
getVar(var_name, comp);
1240 return var->dofValuesDotDotOld();
1241 return var->uDotDotOld();
1246 return var->dofValuesDotDotOldNeighbor();
1247 return var->uDotDotOldNeighbor();
1264 return var->uDotNeighbor();
1279 return var->uDotDot();
1280 return var->uDotDotNeighbor();
1295 return var->uDotOld();
1296 return var->uDotOldNeighbor();
1311 return var->uDotDotOld();
1312 return var->uDotDotOldNeighbor();
1327 return var->duDotDu();
1328 return var->duDotDuNeighbor();
1343 return var->duDotDotDu();
1344 return var->duDotDotDuNeighbor();
1358 return var->dofValuesDot();
1364 return var->dofValuesDotNeighbor();
1365 return var->uDotNeighbor();
1380 return var->dofValuesDotDot();
1381 return var->uDotDot();
1386 return var->dofValuesDotDotNeighbor();
1387 return var->uDotDotNeighbor();
1402 return var->dofValuesDotOld();
1403 return var->uDotOld();
1408 return var->dofValuesDotOldNeighbor();
1409 return var->uDotOldNeighbor();
1424 return var->dofValuesDotDotOld();
1425 return var->uDotDotOld();
1430 return var->dofValuesDotDotOldNeighbor();
1431 return var->uDotDotOldNeighbor();
1438 const auto * var =
getVar(var_name, comp);
1449 return var->dofValuesDuDotDu();
1450 return var->duDotDu();
1455 return var->dofValuesDuDotDuNeighbor();
1456 return var->duDotDuNeighbor();
1463 const auto * var =
getVar(var_name, comp);
1474 return var->dofValuesDuDotDotDu();
1475 return var->duDotDotDu();
1480 return var->dofValuesDuDotDotDuNeighbor();
1481 return var->duDotDotDuNeighbor();
1488 const auto *
const var =
getArrayVar(var_name, comp);
1499 return var->dofValuesDuDotDu();
1500 return var->duDotDu();
1505 return var->dofValuesDuDotDuNeighbor();
1506 return var->duDotDuNeighbor();
1513 const auto *
const var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
1523 return (
_c_is_implicit) ? var->gradSlnNeighbor() : var->gradSlnOldNeighbor();
1529 const auto * var =
getVar(var_name, comp);
1538 return (
_c_is_implicit) ? var->gradSlnOld() : var->gradSlnOlder();
1539 return (
_c_is_implicit) ? var->gradSlnOldNeighbor() : var->gradSlnOlderNeighbor();
1545 const auto * var =
getVar(var_name, comp);
1554 return var->gradSlnOlder();
1555 return var->gradSlnOlderNeighbor();
1561 const auto * var =
getVar(var_name, comp);
1571 return var->gradSlnPreviousNL();
1572 return var->gradSlnPreviousNLNeighbor();
1578 const auto * var =
getVar(var_name, comp);
1587 return var->gradSlnDot();
1588 return var->gradSlnNeighborDot();
1594 const auto * var =
getVar(var_name, comp);
1603 return var->gradSlnDotDot();
1604 return var->gradSlnNeighborDotDot();
1620 return (
_c_is_implicit) ? var->gradSlnNeighbor() : var->gradSlnOldNeighbor();
1635 return (
_c_is_implicit) ? var->gradSlnOld() : var->gradSlnOlder();
1636 return (
_c_is_implicit) ? var->gradSlnOldNeighbor() : var->gradSlnOlderNeighbor();
1651 return var->gradSlnOlder();
1652 return var->gradSlnOlderNeighbor();
1665 return (
_c_is_implicit) ? var->gradSlnNeighbor() : var->gradSlnOldNeighbor();
1677 return (
_c_is_implicit) ? var->gradSlnOld() : var->gradSlnOlder();
1678 return (
_c_is_implicit) ? var->gradSlnOldNeighbor() : var->gradSlnOlderNeighbor();
1690 return var->gradSlnOlder();
1691 return var->gradSlnOlderNeighbor();
1697 const auto *
const var =
getArrayVar(var_name, comp);
1703 return var->gradSlnDot();
1704 return var->gradSlnNeighborDot();
1720 return (
_c_is_implicit) ? var->curlSlnNeighbor() : var->curlSlnOldNeighbor();
1735 return (
_c_is_implicit) ? var->curlSlnOld() : var->curlSlnOlder();
1736 return (
_c_is_implicit) ? var->curlSlnOldNeighbor() : var->curlSlnOlderNeighbor();
1751 return var->curlSlnOlder();
1752 return var->curlSlnOlderNeighbor();
1768 return var->adCurlSln();
1769 return var->adCurlSlnNeighbor();
1785 return (
_c_is_implicit) ? var->divSlnNeighbor() : var->divSlnOldNeighbor();
1801 return (
_c_is_implicit) ? var->divSlnOldNeighbor() : var->divSlnOlderNeighbor();
1816 return var->divSlnOlder();
1817 return var->divSlnOlderNeighbor();
1823 const auto * var =
getVar(var_name, comp);
1832 return (
_c_is_implicit) ? var->secondSln() : var->secondSlnOlder();
1833 return (
_c_is_implicit) ? var->secondSlnNeighbor() : var->secondSlnOlderNeighbor();
1839 const auto * var =
getVar(var_name, comp);
1848 return (
_c_is_implicit) ? var->secondSlnOld() : var->secondSlnOlder();
1849 return (
_c_is_implicit) ? var->secondSlnOldNeighbor() : var->secondSlnOlderNeighbor();
1855 const auto * var =
getVar(var_name, comp);
1864 return var->secondSlnOlder();
1865 return var->secondSlnOlderNeighbor();
1871 const auto * var =
getVar(var_name, comp);
1881 return var->secondSlnPreviousNL();
1882 return var->secondSlnPreviousNLNeighbor();
1885 template <
typename T>
1889 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
1891 return getDefaultNodalValue<T>(var_name, comp);
1894 if (!var->isNodal())
1896 ": Trying to get nodal values of variable '",
1898 "', but it is not nodal.");
1901 return (
_c_is_implicit) ? var->nodalValue() : var->nodalValueOld();
1902 return (
_c_is_implicit) ? var->nodalValueNeighbor() : var->nodalValueOldNeighbor();
1905 template <
typename T>
1909 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
1911 return getDefaultNodalValue<T>(var_name, comp);
1914 if (!var->isNodal())
1916 ": Trying to get old nodal values of variable '",
1918 "', but it is not nodal.");
1921 return (
_c_is_implicit) ? var->nodalValueOld() : var->nodalValueOlder();
1922 return (
_c_is_implicit) ? var->nodalValueOldNeighbor() : var->nodalValueOlderNeighbor();
1925 template <
typename T>
1929 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
1931 return getDefaultNodalValue<T>(var_name, comp);
1934 if (!var->isNodal())
1936 ": Trying to get older nodal values of variable '",
1938 "', but it is not nodal.");
1941 return var->nodalValueOlder();
1942 return var->nodalValueOlderNeighbor();
1945 template <
typename T>
1949 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
1951 return getDefaultNodalValue<T>(var_name, comp);
1957 return var->nodalValuePreviousNL();
1958 return var->nodalValuePreviousNLNeighbor();
1961 template <
typename T>
1965 static const T
zero = 0;
1966 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
1972 return var->nodalValueDot();
1973 mooseError(
"Neighbor version not implemented");
1979 const auto * var =
getVar(var_name, comp);
1988 return var->dofValuesDotDot();
1989 return var->dofValuesDotDotNeighbor();
1995 const auto * var =
getVar(var_name, comp);
2004 return var->dofValuesDotOld();
2005 return var->dofValuesDotOldNeighbor();
2011 const auto * var =
getVar(var_name, comp);
2020 return var->dofValuesDotDotOld();
2021 return var->dofValuesDotDotOldNeighbor();
2027 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2033 return (
_c_is_implicit) ? var->dofValues() : var->dofValuesOld();
2034 return (
_c_is_implicit) ? var->dofValuesNeighbor() : var->dofValuesOldNeighbor();
2037 std::vector<const VariableValue *>
2040 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledDofValues(var_name, comp); };
2041 return coupledVectorHelper<const VariableValue *>(var_name, func);
2047 const auto * var =
getVar(var_name, comp);
2053 return (
_c_is_implicit) ? var->dofValuesOld() : var->dofValuesOlder();
2054 return (
_c_is_implicit) ? var->dofValuesOldNeighbor() : var->dofValuesOlderNeighbor();
2057 std::vector<const VariableValue *>
2060 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledDofValuesOld(var_name, comp); };
2061 return coupledVectorHelper<const VariableValue *>(var_name, func);
2067 const auto * var =
getVar(var_name, comp);
2073 return var->dofValuesOlder();
2074 return var->dofValuesOlderNeighbor();
2077 std::vector<const VariableValue *>
2080 auto func = [
this, &var_name](
unsigned int comp)
2082 return coupledVectorHelper<const VariableValue *>(var_name, func);
2094 return (
_c_is_implicit) ? var->dofValues() : var->dofValuesOld();
2095 return (
_c_is_implicit) ? var->dofValuesNeighbor() : var->dofValuesOldNeighbor();
2101 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2111 return var->adDofValues();
2112 return var->adDofValuesNeighbor();
2122 "\" on variable \"",
2124 "\" when using a \"Steady\" executioner is not allowed. This value is available " 2125 "only in transient simulations.");
2128 template <
typename T>
2137 mooseError(
"The adCoupledNodalValue method should only be called for nodal computing objects");
2140 "The adCoupledNodalValue method shouldn't be called for neighbor computing objects. I " 2141 "don't even know what that would mean, although maybe someone could explain it to me.");
2143 mooseError(
"If you're going to use an explicit scheme, then use coupledNodalValue instead of " 2144 "adCoupledNodalValue");
2146 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
2148 return var->adNodalValue();
2154 const auto *
const var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2164 return var->adDofValues();
2167 return var->adSln();
2168 return var->adSlnNeighbor();
2174 auto var = getVarHelper<MooseVariableFE<Real>>(var_name, comp);
2181 mooseError(
"adCoupledLowerValue cannot be called in a coupleable neighbor object");
2184 return var->adDofValues();
2186 return var->adSlnLower();
2192 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2202 return var->adGradSln();
2203 return var->adGradSlnNeighbor();
2209 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2219 return var->adGradSlnDot();
2220 return var->adGradSlnNeighborDot();
2226 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2236 return var->adSecondSln();
2238 return var->adSecondSlnNeighbor();
2244 mooseError(
"Automatic differentiation using second derivatives of vector variables is not " 2251 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2260 return var->adDofValuesDot();
2261 return var->adUDot();
2266 mooseError(
"AD neighbor nodal dof dot not implemented");
2267 return var->adUDotNeighbor();
2274 const auto *
const var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2284 return var->adUDotDot();
2285 return var->adUDotDotNeighbor();
2300 return var->adUDot();
2301 return var->adUDotNeighbor();
2318 return var->adSln();
2319 return var->adSlnNeighbor();
2334 return var->adGradSln();
2335 return var->adGradSlnNeighbor();
2349 return default_value_it->second.get();
2366 return default_value_it->second.get();
2400 mooseDeprecated(
"Method adZeroValue() is deprecated. Use '_ad_zero' instead.");
2407 mooseDeprecated(
"Method adZeroGradient() is deprecated. Use '_ad_grad_zero' instead.");
2414 mooseDeprecated(
"Method adZeroSecond() is deprecated. Use '_ad_second_zero' instead.");
2420 Coupleable::genericZeroValue<false>()
2427 Coupleable::genericZeroValue<true>()
2434 Coupleable::genericZeroGradient<false>()
2441 Coupleable::genericZeroGradient<true>()
2443 return _ad_grad_zero;
2448 Coupleable::genericZeroSecond<false>()
2450 return _second_zero;
2455 Coupleable::genericZeroSecond<true>()
2457 return _ad_second_zero;
2462 Coupleable::coupledGenericGradient<false>(
const std::string & var_name,
unsigned int comp)
const 2464 return coupledGradient(var_name, comp);
2469 Coupleable::coupledGenericGradient<true>(
const std::string & var_name,
unsigned int comp)
const 2471 return adCoupledGradient(var_name, comp);
2474 std::vector<unsigned int>
2477 auto func = [
this, &var_name](
unsigned int comp) {
return coupled(var_name, comp); };
2478 return coupledVectorHelper<unsigned int>(var_name, func);
2489 ": a variable name was queried but a constant was passed for parameter '",
2491 "Either pass a true variable or contact a developer to shield the call to " 2492 "'coupledName' with 'isCoupledConstant'");
2495 _c_name,
": Variable '", var_name,
"' does not exist, yet its coupled name is requested");
2498 std::vector<VariableName>
2501 auto func = [
this, &var_name](
unsigned int comp) {
return coupledName(var_name, comp); };
2502 return coupledVectorHelper<VariableName>(var_name, func);
2505 std::vector<const VariableValue *>
2508 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledValue(var_name, comp); };
2509 return coupledVectorHelper<const VariableValue *>(var_name, func);
2512 std::vector<const VectorVariableValue *>
2515 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledVectorValue(var_name, comp); };
2516 return coupledVectorHelper<const VectorVariableValue *>(var_name, func);
2520 std::vector<const GenericVariableValue<false> *>
2521 Coupleable::coupledGenericValues<false>(
const std::string & var_name)
const 2523 return coupledValues(var_name);
2527 std::vector<const GenericVariableValue<true> *>
2528 Coupleable::coupledGenericValues<true>(
const std::string & var_name)
const 2530 return adCoupledValues(var_name);
2533 std::vector<const ADVariableValue *>
2536 auto func = [
this, &var_name](
unsigned int comp) {
return &
adCoupledValue(var_name, comp); };
2537 return coupledVectorHelper<const ADVariableValue *>(var_name, func);
2540 std::vector<const ADVectorVariableValue *>
2543 auto func = [
this, &var_name](
unsigned int comp)
2545 return coupledVectorHelper<const ADVectorVariableValue *>(var_name, func);
2548 std::vector<const VariableValue *>
2551 auto func = [
this, &var_names, &tag](
unsigned int comp)
2553 return coupledVectorHelper<const VariableValue *>(var_names, func);
2556 std::vector<const VariableValue *>
2558 const std::string & tag_name)
const 2561 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2565 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
2571 std::vector<const ArrayVariableValue *>
2574 auto func = [
this, &var_names, &tag](
unsigned int index)
2576 return coupledVectorHelper<const ArrayVariableValue *>(var_names, func);
2579 std::vector<const ArrayVariableValue *>
2581 const std::string & tag_name)
const 2584 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2588 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
2594 std::vector<const VariableGradient *>
2597 auto func = [
this, &var_names, &tag](
unsigned int index)
2599 return coupledVectorHelper<const VariableGradient *>(var_names, func);
2602 std::vector<const VariableGradient *>
2604 const std::string & tag_name)
const 2607 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2611 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
2617 std::vector<const ArrayVariableGradient *>
2620 auto func = [
this, &var_names, &tag](
unsigned int index)
2622 return coupledVectorHelper<const ArrayVariableGradient *>(var_names, func);
2625 std::vector<const ArrayVariableGradient *>
2627 const std::string & tag_name)
const 2630 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2634 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
2640 std::vector<const VariableValue *>
2643 auto func = [
this, &var_names, &tag](
unsigned int comp)
2645 return coupledVectorHelper<const VariableValue *>(var_names, func);
2648 std::vector<const VariableValue *>
2650 const std::string & tag_name)
const 2653 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2657 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
2663 std::vector<const VariableValue *>
2666 auto func = [
this, &var_names, &tag](
unsigned int comp)
2668 return coupledVectorHelper<const VariableValue *>(var_names, func);
2671 std::vector<const VariableValue *>
2673 const std::string & tag_name)
const 2676 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2680 mooseError(
"Matrix tag name '", tagname,
"' does not exist");
2686 std::vector<const VariableValue *>
2689 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledValueOld(var_name, comp); };
2690 return coupledVectorHelper<const VariableValue *>(var_name, func);
2693 std::vector<const VariableValue *>
2696 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledValueOlder(var_name, comp); };
2697 return coupledVectorHelper<const VariableValue *>(var_name, func);
2700 std::vector<const VectorVariableValue *>
2703 auto func = [
this, &var_name](
unsigned int comp)
2705 return coupledVectorHelper<const VectorVariableValue *>(var_name, func);
2708 std::vector<const VariableGradient *>
2711 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledGradient(var_name, comp); };
2712 return coupledVectorHelper<const VariableGradient *>(var_name, func);
2716 std::vector<const GenericVariableGradient<false> *>
2717 Coupleable::coupledGenericGradients<false>(
const std::string & var_name)
const 2719 return coupledGradients(var_name);
2723 std::vector<const GenericVariableGradient<true> *>
2724 Coupleable::coupledGenericGradients<true>(
const std::string & var_name)
const 2726 auto func = [
this, &var_name](
unsigned int comp) {
return &adCoupledGradient(var_name, comp); };
2727 return coupledVectorHelper<const GenericVariableGradient<true> *>(var_name, func);
2730 std::vector<const ADVariableGradient *>
2733 auto func = [
this, &var_name](
unsigned int comp) {
return &
adCoupledGradient(var_name, comp); };
2734 return coupledVectorHelper<const ADVariableGradient *>(var_name, func);
2737 std::vector<const VariableGradient *>
2740 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledGradientOld(var_name, comp); };
2741 return coupledVectorHelper<const VariableGradient *>(var_name, func);
2744 std::vector<const VariableValue *>
2747 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledDot(var_name, comp); };
2748 return coupledVectorHelper<const VariableValue *>(var_name, func);
2751 std::vector<const ADVariableValue *>
2754 auto func = [
this, &var_name](
unsigned int comp) {
return &
adCoupledDot(var_name, comp); };
2755 return coupledVectorHelper<const ADVariableValue *>(var_name, func);
2760 Coupleable::coupledGenericDot<false>(
const std::string & var_name,
unsigned int comp)
const 2762 return coupledDot(var_name, comp);
2767 Coupleable::coupledGenericDot<true>(
const std::string & var_name,
unsigned int comp)
const 2769 return adCoupledDot(var_name, comp);
2774 template const Real & Coupleable::getDefaultNodalValue<Real>(
const std::string & var_name,
2775 unsigned int comp)
const;
2777 template const Real & Coupleable::coupledNodalValue<Real>(
const std::string & var_name,
2778 unsigned int comp)
const;
2779 template const ADReal & Coupleable::adCoupledNodalValue<Real>(
const std::string & var_name,
2780 unsigned int comp)
const;
2782 Coupleable::adCoupledNodalValue<RealVectorValue>(
const std::string & var_name,
2783 unsigned int comp)
const;
2786 Coupleable::coupledNodalValue<RealVectorValue>(
const std::string & var_name,
2787 unsigned int comp)
const;
2788 template const Real & Coupleable::coupledNodalValueOld<Real>(
const std::string & var_name,
2789 unsigned int comp)
const;
2791 Coupleable::coupledNodalValueOld<RealVectorValue>(
const std::string & var_name,
2792 unsigned int comp)
const;
2793 template const Real & Coupleable::coupledNodalValueOlder<Real>(
const std::string & var_name,
2794 unsigned int comp)
const;
2796 Coupleable::coupledNodalValueOlder<RealVectorValue>(
const std::string & var_name,
2797 unsigned int comp)
const;
2798 template const Real & Coupleable::coupledNodalValuePreviousNL<Real>(
const std::string & var_name,
2799 unsigned int comp)
const;
2801 Coupleable::coupledNodalValuePreviousNL<RealVectorValue>(
const std::string & var_name,
2802 unsigned int comp)
const;
2803 template const Real & Coupleable::coupledNodalDot<Real>(
const std::string & var_name,
2804 unsigned int comp)
const;
2806 Coupleable::coupledNodalDot<RealVectorValue>(
const std::string & var_name,
unsigned int comp)
const;
virtual const ArrayVariableValue & coupledArrayDotDotOld(const std::string &var_name, unsigned int comp=0) const
Old second time derivative of a coupled array variable.
std::string name(const ElemQuality q)
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.
virtual TagID getVectorTagID(const TagName &tag_name) const
Get a TagID from a TagName.
OutputTools< RealVectorValue >::VariableDivergence VectorVariableDivergence
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 MooseVariableScalar & getScalarVariable(const THREAD_ID tid, const std::string &var_name)=0
Returns the scalar variable reference from whichever system contains it.
virtual const VectorVariableGradient & coupledVectorGradient(const std::string &var_name, unsigned int comp=0) const
Returns gradient of a coupled vector variable.
bool _c_nodal
True if we provide coupling to nodal values.
void checkFuncType(const std::string var_name, VarType t, FuncAge age) const
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.
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.
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...
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.
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.
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.
std::string toUpper(const std::string &name)
Convert supplied string to upper case.
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 ...
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.
std::unordered_map< std::string, std::vector< MooseVariableFieldBase * > > _coupled_vars
Coupled vars whose values we provide.
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
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...
std::vector< const VectorVariableValue * > coupledVectorValuesOld(const std::string &var_name) const
Returns the old values for all of a coupled vector variable's components.
constexpr std::size_t constMaxQpsPerElem
This is used for places where we initialize some qp-sized data structures that would end up being siz...
const T & coupledNodalValue(const std::string &var_name, unsigned int comp=0) const
Returns nodal values of a coupled variable.
void mooseWarning(Args &&... args)
Emit a warning message with the given stringified, concatenated args.
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...
T * get(const std::unique_ptr< T > &u)
The MooseUtils::get() specializations are used to support making forwards-compatible code changes fro...
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.
MooseArray< ADRealVectorValue > _ad_default_curl
This will always be zero because the default values for optionally coupled vector variables is always...
bool setsIntersect(InputIterator first1, InputIterator last1, InputIterator first2, InputIterator last2)
This method detects whether two sets intersect without building a result set.
virtual const VariableValue & coupledDot(const std::string &var_name, unsigned int comp=0) const
Time derivative of a coupled variable.
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.
virtual const VariableValue & coupledNodalDotDot(const std::string &var_name, unsigned int comp=0) const
Nodal values of second time derivative of a coupled variable.
const ADVariableGradient & getADDefaultGradient() const
Helper method to return (and insert if necessary) the default gradient for Automatic Differentiation ...
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
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.
VariableValue _default_value_zero
This will always be zero because the default values for optionally coupled variables is always consta...
std::unordered_map< std::string, std::vector< MooseVariableScalar * > > _c_coupled_scalar_vars
Scalar variables coupled into this object (for error checking)
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...
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.
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)
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...
DualNumber< Real, DNDerivativeType, true > ADReal
std::vector< VariableName > coupledNames(const std::string &var_name) const
Names of the variables in the Coupleable interface.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
virtual const VariableGradient & coupledGradient(const std::string &var_name, unsigned int comp=0) const
Returns gradient of a coupled variable.
MooseApp & getMooseApp() const
Get the MooseApp this class is associated with.
const T & coupledNodalValuePreviousNL(const std::string &var_name, unsigned int comp=0) const
Returns nodal values of a coupled variable for previous Newton iterate.
auto max(const L &left, const R &right)
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 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.
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.
A user object that runs over all the nodes and does an aggregation step to compute a single value...
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.
std::vector< VectorMooseVariable * > _coupled_vector_moose_vars
Vector of vector coupled variables.
const std::string & name() const
Get the name of the class.
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.
OutputTools< RealEigenVector >::VariableValue ArrayVariableValue
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
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
const TagName OLD_SOLUTION_TAG
Every object that can be built by the factory should be derived from this class.
virtual TagID getMatrixTagID(const TagName &tag_name) const
Get a TagID from a TagName.
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.
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.
A NodeFaceConstraint is used when you need to create constraints between two surfaces in a mesh...
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.
void needsPreviousNewtonIteration(bool state)
Set a flag that indicated that user required values for the previous Newton iterate.
virtual const VariableGradient & coupledGradientDot(const std::string &var_name, unsigned int comp=0) const
Time derivative of the gradient of a coupled variable.
virtual bool hasScalarVariable(const std::string &var_name) const =0
Returns a Boolean indicating whether any system contains a variable with the name provided...
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.
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.
void mooseDeprecated(Args &&... args)
Emit a deprecated code/feature message with the given stringified, concatenated args.
virtual bool vectorTagExists(const TagID tag_id) const
Check to see if a particular Tag exists.
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.
unsigned int number() const
Gets the number of this system.
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...
std::vector< const VariableGradient * > coupledGradients(const std::string &var_name) const
Returns the gradients for all of a coupled variable's components.
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...
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...
AuxiliarySystem & getAuxiliarySystem()
const ADVectorVariableValue & adCoupledVectorDot(const std::string &var_name, unsigned int comp=0) const
Time derivative of a vector coupled variable for ad simulations.
virtual bool hasVariable(const std::string &var_name) const =0
Whether or not this problem has the variable.
virtual bool hasVariable(const std::string &var_name) const
Query a system for a variable.
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.
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.
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.
const MooseObject *const _obj
VectorVariableGradient _default_vector_gradient
This will always be zero because the default values for optionally coupled variables is always consta...
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
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.
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.
void checkComponent(const MooseObject *obj, unsigned int comp, unsigned int bound, const std::string &var_name)
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.
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.
Generic class for solving transient nonlinear problems.
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.
bool hasBlocks(const SubdomainID id) const override
Returns whether the functor is defined on this block.
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.
virtual const VariableValue & coupledDotDotOld(const std::string &var_name, unsigned int comp=0) const
Old second time derivative of a coupled variable.
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.
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.
An interface that restricts an object to subdomains via the 'blocks' input parameter.
Class for scalar variables (they are different).
IntRange< T > make_range(T beg, T end)
void resize(unsigned int size)
Change the number of elements the array can store.
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.
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
OutputTools< Real >::VariableSecond VariableSecond
const MooseArray< ADReal > & _ad_zero
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
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.
const std::vector< T * > & getInterfaceObjects() const
Gets the registered interface objects for a given interface.
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.
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
std::unordered_map< std::string, std::unique_ptr< ArrayVariableValue > > _default_array_value
Will hold the default value for optional array coupled variables.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type...
OutputTools< RealVectorValue >::VariableGradient VectorVariableGradient
ArrayVariableGradient _default_array_gradient
This will always be zero because the default values for optionally coupled variables is always consta...
virtual bool isTransient() const override
const ADVariableSecond & getADDefaultSecond() const
Helper method to return (and insert if necessary) the default second derivatives for Automatic Differ...
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.
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...
unsigned int _coupleable_max_qps
Maximum qps for any element in this system.
OutputTools< RealEigenVector >::VariableGradient ArrayVariableGradient
void addFEVariableCoupleableMatrixTag(TagID tag)
A NodeElemConstraintBase is used when you need to create constraints between a secondary node and a p...
Moose::VarKindType varKind() const
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...
const ADVectorVariableSecond & adCoupledVectorSecond(const std::string &, unsigned int)
std::vector< const VectorVariableValue * > coupledVectorValues(const std::string &var_name) const
Returns the values for all of a coupled vector variable's components.
virtual const VariableValue & coupledDotDot(const std::string &var_name, unsigned int comp=0) const
Second time derivative of a coupled variable.
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.
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.
void ErrorVector unsigned int
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.
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.
virtual bool matrixTagExists(const TagName &tag_name) const
Check to see if a particular Tag exists.
void registerInterfaceObject(T &interface)
Registers an interface object for accessing with getInterfaceObjects.
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.
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
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.