28#include "libmesh/numeric_vector.h"
39const std::vector<std::unique_ptr<libMesh::NumericVector<libMesh::Number>>> &
42 if (
auto *
const linear_system =
dynamic_cast<LinearSystem *
>(&sys))
43 return linear_system->linearFVGradientContainer();
45 if (
auto *
const auxiliary_system =
dynamic_cast<AuxiliarySystem *
>(&sys))
46 return auxiliary_system->linearFVGradientContainer();
48 mooseError(
"The assigned system is not a linear or an auxiliary system. Linear variables can "
49 "only be assigned to linear or auxiliary systems.");
53template <
typename OutputType>
58 params.
set<
bool>(
"fv") =
true;
64template <
typename OutputType>
67 _needs_cell_gradients(false),
68 _linear_system(dynamic_cast<
LinearSystem *>(&this->_sys)),
70 _grad_container(linearFVGradientContainer(this->_sys)),
71 _sys_num(this->_sys.number()),
72 _solution(this->_sys.currentSolution()),
75 _phi(this->_assembly.template fePhi<
OutputShape>(FEType(CONSTANT, MONOMIAL))),
76 _grad_phi(this->_assembly.template feGradPhi<
OutputShape>(FEType(CONSTANT, MONOMIAL))),
77 _phi_face(this->_assembly.template fePhiFace<
OutputShape>(FEType(CONSTANT, MONOMIAL))),
78 _grad_phi_face(this->_assembly.template feGradPhiFace<
OutputShape>(FEType(CONSTANT, MONOMIAL))),
80 this->_assembly.template fePhiFaceNeighbor<
OutputShape>(FEType(CONSTANT, MONOMIAL))),
81 _grad_phi_face_neighbor(
82 this->_assembly.template feGradPhiFaceNeighbor<
OutputShape>(FEType(CONSTANT, MONOMIAL))),
83 _phi_neighbor(this->_assembly.template fePhiNeighbor<
OutputShape>(FEType(CONSTANT, MONOMIAL))),
85 this->_assembly.template feGradPhiNeighbor<
OutputShape>(FEType(CONSTANT, MONOMIAL)))
87 if (!_linear_system && !_auxiliary_system)
88 this->paramError(
"solver_sys",
89 "The assigned system is not a linear or an auxiliary system! Linear variables "
90 "can only be assigned to linear or auxiliary systems!");
91 _element_data = std::make_unique<MooseVariableDataLinearFV<OutputType>>(
93 _neighbor_data = std::make_unique<MooseVariableDataLinearFV<OutputType>>(
97 mooseError(
"MooseLinearVariableFV does not support threading at the moment!");
100template <
typename OutputType>
108 computeCellLimitedGradients(limiter_type);
111template <
typename OutputType>
116 computeCellGradients();
119 _linear_system->requestLinearFVLimitedGradients(limiter_type, this->_var_num);
121 _auxiliary_system->requestLinearFVLimitedGradients(limiter_type, this->_var_num);
124template <
typename OutputType>
133template <
typename OutputType>
140 "The variable should be defined on the element's subdomain! This typically occurs when the "
141 "user wants to evaluate the elements right next to the boundary of two variables (block "
142 "boundary). The subdomain which is queried: " +
143 Moose::stringify(this->activeSubdomains()) +
" the subdomain of the element " +
150 const auto & global_soln = (state.
state == 0)
151 ? *this->_sys.currentSolution()
154 return global_soln(elem_info.
dofIndices()[this->_sys_num][this->_var_num]);
157template <
typename OutputType>
161 if (state.
state != 0)
162 gradientStateError(state);
164 if (_needs_cell_gradients)
166 _cell_gradient.zero();
167 for (
const auto i : make_range(this->_mesh.dimension()))
169 (*_grad_container[i])(elem_info.
dofIndices()[this->_sys_num][this->_var_num]);
172 return _cell_gradient;
175template <
typename OutputType>
178 const unsigned int component)
const
180 mooseAssert(_needs_cell_gradients,
181 "Gradient component requested without calling computeCellGradients().");
182 mooseAssert(component < _grad_container.size(),
"Gradient component index out of range.");
184 return (*_grad_container[component])(elem_info.
dofIndices()[this->_sys_num][this->_var_num]);
187template <
typename OutputType>
194 ? gradSln(elem_info, state)
195 : limitedGradSln(elem_info, state, limiter_type);
198template <
typename OutputType>
205 if (state.
state != 0)
206 gradientStateError(state);
208 _cell_gradient.zero();
209 const auto & limited_grad_container =
210 _linear_system ? _linear_system->linearFVLimitedGradientContainer(limiter_type)
211 : _auxiliary_system->linearFVLimitedGradientContainer(limiter_type);
212 for (
const auto i : make_range(this->_mesh.dimension()))
214 (*limited_grad_container[i])(elem_info.dofIndices()[this->_sys_num][this->_var_num]);
216 return _cell_gradient;
219template <
typename OutputType>
223 const auto face_type = fi.
faceType(std::make_pair(this->_var_num, this->_sys_num));
225 "Gradient requested on a face where the variable is defined on neither side.");
232 const auto elem_one_grad = gradSln(*elem_one, state);
237 mooseAssert(elem_two,
"Face type indicates BOTH but neighbor information is missing.");
238 const auto elem_two_grad = gradSln(*elem_two, state);
242 return elem_one_grad;
245template <
typename OutputType>
253 : limitedGradSln(fi, state, limiter_type);
256template <
typename OutputType>
263 const auto face_type = fi.
faceType(std::make_pair(this->_var_num, this->_sys_num));
265 "Limited gradient requested on a face where the variable is defined on neither "
273 const auto elem_one_grad = limitedGradSln(*elem_one, state, limiter_type);
277 mooseAssert(elem_two,
"Face type indicates BOTH but neighbor information is missing.");
278 const auto elem_two_grad = limitedGradSln(*elem_two, state, limiter_type);
282 return elem_one_grad;
285template <
typename OutputType>
290 cacheBoundaryBCMap();
293template <
typename OutputType>
298 cacheBoundaryBCMap();
301template <
typename OutputType>
307 mooseAssert(fi,
"The face information must be non-null");
309 const auto face_type = fi->
faceType(std::make_pair(this->_var_num, this->_sys_num));
313 else if (
auto * bc_pointer = this->getBoundaryCondition(*fi->
boundaryIDs().begin()))
315 mooseAssert(fi->
boundaryIDs().size() == 1,
"We should only have one boundary on every face.");
316 bc_pointer->setupFaceData(fi, face_type);
317 return bc_pointer->computeBoundaryValue();
323 const auto & elem_info = *(face.
fi->
elemInfo());
324 return getElemValue(elem_info, state);
329 return getElemValue(elem_info, state);
335template <
typename OutputType>
343template <
typename OutputType>
347 timeIntegratorError();
355 timeIntegratorError();
358template <
typename OutputType>
362 _boundary_id_to_bc.clear();
363 std::vector<LinearFVBoundaryCondition *> bcs;
369 auto base_query = this->_subproblem.getMooseApp()
372 .template condition<AttribSystem>(
"LinearFVBoundaryCondition")
373 .template condition<AttribThread>(_tid)
374 .template condition<AttribVar>(_var_num)
375 .template condition<AttribSysNum>(this->_sys.number());
377 for (
const auto bnd_id : this->_mesh.getBoundaryIDs())
379 auto base_query_copy = base_query;
380 base_query_copy.template condition<AttribBoundaries>(std::set<BoundaryID>({bnd_id}))
382 mooseAssert(bcs.size() <= 1,
"cannot have multiple BCs on the same boundary");
384 _boundary_id_to_bc.emplace(bnd_id, bcs[0]);
388template <
typename OutputType>
392 const auto iter = _boundary_id_to_bc.find(bd_id);
393 if (iter == _boundary_id_to_bc.end())
399template <
typename OutputType>
403 return this->_assembly.elem();
406template <
typename OutputType>
411 if (
auto it = _boundary_id_to_bc.find(bnd_id); it != _boundary_id_to_bc.end())
425template <
typename OutputType>
428 std::vector<dof_id_type> & dof_indices)
const
431 const auto & elem_info = this->_mesh.elemInfo(elem->id());
432 dof_indices.push_back(elem_info.
dofIndices()[this->_sys_num][this->number()]);
435template <
typename OutputType>
439 _element_data->setDofValue(value, index);
442template <
typename OutputType>
449template <
typename OutputType>
453 _element_data->clearDofIndices();
456template <
typename OutputType>
460 return _element_data->dofValues();
463template <
typename OutputType>
467 return _neighbor_data->dofValues();
470template <
typename OutputType>
474 return _element_data->dofValuesOld();
477template <
typename OutputType>
481 return _element_data->dofValuesOlder();
484template <
typename OutputType>
488 return _element_data->dofValuesPreviousNL();
491template <
typename OutputType>
495 return _neighbor_data->dofValuesOld();
498template <
typename OutputType>
502 return _neighbor_data->dofValuesOlder();
505template <
typename OutputType>
509 return _neighbor_data->dofValuesPreviousNL();
512template <
typename OutputType>
516 timeIntegratorError();
519template <
typename OutputType>
523 timeIntegratorError();
526template <
typename OutputType>
530 timeIntegratorError();
533template <
typename OutputType>
537 timeIntegratorError();
540template <
typename OutputType>
544 timeIntegratorError();
547template <
typename OutputType>
551 timeIntegratorError();
554template <
typename OutputType>
558 timeIntegratorError();
561template <
typename OutputType>
565 timeIntegratorError();
568template <
typename OutputType>
572 timeIntegratorError();
575template <
typename OutputType>
579 timeIntegratorError();
582template <
typename OutputType>
586 timeIntegratorError();
589template <
typename OutputType>
593 timeIntegratorError();
596template <
typename OutputType>
600 if (_compute_qp_data)
603 _element_data->computeValues();
607template <
typename OutputType>
611 if (_compute_qp_data)
614 _element_data->computeValues();
618template <
typename OutputType>
622 if (_compute_qp_data)
625 _neighbor_data->computeValues();
629template <
typename OutputType>
633 if (_compute_qp_data)
636 _neighbor_data->computeValues();
640template <
typename OutputType>
647template <
typename OutputType>
654template <
typename OutputType>
661template <
typename OutputType>
662const std::vector<dof_id_type> &
665 return _element_data->dofIndices();
668template <
typename OutputType>
669const std::vector<dof_id_type> &
672 return _neighbor_data->dofIndices();
675template <
typename OutputType>
682template <
typename OutputType>
686 unsigned int state = 0;
687 state = std::max(state, _element_data->oldestSolutionStateRequested());
688 state = std::max(state, _neighbor_data->oldestSolutionStateRequested());
692template <
typename OutputType>
696 _element_data->prepareIC();
699template <
typename OutputType>
703 _element_data->clearDofIndices();
704 _neighbor_data->clearDofIndices();
707template <
typename OutputType>
714template <
typename OutputType>
721template <
typename OutputType>
728template <
typename OutputType>
729const std::vector<dof_id_type> &
735template <
typename OutputType>
742template <
typename OutputType>
746 _element_data->insert(vector);
749template <
typename OutputType>
753 mooseError(
"We don't support value insertion to residuals in MooseLinearVariableFV!");
756template <
typename OutputType>
760 mooseError(
"We don't support value addition to residuals in MooseLinearVariableFV!");
763template <
typename OutputType>
767 _element_data->setActiveTags(vtags);
768 _neighbor_data->setActiveTags(vtags);
771template <
typename OutputType>
778template <
typename OutputType>
785template <
typename OutputType>
792template <
typename OutputType>
799template <
typename OutputType>
803 return _element_data->vectorTagValue(tag);
806template <
typename OutputType>
810 return _element_data->vectorTagDofValue(tag);
813template <
typename OutputType>
817 return _element_data->matrixTagValue(tag);
820template <
typename OutputType>
824 mooseError(
"We don't currently implement second derivatives for FV");
827template <
typename OutputType>
831 mooseError(
"We don't currently implement curl for FV");
834template <
typename OutputType>
838 mooseError(
"We don't currently implement divergence for FV");
841template <
typename OutputType>
845 mooseError(
"We don't currently implement second derivatives for FV");
848template <
typename OutputType>
852 mooseError(
"We don't currently implement second derivatives for FV");
855template <
typename OutputType>
859 mooseError(
"We don't currently implement second derivatives for FV");
862template <
typename OutputType>
869template <
typename OutputType>
876template <
typename OutputType>
883template <
typename OutputType>
890template <
typename OutputType>
897template <
typename OutputType>
904template <
typename OutputType>
911template <
typename OutputType>
918template <
typename OutputType>
925template <
typename OutputType>
932template <
typename OutputType>
939template <
typename OutputType>
946template <
typename OutputType>
953template <
typename OutputType>
960template <
typename OutputType>
967template <
typename OutputType>
974template <
typename OutputType>
981template <
typename OutputType>
988template <
typename OutputType>
995template <
typename OutputType>
1002template <
typename OutputType>
1009template <
typename OutputType>
1016template <
typename OutputType>
1023template <
typename OutputType>
1030template <
typename OutputType>
1037template <
typename OutputType>
1044template <
typename OutputType>
1051template <
typename OutputType>
1058template <
typename OutputType>
1062 _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
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.
const std::vector< std::vector< dof_id_type > > & dofIndices() const
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.
Linear system to be solved.
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 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 raw 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.
void computeCellGradients(const Moose::FV::GradientLimiterType limiter_type)
Switch to request cell gradient computations with an optional gradient limiter.
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.
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 void setNodalValue(const OutputType &value, unsigned int idx=0) override
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< RealEigenVector >::DofValue DofValue
void computeCellGradients()
Switch to request cell gradient computations.
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.
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.
void computeCellLimitedGradients(const Moose::FV::GradientLimiterType limiter_type)
Switch to request limited cell gradient computations.
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.
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)
VectorValue< Real > limitedGradSln(const ElemInfo &elem_info, const StateArg &state, const Moose::FV::GradientLimiterType limiter_type) const
Get the limited gradient at a cell center.
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.
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.
virtual const MooseArray< OutputType > & nodalValueArray() const override
Methods for retrieving values of variables at the nodes in a MooseArray for AuxKernelBase.
static InputParameters validParams()
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,...
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.
Base class for a system (of equations)
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...
GradientLimiterType
Cell-gradient limiter variants used for MUSCL-style reconstructions.
@ None
No gradient limiting.
libMesh::CompareTypes< T, T2 >::supertype linearInterpolation(const T &value1, const T2 &value2, const FaceInfo &fi, const bool one_is_elem, const InterpMethod interp_method=InterpMethod::Average)
A simple linear interpolation of values between cell centers to a cell face.
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.
SolutionIterationType iteration_type
The solution iteration type, e.g. time or nonlinear.
unsigned int state
The state.