28#include "libmesh/numeric_vector.h"
37template <
typename OutputType>
42 params.
set<
bool>(
"fv") =
true;
48 "Default gradient computation method to register when a consumer requests gradients from "
49 "this variable. This may be a built-in method name like 'green-gauss' or "
50 "'green-gauss-venkatakrishnan', or the name of an object in [FVGradientMethods].");
53 params.
set<
bool>(
"p_refinement") =
false;
59template <
typename OutputType>
62 _needs_cell_gradients(false),
63 _linear_system(dynamic_cast<
LinearSystem *>(&this->_sys)),
65 _gradient_reader(nullptr),
66 _default_gradient_method_name(this->template getParam<GradientMethodName>(
"gradient_method")),
67 _sys_num(this->_sys.number()),
68 _solution(this->_sys.currentSolution()),
71 _phi(this->_assembly.template fePhi<
OutputShape>(this->_fe_type)),
72 _grad_phi(this->_assembly.template feGradPhi<
OutputShape>(this->_fe_type)),
73 _phi_face(this->_assembly.template fePhiFace<
OutputShape>(this->_fe_type)),
74 _grad_phi_face(this->_assembly.template feGradPhiFace<
OutputShape>(this->_fe_type)),
75 _phi_face_neighbor(this->_assembly.template fePhiFaceNeighbor<
OutputShape>(this->_fe_type)),
76 _grad_phi_face_neighbor(
77 this->_assembly.template feGradPhiFaceNeighbor<
OutputShape>(this->_fe_type)),
78 _phi_neighbor(this->_assembly.template fePhiNeighbor<
OutputShape>(this->_fe_type)),
79 _grad_phi_neighbor(this->_assembly.template feGradPhiNeighbor<
OutputShape>(this->_fe_type))
83 "The assigned system is not a linear or an auxiliary system! Linear variables "
84 "can only be assigned to linear or auxiliary systems!");
85 _element_data = std::make_unique<MooseVariableDataLinearFV<OutputType>>(
87 _neighbor_data = std::make_unique<MooseVariableDataLinearFV<OutputType>>(
91 mooseError(
"MooseLinearVariableFV does not support threading at the moment!");
94template <
typename OutputType>
98 const auto & reader = requestCellGradients(_default_gradient_method_name, oldest_state);
100 _gradient_reader = &reader;
104template <
typename OutputType>
108 requestCellGradients();
111template <
typename OutputType>
114 const unsigned int oldest_state)
116 const auto & method = _linear_system ? _linear_system->resolveFVGradientMethod(method_name)
117 : _auxiliary_system->resolveFVGradientMethod(method_name);
119 return requestCellGradients(method, oldest_state);
122template <
typename OutputType>
125 const unsigned int oldest_state)
127 _needs_cell_gradients =
true;
128 _oldest_gradient_state_requested = std::max(_oldest_gradient_state_requested, oldest_state);
131 _linear_system ? _linear_system->registerFVGradient(this->_var_num, method, oldest_state)
132 : _auxiliary_system->registerFVGradient(this->_var_num, method, oldest_state);
134 const auto it = _gradient_readers_by_method.find(&method);
135 if (it != _gradient_readers_by_method.end())
138 auto reader = std::make_unique<LinearFVGradientReader>(std::move(new_reader));
140 auto & reader_ref = *reader;
141 _gradient_readers_by_method.emplace(&method, std::move(reader));
146template <
typename OutputType>
155template <
typename OutputType>
162 "The variable should be defined on the element's subdomain! This typically occurs when the "
163 "user wants to evaluate the elements right next to the boundary of two variables (block "
164 "boundary). The subdomain which is queried: " +
165 Moose::stringify(this->activeSubdomains()) +
" the subdomain of the element " +
172 const auto & global_soln = (state.state == 0)
173 ? *this->_sys.currentSolution()
174 : this->_sys.solutionState(state.state, state.iteration_type);
176 return global_soln(elem_info.dofIndices()[this->_sys_num][this->_var_num]);
179template <
typename OutputType>
183 mooseAssert(_gradient_reader,
"Gradient requested without calling requestCellGradients().");
184 return _gradient_reader->gradient(elem_info, state);
187template <
typename OutputType>
190 const unsigned int component)
const
195template <
typename OutputType>
198 const unsigned int component,
201 mooseAssert(_gradient_reader,
202 "Gradient component requested without calling requestCellGradients().");
203 return _gradient_reader->component(elem_info, component, state);
206template <
typename OutputType>
210 mooseAssert(_gradient_reader,
"Gradient requested without calling requestCellGradients().");
211 return _gradient_reader->gradient(fi, state);
214template <
typename OutputType>
219 cacheBoundaryBCMap();
222template <
typename OutputType>
227 cacheBoundaryBCMap();
230template <
typename OutputType>
236 mooseAssert(fi,
"The face information must be non-null");
238 const auto face_type = fi->
faceType(std::make_pair(this->_var_num, this->_sys_num));
242 else if (
auto * bc_pointer = this->getBoundaryCondition(*fi->
boundaryIDs().begin()))
244 mooseAssert(fi->
boundaryIDs().size() == 1,
"We should only have one boundary on every face.");
245 bc_pointer->setupFaceData(fi, face_type);
246 return bc_pointer->computeBoundaryValue();
252 const auto & elem_info = *(face.
fi->
elemInfo());
253 return getElemValue(elem_info, state);
258 return getElemValue(elem_info, state);
264template <
typename OutputType>
272template <
typename OutputType>
276 timeIntegratorError();
284 timeIntegratorError();
287template <
typename OutputType>
291 _boundary_id_to_bc.clear();
292 std::vector<LinearFVBoundaryCondition *> bcs;
298 auto base_query = this->_subproblem.getMooseApp()
301 .template condition<AttribSystem>(
"LinearFVBoundaryCondition")
302 .template condition<AttribThread>(_tid)
303 .template condition<AttribVar>(_var_num)
304 .template condition<AttribSysNum>(this->_sys.number());
306 for (
const auto bnd_id : this->_mesh.getBoundaryIDs())
308 auto base_query_copy = base_query;
309 base_query_copy.template condition<AttribBoundaries>(std::set<BoundaryID>({bnd_id}))
311 mooseAssert(bcs.size() <= 1,
"cannot have multiple BCs on the same boundary");
313 _boundary_id_to_bc.emplace(bnd_id, bcs[0]);
317template <
typename OutputType>
321 const auto iter = _boundary_id_to_bc.find(bd_id);
322 if (iter == _boundary_id_to_bc.end())
328template <
typename OutputType>
332 return this->_assembly.elem();
335template <
typename OutputType>
340 if (
auto it = _boundary_id_to_bc.find(bnd_id); it != _boundary_id_to_bc.end())
354template <
typename OutputType>
357 std::vector<dof_id_type> & dof_indices)
const
360 const auto & elem_info = this->_mesh.elemInfo(elem->id());
361 dof_indices.push_back(elem_info.dofIndices()[this->_sys_num][this->number()]);
364template <
typename OutputType>
368 _element_data->setDofValue(value, index);
371template <
typename OutputType>
375 _element_data->setDofValues(
values);
378template <
typename OutputType>
382 _element_data->clearDofIndices();
385template <
typename OutputType>
389 return _element_data->dofValues();
392template <
typename OutputType>
396 return _neighbor_data->dofValues();
399template <
typename OutputType>
403 return _element_data->dofValuesOld();
406template <
typename OutputType>
410 return _element_data->dofValuesOlder();
413template <
typename OutputType>
417 return _element_data->dofValuesPreviousNL();
420template <
typename OutputType>
424 return _neighbor_data->dofValuesOld();
427template <
typename OutputType>
431 return _neighbor_data->dofValuesOlder();
434template <
typename OutputType>
438 return _neighbor_data->dofValuesPreviousNL();
441template <
typename OutputType>
445 timeIntegratorError();
448template <
typename OutputType>
452 timeIntegratorError();
455template <
typename OutputType>
459 timeIntegratorError();
462template <
typename OutputType>
466 timeIntegratorError();
469template <
typename OutputType>
473 timeIntegratorError();
476template <
typename OutputType>
480 timeIntegratorError();
483template <
typename OutputType>
487 timeIntegratorError();
490template <
typename OutputType>
494 timeIntegratorError();
497template <
typename OutputType>
501 timeIntegratorError();
504template <
typename OutputType>
508 timeIntegratorError();
511template <
typename OutputType>
515 timeIntegratorError();
518template <
typename OutputType>
522 timeIntegratorError();
525template <
typename OutputType>
529 if (_compute_qp_data)
532 _element_data->computeValues();
536template <
typename OutputType>
540 if (_compute_qp_data)
543 _element_data->computeValues();
547template <
typename OutputType>
551 if (_compute_qp_data)
554 _neighbor_data->computeValues();
558template <
typename OutputType>
562 if (_compute_qp_data)
565 _neighbor_data->computeValues();
569template <
typename OutputType>
576template <
typename OutputType>
583template <
typename OutputType>
590template <
typename OutputType>
591const std::vector<dof_id_type> &
594 return _element_data->dofIndices();
597template <
typename OutputType>
598const std::vector<dof_id_type> &
601 return _neighbor_data->dofIndices();
604template <
typename OutputType>
611template <
typename OutputType>
615 unsigned int state = _oldest_gradient_state_requested;
616 state = std::max(state, _element_data->oldestSolutionStateRequested());
617 state = std::max(state, _neighbor_data->oldestSolutionStateRequested());
621template <
typename OutputType>
625 _element_data->prepareIC();
628template <
typename OutputType>
632 _element_data->clearDofIndices();
633 _neighbor_data->clearDofIndices();
636template <
typename OutputType>
643template <
typename OutputType>
650template <
typename OutputType>
657template <
typename OutputType>
658const std::vector<dof_id_type> &
664template <
typename OutputType>
671template <
typename OutputType>
675 _element_data->insert(vector);
678template <
typename OutputType>
682 mooseError(
"We don't support value insertion to residuals in MooseLinearVariableFV!");
685template <
typename OutputType>
689 mooseError(
"We don't support value addition to residuals in MooseLinearVariableFV!");
692template <
typename OutputType>
696 _element_data->setActiveTags(vtags);
697 _neighbor_data->setActiveTags(vtags);
700template <
typename OutputType>
707template <
typename OutputType>
714template <
typename OutputType>
721template <
typename OutputType>
728template <
typename OutputType>
732 return _element_data->vectorTagValue(tag);
735template <
typename OutputType>
739 return _element_data->vectorTagDofValue(tag);
742template <
typename OutputType>
746 return _element_data->matrixTagValue(tag);
749template <
typename OutputType>
753 mooseError(
"We don't currently implement second derivatives for FV");
756template <
typename OutputType>
760 mooseError(
"We don't currently implement curl for FV");
763template <
typename OutputType>
767 mooseError(
"We don't currently implement divergence for FV");
770template <
typename OutputType>
774 mooseError(
"We don't currently implement second derivatives for FV");
777template <
typename OutputType>
781 mooseError(
"We don't currently implement second derivatives for FV");
784template <
typename OutputType>
788 mooseError(
"We don't currently implement second derivatives for FV");
791template <
typename OutputType>
798template <
typename OutputType>
805template <
typename OutputType>
812template <
typename OutputType>
819template <
typename OutputType>
826template <
typename OutputType>
833template <
typename OutputType>
840template <
typename OutputType>
847template <
typename OutputType>
854template <
typename OutputType>
861template <
typename OutputType>
868template <
typename OutputType>
875template <
typename OutputType>
882template <
typename OutputType>
889template <
typename OutputType>
896template <
typename OutputType>
903template <
typename OutputType>
910template <
typename OutputType>
917template <
typename OutputType>
924template <
typename OutputType>
931template <
typename OutputType>
938template <
typename OutputType>
945template <
typename OutputType>
952template <
typename OutputType>
959template <
typename OutputType>
966template <
typename OutputType>
973template <
typename OutputType>
980template <
typename OutputType>
987template <
typename OutputType>
991 _element_data->sizeMatrixTagData();
DualNumber< Real, DNDerivativeType, true > ADReal
boundary_id_type BoundaryID
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
registerMooseObject("MooseApp", MooseLinearVariableFVReal)
typename OutputTools< typename Moose::ADType< T >::type >::VariableSecond ADTemplateVariableSecond
typename OutputTools< typename Moose::ADType< T >::type >::VariableValue ADTemplateVariableValue
typename OutputTools< typename Moose::ADType< T >::type >::VariableCurl ADTemplateVariableCurl
typename OutputTools< typename Moose::ADType< T >::type >::VariableGradient ADTemplateVariableGradient
std::array< Real, 2 > values
const Elem *const & elem() const
Return the current element.
const Elem *const & neighbor() const
Return the neighbor element.
A system that holds auxiliary variables.
Class used for caching additional information for elements such as the volume and centroid.
SubdomainID subdomain_id() const
We return the subdomain ID of the corresponding libmesh element.
Base class for linear finite-volume cell-gradient methods.
This data structure is used to store geometric and variable related metadata about each cell face in ...
VarFaceNeighbors faceType(const std::pair< unsigned int, unsigned int > &var_sys) const
Returns which side(s) the given variable-system number pair is defined on for this face.
const std::set< BoundaryID > & boundaryIDs() const
Const getter for every associated boundary ID.
const ElemInfo * elemInfo() const
const ElemInfo * neighborInfo() const
Class implementing a Dirichlet boundary condition for linear finite volume variables.
Base class for boundary conditions for linear FV systems.
Read-only view of one variable's cell-centered linear finite-volume gradient values.
Linear system to be solved.
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 ...
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
virtual const DofValues & dofValues() const override
dof values getters
typename MooseVariableField< OutputType >::DofValues DofValues
virtual const FieldVariableGradient & gradSlnOldNeighbor() const override
virtual void setNodalValue(const OutputType &value) override
virtual void getDofIndices(const Elem *elem, std::vector< dof_id_type > &dof_indices) const override
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnDot() const override
AD grad of time derivative solution getter.
Real gradSlnComponent(const ElemInfo &elem_info, unsigned int component) const
Get one default gradient component at a cell center without materializing the full gradient.
virtual void clearAllDofIndices() override final
virtual const dof_id_type & nodalDofIndex() const override final
virtual const FieldVariablePhiSecond & secondPhi() const override final
Return the rank-2 tensor of second derivatives of the variable's elemental shape functions.
virtual const FieldVariableGradient & gradSlnNeighbor() const override
neighbor solution gradients
virtual const Elem *const & currentElem() const override
Current element this variable is evaluated at.
virtual const std::vector< dof_id_type > & dofIndicesNeighbor() const final
Get neighbor DOF indices for currently selected element.
const FieldVariablePhiValue & curlPhi() const override final
Curl of the shape functions.
virtual void add(libMesh::NumericVector< libMesh::Number > &vector) override
Add the currently cached degree of freedom values into the provided vector.
virtual bool isDirichletBoundaryFace(const FaceInfo &fi) const
If the variable has a dirichlet boundary condition at face described by fi .
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnNeighborDot() const override
AD grad of time derivative neighbor solution getter.
virtual const DofValues & dofValuesOlderNeighbor() const override
virtual void initialSetup() override
Gets called at the beginning of the simulation before this object is asked to do its job.
const LinearFVGradientReader & requestCellGradients(unsigned int oldest_state=0)
Register the configured default gradient method with time-state storage.
virtual void insertLower(libMesh::NumericVector< libMesh::Number > &vector) override
Insert the currently cached degree of freedom values for a lower-dimensional element into the provide...
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnNeighbor() const override
AD grad neighbor solution getter.
virtual const ADTemplateVariableCurl< OutputType > & adCurlSln() const override
AD curl solution getter.
virtual const std::vector< dof_id_type > & dofIndicesLower() const override final
Get dof indices for the current lower dimensional element (this is meaningful when performing mortar ...
virtual const DofValues & dofValuesDotNeighbor() const override
virtual const DofValues & dofValuesNeighbor() const override
virtual const DofValues & vectorTagDofValue(TagID tag) const override
virtual void computeNeighborValues() override
Compute values at quadrature points for the neighbor.
virtual const FieldVariableValue & matrixTagValue(TagID tag) const override
typename MooseVariableField< OutputType >::DofValue DofValue
void computeCellGradients()
Backward-compatible interface for requesting cell gradients.
virtual const FieldVariablePhiSecond & secondPhiFaceNeighbor() const override final
Return the rank-2 tensor of second derivatives of the variable's shape functions on a neighboring ele...
virtual const DofValues & dofValuesDot() const override
virtual const ADTemplateVariableValue< OutputType > & adUDot() const override
AD time derivative getter.
virtual const FieldVariableValue & slnNeighbor() const override
Real getElemValue(const ElemInfo &elem_info, const StateArg &state) const
Get the solution value for the provided element and seed the derivative for the corresponding dof ind...
virtual const ADTemplateVariableValue< OutputType > & adSlnNeighbor() const override
AD neighbor solution getter.
virtual const FieldVariablePhiSecond & secondPhiFace() const override final
Return the rank-2 tensor of second derivatives of the variable's shape functions on an element face.
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDu() const override
virtual void prepareIC() override
Prepare the initial condition.
virtual const DofValues & dofValuesPreviousNLNeighbor() const override
virtual const ADTemplateVariableValue< OutputType > & adUDotDotNeighbor() const override
AD neighbor second time derivative getter.
virtual DotType evaluateDot(const ElemArg &elem, const StateArg &) const override final
Evaluate the functor time derivative with a given element.
LinearSystem *const _linear_system
Owning concrete system pointers. One will be null.
virtual const FieldVariableValue & slnOldNeighbor() const override
virtual const DofValues & dofValuesDotDotOldNeighbor() const override
virtual const ADTemplateVariableCurl< OutputType > & adCurlSlnNeighbor() const override
AD curl neighbor solution getter.
typename MooseVariableField< OutputType >::FieldVariablePhiDivergence FieldVariablePhiDivergence
virtual const FieldVariableValue & slnOlder() const override
virtual void computeNodalNeighborValues() override final
Compute nodal values of this variable in the neighbor.
typename MooseVariableField< OutputType >::FieldVariableValue FieldVariableValue
virtual const DofValues & dofValuesDotOld() const override
virtual void computeNeighborValuesFace() override
Compute values at facial quadrature points for the neighbor.
virtual const ADTemplateVariableSecond< OutputType > & adSecondSln() const override
AD second solution getter.
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDuNeighbor() const override
virtual void sizeMatrixTagData() override
Size data structures related to matrix tagging.
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDotDuNeighbor() const override
virtual const DofValues & dofValuesPreviousNL() const override
virtual const std::vector< dof_id_type > & dofIndices() const final
Get local DoF indices.
virtual void insert(libMesh::NumericVector< libMesh::Number > &vector) override
Insert the currently cached degree of freedom values into the provided vector.
virtual void computeElemValues() override
Compute values at interior quadrature points.
virtual void setLowerDofValues(const DenseVector< DofValue > &values) override
Set local DOF values for a lower dimensional element and evaluate the values on quadrature points.
std::unique_ptr< MooseVariableDataLinearFV< OutputType > > _element_data
Holder for all the data associated with the "main" element.
virtual void clearDofIndices() override
Clear out the dof indices.
typename MooseVariableField< OutputType >::FieldVariableGradient FieldVariableGradient
virtual const FieldVariablePhiSecond & secondPhiNeighbor() const override final
Return the rank-2 tensor of second derivatives of the variable's shape functions on a neighboring ele...
typename MooseVariableField< OutputType >::ADDofValues ADDofValues
const FieldVariablePhiDivergence & divPhi() const override final
Divergence of the shape functions.
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDotDu() const override
virtual const ADTemplateVariableGradient< OutputType > & adGradSln() const override
AD grad solution getter.
virtual const DofValues & dofValuesDotOldNeighbor() const override
MooseLinearVariableFV(const InputParameters ¶meters)
virtual const MooseArray< OutputType > & nodalValueOlderArray() const override
virtual const ADTemplateVariableValue< OutputType > & adUDotNeighbor() const override
AD neighbor time derivative getter.
virtual void computeNodalValues() override final
Compute nodal values of this variable.
virtual const FieldVariableGradient & gradSlnOld() const override
LinearFVBoundaryCondition * getBoundaryCondition(const BoundaryID bd_id) const
Get the boundary condition object which corresponds to the given boundary ID.
virtual const FieldVariableValue & sln() const override
virtual const dof_id_type & nodalDofIndexNeighbor() const override final
void cacheBoundaryBCMap()
Setup the boundary to Dirichlet BC map.
typename MooseVariableField< OutputType >::FieldVariablePhiValue FieldVariablePhiValue
virtual const DofValues & dofValuesOld() const override
virtual void setActiveTags(const std::set< TagID > &vtags) override
Set the active vector tags.
virtual bool isExtrapolatedBoundaryFace(const FaceInfo &fi, const Elem *elem, const Moose::StateArg &state) const override
Returns whether this (sided) face is an extrapolated boundary face for this functor.
virtual void setDofValue(const DofValue &, unsigned int) override
Degree of freedom value setters.
virtual const DofValues & dofValuesDotDotOld() const override
virtual const DofValues & nodalVectorTagValue(TagID) const override
virtual const FieldVariableGradient & gradSln() const override
element gradients
virtual const ADDofValues & adDofValuesNeighbor() const override
Return the AD neighbor dof values.
virtual void computeLowerDValues() override final
compute values at quadrature points on the lower dimensional element
virtual const ADTemplateVariableSecond< OutputType > & adSecondSlnNeighbor() const override
AD second neighbor solution getter.
virtual const DofValues & dofValuesDotDot() const override
virtual void setDofValues(const DenseVector< DofValue > &values) override
Set local DOF values and evaluate the values on quadrature points.
virtual const ADTemplateVariableValue< OutputType > & adSln() const override
AD solution getter.
virtual const ADDofValues & adDofValues() const override
Return the AD dof values.
virtual void timestepSetup() override
Gets called at the beginning of the timestep before this object is asked to do its job.
AuxiliarySystem *const _auxiliary_system
virtual const DofValues & dofValuesDotDotNeighbor() const override
virtual const DofValues & nodalMatrixTagValue(TagID tag) const override
virtual std::size_t phiLowerSize() const override final
Return the number of shape functions on the lower dimensional element for this variable.
virtual const FieldVariablePhiValue & phiLower() const override
Return the variable's shape functions on a lower-dimensional element.
virtual const FieldVariableValue & slnOld() const override
typename MooseVariableField< OutputType >::OutputShape OutputShape
virtual const DofValues & dofValuesOlder() const override
virtual void computeElemValuesFace() override
Compute values at facial quadrature points.
std::unique_ptr< MooseVariableDataLinearFV< OutputType > > _neighbor_data
Holder for all the data associated with the "neighbor" element.
virtual const MooseArray< OutputType > & nodalValueArray() const override
Methods for retrieving values of variables at the nodes in a MooseArray for AuxKernelBase.
static InputParameters validParams()
Input parameters for a linear finite-volume variable.
virtual const ADDofValues & adDofValuesDot() const override
Return the AD time derivatives at dofs.
virtual const ADTemplateVariableValue< OutputType > & adUDotDot() const override
AD second time derivative getter.
virtual const MooseArray< OutputType > & nodalValueOldArray() const override
virtual ValueType evaluate(const ElemArg &elem, const StateArg &) const override final
Evaluate the functor with a given element.
typename MooseVariableField< OutputType >::FieldVariablePhiSecond FieldVariablePhiSecond
virtual const DofValues & dofValuesOldNeighbor() const override
virtual const FieldVariableValue & vectorTagValue(TagID tag) const override
tag values getters
virtual unsigned int oldestSolutionStateRequested() const override final
The oldest solution state that is requested for this variable (0 = current, 1 = old,...
Assembly & _assembly
Assembly data.
SystemBase & _sys
System this variable is part of.
Class for stuff related to variables.
virtual void timestepSetup() override
Gets called at the beginning of the timestep before this object is asked to do its job.
static InputParameters validParams()
virtual const OutputTools< T >::VariableSecond & second()
The second derivative of the variable this object is operating on.
Moose::ADType< OutputType >::type ValueType
virtual void initialSetup()
Gets called at the beginning of the simulation before this object is asked to do its job.
void interpolate(InterpMethod m, T &result, const T2 &value1, const T3 &value2, const FaceInfo &fi, const bool one_is_elem)
Provides interpolation of face values for non-advection-specific purposes (although it can/will still...
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
std::string stringify(const T &t)
conversion to string
A structure that is used to evaluate Moose functors logically at an element/cell center.
A structure defining a "face" evaluation calling argument for Moose functors.
const FaceInfo * fi
a face information object which defines our location in space
State argument for evaluating functors.