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})
160 #ifdef MOOSE_KOKKOS_ENABLED 171 template <FunctorEvaluationKind FET,
typename Space,
typename State>
173 const State & state)
const;
370 mooseError(
"Element side quadrature point gradient not implemented for functor " +
413 mooseError(
"Element quadrature point time derivative not implemented for functor " +
424 mooseError(
"Element side quadrature point time derivative not implemented for functor " +
467 mooseError(
"Element quadrature point gradient-dot not implemented for functor " +
478 mooseError(
"Element side quadrature point gradient-dot not implemented for functor " +
505 template <
typename SpaceArg,
typename StateArg>
508 std::vector<std::pair<bool, T>> & qp_cache_data,
509 const SpaceArg & space,
515 template <
typename SpaceArg>
517 const SpaceArg & space)
const;
539 mutable std::unordered_map<dof_id_type, std::vector<std::pair<bool, ValueType>>>
_qp_to_value;
557 mutable std::unordered_map<dof_id_type, std::vector<std::vector<std::pair<bool, ValueType>>>>
573 template <
typename T>
580 return hasBlocks(fi.
elem().subdomain_id()) && hasBlocks(fi.
neighborPtr()->subdomain_id());
583 template <
typename T>
584 template <
typename SpaceArg>
587 const SpaceArg & space)
const 590 auto [it, inserted] = cache_data.try_emplace(space,
ValueType());
591 auto &
value = it->second;
601 template <
typename T>
605 if (_always_evaluate)
608 mooseAssert(state.
state == 0,
609 "Cached evaluations are only currently supported for the current state.");
611 return queryFVArgCache(_elem_arg_to_value, elem);
614 template <
typename T>
620 if (_always_evaluate)
623 mooseAssert(state.
state == 0,
624 "Cached evaluations are only currently supported for the current state.");
626 return queryFVArgCache(_face_arg_to_value, face_in);
629 template <
typename T>
630 template <
typename SpaceArg,
typename StateArg>
634 std::vector<std::pair<bool, ValueType>> & qp_cache_data,
635 const SpaceArg & space,
640 if (qp >= qp_cache_data.size())
643 auto & pr = qp_cache_data[qp];
650 auto & pr = qp_cache_data[qp];
660 template <
typename T>
664 if (_always_evaluate)
667 const auto elem_id = elem_qp.
elem->
id();
668 if (elem_id != _current_qp_map_key)
670 _current_qp_map_key = elem_id;
671 _current_qp_map_value = &_qp_to_value[elem_id];
673 auto & qp_data = *_current_qp_map_value;
674 const auto qp = elem_qp.
qp;
675 const auto *
const qrule = elem_qp.
qrule;
676 mooseAssert(qrule,
"qrule must be non-null");
678 return queryQpCache(qp, *qrule, qp_data, elem_qp, state);
681 template <
typename T>
685 if (_always_evaluate)
686 return evaluate(elem_side_qp, state);
688 const Elem *
const elem = elem_side_qp.
elem;
689 mooseAssert(elem,
"elem must be non-null");
690 const auto elem_id = elem->id();
691 if (elem_id != _current_side_qp_map_key)
693 _current_side_qp_map_key = elem_id;
694 _current_side_qp_map_value = &_side_qp_to_value[elem_id];
696 auto & side_qp_data = *_current_side_qp_map_value;
697 const auto side = elem_side_qp.
side;
698 const auto qp = elem_side_qp.
qp;
699 const auto *
const qrule = elem_side_qp.
qrule;
700 mooseAssert(qrule,
"qrule must be non-null");
703 if (side >= side_qp_data.size())
704 side_qp_data.resize(elem->n_sides());
707 auto & qp_data = side_qp_data[side];
708 return queryQpCache(qp, *qrule, qp_data, elem_side_qp, state);
711 template <
typename T>
718 template <
typename T>
723 _always_evaluate =
true;
725 _clearance_schedule = clearance_schedule;
728 template <
typename T>
732 mooseAssert(node.
subdomain_ids,
"Subdomain IDs must be supplied to the node argument");
736 template <
typename T>
745 const Elem *
const elem = face.face_side;
746 const FaceInfo *
const fi = face.fi;
747 mooseAssert(fi,
"face info should be non-null");
748 bool check_elem_def =
false;
749 bool check_neighbor_def =
false;
753 if (!hasFaceSide(*fi,
true))
754 check_neighbor_def =
true;
755 else if (!hasFaceSide(*fi,
false))
756 check_elem_def =
true;
758 else if (elem == fi->
elemPtr())
759 check_elem_def =
true;
762 mooseAssert(elem == fi->
neighborPtr(),
"This has to match something");
763 check_neighbor_def =
true;
766 if (check_elem_def && !hasFaceSide(*fi,
true))
768 std::string additional_message =
"It is not defined on the neighbor side either.";
769 if (hasFaceSide(*fi,
false))
770 additional_message =
"It is however defined on the neighbor side.";
773 " is not defined on the element side of the face information, but a face argument " 775 "(e.g. residual object, postprocessor, etc.) has requested evaluation there.\n",
778 if (check_neighbor_def && !hasFaceSide(*fi,
false))
780 std::string additional_message =
"It is not defined on the element side either.";
781 if (hasFaceSide(*fi,
true))
782 additional_message =
"It is however defined on the element side.";
786 " is not defined on the neighbor side of the face information, but a face argument " 787 "producer (e.g. residual object, postprocessor, etc.) has requested evaluation there.\n",
793 template <
typename T>
797 for (
auto & map_pr : _qp_to_value)
798 for (
auto & pr : map_pr.second)
801 for (
auto & map_pr : _side_qp_to_value)
803 auto & side_vector = map_pr.second;
804 for (
auto & qp_vector : side_vector)
805 for (
auto & pr : qp_vector)
810 _current_qp_map_value =
nullptr;
812 _current_side_qp_map_value =
nullptr;
814 _elem_arg_to_value.clear();
815 _face_arg_to_value.clear();
816 _node_arg_to_value.clear();
819 template <
typename T>
827 template <
typename T>
835 template <
typename T>
843 template <
typename T>
847 if (_clearance_schedule.count(exec_type))
851 template <
typename T>
855 return evaluateGradient(elem, state);
858 template <
typename T>
863 return evaluateGradient(face, state);
866 template <
typename T>
870 return evaluateGradient(elem_qp, state);
873 template <
typename T>
877 return evaluateGradient(elem_side_qp, state);
880 template <
typename T>
884 return evaluateGradient(elem_point, state);
887 template <
typename T>
891 return evaluateGradient(node, state);
894 template <
typename T>
898 return evaluateDot(elem, state);
901 template <
typename T>
906 return evaluateDot(face, state);
909 template <
typename T>
913 return evaluateDot(elem_qp, state);
916 template <
typename T>
920 return evaluateDot(elem_side_qp, state);
923 template <
typename T>
927 return evaluateDot(elem_point, state);
930 template <
typename T>
934 return evaluateDot(node, state);
937 template <
typename T>
941 return evaluateGradDot(elem, state);
944 template <
typename T>
949 return evaluateGradDot(face, state);
952 template <
typename T>
956 return evaluateGradDot(elem_qp, state);
959 template <
typename T>
963 return evaluateGradDot(elem_side_qp, state);
966 template <
typename T>
970 return evaluateGradDot(elem_point, state);
973 template <
typename T>
977 return evaluateGradDot(node, state);
980 template <
typename T>
985 return hasBlocks(fi.
elem().subdomain_id());
990 template <
typename T>
991 template <FunctorEvaluationKind FET,
typename Space,
typename State>
996 return (*
this)(r, state);
998 return gradient(r, state);
1000 return dot(r, state);
1002 return gradDot(r, state);
1045 template <
typename T>
1096 _owned = std::move(wrapped);
1116 virtual bool wrapsNull()
const override {
return wrapsType<NullFunctor<T>>(); }
1128 template <
typename T2>
1131 return dynamic_cast<const T2 *
>(
_wrapped);
1135 const Elem *
const elem,
1136 const StateArg & state)
const override 1138 return _wrapped->isExtrapolatedBoundaryFace(fi, elem, state);
1144 return _wrapped->hasFaceSide(fi, fi_elem_side);
1157 return _wrapped->operator()(elem, state);
1161 return _wrapped->operator()(face, state);
1165 return _wrapped->operator()(qp, state);
1169 return _wrapped->operator()(qp, state);
1173 return _wrapped->operator()(elem_point, state);
1177 return _wrapped->operator()(node, state);
1182 return _wrapped->gradient(elem, state);
1186 return _wrapped->gradient(face, state);
1190 return _wrapped->gradient(qp, state);
1193 const StateArg & state)
const override 1195 return _wrapped->gradient(qp, state);
1198 const StateArg & state)
const override 1200 return _wrapped->gradient(elem_point, state);
1204 return _wrapped->gradient(node, state);
1224 const StateArg & state)
const override 1226 return _wrapped->dot(elem_point, state);
1235 return _wrapped->gradDot(elem, state);
1239 return _wrapped->gradDot(face, state);
1243 return _wrapped->gradDot(qp, state);
1246 const StateArg & state)
const override 1248 return _wrapped->gradDot(qp, state);
1251 const StateArg & state)
const override 1253 return _wrapped->gradDot(elem_point, state);
1257 return _wrapped->gradDot(node, state);
1266 friend class ::SubProblem;
1272 template <
typename T>
1337 template <
typename T>
1357 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1358 "they've written broken code");
1362 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1363 "they've written broken code");
1367 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1368 "they've written broken code");
1372 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1373 "they've written broken code");
1377 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1378 "they've written broken code");
1382 mooseError(
"We should never get here. If you have, contact a MOOSE developer and tell them " 1383 "they've written broken code");
1387 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
virtual void timestepSetup()=0
virtual ValueType evaluate(const NodeArg &node, const StateArg &state) const override
virtual std::string returnType() const =0
FunctorBase(const FunctorBase< T > &, const Moose::Kokkos::FunctorCopy &)
Special constructor used for Kokkos functor copy during parallel dispatch.
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< libMesh::VectorValue, 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.
static constexpr dof_id_type invalid_id
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
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...
const Elem & get(const ElemType type_in)
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.