https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MooseVariableData.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 "MooseArray.h"
13#include "MooseTypes.h"
15#include "Conversion.h"
16
17#include "libmesh/tensor_tools.h"
18#include "libmesh/vector_value.h"
19#include "libmesh/tensor_value.h"
20#include "libmesh/type_n_tensor.h"
21#include "libmesh/enum_fe_family.h"
22#include "libmesh/fe_type.h"
23#include "ADUtils.h"
24
25#include <functional>
26#include <vector>
27
28namespace libMesh
29{
30class QBase;
31class DofMap;
32template <typename>
33class DenseVector;
34}
35
37using libMesh::DofMap;
38using libMesh::QBase;
39
40class TimeIntegrator;
41class Assembly;
42class SubProblem;
43template <typename>
44class MooseVariableFE;
45class SystemBase;
46
47template <typename OutputType>
48class MooseVariableData : public MooseVariableDataBase<OutputType>
49{
50public:
51 // type for gradient, second and divergence of template class OutputType
55
56 // shortcut for types storing values on quadrature points
62
63 // shape function type for the template class OutputType
65
66 // type for gradient, second and divergence of shape functions of template class OutputType
70
71 // shortcut for types storing shape function values on quadrature points
77
78 // shortcut for types storing test function values on quadrature points
79 // Note: here we assume the types are the same as of shape functions.
85
86 // DoF value type for the template class OutputType
91
93 SystemBase & sys,
94 THREAD_ID tid,
95 Moose::ElementType element_type,
96 const QBase * const & qrule_in,
97 const QBase * const & qrule_face_in,
98 const Node * const & node,
99 const Elem * const & elem);
100
104 bool needsAD() const { return _need_ad; }
105
110 void setGeometry(Moose::GeometryType gm_type);
111
113
117 void computeValues();
118
123
127 template <bool constant_monomial>
128 void computeAD(const unsigned int num_dofs, const unsigned int nqp);
129
133 void computeNodalValues();
134
136
140 const FieldVariablePhiValue & phi() const { return *_phi; }
141
145 const FieldVariablePhiValue & phiFace() const { return *_phi_face; }
146
150 const FieldVariablePhiGradient & gradPhi() const { return *_grad_phi; }
151
156 {
157 mooseAssert(var().fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY, "Not an array variable");
158 return _mapped_grad_phi;
159 }
160
165
170 {
171 mooseAssert(var().fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY, "Not an array variable");
173 }
174
178 const FieldVariablePhiSecond & secondPhi() const;
179
184
188 const FieldVariablePhiCurl & curlPhi() const;
189
193 const FieldVariablePhiCurl & curlPhiFace() const;
194
198 const FieldVariablePhiDivergence & divPhi() const;
199
204
209
214
218 std::size_t phiSize() const { return _phi->size(); }
219
223 std::size_t phiFaceSize() const { return _phi_face->size(); }
224
232
236 bool computingCurl() const { return _need_curl || _need_curl_old; }
237
241 bool computingDiv() const { return _need_div || _need_div_old; }
242
244
245 bool isNodal() const override { return _is_nodal; }
246 bool hasDoFsOnNodes() const override { return _continuity != libMesh::DISCONTINUOUS; }
247 libMesh::FEContinuity getContinuity() const override { return _continuity; };
248 const Node * const & node() const { return _node; }
249 const dof_id_type & nodalDofIndex() const { return _nodal_dof_index; }
250 bool isNodalDefined() const { return _has_dof_indices; }
251
255 const Elem * const & currentElem() const { return _elem; }
256
260 const unsigned int & currentSide() const { return _current_side; }
261
265 void prepareIC();
266
268
272 const FieldVariableGradient & gradSlnDot() const;
273
277 const FieldVariableGradient & gradSlnDotDot() const;
278
284
290
296
298 {
299 _need_ad = _need_ad_u = true;
300 return _ad_u;
301 }
302
304 {
305 _need_ad = _need_ad_grad_u = true;
306 return _ad_grad_u;
307 }
308
310 {
312
313 if (!_time_integrator)
314 // If we don't have a time integrator (this will be the case for variables that are a part of
315 // the AuxiliarySystem) then we have no way to calculate _ad_grad_u_dot and we are just going
316 // to copy the values from _grad_u_dot. Of course in order to be able to do that we need to
317 // calculate _grad_u_dot
318 _need_grad_dot = true;
319
320 return _ad_grad_u_dot;
321 }
322
324 {
326 secondPhi();
328 return _ad_second_u;
329 }
330
332
334
335 const FieldVariableValue & uDot() const;
336
337 const FieldVariableValue & uDotDot() const;
338
339 const FieldVariableValue & uDotOld() const;
340
341 const FieldVariableValue & uDotDotOld() const;
342
343 const VariableValue & duDotDu() const
344 {
345 _need_du_dot_du = true;
346 return _du_dot_du;
347 }
348
349 const VariableValue & duDotDotDu() const
350 {
351 _need_du_dotdot_du = true;
352 return _du_dotdot_du;
353 }
354
356 {
357 _need_ad = _need_ad_curl_u = true;
358 curlPhi();
359 curlPhiFace();
360 return _ad_curl_u;
361 }
362
364
365 const OutputType & nodalValueDot() const;
366 const OutputType & nodalValueDotDot() const;
367 const OutputType & nodalValueDotOld() const;
368 const OutputType & nodalValueDotDotOld() const;
369 const OutputType & nodalValueDuDotDu() const;
370 const OutputType & nodalValueDuDotDotDu() const;
371
372 const typename Moose::ADType<OutputType>::type & adNodalValue() const;
373
378
380
383 void setDofValue(const DofValue & value, unsigned int index);
385
392 getElementalValue(const Elem * elem, Moose::SolutionState state, unsigned int idx = 0) const;
393
395
396 void getDofIndices(const Elem * elem, std::vector<dof_id_type> & dof_indices) const;
397 const std::vector<dof_id_type> & dofIndices() const { return _dof_indices; }
398 unsigned int numberOfDofs() const { return _dof_indices.size(); }
399 void clearDofIndices() { _dof_indices.clear(); }
400
404 void prepare();
405
409 void reinitNode();
410
414 void reinitAux();
415
420 void reinitNodes(const std::vector<dof_id_type> & nodes);
421
426 const DenseVector<libMesh::Number> & v) const;
427
429
430 const DofValues & dofValuesDot() const;
431 const DofValues & dofValuesDotOld() const;
432 const DofValues & dofValuesDotDot() const;
433 const DofValues & dofValuesDotDotOld() const;
436
440 const ADDofValues & adDofValues() const;
441
445 const ADDofValues & adDofValuesDot() const;
446
448
453 const FieldVariableValue & increment() const { return _increment; }
454
459
464
465private:
469 void fetchADDofValues();
470
476 void assignADNodalValue();
477
484 template <bool constant_monomial>
486
487 template <bool constant_monomial,
488 typename DestinationType,
489 typename ShapeType,
490 typename DofValuesType>
491 void fill(DestinationType & dest,
492 const ShapeType & phi,
493 const DofValuesType & dof_values,
494 unsigned int nqp,
495 std::size_t num_shapes);
496
499
501
502 const unsigned int _var_num;
503
505
508
511
514
517
520
523
526
528 mutable bool _need_second = false;
529 mutable bool _need_second_old = false;
530 mutable bool _need_second_older = false;
531 mutable bool _need_second_previous_nl = false;
532
534 mutable bool _need_curl = false;
535 mutable bool _need_curl_old = false;
536 mutable bool _need_curl_older = false;
537
539 mutable bool _need_div = false;
540 mutable bool _need_div_old = false;
541 mutable bool _need_div_older = false;
542
544 mutable bool _need_ad = false;
545 mutable bool _need_ad_u = false;
546 mutable bool _need_ad_grad_u = false;
547 mutable bool _need_ad_grad_u_dot = false;
548 mutable bool _need_ad_second_u = false;
549 mutable bool _need_ad_curl_u = false;
550 mutable bool _need_ad_div_u = false;
551 mutable bool _need_ad_u_dot = false;
552 mutable bool _need_ad_u_dotdot = false;
553
555
559
565
570
575
589
590 // time derivatives
591
594
597
600
603
606
609
613 const QBase * const & _qrule;
614 const QBase * const & _qrule_face;
615
616 // Shape function values, gradients, second derivatives
622
623 // Mapped array phi
628
629 // Values, gradients and second derivatives of shape function on faces
635
638
646
647 // dual mortar
648 const bool _use_dual;
649
650 std::function<const typename OutputTools<OutputType>::VariablePhiValue &(const Assembly &,
653 std::function<const typename OutputTools<OutputShape>::VariablePhiValue &(const Assembly &,
656
657 std::function<const typename OutputTools<OutputShape>::VariablePhiGradient &(const Assembly &,
660 std::function<const typename OutputTools<OutputShape>::VariablePhiGradient &(const Assembly &,
663
664 std::function<const typename OutputTools<OutputShape>::VariablePhiSecond &(const Assembly &,
667 std::function<const typename OutputTools<OutputShape>::VariablePhiSecond &(const Assembly &,
670
671 std::function<const typename OutputTools<OutputShape>::VariablePhiCurl &(const Assembly &,
674 std::function<const typename OutputTools<OutputShape>::VariablePhiCurl &(const Assembly &,
677
678 std::function<const typename OutputTools<OutputShape>::VariablePhiDivergence &(const Assembly &,
681
682 std::function<const typename OutputTools<OutputShape>::VariablePhiDivergence &(const Assembly &,
685
686 std::function<const ADTemplateVariablePhiGradient<OutputShape> &(const Assembly &,
689 std::function<const ADTemplateVariablePhiGradient<OutputShape> &(const Assembly &,
692
695
699 const Node * const & _node;
700
704 const Elem * const & _elem;
705
707 const bool _displaced;
708
710 const unsigned int & _current_side;
711
714
715 using MooseVariableDataBase<OutputType>::var;
716 using MooseVariableDataBase<OutputType>::_sys;
717 using MooseVariableDataBase<OutputType>::_subproblem;
722 using MooseVariableDataBase<OutputType>::_vector_tag_u;
726 using MooseVariableDataBase<OutputType>::_matrix_tag_u;
728 using MooseVariableDataBase<OutputType>::_dof_indices;
733 using MooseVariableDataBase<OutputType>::_solution_tag;
737 using MooseVariableDataBase<OutputType>::_dof_map;
738 using MooseVariableDataBase<OutputType>::_need_u_dot;
758 using MooseVariableDataBase<OutputType>::_tid;
764 using MooseVariableDataBase<OutputType>::_count;
765};
766
768
769template <typename OutputType>
772{
773 _need_ad = true;
774 return _ad_dof_values;
775}
776
777template <typename OutputType>
780{
781 _need_ad = _need_ad_u_dot = true;
782 if (!_time_integrator)
783 // See explanation in adUDot() body
784 _need_u_dot = true;
785 return _ad_dofs_dot;
786}
787
788template <typename OutputType>
789const typename Moose::ADType<OutputType>::type &
791{
792 _need_ad = true;
793 return _ad_nodal_value;
794}
795
796template <typename OutputType>
799{
800 _need_ad = _need_ad_u_dot = true;
801
802 if (!_time_integrator)
803 // If we don't have a time integrator (this will be the case for variables that are a part of
804 // the AuxiliarySystem) then we have no way to calculate _ad_u_dot and we are just going to
805 // copy the values from _u_dot. Of course in order to be able to do that we need to calculate
806 // _u_dot
807 _need_u_dot = true;
808
809 return _ad_u_dot;
810}
811
812template <typename OutputType>
815{
816 _need_ad = _need_ad_u_dotdot = true;
817
818 if (!_time_integrator)
819 // If we don't have a time integrator (this will be the case for variables that are a part
820 // of the AuxiliarySystem) then we have no way to calculate _ad_u_dotdot and we are just
821 // going to copy the values from _u_dotdot. Of course in order to be able to do that we need
822 // to calculate _u_dotdot
823 _need_u_dotdot = true;
824
825 return _ad_u_dotdot;
826}
827
828template <typename OutputType>
831{
832 if (_element_type == Moose::ElementType::Neighbor || _element_type == Moose::ElementType::Lower)
833 mooseError("Unsupported element type: ", Moose::stringify(_element_type));
834 mooseAssert(_ad_grad_phi, "this should be non-null");
835 return *_ad_grad_phi;
836}
837
838template <typename OutputType>
841{
842 if (_element_type == Moose::ElementType::Neighbor || _element_type == Moose::ElementType::Lower)
843 mooseError("Unsupported element type: ", Moose::stringify(_element_type));
844 mooseAssert(_ad_grad_phi_face, "this should be non-null");
845 return *_ad_grad_phi_face;
846}
DualNumber< Real, DNDerivativeType, true > ADReal
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
OutputTools< Real >::VariableValue VariableValue
Definition MooseTypes.h:348
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
std::vector< std::vector< Eigen::Map< RealDIMValue > > > MappedArrayVariablePhiGradient
Definition MooseTypes.h:391
typename OutputTools< typename Moose::ADType< T >::type >::VariablePhiGradient ADTemplateVariablePhiGradient
Definition MooseTypes.h:687
typename OutputTools< typename Moose::ADType< T >::type >::VariableCurl ADTemplateVariableCurl
Definition MooseTypes.h:661
unsigned int THREAD_ID
Definition MooseTypes.h:237
typename OutputTools< typename Moose::ADType< T >::type >::VariableGradient ADTemplateVariableGradient
Definition MooseTypes.h:656
std::array< Real, 2 > values
Definition MortarUtils.C:52
ShapeType
Users of this template class must specify the type of shape functions that will be used in the Jacobi...
Keeps track of stuff related to assembling.
Definition Assembly.h:101
unsigned int size() const
The number of elements that can currently be stored in the array.
Definition MooseArray.h:259
OutputType _nodal_value_dotdot
nodal values of u_dotdot
MooseArray< OutputGradient > FieldVariableGradient
std::vector< dof_id_type > _dof_indices
The dof indices for the current element.
OutputType _nodal_value_dot_old
nodal values of u_dot_old
bool _need_dof_values_dot
local solution flags
std::vector< FieldVariableValue > _vector_tag_u
TagID _previous_nl_solution_tag
The vector tag ID corresponding to the previous nonlinear iteration's solution vector.
DofValues _dof_values_dotdot
second time derivative of the solution values
TagID _old_solution_tag
The vector tag ID corresponding to the old solution vector.
SystemBase & _sys
The MOOSE system which ultimately holds the vectors and matrices relevant to this variable data.
std::vector< FieldVariableValue > _matrix_tag_u
std::vector< bool > _need_matrix_tag_u
Moose::DOFType< OutputType >::type DofValue
void fetchDofValues()
Helper methods for assigning dof values from their corresponding solution values.
const libMesh::DofMap & _dof_map
The degree of freedom map from libMesh.
OutputType _nodal_value_dotdot_old
nodal values of u_dotdot_old
std::vector< DofValues > _vector_tags_dof_u
libMesh::TensorTools::DecrementRank< OutputType >::type OutputDivergence
TagID _solution_tag
The vector tag ID corresponding to the solution vector.
std::vector< bool > _need_matrix_tag_dof_u
std::vector< DofValues > _matrix_tags_dof_u
TagID _older_solution_tag
The vector tag ID corresponding to the older solution vector.
std::vector< bool > _need_vector_tag_u
DofValues _dof_values_dot_old
the previous time step's solution value time derivative
MooseArray< OutputType > FieldVariableValue
DofValues _dof_values_dot
time derivative of the solution values
MooseArray< libMesh::Number > _dof_du_dotdot_du
derivatives of the solution value second time derivative with respect to the degrees of freedom
std::vector< FieldVariableGradient > _vector_tag_grad
Moose::ADType< DofValue >::type ADDofValue
MooseArray< DofValue > DofValues
DofValues _dof_values_dotdot_old
the previous time step's solution value second time derivative
virtual const MooseVariableField< OutputType > & var() const
MooseArray< ADDofValue > ADDofValues
std::set< TagID > _required_vector_tags
The set of vector tags (residual + solution) we need to evaluate.
const THREAD_ID _tid
The thread ID that this object is on.
std::vector< bool > _need_vector_tag_dof_u
bool _need_grad_dot
gradient dot flags
unsigned int _count
Number of components of the associated variable.
OutputType _nodal_value_dot
nodal values of u_dot
const SubProblem & _subproblem
The subproblem which we can query for information related to tagged vectors and matrices.
bool _has_dof_values
Whether we currently have degree of freedom values stored in our local containers (corresponding to t...
MooseArray< libMesh::Number > _dof_du_dot_du
derivatives of the solution value time derivative with respect to the degrees of freedom
std::vector< bool > _need_vector_tag_grad
const VariableValue & duDotDu() const
const ADTemplateVariablePhiGradient< OutputShape > & adGradPhiFace() const
ad_grad_phi_face getter
MooseArray< std::vector< OutputShapeDivergence > > FieldVariableTestDivergence
const OutputType & nodalValueDotDot() const
void setGeometry(Moose::GeometryType gm_type)
Set the geometry type before calculating variables values.
VariableValue _du_dotdot_du
derivative of u_dotdot wrt u
std::function< const typename OutputTools< OutputShape >::VariablePhiSecond &(const Assembly &, libMesh::FEType)> _second_phi_assembly_method
MooseArray< std::vector< OutputShapeSecond > > FieldVariableTestSecond
bool _need_curl
curl flags
const OutputType & nodalValueDot() const
const FieldVariableDivergence & divSln(Moose::SolutionState state) const
Local solution divergence getter.
void reinitNode()
Prepare degrees of freedom for the current node.
FieldVariableCurl _curl_u
curl_u
bool usesSecondPhi() const
Whether or not this variable is computing any second derivatives.
const FieldVariableCurl & curlSln(Moose::SolutionState state) const
Local solution curl getter.
const FieldVariablePhiSecond * _second_phi_face
const libMesh::FEType & _fe_type
const FieldVariablePhiDivergence & divPhiFace() const
divergence_phi_face getter
const FieldVariablePhiCurl & curlPhi() const
curl_phi getter
void setDofValue(const DofValue &value, unsigned int index)
dof value setters
const ADTemplateVariableValue< OutputType > & adUDot() const
const FieldVariableGradient & gradSlnDotDot() const
Local second time derivative of solution gradient getter.
void reinitNodes(const std::vector< dof_id_type > &nodes)
Set _dof_indices to the degrees of freedom existing on the passed-in nodes.
const FieldVariableValue & uDotDot() const
void computeConstantMonomialValues()
compute the values for const monomial variables
std::function< const typename OutputTools< OutputShape >::VariablePhiSecond &(const Assembly &, libMesh::FEType)> _second_phi_face_assembly_method
ADTemplateVariableGradient< OutputType > _ad_grad_u_dot
FieldVariableGradient _grad_u_dot
grad_u dots
MooseArray< std::vector< OutputShapeSecond > > FieldVariablePhiSecond
const FieldVariablePhiCurl * _curl_phi_face
std::function< const typename OutputTools< OutputShape >::VariablePhiDivergence &(const Assembly &, libMesh::FEType)> _div_phi_face_assembly_method
ADTemplateVariableSecond< OutputType > _ad_second_u
bool computingDiv() const
Whether or not this variable is computing the divergence.
const FieldVariablePhiValue & phi() const
phi getter
const FieldVariableGradient & gradSlnDot() const
Local time derivative of solution gradient getter.
MappedArrayVariablePhiGradient _mapped_grad_phi
std::function< const typename OutputTools< OutputShape >::VariablePhiCurl &(const Assembly &, libMesh::FEType)> _curl_phi_face_assembly_method
std::size_t phiSize() const
Return phi size.
const FieldVariableValue & uDotOld() const
const FieldVariablePhiGradient * _grad_phi_face
void computeIncrementAtQps(const libMesh::NumericVector< libMesh::Number > &increment_vec)
Compute and store incremental change in solution at QPs based on increment_vec.
const QBase *const & _qrule
The current qrule.
const FieldVariablePhiGradient & gradPhiFace() const
grad_phi_face getter
MooseArray< std::vector< OutputShape > > FieldVariableTestValue
bool _need_second
SolutionState second_u flags.
libMesh::TensorTools::DecrementRank< OutputShape >::type OutputShapeDivergence
void computeIncrementAtNode(const libMesh::NumericVector< libMesh::Number > &increment_vec)
Compute and store incremental change at the current node based on increment_vec.
Moose::ShapeType< OutputType >::type OutputShape
FieldVariableSecond _second_u_previous_nl
MooseArray< std::vector< OutputShape > > FieldVariablePhiValue
Moose::ADType< OutputType >::type _ad_nodal_value
AD nodal value.
FieldVariableValue _u_dot_old
u_dot_old (time derivative)
const dof_id_type & nodalDofIndex() const
const ADTemplateVariableCurl< OutputType > & adCurlSln() const
const OutputType & nodalValueDuDotDu() const
const FieldVariablePhiGradient * _current_grad_phi
std::size_t phiFaceSize() const
Return phiFace size.
const ADTemplateVariableGradient< OutputType > & adGradSlnDot() const
std::function< const ADTemplateVariablePhiGradient< OutputShape > &(const Assembly &, libMesh::FEType)> _ad_grad_phi_assembly_method
FieldVariableDivergence _div_u
divergence_u
DofValue getNodalValue(const Node &node, Moose::SolutionState state) const
const FieldVariablePhiGradient & gradPhi() const
grad_phi getter
const FieldVariablePhiSecond * _second_phi
const ADDofValues & adDofValues() const
Return the AD dof values.
const Moose::ADType< OutputType >::type & adNodalValue() const
bool needsAD() const
Returns whether this data structure needs automatic differentiation calculations.
bool hasDoFsOnNodes() const override
Whether this data is associated with a variable that has DoFs on nodes.
bool _is_nodal
if variable is nodal
const MooseVariableFE< OutputType > & _var
A const reference to the owning MooseVariableFE object.
FieldVariableValue _u_dot
u_dot (time derivative)
MooseArray< ADRealEigenVector > _ad_dofs_dot_eigen
const QBase * _current_qrule
const FieldVariablePhiValue * _phi
const DofValues & dofValuesDot() const
std::function< const typename OutputTools< OutputShape >::VariablePhiGradient &(const Assembly &, libMesh::FEType)> _grad_phi_assembly_method
FieldVariableDivergence _div_u_old
const FieldVariablePhiValue * _phi_face
void computeNodalValues()
compute nodal things
MooseArray< std::vector< OutputShapeGradient > > FieldVariablePhiGradient
ADReal _ad_zero
A zero AD variable.
const VariableValue & duDotDotDu() const
void computeValuesInternal()
Internal method for computeValues() and computeConstantMonomialValues()
MooseArray< std::vector< OutputShape > > FieldVariablePhiCurl
const unsigned int _var_num
const FieldVariablePhiGradient * _grad_phi
const ADTemplateVariablePhiGradient< OutputShape > * _ad_grad_phi
MooseArray< std::vector< OutputShapeDivergence > > FieldVariablePhiDivergence
ADTemplateVariableGradient< OutputType > _ad_grad_u
FieldVariableSecond _second_u
second_u
const ADTemplateVariableSecond< OutputType > & adSecondSln() const
MooseArray< OutputSecond > FieldVariableSecond
const unsigned int & currentSide() const
The current side.
const FieldVariablePhiSecond & secondPhi() const
second_phi getter
const FieldVariablePhiCurl * _curl_phi
const ADTemplateVariablePhiGradient< OutputShape > * _current_ad_grad_phi
std::function< const typename OutputTools< OutputShape >::VariablePhiCurl &(const Assembly &, libMesh::FEType)> _curl_phi_assembly_method
FieldVariableCurl _curl_u_old
const MappedArrayVariablePhiGradient & arrayGradPhi() const
mapped_grad_phi getter
const ADTemplateVariablePhiGradient< OutputShape > * _ad_grad_phi_face
FieldVariableValue _u_dotdot
u_dotdot (second time derivative)
void getDofIndices(const Elem *elem, std::vector< dof_id_type > &dof_indices) const
const FieldVariablePhiDivergence & divPhi() const
divergence_phi getter
const QBase *const & _qrule_face
ADTemplateVariableCurl< OutputType > _ad_curl_u
const FieldVariableSecond & secondSln(Moose::SolutionState state) const
Local solution second spatial derivative getter.
bool computingCurl() const
Whether or not this variable is computing the curl.
const FieldVariablePhiSecond * _current_second_phi
void setDofValues(const DenseVector< DofValue > &values)
Set local DOF values and evaluate the values on quadrature points.
const FieldVariableValue & uDotDotOld() const
const MappedArrayVariablePhiGradient & arrayGradPhiFace() const
mapped_grad_phi_face getter
void addSolution(libMesh::NumericVector< libMesh::Number > &sol, const DenseVector< libMesh::Number > &v) const
Add passed in local DOF values to a solution vector.
MappedArrayVariablePhiGradient _mapped_grad_phi_neighbor
const FieldVariableValue & increment() const
Increment getter.
const FieldVariableValue & uDot() const
ADReal _ad_real_dummy
A dummy ADReal variable.
bool isNodal() const override
ADTemplateVariableValue< OutputType > _ad_u_dot
const OutputType & nodalValueDuDotDotDu() const
FieldVariableSecond _second_u_old
void prepare()
Get the dof indices corresponding to the current element.
bool isNodalDefined() const
std::function< const typename OutputTools< OutputShape >::VariablePhiGradient &(const Assembly &, libMesh::FEType)> _grad_phi_face_assembly_method
FieldVariableDivergence _div_u_older
ADTemplateVariableValue< OutputType > _ad_u
AD u.
std::function< const ADTemplateVariablePhiGradient< OutputShape > &(const Assembly &, libMesh::FEType)> _ad_grad_phi_face_assembly_method
FieldVariableValue _increment
Increment in the variable used in dampers.
const Elem *const & _elem
The current elem.
const MooseArray< libMesh::Number > & dofValuesDuDotDu() const
void prepareIC()
prepare the initial condition
const ADTemplateVariableValue< OutputType > & adSln() const
const bool _displaced
Whether this variable is being calculated on a displaced system.
MooseArray< ADRealEigenVector > _ad_dofs_dotdot_eigen
void fill(DestinationType &dest, const ShapeType &phi, const DofValuesType &dof_values, unsigned int nqp, std::size_t num_shapes)
MooseArray< std::vector< OutputShapeGradient > > FieldVariableTestGradient
FieldVariableSecond _second_u_older
MappedArrayVariablePhiGradient _mapped_grad_phi_face_neighbor
const Node *const & _node
The current node.
std::function< const typename OutputTools< OutputShape >::VariablePhiDivergence &(const Assembly &, libMesh::FEType)> _div_phi_assembly_method
const OutputType & nodalValueDotOld() const
MappedArrayVariablePhiGradient _mapped_grad_phi_face
void fetchADDofValues()
Helper method for assigning the ad_dof* arrays.
void assignADNodalValue()
Helper method for assigning nodal values from their corresponding solution values (dof values as they...
const FieldVariablePhiCurl * _current_curl_phi
const TimeIntegrator * _time_integrator
Pointer to time integrator.
void computeValues()
compute the variable values
const FieldVariablePhiDivergence * _current_div_phi
const unsigned int & _current_side
The current element side.
void reinitAux()
Prepare dof indices and solution values for elemental auxiliary variables.
const FieldVariablePhiDivergence * _div_phi
const Elem *const & currentElem() const
The current element.
ADTemplateVariableValue< OutputType > _ad_u_dotdot
DofValue getElementalValue(const Elem *elem, Moose::SolutionState state, unsigned int idx=0) const
const ADTemplateVariablePhiGradient< OutputShape > & adGradPhi() const
ad_grad_phi getter
const Assembly & _assembly
Moose::ElementType _element_type
The element type this object is storing data for. This is either Element, Neighbor,...
const ADTemplateVariableGradient< OutputType > & adGradSln() const
libMesh::TensorTools::IncrementRank< OutputShape >::type OutputShapeGradient
bool _need_div
divergence flags
void insertNodalValue(libMesh::NumericVector< libMesh::Number > &residual, const DofValue &v)
Write a nodal value to the passed-in solution vector.
libMesh::FEContinuity _continuity
Continuity type of the variable.
unsigned int numberOfDofs() const
const Node *const & node() const
const FieldVariablePhiCurl & curlPhiFace() const
curl_phi_face getter
const FieldVariablePhiDivergence * _div_phi_face
const ADTemplateVariableValue< OutputType > & adUDotDot() const
const FieldVariablePhiSecond & secondPhiFace() const
second_phi_face getter
const DofValues & dofValuesDotDotOld() const
ADDofValues _ad_dofs_dotdot
FieldVariableValue _u_dotdot_old
u_dotdot_old (second time derivative)
const OutputType & nodalValueDotDotOld() const
const FieldVariablePhiValue * _current_phi
const DofValues & dofValuesDotOld() const
const std::vector< dof_id_type > & dofIndices() const
VariableValue _du_dot_du
derivative of u_dot wrt u
MooseArray< OutputType > FieldVariableCurl
const FieldVariablePhiValue & phiFace() const
phi_face getter
libMesh::TensorTools::IncrementRank< OutputShapeGradient >::type OutputShapeSecond
std::function< const typename OutputTools< OutputShape >::VariablePhiValue &(const Assembly &, libMesh::FEType)> _phi_face_assembly_method
void computeAD(const unsigned int num_dofs, const unsigned int nqp)
compute AD things
libMesh::FEContinuity getContinuity() const override
Return the variable continuity.
MooseArray< std::vector< OutputShape > > FieldVariableTestCurl
const ADDofValues & adDofValuesDot() const
Return the AD time derivative values of degrees of freedom.
MooseArray< OutputDivergence > FieldVariableDivergence
const DofValues & dofValuesDotDot() const
const MooseArray< libMesh::Number > & dofValuesDuDotDotDu() const
dof_id_type _nodal_dof_index
The dof index for the current node.
std::function< const typename OutputTools< OutputType >::VariablePhiValue &(const Assembly &, libMesh::FEType)> _phi_assembly_method
FieldVariableCurl _curl_u_older
FieldVariableGradient _grad_u_dotdot
Class for stuff related to variables.
Generic class for solving transient nonlinear problems.
Definition SubProblem.h:79
Base class for a system (of equations)
Definition SystemBase.h:87
Base class for time integrators.
@ VAR_FIELD_ARRAY
Definition MooseTypes.h:780
SolutionState
Definition MooseTypes.h:262
std::string stringify(const T &t)
conversion to string
Definition Conversion.h:64
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
uint8_t dof_id_type
OutputType type
Definition MooseTypes.h:291