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" 48 template <
typename OutputType>
97 const QBase *
const & qrule_in,
98 const QBase *
const & qrule_face_in,
99 const Node *
const &
node,
100 const Elem *
const & elem);
128 template <
bool constant_monomial>
129 void computeAD(
const unsigned int num_dofs,
const unsigned int nqp);
397 void getDofIndices(
const Elem * elem, std::vector<dof_id_type> & dof_indices)
const;
421 void reinitNodes(
const std::vector<dof_id_type> & nodes);
485 template <
bool constant_monomial>
488 template <
bool constant_monomial,
489 typename DestinationType,
491 typename DofValuesType>
492 void fill(DestinationType & dest,
494 const DofValuesType & dof_values,
496 std::size_t num_shapes);
687 std::function<const ADTemplateVariablePhiGradient<OutputShape> &(
const Assembly &,
690 std::function<const ADTemplateVariablePhiGradient<OutputShape> &(
const Assembly &,
770 template <
typename OutputType>
775 return _ad_dof_values;
778 template <
typename OutputType>
782 _need_ad = _need_ad_u_dot =
true;
783 if (!_time_integrator)
789 template <
typename OutputType>
794 return _ad_nodal_value;
797 template <
typename OutputType>
801 _need_ad = _need_ad_u_dot =
true;
803 if (!_time_integrator)
813 template <
typename OutputType>
817 _need_ad = _need_ad_u_dotdot =
true;
819 if (!_time_integrator)
824 _need_u_dotdot =
true;
829 template <
typename OutputType>
835 mooseAssert(_ad_grad_phi,
"this should be non-null");
836 return *_ad_grad_phi;
839 template <
typename OutputType>
845 mooseAssert(_ad_grad_phi_face,
"this should be non-null");
846 return *_ad_grad_phi_face;
const FieldVariableDivergence & divSln(Moose::SolutionState state) const
Local solution divergence getter.
typename OutputTools< typename Moose::ADType< T >::type >::VariableSecond ADTemplateVariableSecond
FieldVariableCurl _curl_u_old
const Assembly & _assembly
bool _need_grad_dot
gradient dot flags
const ADTemplateVariableValue< OutputType > & adUDot() const
const FieldVariablePhiDivergence * _div_phi_face
typename OutputTools< typename Moose::ADType< T >::type >::VariableCurl ADTemplateVariableCurl
const ADTemplateVariableSecond< OutputType > & adSecondSln() const
const FieldVariableValue & uDotDotOld() const
const OutputType & nodalValueDuDotDotDu() const
bool usesSecondPhi() const
Whether or not this variable is computing any second derivatives.
const MappedArrayVariablePhiGradient & arrayGradPhiFace() const
mapped_grad_phi_face getter
const ADDofValues & adDofValues() const
Return the AD dof values.
const FieldVariablePhiSecond * _second_phi
MooseArray< DofValue > DofValues
typename OutputTools< typename Moose::ADType< T >::type >::VariablePhiGradient ADTemplateVariablePhiGradient
const unsigned int & currentSide() const
The current side.
MooseArray< std::vector< OutputShape > > FieldVariableTestCurl
const FieldVariablePhiCurl & curlPhi() const
curl_phi getter
void reinitNodes(const std::vector< dof_id_type > &nodes)
Set _dof_indices to the degrees of freedom existing on the passed-in nodes.
Keeps track of stuff related to assembling.
Class for stuff related to variables.
void prepare()
Get the dof indices corresponding to the current element.
MooseArray< OutputDivergence > FieldVariableDivergence
MappedArrayVariablePhiGradient _mapped_grad_phi
ADTemplateVariableValue< OutputType > _ad_u
AD u.
const MappedArrayVariablePhiGradient & arrayGradPhi() const
mapped_grad_phi getter
libMesh::TensorTools::DecrementRank< OutputShape >::type OutputShapeDivergence
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
MooseArray< std::vector< OutputShape > > FieldVariablePhiCurl
MooseArray< std::vector< OutputShapeDivergence > > FieldVariableTestDivergence
const ADTemplateVariableGradient< OutputType > & adGradSlnDot() const
const Node *const & _node
The current node.
void computeConstantMonomialValues()
compute the values for const monomial variables
bool computingCurl() const
Whether or not this variable is computing the curl.
void computeValues()
compute the variable values
ADTemplateVariableSecond< OutputType > _ad_second_u
FieldVariableSecond _second_u_older
FieldVariableSecond _second_u_previous_nl
const FieldVariableValue & uDotDot() const
void getDofIndices(const Elem *elem, std::vector< dof_id_type > &dof_indices) const
const DofValues & dofValuesDot() const
std::function< const typename OutputTools< OutputShape >::VariablePhiCurl &(const Assembly &, libMesh::FEType)> _curl_phi_assembly_method
bool _need_second
SolutionState second_u flags.
const OutputType & nodalValueDotOld() const
MooseArray< OutputGradient > FieldVariableGradient
const FieldVariablePhiGradient * _current_grad_phi
MooseArray< OutputSecond > FieldVariableSecond
const FieldVariableValue & increment() const
Increment getter.
MappedArrayVariablePhiGradient _mapped_grad_phi_face
std::function< const typename OutputTools< OutputShape >::VariablePhiCurl &(const Assembly &, libMesh::FEType)> _curl_phi_face_assembly_method
typename OutputTools< typename Moose::ADType< T >::type >::VariableValue ADTemplateVariableValue
void computeIncrementAtNode(const libMesh::NumericVector< libMesh::Number > &increment_vec)
Compute and store incremental change at the current node based on increment_vec.
const FieldVariablePhiDivergence * _div_phi
ADTemplateVariableGradient< OutputType > _ad_grad_u
dof_id_type _nodal_dof_index
The dof index for the current node.
const FieldVariablePhiCurl * _current_curl_phi
const FieldVariableValue & uDot() const
OutputTools< Real >::VariablePhiValue VariablePhiValue
void assignADNodalValue()
Helper method for assigning nodal values from their corresponding solution values (dof values as they...
const ADTemplateVariableValue< OutputType > & adUDotDot() const
ADReal _ad_real_dummy
A dummy ADReal variable.
const FieldVariablePhiDivergence * _current_div_phi
bool _need_second_previous_nl
const FieldVariablePhiCurl * _curl_phi_face
void computeNodalValues()
compute nodal things
const MooseArray< libMesh::Number > & dofValuesDuDotDotDu() const
MooseArray< std::vector< OutputShapeSecond > > FieldVariablePhiSecond
const QBase * _current_qrule
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
const FieldVariablePhiCurl * _curl_phi
std::function< const ADTemplateVariablePhiGradient< OutputShape > &(const Assembly &, libMesh::FEType)> _ad_grad_phi_assembly_method
Base class for a system (of equations)
MooseArray< std::vector< OutputShapeSecond > > FieldVariableTestSecond
bool hasDoFsOnNodes() const override
Whether this data is associated with a variable that has DoFs on nodes.
DualNumber< Real, DNDerivativeType, true > ADReal
ADTemplateVariableGradient< OutputType > _ad_grad_u_dot
FieldVariableValue _u_dot_old
u_dot_old (time derivative)
const unsigned int _var_num
void fill(DestinationType &dest, const ShapeType &phi, const DofValuesType &dof_values, unsigned int nqp, std::size_t num_shapes)
void prepareIC()
prepare the initial condition
Moose::ADType< DofValue >::type ADDofValue
MappedArrayVariablePhiGradient _mapped_grad_phi_neighbor
OutputTools< Real >::VariablePhiSecond VariablePhiSecond
libMesh::TensorTools::DecrementRank< OutputType >::type OutputDivergence
MooseArray< std::vector< OutputShapeDivergence > > FieldVariablePhiDivergence
FieldVariableDivergence _div_u_old
const FieldVariableGradient & gradSlnDot() const
Local time derivative of solution gradient getter.
FieldVariableDivergence _div_u_older
libMesh::TensorTools::IncrementRank< OutputShapeGradient >::type OutputShapeSecond
void setDofValues(const DenseVector< DofValue > &values)
Set local DOF values and evaluate the values on quadrature points.
VariableValue _du_dot_du
derivative of u_dot wrt u
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
MappedArrayVariablePhiGradient _mapped_grad_phi_face_neighbor
std::function< const typename OutputTools< OutputShape >::VariablePhiSecond &(const Assembly &, libMesh::FEType)> _second_phi_face_assembly_method
MooseVariableData(const MooseVariableFE< OutputType > &var, SystemBase &sys, THREAD_ID tid, Moose::ElementType element_type, const QBase *const &qrule_in, const QBase *const &qrule_face_in, const Node *const &node, const Elem *const &elem)
const FieldVariablePhiSecond * _second_phi_face
const MooseArray< libMesh::Number > & dofValuesDuDotDu() const
FieldVariableValue _u_dot
u_dot (time derivative)
unsigned int size() const
The number of elements that can currently be stored in the array.
const FieldVariablePhiValue & phi() const
phi getter
ADTemplateVariableValue< OutputType > _ad_u_dot
libMesh::FEContinuity getContinuity() const override
Return the variable continuity.
FieldVariableSecond _second_u
second_u
const FieldVariablePhiDivergence & divPhi() const
divergence_phi getter
const DofValues & dofValuesDotDotOld() const
MooseArray< ADRealEigenVector > _ad_dofs_dot_eigen
void computeValuesInternal()
Internal method for computeValues() and computeConstantMonomialValues()
const OutputType & nodalValueDot() const
unsigned int numberOfDofs() const
const Elem *const & currentElem() const
The current element.
const FieldVariablePhiSecond & secondPhiFace() const
second_phi_face getter
const QBase *const & _qrule_face
void computeIncrementAtQps(const libMesh::NumericVector< libMesh::Number > &increment_vec)
Compute and store incremental change in solution at QPs based on increment_vec.
const VariableValue & duDotDotDu() const
const FieldVariablePhiGradient & gradPhiFace() const
grad_phi_face getter
const FieldVariableGradient & gradSlnDotDot() const
Local second time derivative of solution gradient getter.
ShapeType
Users of this template class must specify the type of shape functions that will be used in the Jacobi...
const ADTemplateVariableValue< OutputType > & adSln() const
bool _need_curl
curl flags
virtual const MooseVariableField< OutputType > & var() const
Moose::DOFType< OutputType >::type DofValue
std::vector< std::vector< Eigen::Map< RealDIMValue > > > MappedArrayVariablePhiGradient
std::function< const typename OutputTools< OutputShape >::VariablePhiDivergence &(const Assembly &, libMesh::FEType)> _div_phi_face_assembly_method
FieldVariableGradient _grad_u_dotdot
const OutputType & nodalValueDuDotDu() const
typename OutputTools< typename Moose::ADType< T >::type >::VariableGradient ADTemplateVariableGradient
OutputTools< Real >::VariablePhiCurl VariablePhiCurl
bool _need_div
divergence flags
void reinitNode()
Prepare degrees of freedom for the current node.
const DofValues & dofValuesDotOld() const
bool isNodalDefined() const
const QBase *const & _qrule
The current qrule.
std::function< const ADTemplateVariablePhiGradient< OutputShape > &(const Assembly &, libMesh::FEType)> _ad_grad_phi_face_assembly_method
const TimeIntegrator * _time_integrator
Pointer to time integrator.
const MooseVariableFE< OutputType > & _var
A const reference to the owning MooseVariableFE object.
MooseArray< OutputType > FieldVariableCurl
FieldVariableValue _increment
Increment in the variable used in dampers.
FieldVariableDivergence _div_u
divergence_u
const Elem *const & _elem
The current elem.
std::string stringify(const T &t)
conversion to string
const std::vector< dof_id_type > & dofIndices() const
const ADTemplateVariableCurl< OutputType > & adCurlSln() const
MooseArray< OutputType > FieldVariableValue
const ADTemplateVariablePhiGradient< OutputShape > & adGradPhi() const
ad_grad_phi getter
libMesh::FEContinuity _continuity
Continuity type of the variable.
OutputTools< Real >::VariablePhiDivergence VariablePhiDivergence
std::size_t phiSize() const
Return phi size.
ADDofValues _ad_dofs_dotdot
const ADTemplateVariableGradient< OutputType > & adGradSln() const
Moose::ElementType _element_type
The element type this object is storing data for. This is either Element, Neighbor, or Lower.
ADReal _ad_zero
A zero AD variable.
const Moose::ADType< OutputType >::type & adNodalValue() const
std::function< const typename OutputTools< OutputShape >::VariablePhiGradient &(const Assembly &, libMesh::FEType)> _grad_phi_assembly_method
const ADTemplateVariablePhiGradient< OutputShape > * _ad_grad_phi
Moose::ADType< OutputType >::type _ad_nodal_value
AD nodal value.
const dof_id_type & nodalDofIndex() const
const VariableValue & duDotDu() const
const OutputType & nodalValueDotDotOld() const
FieldVariableValue _u_dotdot
u_dotdot (second time derivative)
OutputTools< Real >::VariableValue VariableValue
std::function< const typename OutputTools< OutputShape >::VariablePhiGradient &(const Assembly &, libMesh::FEType)> _grad_phi_face_assembly_method
const FieldVariablePhiValue * _phi_face
OutputTools< Real >::VariablePhiGradient VariablePhiGradient
FieldVariableGradient _grad_u_dot
grad_u dots
const FieldVariablePhiValue & phiFace() const
phi_face getter
std::function< const typename OutputTools< OutputShape >::VariablePhiSecond &(const Assembly &, libMesh::FEType)> _second_phi_assembly_method
void fetchADDofValues()
Helper method for assigning the ad_dof* arrays.
const Node *const & node() const
FieldVariableValue _u_dotdot_old
u_dotdot_old (second time derivative)
Base class for time integrators.
Generic class for solving transient nonlinear problems.
ADDofValues _ad_dof_values
DofValue getNodalValue(const Node &node, Moose::SolutionState state) const
const FieldVariableCurl & curlSln(Moose::SolutionState state) const
Local solution curl getter.
const DofValues & dofValuesDotDot() const
const FieldVariableValue & uDotOld() const
const libMesh::FEType & _fe_type
FieldVariableSecond _second_u_old
Moose::ShapeType< OutputType >::type OutputShape
const ADTemplateVariablePhiGradient< OutputShape > * _ad_grad_phi_face
const FieldVariablePhiSecond & secondPhi() const
second_phi getter
const OutputType & nodalValueDotDot() const
bool computingDiv() const
Whether or not this variable is computing the divergence.
libMesh::TensorTools::IncrementRank< OutputShape >::type OutputShapeGradient
MooseArray< ADDofValue > ADDofValues
MooseArray< std::vector< OutputShape > > FieldVariablePhiValue
const bool _displaced
Whether this variable is being calculated on a displaced system.
const FieldVariablePhiSecond * _current_second_phi
const unsigned int & _current_side
The current element side.
void setDofValue(const DofValue &value, unsigned int index)
dof value setters
const FieldVariablePhiGradient * _grad_phi_face
void addSolution(libMesh::NumericVector< libMesh::Number > &sol, const DenseVector< libMesh::Number > &v) const
Add passed in local DOF values to a solution vector.
const FieldVariablePhiCurl & curlPhiFace() const
curl_phi_face getter
const ADTemplateVariablePhiGradient< OutputShape > & adGradPhiFace() const
ad_grad_phi_face getter
const FieldVariablePhiGradient & gradPhi() const
grad_phi getter
MooseArray< std::vector< OutputShapeGradient > > FieldVariableTestGradient
VariableValue _du_dotdot_du
derivative of u_dotdot wrt u
MooseArray< ADRealEigenVector > _ad_dofs_dotdot_eigen
const FieldVariablePhiValue * _current_phi
void setGeometry(Moose::GeometryType gm_type)
Set the geometry type before calculating variables values.
void reinitAux()
Prepare dof indices and solution values for elemental auxiliary variables.
std::vector< dof_id_type > _dof_indices
The dof indices for the current element.
const ADTemplateVariablePhiGradient< OutputShape > * _current_ad_grad_phi
ADTemplateVariableValue< OutputType > _ad_u_dotdot
std::function< const typename OutputTools< OutputType >::VariablePhiValue &(const Assembly &, libMesh::FEType)> _phi_assembly_method
bool isNodal() const override
const FieldVariablePhiDivergence & divPhiFace() const
divergence_phi_face getter
const FieldVariableSecond & secondSln(Moose::SolutionState state) const
Local solution second spatial derivative getter.
FieldVariableCurl _curl_u_older
ADTemplateVariableCurl< OutputType > _ad_curl_u
std::size_t phiFaceSize() const
Return phiFace size.
bool _is_nodal
if variable is nodal
const FieldVariablePhiGradient * _grad_phi
void insertNodalValue(libMesh::NumericVector< libMesh::Number > &residual, const DofValue &v)
Write a nodal value to the passed-in solution vector.
std::function< const typename OutputTools< OutputShape >::VariablePhiDivergence &(const Assembly &, libMesh::FEType)> _div_phi_assembly_method
bool needsAD() const
Returns whether this data structure needs automatic differentiation calculations. ...
const FieldVariablePhiValue * _phi
const ADDofValues & adDofValuesDot() const
Return the AD time derivative values of degrees of freedom.
MooseArray< std::vector< OutputShape > > FieldVariableTestValue
MooseArray< std::vector< OutputShapeGradient > > FieldVariablePhiGradient
DofValue getElementalValue(const Elem *elem, Moose::SolutionState state, unsigned int idx=0) const
FieldVariableCurl _curl_u
curl_u