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>
95 const QBase *
const & qrule_in,
96 const QBase *
const & qrule_face_in,
97 const Node *
const &
node,
98 const Elem *
const & elem);
126 void computeAD(
const unsigned int num_dofs,
const unsigned int nqp);
394 void getDofIndices(
const Elem * elem, std::vector<dof_id_type> & dof_indices)
const;
418 void reinitNodes(
const std::vector<dof_id_type> & nodes);
478 template <
bool monomial>
666 std::function<const ADTemplateVariablePhiGradient<OutputShape> &(
const Assembly &,
669 std::function<const ADTemplateVariablePhiGradient<OutputShape> &(
const Assembly &,
748 template <
typename OutputType>
753 return _ad_dof_values;
756 template <
typename OutputType>
760 _need_ad = _need_ad_u_dot =
true;
761 if (!_time_integrator)
767 template <
typename OutputType>
772 return _ad_nodal_value;
775 template <
typename OutputType>
779 _need_ad = _need_ad_u_dot =
true;
781 if (!_time_integrator)
791 template <
typename OutputType>
795 _need_ad = _need_ad_u_dotdot =
true;
797 if (!_time_integrator)
802 _need_u_dotdot =
true;
807 template <
typename OutputType>
813 mooseAssert(_ad_grad_phi,
"this should be non-null");
814 return *_ad_grad_phi;
817 template <
typename OutputType>
823 mooseAssert(_ad_grad_phi_face,
"this should be non-null");
824 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
OutputData getNodalValue(const Node &node, Moose::SolutionState state) 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 FieldVariablePhiSecond * _second_phi
void computeAD(const unsigned int num_dofs, const unsigned int nqp)
compute AD things
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.
Class for stuff related to variables.
const MappedArrayVariablePhiGradient & arrayGradPhi() const
mapped_grad_phi getter
MooseArray< OutputType > FieldVariableValue
libMesh::TensorTools::DecrementRank< OutputShape >::type OutputShapeDivergence
void setDofValue(const OutputData &value, unsigned int index)
dof value setters
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
MooseArray< OutputData > DoFValue
MooseArray< std::vector< OutputShape > > FieldVariablePhiCurl
MooseArray< std::vector< OutputShapeDivergence > > FieldVariableTestDivergence
const ADTemplateVariableGradient< OutputType > & adGradSlnDot() const
const Node *const & _node
The current node.
MooseArray< ADReal > _ad_dofs_dot
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
std::function< const typename OutputTools< OutputShape >::VariablePhiCurl &(const Assembly &, libMesh::FEType)> _curl_phi_assembly_method
Moose::DOFType< OutputType >::type OutputData
bool _need_second
SolutionState second_u flags.
const OutputType & nodalValueDotOld() const
const FieldVariablePhiGradient * _current_grad_phi
const MooseArray< ADReal > & adDofValues() const
Return the AD dof values.
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
const ADTemplateVariableValue< OutputType > & adUDotDot() const
void computeMonomialValues()
compute the values for const monomial variables
MooseArray< ADReal > _ad_dofs_dotdot
ADReal _ad_real_dummy
A dummy ADReal variable.
const FieldVariablePhiDivergence * _current_div_phi
MooseVariableData(const MooseVariableField< 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)
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
A structure for storing the various lists that contain the names of the items to be exported...
ADTemplateVariableGradient< OutputType > _ad_grad_u_dot
FieldVariableValue _u_dot_old
u_dot_old (time derivative)
const unsigned int _var_num
libMesh::TensorTools::IncrementRank< OutputType >::type OutputGradient
void prepareIC()
prepare the initial condition
MappedArrayVariablePhiGradient _mapped_grad_phi_neighbor
OutputTools< Real >::VariablePhiSecond VariablePhiSecond
void assignADNodalValue(const ADReal &value, const unsigned int &component)
Helper methods for assigning nodal values from their corresponding solution values (dof values as the...
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< OutputData > &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
OutputData getElementalValue(const Elem *elem, Moose::SolutionState state, unsigned int idx=0) const
MappedArrayVariablePhiGradient _mapped_grad_phi_face_neighbor
void insertNodalValue(libMesh::NumericVector< libMesh::Number > &residual, const OutputData &v)
Write a nodal value to the passed-in solution vector.
std::function< const typename OutputTools< OutputShape >::VariablePhiSecond &(const Assembly &, libMesh::FEType)> _second_phi_face_assembly_method
const FieldVariablePhiSecond * _second_phi_face
const DoFValue & dofValuesDotDotOld() const
const MooseArray< libMesh::Number > & dofValuesDuDotDu() const
const DoFValue & dofValuesDot() 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 MooseArray< ADReal > & adDofValuesDot() const
Return the AD time derivative values of degrees of freedom.
void computeValuesInternal()
Internal method for computeValues() and computeMonomialValues()
const OutputType & nodalValueDot() const
unsigned int numberOfDofs() const
const Elem *const & currentElem() const
The current element.
bool _need_ad_u_dot
AD u dot flags.
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.
const ADTemplateVariableValue< OutputType > & adSln() const
bool _need_curl
curl flags
virtual const MooseVariableField< OutputType > & var() const
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.
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.
libMesh::TensorTools::IncrementRank< OutputGradient >::type OutputSecond
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 DoFValue & dofValuesDotDot() const
const std::vector< dof_id_type > & dofIndices() const
const ADTemplateVariableCurl< OutputType > & adCurlSln() const
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.
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
libMesh::TensorTools::DecrementRank< OutputType >::type OutputDivergence
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
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.
const FieldVariableCurl & curlSln(Moose::SolutionState state) const
Local solution curl getter.
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< 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.
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.
MooseArray< OutputGradient > FieldVariableGradient
const FieldVariablePhiCurl & curlPhiFace() const
curl_phi_face getter
const DoFValue & dofValuesDotOld() const
const ADTemplateVariablePhiGradient< OutputShape > & adGradPhiFace() const
ad_grad_phi_face getter
const FieldVariablePhiGradient & gradPhi() const
grad_phi getter
void fetchADNodalValues()
MooseArray< std::vector< OutputShapeGradient > > FieldVariableTestGradient
VariableValue _du_dotdot_du
derivative of u_dotdot wrt u
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.
MooseArray< ADReal > _ad_dof_values
bool _is_nodal
if variable is nodal
const FieldVariablePhiGradient * _grad_phi
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
MooseArray< std::vector< OutputShape > > FieldVariableTestValue
MooseArray< std::vector< OutputShapeGradient > > FieldVariablePhiGradient
FieldVariableCurl _curl_u
curl_u