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;
126 #ifdef MOOSE_KOKKOS_ENABLED 128 : _c_parameters(object._c_parameters),
129 _c_name(object._c_name),
130 _c_type(object._c_type),
131 _c_fe_problem(object._c_fe_problem),
132 _c_sys(object._c_sys),
133 _new_to_deprecated_coupled_vars(object._new_to_deprecated_coupled_vars),
134 _c_nodal(object._c_nodal),
135 _c_is_implicit(object._c_is_implicit),
136 _c_allow_element_to_nodal_coupling(object._c_allow_element_to_nodal_coupling),
137 _c_tid(object._c_tid),
139 _phi_zero(object._phi_zero),
140 _ad_zero(object._ad_zero),
141 _grad_zero(object._grad_zero),
142 _ad_grad_zero(object._ad_grad_zero),
143 _grad_phi_zero(object._grad_phi_zero),
144 _second_zero(object._second_zero),
145 _ad_second_zero(object._ad_second_zero),
146 _second_phi_zero(object._second_phi_zero),
147 _vector_zero(object._vector_zero),
148 _vector_curl_zero(object._vector_curl_zero),
149 _coupleable_neighbor(object._coupleable_neighbor),
150 _coupleable_max_qps(object._coupleable_max_qps),
151 _is_fv(object._is_fv),
153 _writable_coupled_variables(object._writable_coupled_variables)
165 return (i < it->second.size());
171 ": The coupled variable \"",
173 "\" was never added to this object's " 174 "InputParameters, please double-check your " 195 var_name <<
" must not actually be coupled!");
211 const std::string & var_name)
213 if (bound > 0 && comp >= bound)
215 var_name,
"component ", comp,
" is out of range for this variable (max ", bound - 1,
")");
233 "' uses older variable values that are unavailable with explicit schemes");
241 unsigned int comp_bound)
const 248 for (
auto jt : it->second)
249 cvars +=
" " + jt->name();
254 "' to a scalar variable (",
256 ") where field variable is expected");
264 mooseError(
_c_name,
": Trying to get a coupled var ", var_name,
" that doesn't exist");
266 const auto & vars_vector = vars_vector_it->second;
268 auto bound = comp_bound ? comp_bound : vars_vector.size();
272 const auto * var = vars_vector[comp];
276 ": We did all our checks for the existence of a var, yet we still don't have a var!?");
283 if (!var->isFV() &&
_is_fv)
284 mooseError(
"Attempting to couple non-FV variable ",
286 " into an FV object ",
288 ". This is not currently supported");
300 mooseDeprecated(
"Coupleable::getFEVar is deprecated. Please use Coupleable::getFieldVar instead. " 301 "Note that this method could potentially return a finite volume variable");
308 return getVarHelper<MooseVariableFieldBase>(var_name, comp);
314 return getVarHelper<MooseVariableFieldBase>(var_name, comp);
317 std::vector<const MooseVariableFieldBase *>
320 return getVarsHelper<MooseVariableFieldBase>(var_name);
326 return const_cast<MooseVariable *
>(getVarHelper<MooseVariable>(var_name, comp));
336 mooseError(
_c_name,
": Only LAGRANGE_VEC vector variables are defined at nodes");
344 return const_cast<ArrayMooseVariable *
>(getVarHelper<ArrayMooseVariable>(var_name, comp));
350 return getVarHelper<MooseVariable>(var_name, comp);
356 const auto *
const var = getVarHelper<VectorMooseVariable>(var_name, comp);
359 mooseError(
_c_name,
": Only LAGRANGE_VEC vector variables are defined at nodes");
367 return getVarHelper<ArrayMooseVariable>(var_name, comp);
379 _default_value[var_name].emplace_back(std::make_unique<VariableValue>(
382 _default_value[var_name].emplace_back(std::make_unique<VariableValue>(
387 const auto & default_value_vec = default_value_it->second;
388 const auto n_default_vals = default_value_vec.size();
389 if (comp >= n_default_vals)
392 " is equal to or greater than the number of default values ",
394 return default_value_vec[comp].get();
404 bool already_warned =
false;
412 catch (
const std::out_of_range &)
416 "You supplied less than 3 arguments for the default vector value for variable ",
418 ". Did you accidently leave something off? We are going to assign 0s, assuming " 421 already_warned =
true;
429 return default_value_it->second.get();
442 (*value)[qp].resize(n);
443 for (
unsigned int i = 0; i < n; ++i)
450 return default_value_it->second.get();
453 template <
typename T>
458 return *default_variable_value->data();
463 Coupleable::getDefaultNodalValue<RealVectorValue>(
const std::string & var_name,
unsigned int)
const 465 auto && default_variable_value = getDefaultVectorValue(var_name);
466 return *default_variable_value->data();
471 Coupleable::getDefaultNodalValue<RealEigenVector>(
const std::string & var_name,
unsigned int)
const 473 auto && default_variable_value = getDefaultArrayValue(var_name);
474 return *default_variable_value->data();
484 "optional var index for " << var_name <<
" does not exist!");
497 return var->number();
506 Coupleable::coupledGenericValue<false>(
const std::string & var_name,
unsigned int comp)
const 508 return coupledValue(var_name, comp);
513 Coupleable::coupledGenericValue<true>(
const std::string & var_name,
unsigned int comp)
const 515 return adCoupledValue(var_name, comp);
520 Coupleable::coupledGenericVectorValue<false>(
const std::string & var_name,
unsigned int comp)
const 522 return coupledVectorValue(var_name, comp);
527 Coupleable::coupledGenericVectorValue<true>(
const std::string & var_name,
unsigned int comp)
const 529 return adCoupledVectorValue(var_name, comp);
535 const auto *
const var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
550 return (
_c_is_implicit) ? var->dofValuesNeighbor() : var->dofValuesOldNeighbor();
552 return (
_c_is_implicit) ? var->slnNeighbor() : var->slnOldNeighbor();
556 template <
typename T>
560 const unsigned int index)
const 562 const auto *
const var = getVarHelper<MooseVariableField<T>>(var_names, index);
564 mooseError(var_names,
": invalid variable name for coupledVectorTagValue");
568 mooseError(
"Attempting to couple to vector tag with ID ",
572 ", but a vector tag with that ID does not exist");
577 return var->nodalVectorTagValue(tag);
579 return var->vectorTagValue(tag);
582 template <
typename T>
585 const TagName & tag_name,
586 const unsigned int comp)
591 mooseError(var_name,
": invalid variable name for tag coupling");
593 auto & var_sys = var->sys();
595 var_sys.needSolutionState(1);
597 var_sys.needSolutionState(2);
600 template <
typename T>
603 const std::string & tag_param_name,
604 const unsigned int index)
const 607 mooseError(
"Tag name parameter '", tag_param_name,
"' is invalid");
614 const_cast<Coupleable *
>(
this)->requestStates<T>(var_names, tag_name, index);
617 mooseError(
"Tagged vector with tag name '", tag_name,
"' does not exist");
620 return vectorTagValueHelper<T>(var_names, tag, index);
625 Coupleable::coupledGenericDofValue<false>(
const std::string & var_name,
unsigned int comp)
const 627 return coupledDofValues(var_name, comp);
632 Coupleable::coupledGenericDofValue<true>(
const std::string & var_name,
unsigned int comp)
const 634 return adCoupledDofValues(var_name, comp);
640 const auto * var =
getVar(var_name, comp);
646 mooseError(
_c_name,
":coupledValueLower cannot be called in a coupleable neighbor object");
657 unsigned int index)
const 659 return vectorTagValueHelper<Real>(var_names, tag, index);
664 const std::string & tag_name,
665 unsigned int index)
const 667 return vectorTagValueHelper<Real>(var_names, tag_name, index);
673 unsigned int index)
const 675 return vectorTagValueHelper<RealEigenVector>(var_names, tag, index);
680 const std::string & tag_name,
681 unsigned int index)
const 683 return vectorTagValueHelper<RealEigenVector>(var_names, tag_name, index);
689 unsigned int index)
const 691 const auto * var =
getVar(var_names, index);
693 mooseError(var_names,
": invalid variable name for coupledVectorTagGradient");
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");
727 unsigned int index)
const 731 mooseError(var_names,
": invalid variable name for coupledVectorTagArrayGradient");
735 mooseError(
"Attempting to couple to vector tag with ID ",
739 ", but a vector tag with that ID does not exist");
743 return var->vectorTagGradient(tag);
748 const std::string & tag_name,
749 unsigned int index)
const 752 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
756 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
762 template <
typename T>
766 const unsigned int comp)
const 768 const auto * var = getVarHelper<MooseVariableField<T>>(var_name, comp);
770 mooseError(var_name,
": invalid variable name for coupledVectorTagDofValue");
775 return var->vectorTagDofValue(tag);
778 template <
typename T>
781 const std::string & tag_param_name,
782 const unsigned int comp)
const 785 mooseError(
"Tag name parameter '", tag_param_name,
"' is invalid");
792 const_cast<Coupleable *
>(
this)->requestStates<T>(var_name, tag_name, comp);
795 mooseError(
"Tagged vector with tag name '", tag_name,
"' does not exist");
799 return vectorTagDofValueHelper<T>(var_name, tag, comp);
805 unsigned int comp)
const 807 return vectorTagDofValueHelper<Real>(var_name, tag, comp);
812 const std::string & tag_name,
813 unsigned int comp)
const 815 return vectorTagDofValueHelper<Real>(var_name, tag_name, comp);
820 const std::string & tag_name,
821 unsigned int comp)
const 823 return vectorTagDofValueHelper<RealEigenVector>(var_name, tag_name, comp);
829 unsigned int index)
const 831 const auto * var = getVarHelper<MooseVariableField<Real>>(var_names, index);
833 mooseError(var_names,
": invalid variable name for coupledMatrixTagValue");
839 return var->nodalMatrixTagValue(tag);
840 return var->matrixTagValue(tag);
845 const std::string & tag_name,
846 unsigned int index)
const 849 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
853 mooseError(
"Matrix tag name '", tagname,
"' does not exist");
870 return _c_is_implicit ? var->nodalValueArray() : var->nodalValueOldArray();
878 return _c_is_implicit ? var->nodalValueArray() : var->nodalValueOldArray();
880 return _c_is_implicit ? var->slnNeighbor() : var->slnOldNeighbor();
901 return (
_c_is_implicit) ? var->dofValuesNeighbor() : var->dofValuesOldNeighbor();
902 return (
_c_is_implicit) ? var->slnNeighbor() : var->slnOldNeighbor();
906 std::vector<const ArrayVariableValue *>
909 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledArrayValue(var_name, comp); };
910 return coupledVectorHelper<const ArrayVariableValue *>(var_name, func);
916 auto * var = getVarHelper<MooseWritableVariable>(var_name, comp);
918 const auto * aux =
dynamic_cast<const AuxKernel *
>(
this);
924 if (!aux && !euo && !nuo && !nfc && !nec)
925 mooseError(
"writableVariable() can only be called from AuxKernels, ElementUserObjects, " 926 "NodalUserObjects, NodeFaceConstraints, or NodeElemConstraints. '",
928 "' is none of those.");
930 if (aux && !aux->isNodal() && var->isNodal())
933 "' cannot obtain a writable reference to the nodal variable '",
936 if (euo && var->isNodal())
939 "' cannot obtain a writable reference to the nodal variable '",
952 mooseDeprecated(
"Coupleable::writableCoupledValue is deprecated, please use " 953 "Coupleable::writableVariable instead. ");
956 auto *
const var =
getVar(var_name, comp);
959 "Unable to create a writable reference for '", var_name,
"', is it a constant expression?");
964 "'", var->name(),
"' must be an auxiliary variable in Coupleable::writableCoupledValue");
967 const auto * aux =
dynamic_cast<const AuxKernel *
>(
this);
970 mooseError(
"writableCoupledValue() can only be called from AuxKernels, but '",
972 "' is not an AuxKernel.");
974 if (!aux->isNodal() && var->isNodal())
977 "' cannot obtain a writable reference to the nodal variable '",
994 if (br && !var->
hasBlocks(br->blockIDs()))
997 "' must be defined on all blocks '",
1001 if (nfc && !var->
hasBlocks(nfc->getSecondaryConnectedBlocks()))
1004 " must be defined on all blocks '",
1006 "'s secondary surface is defined on.");
1010 if (ci !=
this && ci->_writable_coupled_variables[
_c_tid].count(var))
1015 if (br && br_other && br->blockRestricted() && br_other->blockRestricted() &&
1016 !MooseUtils::setsIntersect(br->blockIDs(), br_other->blockIDs()))
1023 "' already obtained a writable reference to '",
1025 "'. Only one object can obtain such a reference per variable and subdomain in a " 1039 const auto * var =
getVar(var_name, comp);
1047 return (
_c_is_implicit) ? var->dofValuesOld() : var->dofValuesOlder();
1053 return (
_c_is_implicit) ? var->dofValuesOldNeighbor() : var->dofValuesOlderNeighbor();
1054 return (
_c_is_implicit) ? var->slnOldNeighbor() : var->slnOlderNeighbor();
1061 const auto * var =
getVar(var_name, comp);
1069 return var->dofValuesOlder();
1070 return var->slnOlder();
1075 return var->dofValuesOlderNeighbor();
1076 return var->slnOlderNeighbor();
1083 const auto * var =
getVar(var_name, comp);
1092 return var->dofValuesPreviousNL();
1093 return var->slnPreviousNL();
1098 return var->dofValuesPreviousNLNeighbor();
1099 return var->slnPreviousNLNeighbor();
1112 return (
_c_is_implicit) ? var->nodalValueOldArray() : var->nodalValueOlderArray();
1115 return (
_c_is_implicit) ? var->slnOldNeighbor() : var->slnOlderNeighbor();
1127 return var->slnOlder();
1128 return var->slnOlderNeighbor();
1142 return (
_c_is_implicit) ? var->dofValuesOld() : var->dofValuesOlder();
1148 return (
_c_is_implicit) ? var->dofValuesOldNeighbor() : var->dofValuesOlderNeighbor();
1149 return (
_c_is_implicit) ? var->slnOldNeighbor() : var->slnOlderNeighbor();
1164 return var->dofValuesOlder();
1165 return var->slnOlder();
1170 return var->dofValuesOlderNeighbor();
1171 return var->slnOlderNeighbor();
1178 const auto * var =
getVar(var_name, comp);
1189 return var->dofValuesDot();
1195 return var->dofValuesDotNeighbor();
1196 return var->uDotNeighbor();
1203 const auto * var =
getVar(var_name, comp);
1214 return var->dofValuesDotDot();
1215 return var->uDotDot();
1220 return var->dofValuesDotDotNeighbor();
1221 return var->uDotDotNeighbor();
1227 Coupleable::coupledGenericDotDot<false>(
const std::string & var_name,
unsigned int comp)
const 1229 return coupledDotDot(var_name, comp);
1234 Coupleable::coupledGenericDotDot<true>(
const std::string & var_name,
unsigned int comp)
const 1236 return adCoupledDotDot(var_name, comp);
1242 const auto * var =
getVar(var_name, comp);
1253 return var->dofValuesDotOld();
1254 return var->uDotOld();
1259 return var->dofValuesDotOldNeighbor();
1260 return var->uDotOldNeighbor();
1267 const auto * var =
getVar(var_name, comp);
1278 return var->dofValuesDotDotOld();
1279 return var->uDotDotOld();
1284 return var->dofValuesDotDotOldNeighbor();
1285 return var->uDotDotOldNeighbor();
1302 return var->uDotNeighbor();
1317 return var->uDotDot();
1318 return var->uDotDotNeighbor();
1333 return var->uDotOld();
1334 return var->uDotOldNeighbor();
1349 return var->uDotDotOld();
1350 return var->uDotDotOldNeighbor();
1365 return var->duDotDu();
1366 return var->duDotDuNeighbor();
1381 return var->duDotDotDu();
1382 return var->duDotDotDuNeighbor();
1396 return var->dofValuesDot();
1402 return var->dofValuesDotNeighbor();
1403 return var->uDotNeighbor();
1418 return var->dofValuesDotDot();
1419 return var->uDotDot();
1424 return var->dofValuesDotDotNeighbor();
1425 return var->uDotDotNeighbor();
1440 return var->dofValuesDotOld();
1441 return var->uDotOld();
1446 return var->dofValuesDotOldNeighbor();
1447 return var->uDotOldNeighbor();
1462 return var->dofValuesDotDotOld();
1463 return var->uDotDotOld();
1468 return var->dofValuesDotDotOldNeighbor();
1469 return var->uDotDotOldNeighbor();
1476 const auto * var =
getVar(var_name, comp);
1487 return var->dofValuesDuDotDu();
1488 return var->duDotDu();
1493 return var->dofValuesDuDotDuNeighbor();
1494 return var->duDotDuNeighbor();
1501 const auto * var =
getVar(var_name, comp);
1512 return var->dofValuesDuDotDotDu();
1513 return var->duDotDotDu();
1518 return var->dofValuesDuDotDotDuNeighbor();
1519 return var->duDotDotDuNeighbor();
1526 const auto *
const var =
getArrayVar(var_name, comp);
1537 return var->dofValuesDuDotDu();
1538 return var->duDotDu();
1543 return var->dofValuesDuDotDuNeighbor();
1544 return var->duDotDuNeighbor();
1551 const auto *
const var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
1561 return (
_c_is_implicit) ? var->gradSlnNeighbor() : var->gradSlnOldNeighbor();
1567 const auto * var =
getVar(var_name, comp);
1576 return (
_c_is_implicit) ? var->gradSlnOld() : var->gradSlnOlder();
1577 return (
_c_is_implicit) ? var->gradSlnOldNeighbor() : var->gradSlnOlderNeighbor();
1583 const auto * var =
getVar(var_name, comp);
1592 return var->gradSlnOlder();
1593 return var->gradSlnOlderNeighbor();
1599 const auto * var =
getVar(var_name, comp);
1609 return var->gradSlnPreviousNL();
1610 return var->gradSlnPreviousNLNeighbor();
1616 const auto * var =
getVar(var_name, comp);
1625 return var->gradSlnDot();
1626 return var->gradSlnNeighborDot();
1632 const auto * var =
getVar(var_name, comp);
1641 return var->gradSlnDotDot();
1642 return var->gradSlnNeighborDotDot();
1658 return (
_c_is_implicit) ? var->gradSlnNeighbor() : var->gradSlnOldNeighbor();
1673 return (
_c_is_implicit) ? var->gradSlnOld() : var->gradSlnOlder();
1674 return (
_c_is_implicit) ? var->gradSlnOldNeighbor() : var->gradSlnOlderNeighbor();
1689 return var->gradSlnOlder();
1690 return var->gradSlnOlderNeighbor();
1703 return (
_c_is_implicit) ? var->gradSlnNeighbor() : var->gradSlnOldNeighbor();
1715 return (
_c_is_implicit) ? var->gradSlnOld() : var->gradSlnOlder();
1716 return (
_c_is_implicit) ? var->gradSlnOldNeighbor() : var->gradSlnOlderNeighbor();
1728 return var->gradSlnOlder();
1729 return var->gradSlnOlderNeighbor();
1735 const auto *
const var =
getArrayVar(var_name, comp);
1741 return var->gradSlnDot();
1742 return var->gradSlnNeighborDot();
1758 return (
_c_is_implicit) ? var->curlSlnNeighbor() : var->curlSlnOldNeighbor();
1773 return (
_c_is_implicit) ? var->curlSlnOld() : var->curlSlnOlder();
1774 return (
_c_is_implicit) ? var->curlSlnOldNeighbor() : var->curlSlnOlderNeighbor();
1789 return var->curlSlnOlder();
1790 return var->curlSlnOlderNeighbor();
1806 return var->adCurlSln();
1807 return var->adCurlSlnNeighbor();
1823 return (
_c_is_implicit) ? var->divSlnNeighbor() : var->divSlnOldNeighbor();
1839 return (
_c_is_implicit) ? var->divSlnOldNeighbor() : var->divSlnOlderNeighbor();
1854 return var->divSlnOlder();
1855 return var->divSlnOlderNeighbor();
1861 const auto * var =
getVar(var_name, comp);
1870 return (
_c_is_implicit) ? var->secondSln() : var->secondSlnOlder();
1871 return (
_c_is_implicit) ? var->secondSlnNeighbor() : var->secondSlnOlderNeighbor();
1877 const auto * var =
getVar(var_name, comp);
1886 return (
_c_is_implicit) ? var->secondSlnOld() : var->secondSlnOlder();
1887 return (
_c_is_implicit) ? var->secondSlnOldNeighbor() : var->secondSlnOlderNeighbor();
1893 const auto * var =
getVar(var_name, comp);
1902 return var->secondSlnOlder();
1903 return var->secondSlnOlderNeighbor();
1909 const auto * var =
getVar(var_name, comp);
1919 return var->secondSlnPreviousNL();
1920 return var->secondSlnPreviousNLNeighbor();
1923 template <
typename T>
1927 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
1929 return getDefaultNodalValue<T>(var_name, comp);
1932 if (!var->isNodal())
1934 ": Trying to get nodal values of variable '",
1936 "', but it is not nodal.");
1939 return (
_c_is_implicit) ? var->nodalValue() : var->nodalValueOld();
1940 return (
_c_is_implicit) ? var->nodalValueNeighbor() : var->nodalValueOldNeighbor();
1943 template <
typename T>
1947 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
1949 return getDefaultNodalValue<T>(var_name, comp);
1952 if (!var->isNodal())
1954 ": Trying to get old nodal values of variable '",
1956 "', but it is not nodal.");
1959 return (
_c_is_implicit) ? var->nodalValueOld() : var->nodalValueOlder();
1960 return (
_c_is_implicit) ? var->nodalValueOldNeighbor() : var->nodalValueOlderNeighbor();
1963 template <
typename T>
1967 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
1969 return getDefaultNodalValue<T>(var_name, comp);
1972 if (!var->isNodal())
1974 ": Trying to get older nodal values of variable '",
1976 "', but it is not nodal.");
1979 return var->nodalValueOlder();
1980 return var->nodalValueOlderNeighbor();
1983 template <
typename T>
1987 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
1989 return getDefaultNodalValue<T>(var_name, comp);
1995 return var->nodalValuePreviousNL();
1996 return var->nodalValuePreviousNLNeighbor();
1999 template <
typename T>
2003 static const T
zero = 0;
2004 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
2010 return var->nodalValueDot();
2011 mooseError(
"Neighbor version not implemented");
2017 const auto * var =
getVar(var_name, comp);
2026 return var->dofValuesDotDot();
2027 return var->dofValuesDotDotNeighbor();
2033 const auto * var =
getVar(var_name, comp);
2042 return var->dofValuesDotOld();
2043 return var->dofValuesDotOldNeighbor();
2049 const auto * var =
getVar(var_name, comp);
2058 return var->dofValuesDotDotOld();
2059 return var->dofValuesDotDotOldNeighbor();
2065 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2071 return (
_c_is_implicit) ? var->dofValues() : var->dofValuesOld();
2072 return (
_c_is_implicit) ? var->dofValuesNeighbor() : var->dofValuesOldNeighbor();
2075 std::vector<const VariableValue *>
2078 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledDofValues(var_name, comp); };
2080 return coupledVectorHelper<const VariableValue *>(var_name, func);
2086 const auto * var =
getVar(var_name, comp);
2092 return (
_c_is_implicit) ? var->dofValuesOld() : var->dofValuesOlder();
2093 return (
_c_is_implicit) ? var->dofValuesOldNeighbor() : var->dofValuesOlderNeighbor();
2096 std::vector<const VariableValue *>
2099 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledDofValuesOld(var_name, comp); };
2100 return coupledVectorHelper<const VariableValue *>(var_name, func);
2106 const auto * var =
getVar(var_name, comp);
2112 return var->dofValuesOlder();
2113 return var->dofValuesOlderNeighbor();
2116 std::vector<const VariableValue *>
2119 auto func = [
this, &var_name](
unsigned int comp)
2121 return coupledVectorHelper<const VariableValue *>(var_name, func);
2133 return (
_c_is_implicit) ? var->dofValues() : var->dofValuesOld();
2134 return (
_c_is_implicit) ? var->dofValuesNeighbor() : var->dofValuesOldNeighbor();
2140 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2150 return var->adDofValues();
2151 return var->adDofValuesNeighbor();
2161 "\" on variable \"",
2163 "\" when using a \"Steady\" executioner is not allowed. This value is available " 2164 "only in transient simulations.");
2167 template <
typename T>
2176 mooseError(
"The adCoupledNodalValue method should only be called for nodal computing objects");
2179 "The adCoupledNodalValue method shouldn't be called for neighbor computing objects. I " 2180 "don't even know what that would mean, although maybe someone could explain it to me.");
2182 mooseError(
"If you're going to use an explicit scheme, then use coupledNodalValue instead of " 2183 "adCoupledNodalValue");
2185 const auto * var = getVarHelper<MooseVariableFE<T>>(var_name, comp);
2187 return var->adNodalValue();
2193 const auto *
const var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2203 return var->adDofValues();
2206 return var->adSln();
2207 return var->adSlnNeighbor();
2213 auto var = getVarHelper<MooseVariableFE<Real>>(var_name, comp);
2220 mooseError(
"adCoupledLowerValue cannot be called in a coupleable neighbor object");
2223 return var->adDofValues();
2225 return var->adSlnLower();
2231 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2241 return var->adGradSln();
2242 return var->adGradSlnNeighbor();
2248 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2258 return var->adGradSlnDot();
2259 return var->adGradSlnNeighborDot();
2265 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2275 return var->adSecondSln();
2277 return var->adSecondSlnNeighbor();
2283 mooseError(
"Automatic differentiation using second derivatives of vector variables is not " 2290 const auto * var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2299 return var->adDofValuesDot();
2300 return var->adUDot();
2305 mooseError(
"AD neighbor nodal dof dot not implemented");
2306 return var->adUDotNeighbor();
2313 const auto *
const var = getVarHelper<MooseVariableField<Real>>(var_name, comp);
2323 return var->adUDotDot();
2324 return var->adUDotDotNeighbor();
2339 return var->adUDot();
2340 return var->adUDotNeighbor();
2357 return var->adSln();
2358 return var->adSlnNeighbor();
2373 return var->adGradSln();
2374 return var->adGradSlnNeighbor();
2388 return default_value_it->second.get();
2405 return default_value_it->second.get();
2439 mooseDeprecated(
"Method adZeroValue() is deprecated. Use '_ad_zero' instead.");
2446 mooseDeprecated(
"Method adZeroGradient() is deprecated. Use '_ad_grad_zero' instead.");
2453 mooseDeprecated(
"Method adZeroSecond() is deprecated. Use '_ad_second_zero' instead.");
2459 Coupleable::genericZeroValue<false>()
2466 Coupleable::genericZeroValue<true>()
2473 Coupleable::genericZeroGradient<false>()
2480 Coupleable::genericZeroGradient<true>()
2482 return _ad_grad_zero;
2487 Coupleable::genericZeroSecond<false>()
2489 return _second_zero;
2494 Coupleable::genericZeroSecond<true>()
2496 return _ad_second_zero;
2501 Coupleable::coupledGenericGradient<false>(
const std::string & var_name,
unsigned int comp)
const 2503 return coupledGradient(var_name, comp);
2508 Coupleable::coupledGenericGradient<true>(
const std::string & var_name,
unsigned int comp)
const 2510 return adCoupledGradient(var_name, comp);
2513 std::vector<unsigned int>
2516 auto func = [
this, &var_name](
unsigned int comp) {
return coupled(var_name, comp); };
2517 return coupledVectorHelper<unsigned int>(var_name, func);
2528 ": a variable name was queried but a constant was passed for parameter '",
2530 "Either pass a true variable or contact a developer to shield the call to " 2531 "'coupledName' with 'isCoupledConstant'");
2534 _c_name,
": Variable '", var_name,
"' does not exist, yet its coupled name is requested");
2537 std::vector<VariableName>
2540 auto func = [
this, &var_name](
unsigned int comp) {
return coupledName(var_name, comp); };
2541 return coupledVectorHelper<VariableName>(var_name, func);
2544 std::vector<const VariableValue *>
2547 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledValue(var_name, comp); };
2548 return coupledVectorHelper<const VariableValue *>(var_name, func);
2551 std::vector<const VectorVariableValue *>
2554 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledVectorValue(var_name, comp); };
2555 return coupledVectorHelper<const VectorVariableValue *>(var_name, func);
2559 std::vector<const GenericVariableValue<false> *>
2560 Coupleable::coupledGenericValues<false>(
const std::string & var_name)
const 2562 return coupledValues(var_name);
2566 std::vector<const GenericVariableValue<true> *>
2567 Coupleable::coupledGenericValues<true>(
const std::string & var_name)
const 2569 return adCoupledValues(var_name);
2572 std::vector<const ADVariableValue *>
2575 auto func = [
this, &var_name](
unsigned int comp) {
return &
adCoupledValue(var_name, comp); };
2576 return coupledVectorHelper<const ADVariableValue *>(var_name, func);
2579 std::vector<const ADVectorVariableValue *>
2582 auto func = [
this, &var_name](
unsigned int comp)
2584 return coupledVectorHelper<const ADVectorVariableValue *>(var_name, func);
2587 std::vector<const VariableValue *>
2590 auto func = [
this, &var_names, &tag](
unsigned int comp)
2592 return coupledVectorHelper<const VariableValue *>(var_names, func);
2595 std::vector<const VariableValue *>
2597 const std::string & tag_name)
const 2600 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2604 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
2610 std::vector<const ArrayVariableValue *>
2613 auto func = [
this, &var_names, &tag](
unsigned int index)
2615 return coupledVectorHelper<const ArrayVariableValue *>(var_names, func);
2618 std::vector<const ArrayVariableValue *>
2620 const std::string & tag_name)
const 2623 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2627 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
2633 std::vector<const VariableGradient *>
2636 auto func = [
this, &var_names, &tag](
unsigned int index)
2638 return coupledVectorHelper<const VariableGradient *>(var_names, func);
2641 std::vector<const VariableGradient *>
2643 const std::string & tag_name)
const 2646 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2650 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
2656 std::vector<const ArrayVariableGradient *>
2659 auto func = [
this, &var_names, &tag](
unsigned int index)
2661 return coupledVectorHelper<const ArrayVariableGradient *>(var_names, func);
2664 std::vector<const ArrayVariableGradient *>
2666 const std::string & tag_name)
const 2669 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2673 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
2679 std::vector<const VariableValue *>
2682 auto func = [
this, &var_names, &tag](
unsigned int comp)
2684 return coupledVectorHelper<const VariableValue *>(var_names, func);
2687 std::vector<const VariableValue *>
2689 const std::string & tag_name)
const 2692 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2696 mooseError(
"Tagged vector with tag name '", tagname,
"' does not exist");
2702 std::vector<const VariableValue *>
2705 auto func = [
this, &var_names, &tag](
unsigned int comp)
2707 return coupledVectorHelper<const VariableValue *>(var_names, func);
2710 std::vector<const VariableValue *>
2712 const std::string & tag_name)
const 2715 mooseError(
"Tag name parameter '", tag_name,
"' is invalid");
2719 mooseError(
"Matrix tag name '", tagname,
"' does not exist");
2725 std::vector<const VariableValue *>
2728 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledValueOld(var_name, comp); };
2729 return coupledVectorHelper<const VariableValue *>(var_name, func);
2732 std::vector<const VariableValue *>
2735 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledValueOlder(var_name, comp); };
2736 return coupledVectorHelper<const VariableValue *>(var_name, func);
2739 std::vector<const VectorVariableValue *>
2742 auto func = [
this, &var_name](
unsigned int comp)
2744 return coupledVectorHelper<const VectorVariableValue *>(var_name, func);
2747 std::vector<const VariableGradient *>
2750 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledGradient(var_name, comp); };
2751 return coupledVectorHelper<const VariableGradient *>(var_name, func);
2755 std::vector<const GenericVariableGradient<false> *>
2756 Coupleable::coupledGenericGradients<false>(
const std::string & var_name)
const 2758 return coupledGradients(var_name);
2762 std::vector<const GenericVariableGradient<true> *>
2763 Coupleable::coupledGenericGradients<true>(
const std::string & var_name)
const 2765 auto func = [
this, &var_name](
unsigned int comp) {
return &adCoupledGradient(var_name, comp); };
2766 return coupledVectorHelper<const GenericVariableGradient<true> *>(var_name, func);
2769 std::vector<const ADVariableGradient *>
2772 auto func = [
this, &var_name](
unsigned int comp) {
return &
adCoupledGradient(var_name, comp); };
2773 return coupledVectorHelper<const ADVariableGradient *>(var_name, func);
2776 std::vector<const VariableGradient *>
2779 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledGradientOld(var_name, comp); };
2780 return coupledVectorHelper<const VariableGradient *>(var_name, func);
2783 std::vector<const VariableValue *>
2786 auto func = [
this, &var_name](
unsigned int comp) {
return &
coupledDot(var_name, comp); };
2787 return coupledVectorHelper<const VariableValue *>(var_name, func);
2790 std::vector<const ADVariableValue *>
2793 auto func = [
this, &var_name](
unsigned int comp) {
return &
adCoupledDot(var_name, comp); };
2794 return coupledVectorHelper<const ADVariableValue *>(var_name, func);
2799 Coupleable::coupledGenericDot<false>(
const std::string & var_name,
unsigned int comp)
const 2801 return coupledDot(var_name, comp);
2806 Coupleable::coupledGenericDot<true>(
const std::string & var_name,
unsigned int comp)
const 2808 return adCoupledDot(var_name, comp);
2813 template const Real & Coupleable::getDefaultNodalValue<Real>(
const std::string & var_name,
2814 unsigned int comp)
const;
2816 template const Real & Coupleable::coupledNodalValue<Real>(
const std::string & var_name,
2817 unsigned int comp)
const;
2818 template const ADReal & Coupleable::adCoupledNodalValue<Real>(
const std::string & var_name,
2819 unsigned int comp)
const;
2821 Coupleable::adCoupledNodalValue<RealVectorValue>(
const std::string & var_name,
2822 unsigned int comp)
const;
2825 Coupleable::coupledNodalValue<RealVectorValue>(
const std::string & var_name,
2826 unsigned int comp)
const;
2827 template const Real & Coupleable::coupledNodalValueOld<Real>(
const std::string & var_name,
2828 unsigned int comp)
const;
2830 Coupleable::coupledNodalValueOld<RealVectorValue>(
const std::string & var_name,
2831 unsigned int comp)
const;
2832 template const Real & Coupleable::coupledNodalValueOlder<Real>(
const std::string & var_name,
2833 unsigned int comp)
const;
2835 Coupleable::coupledNodalValueOlder<RealVectorValue>(
const std::string & var_name,
2836 unsigned int comp)
const;
2837 template const Real & Coupleable::coupledNodalValuePreviousNL<Real>(
const std::string & var_name,
2838 unsigned int comp)
const;
2840 Coupleable::coupledNodalValuePreviousNL<RealVectorValue>(
const std::string & var_name,
2841 unsigned int comp)
const;
2842 template const Real & Coupleable::coupledNodalDot<Real>(
const std::string & var_name,
2843 unsigned int comp)
const;
2845 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.
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...
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...
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.
std::string toUpper(std::string name)
Convert supplied string to upper case.
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...
std::vector< const MooseVariableFieldBase * > getFieldVars(const std::string &var_name) const
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.
const Elem & get(const ElemType type_in)
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.