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, 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
112
117
122
127
132
137
142
147
152
156 virtual const ADTemplateVariableValue<OutputType> & adUDot() const = 0;
157
162
167
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
295
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;
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
404protected:
407
410};
411
412template <>
413template <>
415template <>
416template <>
418template <>
419template <>
421
422template <typename OutputType>
423template <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
437extern template class MooseVariableField<Real>;
438extern template class MooseVariableField<RealVectorValue>;
439extern template class MooseVariableField<RealEigenVector>;
DualNumber< Real, DNDerivativeType, true > ADReal
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
libMesh::TensorTools::IncrementRank< OutputShape >::type OutputShapeGradient
MooseArray< std::vector< OutputShapeDivergence > > FieldVariablePhiDivergence
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
virtual void setNodalValue(const OutputType &value, unsigned int idx=0)=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