28 #include "libmesh/numeric_vector.h" 33 using namespace Moose;
39 const 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.");
53 template <
typename OutputType>
58 params.
set<
bool>(
"fv") =
true;
64 template <
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()),
81 _grad_phi_face_neighbor(
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!");
100 template <
typename OutputType>
108 computeCellLimitedGradients(limiter_type);
111 template <
typename OutputType>
116 computeCellGradients();
119 _linear_system->requestLinearFVLimitedGradients(limiter_type, this->_var_num);
121 _auxiliary_system->requestLinearFVLimitedGradients(limiter_type, this->_var_num);
124 template <
typename OutputType>
133 template <
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]);
157 template <
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;
175 template <
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]);
187 template <
typename OutputType>
194 ? gradSln(elem_info, state)
195 : limitedGradSln(elem_info, state, limiter_type);
198 template <
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;
219 template <
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;
245 template <
typename OutputType>
253 : limitedGradSln(fi, state, limiter_type);
256 template <
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;
285 template <
typename OutputType>
290 cacheBoundaryBCMap();
293 template <
typename OutputType>
298 cacheBoundaryBCMap();
301 template <
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 = this->_mesh.elemInfo(fi->
elemPtr()->id());
324 return getElemValue(elem_info, state);
328 const auto & elem_info = this->_mesh.elemInfo(fi->
neighborPtr()->id());
329 return getElemValue(elem_info, state);
335 template <
typename OutputType>
343 template <
typename OutputType>
347 timeIntegratorError();
358 template <
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]);
388 template <
typename OutputType>
392 const auto iter = _boundary_id_to_bc.find(bd_id);
393 if (iter == _boundary_id_to_bc.end())
399 template <
typename OutputType>
403 return this->_assembly.elem();
406 template <
typename OutputType>
411 if (
auto it = _boundary_id_to_bc.find(bnd_id); it != _boundary_id_to_bc.end())
412 if (dynamic_cast<LinearFVAdvectionDiffusionFunctorDirichletBC *>(it->second))
425 template <
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()]);
435 template <
typename OutputType>
439 _element_data->setDofValue(
value, index);
442 template <
typename OutputType>
446 _element_data->setDofValues(values);
449 template <
typename OutputType>
453 _element_data->clearDofIndices();
456 template <
typename OutputType>
460 return _element_data->dofValues();
463 template <
typename OutputType>
467 return _neighbor_data->dofValues();
470 template <
typename OutputType>
474 return _element_data->dofValuesOld();
477 template <
typename OutputType>
481 return _element_data->dofValuesOlder();
484 template <
typename OutputType>
488 return _element_data->dofValuesPreviousNL();
491 template <
typename OutputType>
495 return _neighbor_data->dofValuesOld();
498 template <
typename OutputType>
502 return _neighbor_data->dofValuesOlder();
505 template <
typename OutputType>
509 return _neighbor_data->dofValuesPreviousNL();
512 template <
typename OutputType>
516 timeIntegratorError();
519 template <
typename OutputType>
523 timeIntegratorError();
526 template <
typename OutputType>
530 timeIntegratorError();
533 template <
typename OutputType>
537 timeIntegratorError();
540 template <
typename OutputType>
544 timeIntegratorError();
547 template <
typename OutputType>
551 timeIntegratorError();
554 template <
typename OutputType>
558 timeIntegratorError();
561 template <
typename OutputType>
565 timeIntegratorError();
568 template <
typename OutputType>
572 timeIntegratorError();
575 template <
typename OutputType>
579 timeIntegratorError();
582 template <
typename OutputType>
586 timeIntegratorError();
589 template <
typename OutputType>
593 timeIntegratorError();
596 template <
typename OutputType>
601 _element_data->computeValues();
604 template <
typename OutputType>
609 _element_data->computeValues();
612 template <
typename OutputType>
617 _neighbor_data->computeValues();
620 template <
typename OutputType>
625 _neighbor_data->computeValues();
628 template <
typename OutputType>
635 template <
typename OutputType>
642 template <
typename OutputType>
649 template <
typename OutputType>
650 const std::vector<dof_id_type> &
653 return _element_data->dofIndices();
656 template <
typename OutputType>
657 const std::vector<dof_id_type> &
660 return _neighbor_data->dofIndices();
663 template <
typename OutputType>
670 template <
typename OutputType>
674 unsigned int state = 0;
675 state =
std::max(state, _element_data->oldestSolutionStateRequested());
676 state =
std::max(state, _neighbor_data->oldestSolutionStateRequested());
680 template <
typename OutputType>
684 _element_data->clearDofIndices();
685 _neighbor_data->clearDofIndices();
688 template <
typename OutputType>
695 template <
typename OutputType>
702 template <
typename OutputType>
709 template <
typename OutputType>
710 const std::vector<dof_id_type> &
716 template <
typename OutputType>
723 template <
typename OutputType>
727 _element_data->insert(vector);
730 template <
typename OutputType>
734 mooseError(
"We don't support value insertion to residuals in MooseLinearVariableFV!");
737 template <
typename OutputType>
741 mooseError(
"We don't support value addition to residuals in MooseLinearVariableFV!");
744 template <
typename OutputType>
748 _element_data->setActiveTags(vtags);
749 _neighbor_data->setActiveTags(vtags);
752 template <
typename OutputType>
759 template <
typename OutputType>
766 template <
typename OutputType>
773 template <
typename OutputType>
780 template <
typename OutputType>
784 return _element_data->vectorTagValue(tag);
787 template <
typename OutputType>
791 return _element_data->vectorTagDofValue(tag);
794 template <
typename OutputType>
798 return _element_data->matrixTagValue(tag);
801 template <
typename OutputType>
805 mooseError(
"We don't currently implement second derivatives for FV");
808 template <
typename OutputType>
812 mooseError(
"We don't currently implement curl for FV");
815 template <
typename OutputType>
819 mooseError(
"We don't currently implement divergence for FV");
822 template <
typename OutputType>
826 mooseError(
"We don't currently implement second derivatives for FV");
829 template <
typename OutputType>
833 mooseError(
"We don't currently implement second derivatives for FV");
836 template <
typename OutputType>
840 mooseError(
"We don't currently implement second derivatives for FV");
843 template <
typename OutputType>
850 template <
typename OutputType>
857 template <
typename OutputType>
864 template <
typename OutputType>
871 template <
typename OutputType>
878 template <
typename OutputType>
885 template <
typename OutputType>
892 template <
typename OutputType>
899 template <
typename OutputType>
906 template <
typename OutputType>
913 template <
typename OutputType>
920 template <
typename OutputType>
927 template <
typename OutputType>
934 template <
typename OutputType>
941 template <
typename OutputType>
948 template <
typename OutputType>
955 template <
typename OutputType>
962 template <
typename OutputType>
969 template <
typename OutputType>
976 template <
typename OutputType>
983 template <
typename OutputType>
990 template <
typename OutputType>
997 template <
typename OutputType>
1004 template <
typename OutputType>
1011 template <
typename OutputType>
1018 template <
typename OutputType>
1025 template <
typename OutputType>
1032 template <
typename OutputType>
1039 template <
typename OutputType>
1043 _element_data->sizeMatrixTagData();
virtual void clearAllDofIndices() override final
typename OutputTools< typename Moose::ADType< T >::type >::VariableSecond ADTemplateVariableSecond
const Elem *const & elem() const
Return the current element.
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDotDuNeighbor() const override
virtual void setActiveTags(const std::set< TagID > &vtags) override
Set the active vector tags.
GradientLimiterType
Cell-gradient limiter variants used for MUSCL-style reconstructions.
typename OutputTools< typename Moose::ADType< T >::type >::VariableCurl ADTemplateVariableCurl
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 computeElemValuesFace() override
Compute values at facial quadrature points.
virtual const DofValues & dofValuesDotDot() const override
Base class for boundary conditions for linear FV systems.
virtual const MooseArray< OutputType > & nodalValueOlderArray() const override
virtual const ADTemplateVariableCurl< OutputType > & adCurlSln() const override
AD curl solution getter.
const std::set< BoundaryID > & boundaryIDs() const
Const getter for every associated boundary ID.
virtual DotType evaluateDot(const ElemArg &elem, const StateArg &) const override final
Evaluate the functor time derivative with a given element.
virtual const FieldVariableValue & sln() const override
virtual bool isDirichletBoundaryFace(const FaceInfo &fi) const
If the variable has a dirichlet boundary condition at face described by fi .
virtual const DofValues & dofValuesDotOld() const override
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 ...
Class for stuff related to variables.
virtual const MooseArray< OutputType > & nodalValueArray() const override
Methods for retrieving values of variables at the nodes in a MooseArray for AuxKernelBase.
LinearSystem *const _linear_system
Owning concrete system pointers. One will be null.
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 Elem *const & currentElem() const override
Current element this variable is evaluated at.
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
virtual const DofValues & dofValuesDotDotNeighbor() const override
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnDot() const override
AD grad of time derivative 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...
typename MooseVariableField< OutputType >::FieldVariablePhiSecond FieldVariablePhiSecond
const FieldVariablePhiDivergence & divPhi() const override final
Divergence of the shape functions.
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 & dofValues() const override
dof values getters
virtual const ADTemplateVariableValue< OutputType > & adSln() const override
AD solution getter.
virtual const FieldVariableGradient & gradSlnOldNeighbor() const override
Real gradSlnComponent(const ElemInfo &elem_info, unsigned int component) const
Get one raw gradient component at a cell center without materializing the full gradient.
const ElemInfo * neighborInfo() const
virtual const DofValues & nodalVectorTagValue(TagID) const override
registerMooseObject("MooseApp", MooseLinearVariableFVReal)
typename OutputTools< typename Moose::ADType< T >::type >::VariableValue ADTemplateVariableValue
virtual const DofValues & dofValuesPreviousNL() const override
virtual const DofValues & nodalMatrixTagValue(TagID tag) const override
virtual const DofValues & dofValuesPreviousNLNeighbor() const override
virtual void setLowerDofValues(const DenseVector< DofValue > &values) override
virtual void getDofIndices(const Elem *elem, std::vector< dof_id_type > &dof_indices) const override
virtual const DofValues & dofValuesDotDotOldNeighbor() const override
const ElemInfo * elemInfo() const
virtual void setNodalValue(const OutputType &value, unsigned int idx=0) override
LinearFVBoundaryCondition * getBoundaryCondition(const BoundaryID bd_id) const
Get the boundary condition object which corresponds to the given boundary ID.
virtual const std::vector< dof_id_type > & dofIndicesNeighbor() const final
Get neighbor DOF indices for currently selected element.
virtual const FieldVariablePhiSecond & secondPhi() const override final
Return the rank-2 tensor of second derivatives of the variable's elemental shape functions.
virtual void initialSetup() override
Gets called at the beginning of the simulation before this object is asked to do its job...
Base class for a system (of equations)
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.
DualNumber< Real, DNDerivativeType, true > ADReal
virtual const DofValues & dofValuesDotDotOld() const override
void initialSetup() override
Gets called at the beginning of the simulation before this object is asked to do its job...
virtual void clearDofIndices() override
Clear out the dof indices.
virtual const std::vector< dof_id_type > & dofIndices() const final
Get local DoF indices.
virtual void computeElemValues() override
Compute values at interior quadrature points.
auto max(const L &left, const R &right)
virtual const ADTemplateVariableCurl< OutputType > & adCurlSlnNeighbor() const override
AD curl neighbor solution getter.
static InputParameters validParams()
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDuNeighbor() const override
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...
virtual const ADTemplateVariableValue< OutputType > & adUDotDot() const override
AD second time derivative getter.
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnNeighbor() const override
AD grad neighbor solution getter.
This data structure is used to store geometric and variable related metadata about each cell face in ...
virtual const ADDofValues & adDofValuesNeighbor() const override
Return the AD neighbor dof values.
virtual const DofValues & dofValuesDotNeighbor() const override
virtual const FieldVariableValue & slnOld() const override
typename MooseVariableField< OutputType >::FieldVariablePhiValue FieldVariablePhiValue
const Elem * neighborPtr() const
void timeIntegratorError() const
Throw an error when somebody requests time-related data from this variable.
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
A structure defining a "face" evaluation calling argument for Moose functors.
void computeCellLimitedGradients(const Moose::FV::GradientLimiterType limiter_type)
Switch to request limited cell gradient computations.
virtual const DofValues & vectorTagDofValue(TagID tag) const override
virtual void setDofValue(const DofValue &, unsigned int) override
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...
const FaceInfo * fi
a face information object which defines our location in space
virtual const FieldVariablePhiValue & phiLower() const override
Return the variable's shape functions on a lower-dimensional element.
SystemBase & _sys
System this variable is part of.
SolutionIterationType iteration_type
The solution iteration type, e.g. time or nonlinear.
boundary_id_type BoundaryID
typename MooseVariableField< OutputType >::DofValues DofValues
virtual const FieldVariableValue & matrixTagValue(TagID tag) const override
typename OutputTools< typename Moose::ADType< T >::type >::VariableGradient ADTemplateVariableGradient
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
virtual const DofValues & dofValuesNeighbor() const override
std::unique_ptr< MooseVariableDataLinearFV< OutputType > > _element_data
Holder for all the data associated with the "main" element.
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnNeighborDot() const override
AD grad of time derivative neighbor solution getter.
virtual const DofValues & dofValuesOlder() const override
A structure that is used to evaluate Moose functors logically at an element/cell center.
AuxiliarySystem *const _auxiliary_system
typename MooseVariableField< OutputType >::FieldVariableGradient FieldVariableGradient
MooseLinearVariableFV(const InputParameters ¶meters)
virtual const dof_id_type & nodalDofIndex() const override final
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDu() const override
virtual const ADTemplateVariableSecond< OutputType > & adSecondSln() const override
AD second solution getter.
const FieldVariablePhiValue & curlPhi() const override final
Curl of the shape functions.
std::string stringify(const T &t)
conversion to string
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 FieldVariableValue & slnNeighbor() const override
virtual const ADDofValues & adDofValuesDot() const override
Return the AD time derivatives at dofs.
virtual const FieldVariableGradient & gradSlnNeighbor() const override
neighbor solution gradients
virtual const FieldVariableGradient & gradSlnOld() const override
const Elem * elemPtr() const
virtual const MooseArray< OutputType > & nodalValueOldArray() const override
const std::vector< std::vector< dof_id_type > > & dofIndices() const
virtual void timestepSetup() override
virtual const DofValues & dofValuesDotOldNeighbor() const override
virtual void computeNodalNeighborValues() override final
Compute nodal values of this variable in the neighbor.
virtual const DofValues & dofValuesOldNeighbor() const override
virtual void add(libMesh::NumericVector< libMesh::Number > &vector) override
Add the currently cached degree of freedom values into the provided vector.
typename MooseVariableField< OutputType >::ADDofValues ADDofValues
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void computeNeighborValuesFace() override
Compute values at facial quadrature points for the neighbor.
virtual const FieldVariableValue & vectorTagValue(TagID tag) const override
tag values getters
Assembly & _assembly
Assembly data.
virtual void sizeMatrixTagData() override
Size data structures related to matrix tagging.
std::unique_ptr< MooseVariableDataLinearFV< OutputType > > _neighbor_data
Holder for all the data associated with the "neighbor" element.
Moose::ADType< OutputType >::type ValueType
virtual void computeNodalValues() override final
Compute nodal values of this variable.
static InputParameters validParams()
virtual const dof_id_type & nodalDofIndexNeighbor() const override final
typename MooseVariableField< OutputType >::FieldVariablePhiDivergence FieldVariablePhiDivergence
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 void computeLowerDValues() override final
compute values at quadrature points on the lower dimensional element
void cacheBoundaryBCMap()
Setup the boundary to Dirichlet BC map.
const Elem *const & neighbor() const
Return the neighbor element.
virtual std::size_t phiLowerSize() const override final
Return the number of shape functions on the lower dimensional element for this variable.
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type and optionally a file path to the top-level block p...
typename MooseVariableField< OutputType >::FieldVariableValue FieldVariableValue
virtual void insert(libMesh::NumericVector< libMesh::Number > &vector) override
Insert the currently cached degree of freedom values into the provided vector.
virtual const ADTemplateVariableValue< OutputType > & adUDotNeighbor() const override
AD neighbor time derivative getter.
State argument for evaluating functors.
virtual const OutputTools< T >::VariableSecond & second()
The second derivative of the variable this object is operating on.
Linear system to be solved.
virtual const ADTemplateVariableValue< OutputType > & adSlnNeighbor() const override
AD neighbor solution getter.
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
virtual const ADTemplateVariableSecond< OutputType > & adSecondSlnNeighbor() const override
AD second neighbor solution getter.
virtual void computeNeighborValues() override
Compute values at quadrature points for the neighbor.
Class used for caching additional information for elements such as the volume and centroid...
virtual const DofValues & dofValuesOlderNeighbor() const override
virtual void timestepSetup() override
void computeCellGradients()
Switch to request cell gradient computations.
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDotDu() const override
virtual const ADDofValues & adDofValues() const override
Return the AD dof values.
virtual unsigned int oldestSolutionStateRequested() const override final
The oldest solution state that is requested for this variable (0 = current, 1 = old, 2 = older, etc).
typename MooseVariableDataBase< Real >::DofValue DofValue
virtual void setDofValues(const DenseVector< DofValue > &values) override
virtual const DofValues & dofValuesOld() const override
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...
virtual const FieldVariableValue & slnOlder() const override
virtual const ADTemplateVariableValue< OutputType > & adUDot() const override
AD time derivative getter.
void computeCellGradients(const Moose::FV::GradientLimiterType limiter_type)
Switch to request cell gradient computations with an optional gradient limiter.
virtual const FieldVariableGradient & gradSln() const override
element gradients
A system that holds auxiliary variables.
virtual const ADTemplateVariableGradient< OutputType > & adGradSln() const override
AD grad solution getter.
Moose::ShapeType< Real >::type OutputShape
virtual const DofValues & dofValuesDot() const override
SubdomainID subdomain_id() const
We return the subdomain ID of the corresponding libmesh element.
unsigned int state
The state.
virtual const FieldVariableValue & slnOldNeighbor() const override
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...
virtual ValueType evaluate(const ElemArg &elem, const StateArg &) const override final
Evaluate the functor with a given element.
virtual const ADTemplateVariableValue< OutputType > & adUDotDotNeighbor() const override
AD neighbor second time derivative getter.