https://mooseframework.inl.gov
Loading...
Searching...
No Matches
SpatialUserObjectFunctor.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include "MooseFunctor.h"
13#include "InputParameters.h"
14#include "BlockRestrictable.h"
15
19template <typename UserObjectType>
20class SpatialUserObjectFunctor : public UserObjectType, public Moose::FunctorBase<Real>
21{
22public:
24
26 virtual bool hasBlocks(SubdomainID sub) const override;
27
28protected:
36
37 virtual Real evaluate(const ElemArg & elem, const Moose::StateArg & state) const override;
38 virtual Real evaluate(const FaceArg & face, const Moose::StateArg & state) const override final;
39 virtual Real evaluate(const ElemQpArg & qp, const Moose::StateArg & state) const override;
40 virtual Real evaluate(const ElemSideQpArg & elem_side_qp,
41 const Moose::StateArg & state) const override final;
42 virtual Real evaluate(const ElemPointArg & elem_point,
43 const Moose::StateArg & state) const override final;
44 virtual Real evaluate(const NodeArg & node, const Moose::StateArg & state) const override final;
45 virtual Real evaluate(const PointArg & point, const Moose::StateArg & state) const override final;
46
47 virtual bool supportsFaceArg() const override final { return true; }
48 virtual bool supportsElemSideQpArg() const override final { return true; }
49
50private:
51 /*
52 * Helper template implementing functor evaluations
53 */
54 template <typename SpatialArg>
55 Real evaluateTemplate(const SpatialArg & position, const Moose::StateArg & state) const;
56};
57
58template <typename UserObjectType>
61{
62 auto params = UserObjectType::validParams();
63 // Spatial UOs are used in the transfers
64 ExecFlagEnum & exec_enum = params.template set<ExecFlagEnum>("execute_on", true);
66 return params;
67}
68
69template <typename UserObjectType>
71 : UserObjectType(params), Moose::FunctorBase<Real>(this->name())
72{
73}
74
75template <typename UserObjectType>
76template <typename SpatialArg>
77Real
79 const SpatialArg & position, const Moose::StateArg & libmesh_dbg_var(state)) const
80{
81 mooseAssert(state.state == 0, "We do not currently support evaluating at old states");
82 return this->spatialValue(position.getPoint());
83}
84
85template <typename UserObjectType>
86Real
88 const Moose::StateArg & state) const
89{
90 return evaluateTemplate(elem, state);
91}
92
93template <typename UserObjectType>
94Real
96 const Moose::StateArg & state) const
97{
98 return evaluateTemplate(face, state);
99}
100
101template <typename UserObjectType>
102Real
104 const Moose::StateArg & state) const
105{
106 return evaluateTemplate(qp, state);
107}
108
109template <typename UserObjectType>
110Real
112 const Moose::StateArg & state) const
113{
114 return evaluateTemplate(elem_side_qp, state);
115}
116
117template <typename UserObjectType>
118Real
120 const Moose::StateArg & state) const
121{
122 return evaluateTemplate(elem_point, state);
123}
124
125template <typename UserObjectType>
126Real
128 const Moose::StateArg & state) const
129{
130 return evaluateTemplate(node, state);
131}
132
133template <typename UserObjectType>
134Real
136 const Moose::StateArg & state) const
137{
138 return evaluateTemplate(point, state);
139}
140
141template <typename UserObjectType>
142bool
144{
145 if constexpr (std::is_base_of<BlockRestrictable, UserObjectType>::value)
146 return UserObjectType::hasBlocks(sub_id);
147 else
149}
subdomain_id_type SubdomainID
const ExecFlagType EXEC_TRANSFER
Definition Moose.C:58
A MultiMooseEnum object to hold "execute_on" flags.
void addAvailableFlags(const ExecFlagType &flag, Args... flags)
Add additional execute_on flags to the list of possible flags.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Base class template for functor objects.
virtual bool hasBlocks(SubdomainID) const
Returns whether the functor is defined on this block.
Base class for creating a user object with the SpatialUserObject and Moose::Functor APIs.
virtual Real evaluate(const ElemQpArg &qp, const Moose::StateArg &state) const override
virtual bool hasBlocks(SubdomainID sub) const override
Returns whether the functor is defined on this block.
SpatialUserObjectFunctor(const InputParameters &params)
static InputParameters validParams()
virtual Real evaluate(const ElemArg &elem, const Moose::StateArg &state) const override
Evaluate the functor with a given element.
virtual Real evaluate(const FaceArg &face, const Moose::StateArg &state) const override final
virtual bool supportsElemSideQpArg() const override final
Whether this functor supports evaluation with ElemSideQpArg.
virtual Real evaluate(const PointArg &point, const Moose::StateArg &state) const override final
Evaluate the functor at a physical point without any mesh information.
virtual Real evaluate(const NodeArg &node, const Moose::StateArg &state) const override final
virtual bool supportsFaceArg() const override final
Whether this functor supports evaluation with FaceArg.
virtual Real evaluate(const ElemPointArg &elem_point, const Moose::StateArg &state) const override final
Evaluate the functor with a given element and point.
virtual Real evaluate(const ElemSideQpArg &elem_side_qp, const Moose::StateArg &state) const override final
Real evaluateTemplate(const SpatialArg &position, const Moose::StateArg &state) const
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
A structure that is used to evaluate Moose functors logically at an element/cell center.
A structure that is used to evaluate Moose functors at an arbitrary physical point contained within a...
Argument for requesting functor evaluation at a quadrature point location in an element.
Argument for requesting functor evaluation at quadrature point locations on an element side.
A structure defining a "face" evaluation calling argument for Moose functors.
A structure that is used to evaluate Moose functors at an arbitrary physical point,...
State argument for evaluating functors.