https://mooseframework.inl.gov
MooseVariableField.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 "MooseTypes.h"
13 #include "MooseVariableFieldBase.h"
14 #include "SubProblem.h"
15 #include "MooseMesh.h"
16 #include "MooseVariableData.h"
17 #include "MooseFunctor.h"
18 #include "MeshChangedInterface.h"
19 
20 #include "libmesh/numeric_vector.h"
21 #include "libmesh/dof_map.h"
22 #include "libmesh/elem.h"
23 #include "libmesh/quadrature.h"
24 #include "libmesh/dense_vector.h"
25 #include "libmesh/dense_vector.h"
26 
39 template <typename OutputType>
41  public Moose::FunctorBase<typename Moose::ADType<OutputType>::type>,
43 {
44 public:
45  // type for gradient, second and divergence of template class OutputType
49 
50  // shortcut for types storing values on quadrature points
56 
57  // shape function type for the template class OutputType
59 
60  // type for gradient, second and divergence of shape functions of template class OutputType
64 
65  // shortcut for types storing shape function values on quadrature points
71 
72  // shortcut for types storing test function values on quadrature points
73  // Note: here we assume the types are the same as of shape functions.
79 
80  // DoF value type for the template class OutputType
85 
87 
88  virtual Moose::VarFieldType fieldType() const override;
89  virtual bool isArray() const override;
90  virtual bool isVector() const override;
91 
93 
94  virtual void setNodalValue(const OutputType & value, unsigned int idx = 0) = 0;
95 
97 
100  virtual void setDofValue(const DofValue & value, unsigned int index) = 0;
102 
106  virtual const ADTemplateVariableValue<OutputType> & adSln() const = 0;
107 
111  virtual const ADTemplateVariableValue<OutputType> & adSlnNeighbor() const = 0;
112 
116  virtual const ADTemplateVariableGradient<OutputType> & adGradSln() const = 0;
117 
121  virtual const ADTemplateVariableGradient<OutputType> & adGradSlnDot() const = 0;
122 
126  virtual const ADTemplateVariableCurl<OutputType> & adCurlSln() const = 0;
127 
131  virtual const ADTemplateVariableGradient<OutputType> & adGradSlnNeighbor() const = 0;
132 
137 
141  virtual const ADTemplateVariableCurl<OutputType> & adCurlSlnNeighbor() const = 0;
142 
146  virtual const ADTemplateVariableSecond<OutputType> & adSecondSln() const = 0;
147 
151  virtual const ADTemplateVariableSecond<OutputType> & adSecondSlnNeighbor() const = 0;
152 
156  virtual const ADTemplateVariableValue<OutputType> & adUDot() const = 0;
157 
161  virtual const ADTemplateVariableValue<OutputType> & adUDotDot() const = 0;
162 
166  virtual const ADTemplateVariableValue<OutputType> & adUDotNeighbor() const = 0;
167 
171  virtual const ADTemplateVariableValue<OutputType> & adUDotDotNeighbor() const = 0;
172 
176  virtual const ADDofValues & adDofValues() const = 0;
177 
181  virtual const ADDofValues & adDofValuesNeighbor() const = 0;
182 
186  virtual const ADDofValues & adDofValuesDot() const = 0;
187 
189 
192  virtual const MooseArray<OutputType> & nodalValueArray() const = 0;
193  virtual const MooseArray<OutputType> & nodalValueOldArray() const = 0;
194  virtual const MooseArray<OutputType> & nodalValueOlderArray() const = 0;
196 
200  virtual const FieldVariableValue & sln() const = 0;
201 
205  virtual const FieldVariableValue & slnOld() const = 0;
206 
210  virtual const FieldVariableValue & slnNeighbor() const = 0;
211 
215  virtual const FieldVariableValue & slnOldNeighbor() const = 0;
216 
220  virtual const FieldVariableValue & slnOlder() const = 0;
221 
223  virtual const FieldVariableGradient & gradSln() const = 0;
224  virtual const FieldVariableGradient & gradSlnOld() const = 0;
225 
227  virtual const FieldVariableGradient & gradSlnNeighbor() const = 0;
228  virtual const FieldVariableGradient & gradSlnOldNeighbor() const = 0;
229 
233  virtual bool computingSecond() const = 0;
234 
238  virtual bool computingCurl() const = 0;
239 
243  virtual bool computingDiv() const = 0;
244 
248  virtual const FieldVariablePhiValue & phi() const = 0;
249 
253  virtual const FieldVariablePhiGradient & gradPhi() const = 0;
254 
258  virtual const FieldVariablePhiSecond & secondPhi() const = 0;
259 
263  virtual const FieldVariablePhiValue & curlPhi() const = 0;
264 
268  virtual const FieldVariablePhiDivergence & divPhi() const = 0;
269 
273  virtual const FieldVariablePhiValue & phiFace() const = 0;
274 
278  virtual const FieldVariablePhiGradient & gradPhiFace() const = 0;
279 
284  virtual const FieldVariablePhiSecond & secondPhiFace() const = 0;
285 
289  virtual const FieldVariablePhiValue & phiFaceNeighbor() const = 0;
290 
294  virtual const FieldVariablePhiGradient & gradPhiFaceNeighbor() const = 0;
295 
300  virtual const FieldVariablePhiSecond & secondPhiFaceNeighbor() const = 0;
301 
305  virtual const FieldVariablePhiValue & phiNeighbor() const = 0;
306 
310  virtual const FieldVariablePhiGradient & gradPhiNeighbor() const = 0;
311 
316  virtual const FieldVariablePhiSecond & secondPhiNeighbor() const = 0;
317 
321  virtual const FieldVariablePhiValue & phiLower() const = 0;
322 
326  virtual void setDofValues(const DenseVector<DofValue> & values) = 0;
327 
332  virtual void setLowerDofValues(const DenseVector<DofValue> & values) = 0;
333 
339  bool usesPhiNeighbor() const { return true; }
340 
346  bool usesGradPhiNeighbor() const { return true; }
347 
351  virtual bool usesSecondPhiNeighbor() const = 0;
352 
354 
357  virtual const DofValues & dofValues() const = 0;
358  virtual const DofValues & dofValuesOld() const = 0;
359  virtual const DofValues & dofValuesOlder() const = 0;
360  virtual const DofValues & dofValuesPreviousNL() const = 0;
361  virtual const DofValues & dofValuesNeighbor() const = 0;
362  virtual const DofValues & dofValuesOldNeighbor() const = 0;
363  virtual const DofValues & dofValuesOlderNeighbor() const = 0;
364  virtual const DofValues & dofValuesPreviousNLNeighbor() const = 0;
365  virtual const DofValues & dofValuesDot() const = 0;
366  virtual const DofValues & dofValuesDotNeighbor() const = 0;
367  virtual const DofValues & dofValuesDotOld() const = 0;
368  virtual const DofValues & dofValuesDotOldNeighbor() const = 0;
369  virtual const DofValues & dofValuesDotDot() const = 0;
370  virtual const DofValues & dofValuesDotDotNeighbor() const = 0;
371  virtual const DofValues & dofValuesDotDotOld() const = 0;
372  virtual const DofValues & dofValuesDotDotOldNeighbor() const = 0;
373  virtual const MooseArray<libMesh::Number> & dofValuesDuDotDu() const = 0;
374  virtual const MooseArray<libMesh::Number> & dofValuesDuDotDuNeighbor() const = 0;
375  virtual const MooseArray<libMesh::Number> & dofValuesDuDotDotDu() const = 0;
376  virtual const MooseArray<libMesh::Number> & dofValuesDuDotDotDuNeighbor() const = 0;
377 
378  template <bool is_ad>
380 
384  virtual const FieldVariableValue & vectorTagValue(TagID tag) const = 0;
385  virtual const DofValues & nodalVectorTagValue(TagID tag) const = 0;
386  virtual const DofValues & vectorTagDofValue(TagID tag) const = 0;
387  virtual const DofValues & nodalMatrixTagValue(TagID tag) const = 0;
388  virtual const FieldVariableValue & matrixTagValue(TagID tag) const = 0;
389 
390  virtual void residualSetup() override;
391  virtual void jacobianSetup() override;
392  virtual void timestepSetup() override;
393 
395  /*
396  * Returns whether a variable is defined on a block as a functor.
397  * This makes the link between functor block restriction and the
398  * BlockRestrictable interface.
399  * @param id subdomain id we want to know whether the variable is defined on
400  * @return whether the variable is defined on this domain
401  */
402  bool hasBlocks(const SubdomainID id) const override { return BlockRestrictable::hasBlocks(id); }
403 
404 protected:
407 
409  mutable ADReal _ad_real_dummy = 0;
410 };
411 
412 template <>
413 template <>
415 template <>
416 template <>
418 template <>
419 template <>
421 
422 template <typename OutputType>
423 template <bool is_ad>
426 {
427  return adDofValues();
428 }
429 
430 #define usingMooseVariableFieldMembers \
431  usingMooseVariableFieldBaseMembers; \
432  using MooseVariableField<OutputType>::_time_integrator; \
433  using MooseVariableField<OutputType>::_ad_real_dummy; \
434  using MooseVariableField<OutputType>::getSolution
435 
436 // Prevent implicit instantiation in other translation units where these classes are used
437 extern template class MooseVariableField<Real>;
438 extern template class MooseVariableField<RealVectorValue>;
439 extern template class MooseVariableField<RealEigenVector>;
MooseVariableField(const InputParameters &parameters)
typename OutputTools< typename Moose::ADType< T >::type >::VariableSecond ADTemplateVariableSecond
Definition: MooseTypes.h:654
virtual const DofValues & dofValuesDotDotOld() const =0
VarFieldType
Definition: MooseTypes.h:770
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnNeighborDot() const =0
AD grad of time derivative neighbor solution getter.
MooseArray< OutputDivergence > FieldVariableDivergence
typename OutputTools< typename Moose::ADType< T >::type >::VariableCurl ADTemplateVariableCurl
Definition: MooseTypes.h:656
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDuNeighbor() const =0
virtual const MooseArray< OutputType > & nodalValueOlderArray() const =0
virtual const FieldVariablePhiValue & phi() const =0
Return the variable&#39;s elemental shape functions.
virtual const ADTemplateVariableValue< OutputType > & adUDot() const =0
AD time derivative getter.
Base class template for functor objects.
Definition: MooseFunctor.h:137
virtual const ADTemplateVariableSecond< OutputType > & adSecondSln() const =0
AD second solution getter.
unsigned int TagID
Definition: MooseTypes.h:238
virtual const ADTemplateVariableValue< OutputType > & adSln() const =0
AD solution getter.
virtual bool computingDiv() const =0
Whether or not this variable is computing any divergence quantities.
virtual const ADTemplateVariableSecond< OutputType > & adSecondSlnNeighbor() const =0
AD second neighbor solution getter.
Class for stuff related to variables.
MooseArray< OutputSecond > FieldVariableSecond
ADReal _ad_real_dummy
A dummy ADReal variable.
virtual void setLowerDofValues(const DenseVector< DofValue > &values)=0
Set local DOF values for a lower dimensional element and evaluate the values on quadrature points...
OutputType type
Definition: MooseTypes.h:286
virtual void setNodalValue(const OutputType &value, unsigned int idx=0)=0
virtual const ADTemplateVariableValue< OutputType > & adUDotDot() const =0
AD second time derivative getter.
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseBase.h:131
virtual const FieldVariablePhiGradient & gradPhiNeighbor() const =0
Return the gradients of the variable&#39;s shape functions on a neighboring element.
MooseArray< std::vector< OutputShapeSecond > > FieldVariablePhiSecond
virtual const DofValues & nodalVectorTagValue(TagID tag) const =0
typename OutputTools< typename Moose::ADType< T >::type >::VariableValue ADTemplateVariableValue
Definition: MooseTypes.h:648
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
virtual const FieldVariablePhiDivergence & divPhi() const =0
Divergence of the shape functions.
virtual const FieldVariablePhiSecond & secondPhi() const =0
Return the rank-2 tensor of second derivatives of the variable&#39;s elemental shape functions.
virtual const ADTemplateVariableValue< OutputType > & adUDotDotNeighbor() const =0
AD neighbor second time derivative getter.
virtual const ADDofValues & adDofValues() const =0
Return the AD dof values.
virtual const MooseArray< OutputType > & nodalValueOldArray() const =0
MooseArray< OutputType > FieldVariableValue
MooseArray< std::vector< OutputShape > > FieldVariableTestCurl
virtual const ADTemplateVariableCurl< OutputType > & adCurlSlnNeighbor() const =0
AD curl neighbor solution getter.
This class provides an interface for common operations on field variables of both FE and FV types wit...
virtual const ADTemplateVariableGradient< OutputType > & adGradSln() const =0
AD grad solution getter.
MooseArray< std::vector< OutputShapeDivergence > > FieldVariablePhiDivergence
MooseArray< std::vector< OutputShape > > FieldVariableTestValue
DualNumber< Real, DNDerivativeType, true > ADReal
Definition: ADRealForward.h:42
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnDot() const =0
AD grad of time derivative solution getter.
const MooseArray< GenericReal< is_ad > > & genericDofValues() const
virtual const FieldVariablePhiValue & phiNeighbor() const =0
Return the variable&#39;s shape functions on a neighboring element.
virtual void jacobianSetup() override
Moose::ADType< DofValue >::type ADDofValue
virtual const DofValues & dofValuesOldNeighbor() const =0
virtual const DofValues & vectorTagDofValue(TagID tag) const =0
virtual const ADTemplateVariableValue< OutputType > & adSlnNeighbor() const =0
AD neighbor solution getter.
MooseArray< std::vector< OutputShape > > FieldVariablePhiValue
MooseArray< std::vector< OutputShapeGradient > > FieldVariablePhiGradient
MooseArray< std::vector< OutputShapeGradient > > FieldVariableTestGradient
virtual const DofValues & dofValuesNeighbor() const =0
static InputParameters validParams()
virtual const FieldVariablePhiValue & phiFaceNeighbor() const =0
Return the variable&#39;s shape functions on a neighboring element face.
libMesh::TensorTools::DecrementRank< OutputShape >::type OutputShapeDivergence
virtual const FieldVariablePhiSecond & secondPhiFaceNeighbor() const =0
Return the rank-2 tensor of second derivatives of the variable&#39;s shape functions on a neighboring ele...
MooseArray< std::vector< OutputShapeSecond > > FieldVariableTestSecond
virtual const FieldVariablePhiSecond & secondPhiFace() const =0
Return the rank-2 tensor of second derivatives of the variable&#39;s shape functions on an element face...
virtual Moose::VarFieldType fieldType() const override
Field type of this variable.
virtual void setDofValues(const DenseVector< DofValue > &values)=0
Set local DOF values and evaluate the values on quadrature points.
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnNeighbor() const =0
AD grad neighbor solution getter.
Interface for notifications that the mesh has changed.
virtual const DofValues & dofValuesOld() const =0
virtual const FieldVariableValue & vectorTagValue(TagID tag) const =0
tag values getters
libMesh::TensorTools::IncrementRank< OutputGradient >::type OutputSecond
MooseArray< std::vector< OutputShape > > FieldVariablePhiCurl
Moose::DOFType< OutputType >::type DofValue
virtual const DofValues & dofValuesDotOldNeighbor() const =0
virtual const ADDofValues & adDofValuesNeighbor() const =0
Return the AD neighbor dof values.
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDu() const =0
typename OutputTools< typename Moose::ADType< T >::type >::VariableGradient ADTemplateVariableGradient
Definition: MooseTypes.h:651
virtual bool computingCurl() const =0
Whether or not this variable is computing any curl quantities.
bool usesPhiNeighbor() const
Whether or not this variable is actually using the shape function value.
virtual bool computingSecond() const =0
Whether or not this variable is computing any second derivatives.
virtual const DofValues & dofValuesDotNeighbor() const =0
virtual const FieldVariableValue & slnOldNeighbor() const =0
virtual const FieldVariableGradient & gradSln() const =0
element gradients
virtual const FieldVariableGradient & gradSlnOld() const =0
libMesh::TensorTools::IncrementRank< OutputShapeGradient >::type OutputShapeSecond
virtual const FieldVariableGradient & gradSlnNeighbor() const =0
neighbor solution gradients
virtual bool usesSecondPhiNeighbor() const =0
Whether or not this variable is actually using the shape function second derivatives.
virtual const FieldVariablePhiSecond & secondPhiNeighbor() const =0
Return the rank-2 tensor of second derivatives of the variable&#39;s shape functions on a neighboring ele...
MooseArray< std::vector< OutputShapeDivergence > > FieldVariableTestDivergence
virtual const FieldVariablePhiGradient & gradPhiFaceNeighbor() const =0
Return the gradients of the variable&#39;s shape functions on a neighboring element face.
virtual const FieldVariableValue & slnNeighbor() const =0
typename MooseVariableDataBase< Real >::ADDofValue ADDofValue
virtual const FieldVariablePhiValue & phiLower() const =0
Return the variable&#39;s shape functions on a lower-dimensional element.
virtual const FieldVariablePhiValue & phiFace() const =0
Return the variable&#39;s shape functions on an element face.
virtual const FieldVariablePhiGradient & gradPhi() const =0
Return the gradients of the variable&#39;s elemental shape functions.
virtual const DofValues & dofValuesOlderNeighbor() const =0
virtual const FieldVariablePhiValue & curlPhi() const =0
Curl of the shape functions.
Base class for time integrators.
virtual bool isVector() const override
virtual void setDofValue(const DofValue &value, unsigned int index)=0
Degree of freedom value setters.
virtual const FieldVariableValue & sln() const =0
virtual const DofValues & nodalMatrixTagValue(TagID tag) const =0
bool hasBlocks(const SubdomainID id) const override
Returns whether the functor is defined on this block.
virtual const FieldVariableValue & slnOlder() const =0
bool usesGradPhiNeighbor() const
Whether or not this variable is actually using the shape function gradient.
virtual const FieldVariableValue & matrixTagValue(TagID tag) const =0
virtual const FieldVariableValue & slnOld() const =0
typename MooseVariableDataBase< Real >::ADDofValues ADDofValues
virtual const DofValues & dofValuesPreviousNLNeighbor() const =0
const TimeIntegrator *const _time_integrator
the time integrator used for computing time derivatives
virtual const MooseArray< OutputType > & nodalValueArray() const =0
Methods for retrieving values of variables at the nodes in a MooseArray for AuxKernelBase.
MooseArray< OutputType > FieldVariableCurl
typename MooseVariableDataBase< Real >::DofValues DofValues
virtual const DofValues & dofValuesDotDotNeighbor() const =0
virtual const ADDofValues & adDofValuesDot() const =0
Return the AD time derivatives at dofs.
virtual const DofValues & dofValuesPreviousNL() const =0
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDotDu() const =0
libMesh::TensorTools::DecrementRank< OutputType >::type OutputDivergence
virtual void timestepSetup() override
libMesh::TensorTools::IncrementRank< OutputType >::type OutputGradient
bool hasBlocks(const SubdomainName &name) const
Test if the supplied block name is valid for this object.
virtual const DofValues & dofValuesDotDotOldNeighbor() const =0
virtual const ADTemplateVariableCurl< OutputType > & adCurlSln() const =0
AD curl solution getter.
virtual const DofValues & dofValues() const =0
dof values getters
virtual const DofValues & dofValuesOlder() const =0
typename MooseVariableDataBase< Real >::DofValue DofValue
virtual const FieldVariableGradient & gradSlnOldNeighbor() const =0
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDotDuNeighbor() const =0
libMesh::TensorTools::IncrementRank< OutputShape >::type OutputShapeGradient
Moose::ShapeType< OutputType >::type OutputShape
virtual const DofValues & dofValuesDotOld() const =0
virtual const FieldVariablePhiGradient & gradPhiFace() const =0
Return the gradients of the variable&#39;s shape functions on an element face.
virtual void residualSetup() override
virtual const DofValues & dofValuesDotDot() const =0
virtual const ADTemplateVariableValue< OutputType > & adUDotNeighbor() const =0
AD neighbor time derivative getter.
virtual const DofValues & dofValuesDot() const =0
MooseArray< OutputGradient > FieldVariableGradient
virtual bool isArray() const override