https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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"
14#include "SubProblem.h"
15#include "MooseMesh.h"
16#include "MooseVariableData.h"
17#include "MooseFunctor.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
39template <typename OutputType>
41 public Moose::FunctorBase<typename Moose::ADType<OutputType>::type>,
43{
44public:
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) = 0;
95
97
100 virtual void setDofValue(const DofValue & value, unsigned int index) = 0;
102
106 virtual const ADTemplateVariableValue<OutputType> & adSln() const = 0;
107
112
117
122
127
132
137
142
147
152
157
161 virtual const ADTemplateVariableValue<OutputType> & adUDot() const = 0;
162
167
172
177
181 virtual const ADDofValues & adDofValues() const = 0;
182
186 virtual const ADDofValues & adDofValuesNeighbor() const = 0;
187
191 virtual const ADDofValues & adDofValuesDot() const = 0;
192
194
197 virtual const MooseArray<OutputType> & nodalValueArray() const = 0;
198 virtual const MooseArray<OutputType> & nodalValueOldArray() const = 0;
199 virtual const MooseArray<OutputType> & nodalValueOlderArray() const = 0;
201
205 virtual const FieldVariableValue & sln() const = 0;
206
210 virtual const FieldVariableValue & slnOld() const = 0;
211
215 virtual const FieldVariableValue & slnNeighbor() const = 0;
216
220 virtual const FieldVariableValue & slnOldNeighbor() const = 0;
221
225 virtual const FieldVariableValue & slnOlder() const = 0;
226
228 virtual const FieldVariableGradient & gradSln() const = 0;
229 virtual const FieldVariableGradient & gradSlnOld() const = 0;
230
232 virtual const FieldVariableGradient & gradSlnNeighbor() const = 0;
233 virtual const FieldVariableGradient & gradSlnOldNeighbor() const = 0;
234
238 virtual bool computingSecond() const = 0;
239
243 virtual bool computingCurl() const = 0;
244
248 virtual bool computingDiv() const = 0;
249
253 virtual const FieldVariablePhiValue & phi() const = 0;
254
258 virtual const FieldVariablePhiGradient & gradPhi() const = 0;
259
263 virtual const FieldVariablePhiSecond & secondPhi() const = 0;
264
268 virtual const FieldVariablePhiValue & curlPhi() const = 0;
269
273 virtual const FieldVariablePhiDivergence & divPhi() const = 0;
274
278 virtual const FieldVariablePhiValue & phiFace() const = 0;
279
283 virtual const FieldVariablePhiGradient & gradPhiFace() const = 0;
284
289 virtual const FieldVariablePhiSecond & secondPhiFace() const = 0;
290
294 virtual const FieldVariablePhiValue & phiFaceNeighbor() const = 0;
295
300
306
310 virtual const FieldVariablePhiValue & phiNeighbor() const = 0;
311
315 virtual const FieldVariablePhiGradient & gradPhiNeighbor() const = 0;
316
321 virtual const FieldVariablePhiSecond & secondPhiNeighbor() const = 0;
322
326 virtual const FieldVariablePhiValue & phiLower() const = 0;
327
331 virtual void setDofValues(const DenseVector<DofValue> & values) = 0;
332
337 virtual void setLowerDofValues(const DenseVector<DofValue> & values) = 0;
338
344 bool usesPhiNeighbor() const { return true; }
345
351 bool usesGradPhiNeighbor() const { return true; }
352
356 virtual bool usesSecondPhiNeighbor() const = 0;
357
359
362 virtual const DofValues & dofValues() const = 0;
363 virtual const DofValues & dofValuesOld() const = 0;
364 virtual const DofValues & dofValuesOlder() const = 0;
365 virtual const DofValues & dofValuesPreviousNL() const = 0;
366 virtual const DofValues & dofValuesNeighbor() const = 0;
367 virtual const DofValues & dofValuesOldNeighbor() const = 0;
368 virtual const DofValues & dofValuesOlderNeighbor() const = 0;
369 virtual const DofValues & dofValuesPreviousNLNeighbor() const = 0;
370 virtual const DofValues & dofValuesDot() const = 0;
371 virtual const DofValues & dofValuesDotNeighbor() const = 0;
372 virtual const DofValues & dofValuesDotOld() const = 0;
373 virtual const DofValues & dofValuesDotOldNeighbor() const = 0;
374 virtual const DofValues & dofValuesDotDot() const = 0;
375 virtual const DofValues & dofValuesDotDotNeighbor() const = 0;
376 virtual const DofValues & dofValuesDotDotOld() const = 0;
377 virtual const DofValues & dofValuesDotDotOldNeighbor() const = 0;
382
383 template <bool is_ad>
385
389 virtual const FieldVariableValue & vectorTagValue(TagID tag) const = 0;
390 virtual const DofValues & nodalVectorTagValue(TagID tag) const = 0;
391 virtual const DofValues & vectorTagDofValue(TagID tag) const = 0;
392 virtual const DofValues & nodalMatrixTagValue(TagID tag) const = 0;
393 virtual const FieldVariableValue & matrixTagValue(TagID tag) const = 0;
394
395 virtual void residualSetup() override;
396 virtual void jacobianSetup() override;
397 virtual void timestepSetup() override;
398
400 /*
401 * Returns whether a variable is defined on a block as a functor.
402 * This makes the link between functor block restriction and the
403 * BlockRestrictable interface.
404 * @param id subdomain id we want to know whether the variable is defined on
405 * @return whether the variable is defined on this domain
406 */
407 bool hasBlocks(const SubdomainID id) const override { return BlockRestrictable::hasBlocks(id); }
408
409protected:
412
415};
416
417template <>
418template <>
420template <>
421template <>
423template <>
424template <>
426
427template <typename OutputType>
428template <bool is_ad>
431{
432 return adDofValues();
433}
434
435#define usingMooseVariableFieldMembers \
436 usingMooseVariableFieldBaseMembers; \
437 using MooseVariableField<OutputType>::_time_integrator; \
438 using MooseVariableField<OutputType>::_ad_real_dummy; \
439 using MooseVariableField<OutputType>::getSolution
440
441// Prevent implicit instantiation in other translation units where these classes are used
442extern template class MooseVariableField<Real>;
443extern template class MooseVariableField<RealVectorValue>;
444extern template class MooseVariableField<RealEigenVector>;
DualNumber< Real, DNDerivativeType, true > ADReal
subdomain_id_type SubdomainID
unsigned int TagID
Definition MooseTypes.h:238
typename OutputTools< typename Moose::ADType< T >::type >::VariableSecond ADTemplateVariableSecond
Definition MooseTypes.h:659
typename OutputTools< typename Moose::ADType< T >::type >::VariableValue ADTemplateVariableValue
Definition MooseTypes.h:653
typename OutputTools< typename Moose::ADType< T >::type >::VariableCurl ADTemplateVariableCurl
Definition MooseTypes.h:661
typename OutputTools< typename Moose::ADType< T >::type >::VariableGradient ADTemplateVariableGradient
Definition MooseTypes.h:656
std::array< Real, 2 > values
Definition MortarUtils.C:52
bool hasBlocks(const SubdomainName &name) const
Test if the supplied block name is valid for this object.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Interface for notifications that the mesh has changed.
forward declarations
Definition MooseArray.h:18
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131
Moose::DOFType< OutputType >::type DofValue
Moose::ADType< DofValue >::type ADDofValue
This class provides an interface for common operations on field variables of both FE and FV types wit...
Class for stuff related to variables.
virtual const FieldVariablePhiGradient & gradPhiFaceNeighbor() const =0
Return the gradients of the variable's shape functions on a neighboring element face.
virtual bool isVector() const override
virtual const DofValues & dofValuesDotDotNeighbor() const =0
virtual const ADTemplateVariableGradient< OutputType > & adGradSln() const =0
AD grad solution getter.
virtual const FieldVariablePhiGradient & gradPhiNeighbor() const =0
Return the gradients of the variable's shape functions on a neighboring element.
virtual const DofValues & dofValuesNeighbor() const =0
virtual const FieldVariablePhiValue & phiFaceNeighbor() const =0
Return the variable's shape functions on a neighboring element face.
virtual void setDofValue(const DofValue &value, unsigned int index)=0
Degree of freedom value setters.
virtual const DofValues & dofValuesOldNeighbor() const =0
virtual const FieldVariablePhiValue & phiLower() const =0
Return the variable's shape functions on a lower-dimensional element.
virtual const FieldVariablePhiGradient & gradPhiFace() const =0
Return the gradients of the variable's shape functions on an element face.
MooseArray< OutputGradient > FieldVariableGradient
MooseArray< std::vector< OutputShape > > FieldVariablePhiCurl
MooseArray< std::vector< OutputShapeGradient > > FieldVariableTestGradient
virtual const MooseArray< OutputType > & nodalValueOldArray() const =0
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnFace() const =0
AD grad solution getter for objects evaluating on element faces.
libMesh::TensorTools::IncrementRank< OutputShape >::type OutputShapeGradient
MooseArray< std::vector< OutputShapeDivergence > > FieldVariablePhiDivergence
virtual void setNodalValue(const OutputType &value)=0
virtual const ADTemplateVariableSecond< OutputType > & adSecondSlnNeighbor() const =0
AD second neighbor solution getter.
virtual const DofValues & dofValues() const =0
dof values getters
virtual const MooseArray< OutputType > & nodalValueOlderArray() const =0
virtual const ADDofValues & adDofValuesDot() const =0
Return the AD time derivatives at dofs.
virtual const ADTemplateVariableValue< OutputType > & adSlnNeighbor() const =0
AD neighbor solution getter.
const MooseArray< GenericReal< is_ad > > & genericDofValues() const
virtual const FieldVariablePhiSecond & secondPhi() const =0
Return the rank-2 tensor of second derivatives of the variable's elemental shape functions.
virtual const FieldVariableValue & matrixTagValue(TagID tag) const =0
typename MooseVariableDataBase< OutputType >::ADDofValue ADDofValue
MooseArray< std::vector< OutputShape > > FieldVariableTestCurl
virtual const DofValues & dofValuesDotDotOldNeighbor() const =0
virtual const DofValues & dofValuesDotNeighbor() const =0
virtual const ADTemplateVariableValue< OutputType > & adUDotDot() const =0
AD second time derivative getter.
MooseArray< OutputDivergence > FieldVariableDivergence
virtual const FieldVariableValue & slnOldNeighbor() const =0
Moose::ShapeType< OutputType >::type OutputShape
virtual void timestepSetup() override
Gets called at the beginning of the timestep before this object is asked to do its job.
virtual const FieldVariableGradient & gradSln() const =0
element gradients
libMesh::TensorTools::DecrementRank< OutputShape >::type OutputShapeDivergence
virtual const DofValues & dofValuesPreviousNL() const =0
virtual const MooseArray< OutputType > & nodalValueArray() const =0
Methods for retrieving values of variables at the nodes in a MooseArray for AuxKernelBase.
virtual const FieldVariableValue & slnOlder() const =0
virtual const DofValues & dofValuesPreviousNLNeighbor() const =0
virtual bool computingCurl() const =0
Whether or not this variable is computing any curl quantities.
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnNeighborDot() const =0
AD grad of time derivative neighbor solution getter.
virtual const ADTemplateVariableValue< OutputType > & adUDot() const =0
AD time derivative getter.
virtual void setLowerDofValues(const DenseVector< DofValue > &values)=0
Set local DOF values for a lower dimensional element and evaluate the values on quadrature points.
virtual const ADTemplateVariableCurl< OutputType > & adCurlSlnNeighbor() const =0
AD curl neighbor solution getter.
typename MooseVariableDataBase< OutputType >::ADDofValues ADDofValues
virtual const DofValues & dofValuesOlder() const =0
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDotDuNeighbor() const =0
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnNeighbor() const =0
AD grad neighbor solution getter.
const TimeIntegrator *const _time_integrator
the time integrator used for computing time derivatives
libMesh::TensorTools::DecrementRank< OutputType >::type OutputDivergence
virtual bool computingDiv() const =0
Whether or not this variable is computing any divergence quantities.
libMesh::TensorTools::IncrementRank< OutputType >::type OutputGradient
virtual void jacobianSetup() override
Gets called just before the Jacobian is computed and before this object is asked to do its job.
virtual const DofValues & nodalVectorTagValue(TagID tag) const =0
virtual const DofValues & dofValuesDotOld() const =0
typename MooseVariableDataBase< OutputType >::DofValue DofValue
virtual const FieldVariableGradient & gradSlnNeighbor() const =0
neighbor solution gradients
MooseArray< std::vector< OutputShapeSecond > > FieldVariablePhiSecond
virtual const ADDofValues & adDofValues() const =0
Return the AD dof values.
bool usesPhiNeighbor() const
Whether or not this variable is actually using the shape function value.
virtual const FieldVariablePhiValue & phi() const =0
Return the variable's elemental shape functions.
virtual const ADTemplateVariableValue< OutputType > & adUDotDotNeighbor() const =0
AD neighbor second time derivative getter.
virtual const ADTemplateVariableCurl< OutputType > & adCurlSln() const =0
AD curl solution getter.
virtual Moose::VarFieldType fieldType() const override
Field type of this variable.
MooseArray< std::vector< OutputShapeGradient > > FieldVariablePhiGradient
MooseArray< std::vector< OutputShape > > FieldVariablePhiValue
virtual const FieldVariablePhiSecond & secondPhiFace() const =0
Return the rank-2 tensor of second derivatives of the variable's shape functions on an element face.
static InputParameters validParams()
virtual const FieldVariablePhiDivergence & divPhi() const =0
Divergence of the shape functions.
MooseArray< std::vector< OutputShape > > FieldVariableTestValue
MooseArray< std::vector< OutputShapeDivergence > > FieldVariableTestDivergence
virtual const DofValues & dofValuesDotOldNeighbor() const =0
virtual const ADDofValues & adDofValuesNeighbor() const =0
Return the AD neighbor dof values.
virtual const ADTemplateVariableValue< OutputType > & adUDotNeighbor() const =0
AD neighbor time derivative getter.
virtual const FieldVariableGradient & gradSlnOldNeighbor() const =0
virtual const ADTemplateVariableSecond< OutputType > & adSecondSln() const =0
AD second solution getter.
MooseArray< OutputType > FieldVariableCurl
virtual const DofValues & dofValuesOlderNeighbor() const =0
virtual const DofValues & vectorTagDofValue(TagID tag) const =0
ADReal _ad_real_dummy
A dummy ADReal variable.
virtual bool isArray() const override
virtual const FieldVariablePhiSecond & secondPhiFaceNeighbor() const =0
Return the rank-2 tensor of second derivatives of the variable's shape functions on a neighboring ele...
virtual const FieldVariableValue & slnOld() const =0
libMesh::TensorTools::IncrementRank< OutputShapeGradient >::type OutputShapeSecond
typename MooseVariableDataBase< OutputType >::DofValues DofValues
virtual const ADTemplateVariableGradient< OutputType > & adGradSlnDot() const =0
AD grad of time derivative solution getter.
libMesh::TensorTools::IncrementRank< OutputGradient >::type OutputSecond
virtual const DofValues & dofValuesDotDot() const =0
MooseArray< OutputSecond > FieldVariableSecond
virtual const FieldVariableValue & sln() const =0
virtual const ADTemplateVariableValue< OutputType > & adSln() const =0
AD solution getter.
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDuNeighbor() const =0
virtual bool computingSecond() const =0
Whether or not this variable is computing any second derivatives.
virtual const DofValues & dofValuesOld() const =0
virtual const FieldVariableValue & vectorTagValue(TagID tag) const =0
tag values getters
virtual void residualSetup() override
Gets called just before the residual is computed and before this object is asked to do its job.
virtual const DofValues & dofValuesDot() const =0
virtual const FieldVariablePhiValue & curlPhi() const =0
Curl of the shape functions.
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDotDu() const =0
bool hasBlocks(const SubdomainID id) const override
Returns whether the functor is defined on this block.
virtual const DofValues & dofValuesDotDotOld() const =0
virtual void setDofValues(const DenseVector< DofValue > &values)=0
Set local DOF values and evaluate the values on quadrature points.
virtual const FieldVariablePhiValue & phiFace() const =0
Return the variable's shape functions on an element face.
virtual const MooseArray< libMesh::Number > & dofValuesDuDotDu() const =0
MooseArray< OutputType > FieldVariableValue
virtual const FieldVariablePhiSecond & secondPhiNeighbor() const =0
Return the rank-2 tensor of second derivatives of the variable's shape functions on a neighboring ele...
virtual const FieldVariableValue & slnNeighbor() const =0
virtual const DofValues & nodalMatrixTagValue(TagID tag) const =0
virtual bool usesSecondPhiNeighbor() const =0
Whether or not this variable is actually using the shape function second derivatives.
virtual const FieldVariableGradient & gradSlnOld() const =0
MooseArray< std::vector< OutputShapeSecond > > FieldVariableTestSecond
virtual const FieldVariablePhiGradient & gradPhi() const =0
Return the gradients of the variable's elemental shape functions.
virtual const FieldVariablePhiValue & phiNeighbor() const =0
Return the variable's shape functions on a neighboring element.
bool usesGradPhiNeighbor() const
Whether or not this variable is actually using the shape function gradient.
Base class template for functor objects.
Base class for time integrators.
OutputType type
Definition MooseTypes.h:291