22 #include "libmesh/remote_elem.h" 23 #include "libmesh/tensor_tools.h" 25 #include "metaphysicl/ct_types.h" 27 #include <unordered_map> 48 template <
typename, FunctorEvaluationKind>
69 typedef typename MetaPhysicL::ReplaceAlgebraicType<
97 template <FunctorEvaluationKind>
136 template <
typename T>
154 const std::set<ExecFlagType> & clearance_schedule = {
EXEC_ALWAYS})
165 template <FunctorEvaluationKind FET,
typename Space,
typename State>
166 typename FunctorReturnType<T, FET>::type
genericEvaluate(
const Space & r,
167 const State & state)
const;
364 mooseError(
"Element side quadrature point gradient not implemented for functor " +
407 mooseError(
"Element quadrature point time derivative not implemented for functor " +
418 mooseError(
"Element side quadrature point time derivative not implemented for functor " +
461 mooseError(
"Element quadrature point gradient-dot not implemented for functor " +
472 mooseError(
"Element side quadrature point gradient-dot not implemented for functor " +
499 template <
typename SpaceArg,
typename StateArg>
502 std::vector<std::pair<bool, T>> & qp_cache_data,
503 const SpaceArg & space,
509 template <
typename SpaceArg>
511 const SpaceArg & space)
const;
533 mutable std::unordered_map<dof_id_type, std::vector<std::pair<bool, ValueType>>>
_qp_to_value;
551 mutable std::unordered_map<dof_id_type, std::vector<std::vector<std::pair<bool, ValueType>>>>
567 template <
typename T>
574 return hasBlocks(fi.
elem().subdomain_id()) && hasBlocks(fi.
neighborPtr()->subdomain_id());
577 template <
typename T>
578 template <
typename SpaceArg>
581 const SpaceArg & space)
const 584 auto [it, inserted] = cache_data.try_emplace(space,
ValueType());
585 auto &
value = it->second;
595 template <
typename T>
599 if (_always_evaluate)
602 mooseAssert(state.
state == 0,
603 "Cached evaluations are only currently supported for the current state.");
605 return queryFVArgCache(_elem_arg_to_value, elem);
608 template <
typename T>
614 if (_always_evaluate)
617 mooseAssert(state.
state == 0,
618 "Cached evaluations are only currently supported for the current state.");
620 return queryFVArgCache(_face_arg_to_value, face_in);
623 template <
typename T>
624 template <
typename SpaceArg,
typename StateArg>
628 std::vector<std::pair<bool, ValueType>> & qp_cache_data,
629 const SpaceArg & space,
634 if (qp >= qp_cache_data.size())
637 auto & pr = qp_cache_data[qp];
644 auto & pr = qp_cache_data[qp];
654 template <
typename T>
658 if (_always_evaluate)
661 const auto elem_id = elem_qp.
elem->
id();
662 if (elem_id != _current_qp_map_key)
664 _current_qp_map_key = elem_id;
665 _current_qp_map_value = &_qp_to_value[elem_id];
667 auto & qp_data = *_current_qp_map_value;
668 const auto qp = elem_qp.
qp;
669 const auto *
const qrule = elem_qp.
qrule;
670 mooseAssert(qrule,
"qrule must be non-null");
672 return queryQpCache(qp, *qrule, qp_data, elem_qp, state);
675 template <
typename T>
679 if (_always_evaluate)
680 return evaluate(elem_side_qp, state);
682 const Elem *
const elem = elem_side_qp.
elem;
683 mooseAssert(elem,
"elem must be non-null");
684 const auto elem_id = elem->id();
685 if (elem_id != _current_side_qp_map_key)
687 _current_side_qp_map_key = elem_id;
688 _current_side_qp_map_value = &_side_qp_to_value[elem_id];
690 auto & side_qp_data = *_current_side_qp_map_value;
691 const auto side = elem_side_qp.
side;
692 const auto qp = elem_side_qp.
qp;
693 const auto *
const qrule = elem_side_qp.
qrule;
694 mooseAssert(qrule,
"qrule must be non-null");
697 if (side >= side_qp_data.size())
698 side_qp_data.resize(elem->n_sides());
701 auto & qp_data = side_qp_data[side];
702 return queryQpCache(qp, *qrule, qp_data, elem_side_qp, state);
705 template <
typename T>
712 template <
typename T>
717 _always_evaluate =
true;
719 _clearance_schedule = clearance_schedule;
722 template <
typename T>
726 mooseAssert(node.
subdomain_ids,
"Subdomain IDs must be supplied to the node argument");
730 template <
typename T>
739 const Elem *
const elem = face.face_side;
740 const FaceInfo *
const fi = face.fi;
741 mooseAssert(fi,
"face info should be non-null");
742 bool check_elem_def =
false;
743 bool check_neighbor_def =
false;
747 if (!hasFaceSide(*fi,
true))
748 check_neighbor_def =
true;
749 else if (!hasFaceSide(*fi,
false))
750 check_elem_def =
true;
752 else if (elem == fi->
elemPtr())
753 check_elem_def =
true;
756 mooseAssert(elem == fi->
neighborPtr(),
"This has to match something");
757 check_neighbor_def =
true;
760 if (check_elem_def && !hasFaceSide(*fi,
true))
762 std::string additional_message =
"It is not defined on the neighbor side either.";
763 if (hasFaceSide(*fi,
false))
764 additional_message =
"It is however defined on the neighbor side.";
767 " is not defined on the element side of the face information, but a face argument " 769 "(e.g. residual object, postprocessor, etc.) has requested evaluation there.\n",
772 if (check_neighbor_def && !hasFaceSide(*fi,
false))
774 std::string additional_message =
"It is not defined on the element side either.";
775 if (hasFaceSide(*fi,
true))
776 additional_message =
"It is however defined on the element side.";
780 " is not defined on the neighbor side of the face information, but a face argument " 781 "producer (e.g. residual object, postprocessor, etc.) has requested evaluation there.\n",
787 template <
typename T>
791 for (
auto & map_pr : _qp_to_value)
792 for (
auto & pr : map_pr.second)
795 for (
auto & map_pr : _side_qp_to_value)
797 auto & side_vector = map_pr.second;
798 for (
auto & qp_vector : side_vector)
799 for (
auto & pr : qp_vector)
804 _current_qp_map_value =
nullptr;
806 _current_side_qp_map_value =
nullptr;
808 _elem_arg_to_value.clear();
809 _face_arg_to_value.clear();
810 _node_arg_to_value.clear();
813 template <
typename T>
821 template <
typename T>
829 template <
typename T>
837 template <
typename T>
841 if (_clearance_schedule.count(exec_type))
845 template <
typename T>
849 return evaluateGradient(elem, state);
852 template <
typename T>
857 return evaluateGradient(face, state);
860 template <
typename T>
864 return evaluateGradient(elem_qp, state);
867 template <
typename T>
871 return evaluateGradient(elem_side_qp, state);
874 template <
typename T>
878 return evaluateGradient(elem_point, state);
881 template <
typename T>
885 return evaluateGradient(node, state);
888 template <
typename T>
892 return evaluateDot(elem, state);
895 template <
typename T>
900 return evaluateDot(face, state);
903 template <
typename T>
907 return evaluateDot(elem_qp, state);
910 template <
typename T>
914 return evaluateDot(elem_side_qp, state);
917 template <
typename T>
921 return evaluateDot(elem_point, state);
924 template <
typename T>
928 return evaluateDot(node, state);
931 template <
typename T>
935 return evaluateGradDot(elem, state);
938 template <
typename T>
943 return evaluateGradDot(face, state);
946 template <
typename T>
950 return evaluateGradDot(elem_qp, state);
953 template <
typename T>
957 return evaluateGradDot(elem_side_qp, state);
960 template <
typename T>
964 return evaluateGradDot(elem_point, state);
967 template <
typename T>
971 return evaluateGradDot(node, state);
974 template <
typename T>
979 return hasBlocks(fi.
elem().subdomain_id());
984 template <
typename T>
985 template <FunctorEvaluationKind FET,
typename Space,
typename State>
990 return (*
this)(r, state);
992 return gradient(r, state);
994 return dot(r, state);
996 return gradDot(r, state);
1039 template <
typename T>
1090 _owned = std::move(wrapped);
1110 virtual bool wrapsNull()
const override {
return wrapsType<NullFunctor<T>>(); }
1122 template <
typename T2>
1125 return dynamic_cast<const T2 *
>(
_wrapped);
1129 const Elem *
const elem,
1130 const StateArg & state)
const override 1132 return _wrapped->isExtrapolatedBoundaryFace(fi, elem, state);
1138 return _wrapped->hasFaceSide(fi, fi_elem_side);
1151 return _wrapped->operator()(elem, state);
1155 return _wrapped->operator()(face, state);
1159 return _wrapped->operator()(qp, state);
1163 return _wrapped->operator()(qp, state);
1167 return _wrapped->operator()(elem_point, state);
1171 return _wrapped->operator()(node, state);
1176 return _wrapped->gradient(elem, state);
1180 return _wrapped->gradient(face, state);
1184 return _wrapped->gradient(qp, state);
1187 const StateArg & state)
const override 1189 return _wrapped->gradient(qp, state);
1192 const StateArg & state)
const override 1194 return _wrapped->gradient(elem_point, state);
1198 return _wrapped->gradient(node, state);
1218 const StateArg & state)
const override 1220 return _wrapped->dot(elem_point, state);
1229 return _wrapped->gradDot(elem, state);
1233 return _wrapped->gradDot(face, state);
1237 return _wrapped->gradDot(qp, state);
1240 const StateArg & state)
const override 1242 return _wrapped->gradDot(qp, state);
1245 const StateArg & state)
const override 1247 return _wrapped->gradDot(elem_point, state);
1251 return _wrapped->gradDot(node, state);
1260 friend class ::SubProblem;
1266 template <
typename T>
1331 template <
typename T>
1351 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1352 "they've written broken code");
1356 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1357 "they've written broken code");
1361 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1362 "they've written broken code");
1366 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1367 "they've written broken code");
1371 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1372 "they've written broken code");
1376 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1377 "they've written broken code");
1381 template <
typename T>
std::string name(const ElemQuality q)
virtual DotType evaluateDot(const FaceArg &face, const StateArg &state) const override
ValueType evaluate(const NodeArg &, const StateArg &) const override
virtual bool wrapsNull() const override
GradientType evaluateGradDot(const ElemArg &, const StateArg &) const override
Evaluate the functor gradient-dot with a given element.
virtual bool hasBlocks(SubdomainID) const
Returns whether the functor is defined on this block.
unsigned int side
The local side index.
virtual GradientType evaluateGradient(const NodeArg &, const StateArg &) const
void assign(std::unique_ptr< FunctorBase< T >> &&wrapped)
const libMesh::QBase * qrule
The quadrature rule.
virtual ValueType evaluate(const ElemQpArg &qp, const StateArg &state) const override
virtual GradientType evaluateGradient(const NodeArg &node, const StateArg &state) const override
void setCacheClearanceSchedule(const std::set< ExecFlagType > &clearance_schedule)
Set how often to clear the functor evaluation cache.
ValueType evaluate(const ElemQpArg &, const StateArg &) const override
Base class template for functor objects.
virtual GradientType evaluateGradient(const ElemSideQpArg &, const StateArg &) const
ConstantFunctor(ValueType &&value)
FunctorEnvelope(std::unique_ptr< FunctorBase< T >> &&wrapped)
bool supportsElemSideQpArg() const override final
Whether this functor supports evaluation with ElemSideQpArg.
dof_id_type _current_qp_map_key
Current key for qp map cache.
bool supportsFaceArg() const override final
Whether this functor supports evaluation with FaceArg.
DotType evaluateDot(const ElemQpArg &, const StateArg &) const override
ValueType evaluate(const ElemArg &, const StateArg &) const override
Evaluate the functor with a given element.
virtual GradientType evaluateGradDot(const ElemSideQpArg &qp, const StateArg &state) const override
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
virtual std::string returnType() const override
GradientType evaluateGradient(const ElemQpArg &, const StateArg &) const override
virtual DotType evaluateDot(const ElemArg &elem, const StateArg &state) const override
Evaluate the functor time derivative with a given element.
ValueType evaluate(const FaceArg &, const StateArg &) const override
virtual ~FunctorEnvelope()=default
const Elem & elem() const
GradientType evaluateGradDot(const ElemQpArg &, const StateArg &) const override
virtual void customSetup(const ExecFlagType &exec_type)=0
virtual GradientType evaluateGradDot(const ElemPointArg &elem_point, const StateArg &state) const override
Evaluate the functor gradient-dot with a given element and point.
bool supportsFaceArg() const override final
Whether this functor supports evaluation with FaceArg.
virtual GradientType evaluateGradDot(const ElemPointArg &, const StateArg &) const
Evaluate the functor gradient-dot with a given element and point.
virtual bool isConstant() const =0
T * get(const std::unique_ptr< T > &u)
The MooseUtils::get() specializations are used to support making forwards-compatible code changes fro...
virtual void timestepSetup()=0
virtual ValueType evaluate(const NodeArg &node, const StateArg &state) const override
virtual std::string returnType() const =0
const Point & faceCentroid() const
Returns the coordinates of the face centroid.
This is a wrapper that forwards calls to the implementation, which can be switched out at any time wi...
virtual bool isExtrapolatedBoundaryFace(const FaceInfo &, const Elem *, const StateArg &) const
Returns whether this (sided) face is an extrapolated boundary face for this functor.
virtual GradientType evaluateGradient(const ElemSideQpArg &qp, const StateArg &state) const override
GradientType evaluateGradDot(const ElemPointArg &, const StateArg &) const override
Evaluate the functor gradient-dot with a given element and point.
std::map< FaceArg, ValueType > _face_arg_to_value
Map from face arguments to their cached evaluations.
DotType evaluateDot(const ElemArg &, const StateArg &) const override
Evaluate the functor time derivative with a given element.
virtual bool isConstant() const override
Returns true if this functor is a constant.
A structure that is used to evaluate Moose functors at an arbitrary physical point contained within a...
virtual DotType evaluateDot(const ElemSideQpArg &, const StateArg &) const
virtual DotType evaluateDot(const ElemPointArg &, const StateArg &) const
Evaluate the functor time derivative with a given element and point.
const ExecFlagType EXEC_ALWAYS
A non-templated base class for functors that allow an owner object to hold different class template i...
GradientType evaluateGradDot(const ElemSideQpArg &, const StateArg &) const override
virtual GradientType evaluateGradient(const ElemArg &elem, const StateArg &state) const override
Evaluate the functor gradient with a given element.
virtual DotType evaluateDot(const ElemQpArg &, const StateArg &) const
GradientType evaluateGradient(const ElemArg &, const StateArg &) const override
Evaluate the functor gradient with a given element.
virtual ~FunctorEnvelopeBase()=default
typename FunctorReturnType< T, FunctorEvaluationKind::Gradient >::type GradientType
This rigmarole makes it so that a user can create functors that return containers (std::vector...
ValueType evaluate(const FaceArg &, const StateArg &) const override
std::vector< std::pair< bool, ValueType > > * _current_qp_map_value
Current value for qp map cache.
virtual DotType evaluateDot(const ElemArg &, const StateArg &) const
Evaluate the functor time derivative with a given element.
bool hasBlocks(SubdomainID) const override
Returns whether the functor is defined on this block.
bool supportsElemSideQpArg() const override final
Whether this functor supports evaluation with ElemSideQpArg.
Abstract base class that can be used to hold collections of functors.
GradientType gradDot(const ElemArg &elem, const StateArg &state) const
Same as their evaluateGradDot overloads with the same arguments but allows for caching implementation...
GradientType evaluateGradient(const NodeArg &, const StateArg &) const override
DotType evaluateDot(const ElemPointArg &, const StateArg &) const override
Evaluate the functor time derivative with a given element and point.
virtual void customSetup(const ExecFlagType &exec_type) override
GradientType evaluateGradient(const ElemPointArg &, const StateArg &) const override
Evaluate the functor gradient with a given element and point.
FunctorEvaluationKind
An enumeration of possible functor evaluation kinds.
MetaPhysicL::ReplaceAlgebraicType< T, typename libMesh::TensorTools::IncrementRank< typename MetaPhysicL::ValueType< T >::type >::type >::type type
std::unordered_map< dof_id_type, std::vector< std::vector< std::pair< bool, ValueType > > > > _side_qp_to_value
Cached element quadrature point functor property evaluations.
bool isInternalFace(const FaceInfo &) const
Returns true if the face is an internal face.
This data structure is used to store geometric and variable related metadata about each cell face in ...
virtual bool supportsElemSideQpArg() const =0
Whether this functor supports evaluation with ElemSideQpArg.
virtual GradientType evaluateGradient(const ElemQpArg &qp, const StateArg &state) const override
const std::set< SubdomainID > * subdomain_ids
Indicates what subdomains this argument should be associated with.
const Elem * neighborPtr() const
virtual bool isExtrapolatedBoundaryFace(const FaceInfo &fi, const Elem *const elem, const StateArg &state) const override
Returns whether this (sided) face is an extrapolated boundary face for this functor.
virtual void jacobianSetup()=0
virtual GradientType evaluateGradient(const ElemQpArg &, const StateArg &) const
MooseFunctorName _functor_name
name of the functor
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
virtual bool hasBlocks(const SubdomainID id) const override
Returns whether the functor is defined on this block.
A structure defining a "face" evaluation calling argument for Moose functors.
ValueType queryQpCache(unsigned int qp, const libMesh::QBase &qrule, std::vector< std::pair< bool, T >> &qp_cache_data, const SpaceArg &space, const StateArg &state) const
check a qp cache and if invalid then evaluate
unsigned int qp
The quadrature point index.
virtual GradientType evaluateGradient(const ElemPointArg &elem_point, const StateArg &state) const override
Evaluate the functor gradient with a given element and point.
const ExecFlagType EXEC_TIMESTEP_BEGIN
virtual bool ownsWrappedFunctor() const =0
virtual GradientType evaluateGradDot(const FaceArg &, const StateArg &) const
void checkFace(const Moose::FaceArg &face) const
Examines the incoming face argument.
virtual GradientType evaluateGradDot(const ElemQpArg &, const StateArg &) const
virtual GradientType evaluateGradDot(const NodeArg &node, const StateArg &state) const override
ValueType queryFVArgCache(std::map< SpaceArg, ValueType > &cache_data, const SpaceArg &space) const
check a finite volume spatial argument cache and if invalid then evaluate
const libMesh::QBase * qrule
The quadrature rule.
ValueType evaluate(const ElemPointArg &, const StateArg &) const override
Evaluate the functor with a given element and point.
virtual DotType evaluateDot(const NodeArg &, const StateArg &) const
virtual GradientType evaluateGradient(const ElemArg &, const StateArg &) const
Evaluate the functor gradient with a given element.
const Elem & neighbor() const
static const dof_id_type invalid_id
ValueType evaluate(const ElemArg &, const StateArg &) const override
Evaluate the functor with a given element.
virtual ValueType evaluate(const FaceArg &face, const StateArg &state) const override
virtual bool wrapsNull() const =0
A structure that is used to evaluate Moose functors logically at an element/cell center.
bool supportsElemSideQpArg() const override final
Whether this functor supports evaluation with ElemSideQpArg.
unsigned int n_points() const
ValueType evaluate(const ElemSideQpArg &, const StateArg &) const override
virtual GradientType evaluateGradDot(const ElemArg &elem, const StateArg &state) const override
Evaluate the functor gradient-dot with a given element.
Argument for requesting functor evaluation at a quadrature point location in an element.
virtual void jacobianSetup() override
T evaluate(Real, const Point &)
The general evaluation method is not defined.
const libMesh::Elem * elem
The element.
virtual void timestepSetup() override
virtual GradientType evaluateGradDot(const ElemArg &, const StateArg &) const
Evaluate the functor gradient-dot with a given element.
const ExecFlagType EXEC_LINEAR
virtual GradientType evaluateGradient(const FaceArg &, const StateArg &) const
virtual ValueType evaluate(const ElemArg &elem, const StateArg &state) const =0
Evaluate the functor with a given element.
std::string stringify(const T &t)
conversion to string
std::string demangle(const char *name)
virtual DotType evaluateDot(const FaceArg &, const StateArg &) const
std::map< ElemArg, ValueType > _elem_arg_to_value
Map from element arguments to their cached evaluations.
const MooseFunctorName & functorName() const
Return the functor name.
FunctorEnvelope(const FunctorBase< T > &wrapped)
ValueType evaluate(const NodeArg &, const StateArg &) const override
dof_id_type _current_side_qp_map_key
Current key for side-qp map cache.
const Elem * elemPtr() const
This structure takes an evaluation kind as a template argument and defines a constant expression indi...
virtual void residualSetup()=0
const ExecFlagType EXEC_NONLINEAR
FunctorEnvelopeBase()=default
virtual GradientType evaluateGradDot(const ElemSideQpArg &, const StateArg &) const
virtual GradientType evaluateGradient(const ElemPointArg &, const StateArg &) const
Evaluate the functor gradient with a given element and point.
virtual ~FunctorBase()=default
ConstantFunctor(const ValueType &value)
ValueType operator()(const ElemArg &elem, const StateArg &state) const
Same as their evaluate overloads with the same arguments but allows for caching implementation.
virtual bool supportsFaceArg() const =0
Whether this functor supports evaluation with FaceArg.
DotType dot(const ElemArg &elem, const StateArg &state) const
Same as their evaluateDot overloads with the same arguments but allows for caching implementation...
Class template for creating constant functors.
virtual ValueType evaluate(const ElemSideQpArg &qp, const StateArg &state) const override
std::unique_ptr< FunctorBase< T > > _owned
Our wrapped object.
Class for containing MooseEnum item information.
FunctorReturnType< T, FunctorEvaluationKind::Gradient >::type type
GradientType evaluateGradDot(const NodeArg &, const StateArg &) const override
DotType evaluateDot(const NodeArg &, const StateArg &) const override
bool supportsFaceArg() const override final
Whether this functor supports evaluation with FaceArg.
GradientType evaluateGradDot(const FaceArg &, const StateArg &) const override
bool hasFaceSide(const FaceInfo &fi, bool) const override
GradientType gradient(const ElemArg &elem, const StateArg &state) const
Same as their evaluateGradient overloads with the same arguments but allows for caching implementatio...
std::vector< std::vector< std::pair< bool, ValueType > > > * _current_side_qp_map_value
Current value for side-qp map cache.
bool _always_evaluate
Boolean to check if we always need evaluation.
GradientType evaluateGradient(const ElemSideQpArg &, const StateArg &) const override
virtual DotType evaluateDot(const NodeArg &node, const StateArg &state) const override
ValueType evaluate(const ElemQpArg &, const StateArg &) const override
State argument for evaluating functors.
void clearCacheData()
clear cache data
FunctorBase(const MooseFunctorName &name, const std::set< ExecFlagType > &clearance_schedule={EXEC_ALWAYS})
virtual void residualSetup() override
void assign(const FunctorBase< T > &wrapped)
unsigned int qp
The quadrature point index.
virtual GradientType evaluateGradient(const FaceArg &face, const StateArg &state) const override
FunctorEnvelope & operator=(const FunctorEnvelope &)=delete
virtual DotType evaluateDot(const ElemPointArg &elem_point, const StateArg &state) const override
Evaluate the functor time derivative with a given element and point.
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
ValueType evaluate(const ElemSideQpArg &, const StateArg &) const override
DotType evaluateDot(const ElemSideQpArg &, const StateArg &) const override
virtual bool isConstant() const
Returns true if this functor is a constant.
const libMesh::Elem * elem
The element.
virtual bool hasFaceSide(const FaceInfo &fi, const bool fi_elem_side) const override
GradientType evaluateGradient(const FaceArg &, const StateArg &) const override
A structure that defines the return type of a functor based on the type of the functor and the reques...
virtual DotType evaluateDot(const ElemSideQpArg &qp, const StateArg &state) const override
virtual GradientType evaluateGradDot(const NodeArg &, const StateArg &) const
DotType evaluateDot(const FaceArg &, const StateArg &) const override
const FunctorBase< T > * _wrapped
A base class interface for both producers and consumers of functor face arguments, e.g.
virtual DotType evaluateDot(const ElemQpArg &qp, const StateArg &state) const override
A functor that serves as a placeholder during the simulation setup phase if a functor consumer reques...
virtual GradientType evaluateGradDot(const FaceArg &face, const StateArg &state) const override
Argument for requesting functor evaluation at quadrature point locations on an element side...
std::unordered_map< dof_id_type, std::vector< std::pair< bool, ValueType > > > _qp_to_value
Cached element quadrature point functor property evaluations.
virtual GradientType evaluateGradDot(const ElemQpArg &qp, const StateArg &state) const override
unsigned int state
The state.
virtual ValueType evaluate(const ElemPointArg &elem_point, const StateArg &state) const override
Evaluate the functor with a given element and point.
FunctorReturnType< T, FET >::type genericEvaluate(const Space &r, const State &state) const
Perform a generic evaluation based on the supplied template argument FET and supplied spatial and tem...
std::map< NodeArg, ValueType > _node_arg_to_value
Map from nodal arguments to their cached evaluations.
std::set< ExecFlagType > _clearance_schedule
How often to clear the material property cache.
virtual bool ownsWrappedFunctor() const override
ValueType evaluate(const ElemPointArg &, const StateArg &) const override
Evaluate the functor with a given element and point.
virtual bool hasFaceSide(const FaceInfo &fi, const bool fi_elem_side) const override
virtual ValueType evaluate(const ElemArg &elem, const StateArg &state) const override
Forward calls to wrapped object.
virtual bool isConstant() const override
Returns true if this functor is a constant.