www.mooseframework.org
Public Member Functions | Protected Attributes | Private Types | Friends | List of all members
MooseVariableFE< OutputType > Class Template Reference

Class for stuff related to variables. More...

#include <Adaptivity.h>

Inheritance diagram for MooseVariableFE< OutputType >:
[legend]

Public Member Functions

 MooseVariableFE (unsigned int var_num, const FEType &fe_type, SystemBase &sys, Assembly &assembly, Moose::VarKindType var_kind, THREAD_ID tid)
 
virtual ~MooseVariableFE ()
 
void clearDofIndices () override
 Clear out the dof indices. More...
 
void prepare () override
 
void prepareNeighbor () override
 
void prepareAux () override
 
void reinitNode () override
 
void reinitAux () override
 
void reinitAuxNeighbor () override
 
void reinitNodes (const std::vector< dof_id_type > &nodes) override
 
void reinitNodesNeighbor (const std::vector< dof_id_type > &nodes) override
 
bool usesPhi ()
 Whether or not this variable is actually using the shape function value. More...
 
bool usesGradPhi ()
 Whether or not this variable is actually using the shape function gradient. More...
 
bool usesPhiNeighbor ()
 Whether or not this variable is actually using the shape function value. More...
 
bool usesGradPhiNeighbor ()
 Whether or not this variable is actually using the shape function gradient. More...
 
bool usesSecondPhi ()
 Whether or not this variable is computing any second derivatives. More...
 
bool usesSecondPhiNeighbor ()
 Whether or not this variable is actually using the shape function second derivative on a neighbor. More...
 
bool computingSecond ()
 Whether or not this variable is computing any second derivatives. More...
 
bool computingCurl ()
 Whether or not this variable is computing the curl. More...
 
const std::set< SubdomainID > & activeSubdomains () const override
 The subdomains the variable is active on. More...
 
bool activeOnSubdomain (SubdomainID subdomain) const override
 Is the variable active on the subdomain? More...
 
bool isNodal () const override
 Is this variable nodal. More...
 
bool isVector () const override
 
const Node *& node () const
 
virtual dof_id_type & nodalDofIndex () override
 
bool isNodalDefined () const
 
const Node *& nodeNeighbor () const
 
virtual dof_id_type & nodalDofIndexNeighbor () override
 
bool isNodalNeighborDefined () const
 
const Elem *& currentElem () const override
 Current element this variable is evaluated at. More...
 
unsigned int & currentSide () const
 Current side this variable is being evaluated on. More...
 
const Elem *& neighbor () const
 Current neighboring element. More...
 
const MooseArray< Point > & normals () const override
 
virtual void prepareIC () override
 Prepare the initial condition. More...
 
const FieldVariablePhiValuephi ()
 
const FieldVariablePhiGradientgradPhi ()
 
const FieldVariablePhiSecondsecondPhi ()
 
const FieldVariablePhiCurlcurlPhi ()
 
const FieldVariablePhiValuephiFace ()
 
const FieldVariablePhiGradientgradPhiFace ()
 
const FieldVariablePhiSecondsecondPhiFace ()
 
const FieldVariablePhiCurlcurlPhiFace ()
 
const FieldVariablePhiValuephiNeighbor ()
 
const FieldVariablePhiGradientgradPhiNeighbor ()
 
const FieldVariablePhiSecondsecondPhiNeighbor ()
 
const FieldVariablePhiCurlcurlPhiNeighbor ()
 
const FieldVariablePhiValuephiFaceNeighbor ()
 
const FieldVariablePhiGradientgradPhiFaceNeighbor ()
 
const FieldVariablePhiSecondsecondPhiFaceNeighbor ()
 
const FieldVariablePhiCurlcurlPhiFaceNeighbor ()
 
template<ComputeStage compute_stage>
const VariableTestGradientType< OutputType, compute_stage >::typeadGradPhi ()
 
template<ComputeStage compute_stage>
const VariableTestGradientType< OutputType, compute_stage >::typeadGradPhiFace ()
 
FieldVariableValueincrement ()
 
const FieldVariableValuevectorTagValue (TagID tag)
 
const FieldVariableValuematrixTagValue (TagID tag)
 
const FieldVariableValuesln ()
 
const FieldVariableValueslnOld ()
 
const FieldVariableValueslnOlder ()
 
const FieldVariableValueslnPreviousNL ()
 
const FieldVariableGradientgradSln ()
 
const FieldVariableGradientgradSlnOld ()
 
const FieldVariableGradientgradSlnOlder ()
 
const FieldVariableGradientgradSlnPreviousNL ()
 
const FieldVariableGradientgradSlnDot ()
 
const FieldVariableGradientgradSlnDotDot ()
 
const FieldVariableSecondsecondSln ()
 
const FieldVariableSecondsecondSlnOld ()
 
const FieldVariableSecondsecondSlnOlder ()
 
const FieldVariableSecondsecondSlnPreviousNL ()
 
const FieldVariableValuecurlSln ()
 
const FieldVariableValuecurlSlnOld ()
 
const FieldVariableValuecurlSlnOlder ()
 
template<ComputeStage compute_stage>
const VariableValueType< OutputType, compute_stage >::typeadSln ()
 
template<ComputeStage compute_stage>
const VariableGradientType< OutputType, compute_stage >::typeadGradSln ()
 
template<ComputeStage compute_stage>
const VariableSecondType< OutputType, compute_stage >::typeadSecondSln ()
 
template<ComputeStage compute_stage>
const VariableValueType< OutputType, compute_stage >::typeadUDot ()
 
template<ComputeStage compute_stage>
const VariableValueType< OutputType, compute_stage >::typeadSlnNeighbor ()
 
template<ComputeStage compute_stage>
const VariableGradientType< OutputType, compute_stage >::typeadGradSlnNeighbor ()
 
template<ComputeStage compute_stage>
const VariableSecondType< OutputType, compute_stage >::typeadSecondSlnNeighbor ()
 
const FieldVariableValueuDot ()
 
const FieldVariableValueuDotDot ()
 
const FieldVariableValueuDotOld ()
 
const FieldVariableValueuDotDotOld ()
 
const VariableValueduDotDu ()
 
const VariableValueduDotDotDu ()
 
template<ComputeStage compute_stage>
const VariableValueType< OutputType, compute_stage >::typeadUDotNeighbor ()
 
const FieldVariableValueslnNeighbor ()
 
const FieldVariableValueslnOldNeighbor ()
 
const FieldVariableValueslnOlderNeighbor ()
 
const FieldVariableValueslnPreviousNLNeighbor ()
 
const FieldVariableGradientgradSlnNeighbor ()
 
const FieldVariableGradientgradSlnOldNeighbor ()
 
const FieldVariableGradientgradSlnOlderNeighbor ()
 
const FieldVariableGradientgradSlnPreviousNLNeighbor ()
 
const FieldVariableGradientgradSlnNeighborDot ()
 
const FieldVariableGradientgradSlnNeighborDotDot ()
 
const FieldVariableSecondsecondSlnNeighbor ()
 
const FieldVariableSecondsecondSlnOldNeighbor ()
 
const FieldVariableSecondsecondSlnOlderNeighbor ()
 
const FieldVariableSecondsecondSlnPreviousNLNeighbor ()
 
const FieldVariableCurlcurlSlnNeighbor ()
 
const FieldVariableCurlcurlSlnOldNeighbor ()
 
const FieldVariableCurlcurlSlnOlderNeighbor ()
 
const FieldVariableValueuDotNeighbor ()
 
const FieldVariableValueuDotDotNeighbor ()
 
const FieldVariableValueuDotOldNeighbor ()
 
const FieldVariableValueuDotDotOldNeighbor ()
 
const VariableValueduDotDuNeighbor ()
 
const VariableValueduDotDotDuNeighbor ()
 
virtual void computeValuesHelper (QBase *&qrule, const FieldVariablePhiValue &phi, const FieldVariablePhiGradient &grad_phi, const FieldVariablePhiSecond *&second_phi, const FieldVariablePhiCurl *&curl_phi, const typename VariableTestGradientType< OutputType, JACOBIAN >::type &ad_grad_phi)
 Helper function for computing values. More...
 
virtual void computeNeighborValuesHelper (QBase *&qrule, const FieldVariablePhiValue &phi, const FieldVariablePhiGradient &grad_phi, const FieldVariablePhiSecond *&second_phi)
 Helper function for computing values. More...
 
virtual void computeElemValues () override
 Compute values at interior quadrature points. More...
 
virtual void computeElemValuesFace () override
 Compute values at facial quadrature points. More...
 
virtual void computeNeighborValuesFace () override
 Compute values at facial quadrature points for the neighbor. More...
 
virtual void computeNeighborValues () override
 Compute values at quadrature points for the neighbor. More...
 
void setNodalValue (OutputType value, unsigned int idx=0)
 
void setDofValues (const DenseVector< Number > &value) override
 Set values for this variable to keep everything up to date. More...
 
Number getNodalValue (const Node &node) override
 Get the value of this variable at given node. More...
 
Number getNodalValueOld (const Node &node) override
 Get the old value of this variable at given node. More...
 
Number getNodalValueOlder (const Node &node) override
 Get the t-2 value of this variable at given node. More...
 
Number getElementalValue (const Elem *elem, unsigned int idx=0) const override
 Get the current value of this variable on an element. More...
 
Number getElementalValueOld (const Elem *elem, unsigned int idx=0) const override
 Get the old value of this variable on an element. More...
 
Number getElementalValueOlder (const Elem *elem, unsigned int idx=0) const override
 Get the older value of this variable on an element. More...
 
void getDofIndices (const Elem *elem, std::vector< dof_id_type > &dof_indices) override
 
std::vector< dof_id_type > & dofIndicesNeighbor () override
 Get neighbor DOF indices for currently selected element. More...
 
unsigned int numberOfDofsNeighbor () override
 
void insert (NumericVector< Number > &residual) override
 
void add (NumericVector< Number > &residual)
 
const MooseArray< Number > & dofValue () override
 Deprecated method. More...
 
const MooseArray< Number > & dofValues () override
 Returns dof solution on element. More...
 
const MooseArray< Number > & dofValuesOld () override
 Returns old dof solution on element. More...
 
const MooseArray< Number > & dofValuesOlder () override
 Returns older dof solution on element. More...
 
const MooseArray< Number > & dofValuesPreviousNL () override
 Returns previous nl solution on element. More...
 
const MooseArray< Number > & dofValuesNeighbor () override
 Returns dof solution on neighbor element. More...
 
const MooseArray< Number > & dofValuesOldNeighbor () override
 Returns old dof solution on neighbor element. More...
 
const MooseArray< Number > & dofValuesOlderNeighbor () override
 Returns older dof solution on neighbor element. More...
 
const MooseArray< Number > & dofValuesPreviousNLNeighbor () override
 Returns previous nl solution on neighbor element. More...
 
const MooseArray< Number > & dofValuesDot () override
 Returns time derivative of degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDotNeighbor () override
 Returns time derivative of neighboring degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDotOld () override
 Returns old time derivative of degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDotOldNeighbor () override
 Returns old time derivative of neighboring degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDotDot () override
 Returns second time derivative of degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDotDotNeighbor () override
 Returns second time derivative of neighboring degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDotDotOld () override
 Returns old second time derivative of degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDotDotOldNeighbor () override
 Returns old second time derivative of neighboring degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDuDotDu () override
 Returns derivative of time derivative of degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDuDotDuNeighbor () override
 Returns derivative of time derivative of neighboring degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDuDotDotDu () override
 Returns derivative of second time derivative of degrees of freedom. More...
 
const MooseArray< Number > & dofValuesDuDotDotDuNeighbor () override
 Returns derivative of second time derivative of neighboring degrees of freedom. More...
 
template<ComputeStage compute_stage>
const MooseArray< typename Moose::RealType< compute_stage >::type > & adDofValues ()
 Return the AD dof values. More...
 
void computeIncrementAtQps (const NumericVector< Number > &increment_vec)
 Compute and store incremental change in solution at QPs based on increment_vec. More...
 
void computeIncrementAtNode (const NumericVector< Number > &increment_vec)
 Compute and store incremental change at the current node based on increment_vec. More...
 
OutputType getValue (const Elem *elem, const std::vector< std::vector< OutputType >> &phi) const
 Compute the variable value at a point on an element. More...
 
OutputTools< OutputType >::OutputGradient getGradient (const Elem *elem, const std::vector< std::vector< typename OutputTools< OutputType >::OutputGradient >> &grad_phi) const
 Compute the variable gradient value at a point on an element. More...
 
virtual size_t phiSize () override
 Return phi size. More...
 
virtual size_t phiFaceSize () override
 Return phiFace size. More...
 
virtual size_t phiNeighborSize () override
 Return phiNeighbor size. More...
 
virtual size_t phiFaceNeighborSize () override
 Return phiFaceNeighbor size. More...
 
const OutputType & nodalValue ()
 Methods for retrieving values of variables at the nodes. More...
 
const OutputType & nodalValueOld ()
 
const OutputType & nodalValueOlder ()
 
const OutputType & nodalValuePreviousNL ()
 
const OutputType & nodalValueDot ()
 
const OutputType & nodalValueDotDot ()
 
const OutputType & nodalValueDotOld ()
 
const OutputType & nodalValueDotDotOld ()
 
const OutputType & nodalValueDuDotDu ()
 
const OutputType & nodalValueDuDotDotDu ()
 
const OutputType & nodalValueNeighbor ()
 
const OutputType & nodalValueOldNeighbor ()
 
const OutputType & nodalValueOlderNeighbor ()
 
const OutputType & nodalValuePreviousNLNeighbor ()
 
const OutputType & nodalValueDotNeighbor ()
 
const OutputType & nodalValueDotDotNeighbor ()
 
const OutputType & nodalValueDotOldNeighbor ()
 
const OutputType & nodalValueDotDotOldNeighbor ()
 
const OutputType & nodalValueDuDotDuNeighbor ()
 
const OutputType & nodalValueDuDotDotDuNeighbor ()
 
const MooseArray< Real > & nodalVectorTagValue (TagID tag)
 
const MooseArray< Real > & nodalMatrixTagValue (TagID tag)
 
template<ComputeStage compute_stage>
const Moose::ValueType< OutputType, compute_stage >::typeadNodalValue ()
 
virtual void computeNodalValues () override
 Compute nodal values of this variable. More...
 
virtual void computeNodalNeighborValues () override
 Compute nodal values of this variable in the neighbor. More...
 
void computeAD (const unsigned int &num_dofs, const unsigned int &nqp, const bool &is_transient, const FieldVariablePhiValue &phi, const FieldVariablePhiGradient &grad_phi, const FieldVariablePhiSecond *&second_phi, const typename VariableTestGradientType< OutputType, JACOBIAN >::type &ad_grad_phi)
 
void computeADNeighbor (const unsigned int &num_dofs, const unsigned int &nqp, const bool &is_transient, const FieldVariablePhiValue &phi, const FieldVariablePhiGradient &grad_phi, const FieldVariablePhiSecond *&second_phi)
 
void assignNodalValue (const Real &value, const unsigned int &component)
 Helper methods for assigning nodal values from their corresponding solution values (dof values as they're referred to here in this class). More...
 
void assignADNodalValue (const DualReal &value, const unsigned int &component)
 
void assignNodalValueOld (const Real &value, const unsigned int &component)
 
void assignNodalValueOlder (const Real &value, const unsigned int &component)
 
void assignNodalValuePreviousNL (const Real &value, const unsigned int &component)
 
void assignNodalValueDot (const Real &value, const unsigned int &component)
 
void assignNodalValueDotOld (const Real &value, const unsigned int &component)
 
void assignNodalValueDotDot (const Real &value, const unsigned int &component)
 
void assignNodalValueDotDotOld (const Real &value, const unsigned int &component)
 
void assignNeighborNodalValue (const Real &value, const unsigned int &component)
 
void assignNeighborNodalValueOld (const Real &value, const unsigned int &component)
 
void assignNeighborNodalValueOlder (const Real &value, const unsigned int &component)
 
void assignNeighborNodalValuePreviousNL (const Real &value, const unsigned int &component)
 
unsigned int number () const
 Get variable number coming from libMesh. More...
 
const FEType & feType () const
 Get the type of finite element object. More...
 
SystemBasesys ()
 Get the system this variable is part of. More...
 
const std::string & name () const
 Get the variable name. More...
 
const std::vector< dof_id_type > & allDofIndices () const
 Get all global dofindices for the variable. More...
 
unsigned int totalVarDofs ()
 
Moose::VarKindType kind () const
 Kind of the variable (Nonlinear, Auxiliary, ...) More...
 
void scalingFactor (Real factor)
 Set the scaling factor for this variable. More...
 
Real scalingFactor () const
 Get the scaling factor for this variable. More...
 
Order order () const
 Get the order of this variable Note: Order enum can be implicitly converted to unsigned int. More...
 
const DofMap & dofMap () const
 The DofMap associated with the system this variable is in. More...
 
std::vector< dof_id_type > & dofIndices ()
 
const std::vector< dof_id_type > & dofIndices () const
 
unsigned int numberOfDofs ()
 

Protected Attributes

const bool _displaced
 Whether this variable is on the displaced system. More...
 
Assembly_assembly
 Our assembly. More...
 
QBase *& _qrule
 Quadrature rule for interior. More...
 
QBase *& _qrule_face
 Quadrature rule for the face. More...
 
QBase *& _qrule_neighbor
 Quadrature rule for the neighbor. More...
 
const Elem *& _elem
 current element More...
 
unsigned int & _current_side
 the side of the current element (valid when doing face assembly) More...
 
const Elem *& _neighbor
 neighboring element More...
 
std::vector< dof_id_type > _dof_indices_neighbor
 DOF indices (neighbor) More...
 
bool _need_u_old
 
bool _need_u_older
 
bool _need_u_previous_nl
 
bool _need_u_dot
 
bool _need_u_dotdot
 
bool _need_u_dot_old
 
bool _need_u_dotdot_old
 
bool _need_du_dot_du
 
bool _need_du_dotdot_du
 
bool _need_grad_old
 
bool _need_grad_older
 
bool _need_grad_previous_nl
 
bool _need_grad_dot
 
bool _need_grad_dotdot
 
bool _need_second
 
bool _need_second_old
 
bool _need_second_older
 
bool _need_second_previous_nl
 
bool _need_curl
 
bool _need_curl_old
 
bool _need_curl_older
 
bool _need_ad
 
bool _need_ad_u
 
bool _need_ad_grad_u
 
bool _need_ad_second_u
 
bool _need_neighbor_ad
 
bool _need_neighbor_ad_u
 
bool _need_neighbor_ad_grad_u
 
bool _need_neighbor_ad_second_u
 
bool _need_u_old_neighbor
 
bool _need_u_older_neighbor
 
bool _need_u_previous_nl_neighbor
 
bool _need_u_dot_neighbor
 
bool _need_u_dotdot_neighbor
 
bool _need_u_dot_old_neighbor
 
bool _need_u_dotdot_old_neighbor
 
bool _need_du_dot_du_neighbor
 
bool _need_du_dotdot_du_neighbor
 
bool _need_grad_old_neighbor
 
bool _need_grad_older_neighbor
 
bool _need_grad_previous_nl_neighbor
 
bool _need_grad_neighbor_dot
 
bool _need_grad_neighbor_dotdot
 
bool _need_second_neighbor
 
bool _need_second_old_neighbor
 
bool _need_second_older_neighbor
 
bool _need_second_previous_nl_neighbor
 
bool _need_curl_neighbor
 
bool _need_curl_old_neighbor
 
bool _need_curl_older_neighbor
 
bool _need_dof_values
 
bool _need_dof_values_old
 
bool _need_dof_values_older
 
bool _need_dof_values_previous_nl
 
bool _need_dof_values_dot
 
bool _need_dof_values_dotdot
 
bool _need_dof_values_dot_old
 
bool _need_dof_values_dotdot_old
 
bool _need_dof_du_dot_du
 
bool _need_dof_du_dotdot_du
 
bool _need_dof_values_neighbor
 
bool _need_dof_values_old_neighbor
 
bool _need_dof_values_older_neighbor
 
bool _need_dof_values_previous_nl_neighbor
 
bool _need_dof_values_dot_neighbor
 
bool _need_dof_values_dotdot_neighbor
 
bool _need_dof_values_dot_old_neighbor
 
bool _need_dof_values_dotdot_old_neighbor
 
bool _need_dof_du_dot_du_neighbor
 
bool _need_dof_du_dotdot_du_neighbor
 
std::vector< bool > _need_vector_tag_dof_u
 
std::vector< bool > _need_matrix_tag_dof_u
 
const MooseArray< Point > & _normals
 Normals at QPs on faces. More...
 
bool _is_nodal
 if variable is nodal More...
 
bool _has_dof_indices
 If we have dofs. More...
 
bool _neighbor_has_dof_indices
 If the neighor has dofs. More...
 
bool _has_dof_values
 If true, the dof values get inserted on calling insert() More...
 
bool _has_dof_values_neighbor
 
const Node *& _node
 
const Node *& _node_neighbor
 
dof_id_type _nodal_dof_index
 
dof_id_type _nodal_dof_index_neighbor
 
MooseArray< Real > _dof_values
 
MooseArray< Real > _dof_values_old
 
MooseArray< Real > _dof_values_older
 
MooseArray< Real > _dof_values_previous_nl
 
std::vector< MooseArray< Real > > _vector_tags_dof_u
 
std::vector< MooseArray< Real > > _matrix_tags_dof_u
 
MooseArray< Real > _dof_values_dot
 nodal values of u_dot More...
 
MooseArray< Real > _dof_values_dotdot
 nodal values of u_dotdot More...
 
MooseArray< Real > _dof_values_dot_old
 nodal values of u_dot_old More...
 
MooseArray< Real > _dof_values_dotdot_old
 nodal values of u_dotdot_old More...
 
MooseArray< Real > _dof_du_dot_du
 nodal values of derivative of u_dot wrt u More...
 
MooseArray< Real > _dof_du_dotdot_du
 nodal values of derivative of u_dotdot wrt u More...
 
MooseArray< Real > _dof_values_neighbor
 
MooseArray< Real > _dof_values_old_neighbor
 
MooseArray< Real > _dof_values_older_neighbor
 
MooseArray< Real > _dof_values_previous_nl_neighbor
 
MooseArray< Real > _dof_values_dot_neighbor
 
MooseArray< Real > _dof_values_dotdot_neighbor
 
MooseArray< Real > _dof_values_dot_old_neighbor
 
MooseArray< Real > _dof_values_dotdot_old_neighbor
 
MooseArray< Real > _dof_du_dot_du_neighbor
 
MooseArray< Real > _dof_du_dotdot_du_neighbor
 
const FieldVariablePhiValue_phi
 
const FieldVariablePhiGradient_grad_phi
 
const FieldVariablePhiSecond_second_phi
 
const FieldVariablePhiCurl_curl_phi
 
const FieldVariablePhiValue_phi_face
 
const FieldVariablePhiGradient_grad_phi_face
 
const FieldVariablePhiSecond_second_phi_face
 
const FieldVariablePhiCurl_curl_phi_face
 
const FieldVariablePhiValue_phi_neighbor
 
const FieldVariablePhiGradient_grad_phi_neighbor
 
const FieldVariablePhiSecond_second_phi_neighbor
 
const FieldVariablePhiCurl_curl_phi_neighbor
 
const FieldVariablePhiValue_phi_face_neighbor
 
const FieldVariablePhiGradient_grad_phi_face_neighbor
 
const FieldVariablePhiSecond_second_phi_face_neighbor
 
const FieldVariablePhiCurl_curl_phi_face_neighbor
 
const VariableTestGradientType< OutputShape, JACOBIAN >::type_ad_grad_phi
 
const VariableTestGradientType< OutputShape, JACOBIAN >::type_ad_grad_phi_face
 
std::vector< FieldVariableValue_vector_tag_u
 
std::vector< bool > _need_vector_tag_u
 
std::vector< FieldVariableValue_matrix_tag_u
 
std::vector< bool > _need_matrix_tag_u
 
FieldVariableValue _u
 
FieldVariableValue _u_old
 
FieldVariableValue _u_older
 
FieldVariableValue _u_previous_nl
 
FieldVariableGradient _grad_u
 
FieldVariableGradient _grad_u_old
 
FieldVariableGradient _grad_u_older
 
FieldVariableGradient _grad_u_previous_nl
 
FieldVariableGradient _grad_u_dot
 
FieldVariableGradient _grad_u_dotdot
 
FieldVariableSecond _second_u
 
FieldVariableSecond _second_u_old
 
FieldVariableSecond _second_u_older
 
FieldVariableSecond _second_u_previous_nl
 
FieldVariableCurl _curl_u
 
FieldVariableCurl _curl_u_old
 
FieldVariableCurl _curl_u_older
 
VariableValueType< OutputShape, JACOBIAN >::type _ad_u
 
VariableGradientType< OutputShape, JACOBIAN >::type _ad_grad_u
 
VariableSecondType< OutputShape, JACOBIAN >::type _ad_second_u
 
MooseArray< DualReal_ad_dof_values
 
MooseArray< DualReal_ad_dofs_dot
 
VariableValueType< OutputShape, JACOBIAN >::type _ad_u_dot
 
VariableValueType< OutputShape, JACOBIAN >::type _neighbor_ad_u
 
VariableGradientType< OutputShape, JACOBIAN >::type _neighbor_ad_grad_u
 
VariableSecondType< OutputShape, JACOBIAN >::type _neighbor_ad_second_u
 
MooseArray< DualReal_neighbor_ad_dof_values
 
MooseArray< DualReal_neighbor_ad_dofs_dot
 
VariableValueType< OutputShape, JACOBIAN >::type _neighbor_ad_u_dot
 
FieldVariableValue _u_neighbor
 
FieldVariableValue _u_old_neighbor
 
FieldVariableValue _u_older_neighbor
 
FieldVariableValue _u_previous_nl_neighbor
 
FieldVariableGradient _grad_u_neighbor
 
FieldVariableGradient _grad_u_old_neighbor
 
FieldVariableGradient _grad_u_older_neighbor
 
FieldVariableGradient _grad_u_previous_nl_neighbor
 
FieldVariableGradient _grad_u_neighbor_dot
 
FieldVariableGradient _grad_u_neighbor_dotdot
 
FieldVariableSecond _second_u_neighbor
 
FieldVariableSecond _second_u_old_neighbor
 
FieldVariableSecond _second_u_older_neighbor
 
FieldVariableSecond _second_u_previous_nl_neighbor
 
FieldVariableCurl _curl_u_neighbor
 
FieldVariableCurl _curl_u_old_neighbor
 
FieldVariableCurl _curl_u_older_neighbor
 
FieldVariableValue _u_dot
 u_dot (time derivative) More...
 
FieldVariableValue _u_dot_neighbor
 
FieldVariableValue _u_dotdot
 u_dotdot (second time derivative) More...
 
FieldVariableValue _u_dotdot_bak
 
FieldVariableValue _u_dotdot_neighbor
 
FieldVariableValue _u_dotdot_bak_neighbor
 
FieldVariableValue _u_dot_old
 u_dot_old (time derivative) More...
 
FieldVariableValue _u_dot_old_bak
 
FieldVariableValue _u_dot_old_neighbor
 
FieldVariableValue _u_dot_old_bak_neighbor
 
FieldVariableValue _u_dotdot_old
 u_dotdot_old (second time derivative) More...
 
FieldVariableValue _u_dotdot_old_bak
 
FieldVariableValue _u_dotdot_old_neighbor
 
FieldVariableValue _u_dotdot_old_bak_neighbor
 
VariableValue _du_dot_du
 derivative of u_dot wrt u More...
 
VariableValue _du_dot_du_neighbor
 
VariableValue _du_dotdot_du
 derivative of u_dotdot wrt u More...
 
VariableValue _du_dotdot_du_bak
 
VariableValue _du_dotdot_du_neighbor
 
VariableValue _du_dotdot_du_bak_neighbor
 
FEContinuity _continuity
 Continuity type of the variable. More...
 
FieldVariableValue _increment
 Increment in the variable used in dampers. More...
 
OutputType _nodal_value
 Nodal values. More...
 
OutputType _nodal_value_old
 
OutputType _nodal_value_older
 
OutputType _nodal_value_previous_nl
 
OutputType _neighbor_nodal_value
 
OutputType _neighbor_nodal_value_old
 
OutputType _neighbor_nodal_value_older
 
OutputType _neighbor_nodal_value_previous_nl
 
OutputType _nodal_value_dot
 nodal values of u_dot More...
 
OutputType _nodal_value_dotdot
 nodal values of u_dotdot More...
 
OutputType _nodal_value_dot_old
 nodal values of u_dot_old More...
 
OutputType _nodal_value_dotdot_old
 nodal values of u_dotdot_old More...
 
Moose::ValueType< OutputType, JACOBIAN >::type _ad_nodal_value
 AD nodal value. More...
 
const DualReal _ad_zero
 A zero AD variable. More...
 
TimeIntegrator_time_integrator
 A pointer to TimeIntegrator. nullptr if _sys is not a NonlinearSystemBase. More...
 
unsigned int _var_num
 variable number (from libMesh) More...
 
FEType _fe_type
 The FEType associated with this variable. More...
 
unsigned int _index
 variable number within MOOSE More...
 
Moose::VarKindType _var_kind
 
SubProblem_subproblem
 Problem this variable is part of. More...
 
SystemBase_sys
 System this variable is part of. More...
 
const Variable & _variable
 libMesh variable object for this variable More...
 
const DofMap & _dof_map
 DOF map. More...
 
std::vector< dof_id_type > _dof_indices
 DOF indices. More...
 
MooseMesh_mesh
 mesh the variable is active in More...
 
Real _scaling_factor
 scaling factor for this variable More...
 
THREAD_ID _tid
 Thread ID. More...
 

Private Types

typedef OutputType OutputShape
 
typedef OutputType OutputValue
 
typedef TensorTools::IncrementRank< OutputShape >::type OutputGradient
 
typedef TensorTools::IncrementRank< OutputGradient >::type OutputSecond
 
typedef TensorTools::DecrementRank< OutputShape >::type OutputDivergence
 
typedef MooseArray< OutputShapeFieldVariableValue
 
typedef MooseArray< OutputGradientFieldVariableGradient
 
typedef MooseArray< OutputSecondFieldVariableSecond
 
typedef MooseArray< OutputShapeFieldVariableCurl
 
typedef MooseArray< OutputDivergenceFieldVariableDivergence
 
typedef MooseArray< std::vector< OutputShape > > FieldVariablePhiValue
 
typedef MooseArray< std::vector< OutputGradient > > FieldVariablePhiGradient
 
typedef MooseArray< std::vector< OutputSecond > > FieldVariablePhiSecond
 
typedef MooseArray< std::vector< OutputShape > > FieldVariablePhiCurl
 
typedef MooseArray< std::vector< OutputDivergence > > FieldVariablePhiDivergence
 
typedef MooseArray< std::vector< OutputShape > > FieldVariableTestValue
 
typedef MooseArray< std::vector< OutputGradient > > FieldVariableTestGradient
 
typedef MooseArray< std::vector< OutputSecond > > FieldVariableTestSecond
 
typedef MooseArray< std::vector< OutputShape > > FieldVariableTestCurl
 
typedef MooseArray< std::vector< OutputDivergence > > FieldVariableTestDivergence
 

Friends

class NodeFaceConstraint
 
class NodeElemConstraint
 
class ValueThresholdMarker
 
class ValueRangeMarker
 

Detailed Description

template<typename OutputType>
class MooseVariableFE< OutputType >

Class for stuff related to variables.

Each variable can compute nodal or elemental (at QPs) values.

Definition at line 30 of file Adaptivity.h.

Member Typedef Documentation

◆ FieldVariableCurl

template<typename OutputType>
typedef MooseArray<OutputShape> MooseVariableFE< OutputType >::FieldVariableCurl
private

Definition at line 49 of file MooseVariableFE.h.

◆ FieldVariableDivergence

template<typename OutputType>
typedef MooseArray<OutputDivergence> MooseVariableFE< OutputType >::FieldVariableDivergence
private

Definition at line 50 of file MooseVariableFE.h.

◆ FieldVariableGradient

template<typename OutputType>
typedef MooseArray<OutputGradient> MooseVariableFE< OutputType >::FieldVariableGradient
private

Definition at line 47 of file MooseVariableFE.h.

◆ FieldVariablePhiCurl

template<typename OutputType>
typedef MooseArray<std::vector<OutputShape> > MooseVariableFE< OutputType >::FieldVariablePhiCurl
private

Definition at line 55 of file MooseVariableFE.h.

◆ FieldVariablePhiDivergence

template<typename OutputType>
typedef MooseArray<std::vector<OutputDivergence> > MooseVariableFE< OutputType >::FieldVariablePhiDivergence
private

Definition at line 56 of file MooseVariableFE.h.

◆ FieldVariablePhiGradient

template<typename OutputType>
typedef MooseArray<std::vector<OutputGradient> > MooseVariableFE< OutputType >::FieldVariablePhiGradient
private

Definition at line 53 of file MooseVariableFE.h.

◆ FieldVariablePhiSecond

template<typename OutputType>
typedef MooseArray<std::vector<OutputSecond> > MooseVariableFE< OutputType >::FieldVariablePhiSecond
private

Definition at line 54 of file MooseVariableFE.h.

◆ FieldVariablePhiValue

template<typename OutputType>
typedef MooseArray<std::vector<OutputShape> > MooseVariableFE< OutputType >::FieldVariablePhiValue
private

Definition at line 52 of file MooseVariableFE.h.

◆ FieldVariableSecond

template<typename OutputType>
typedef MooseArray<OutputSecond> MooseVariableFE< OutputType >::FieldVariableSecond
private

Definition at line 48 of file MooseVariableFE.h.

◆ FieldVariableTestCurl

template<typename OutputType>
typedef MooseArray<std::vector<OutputShape> > MooseVariableFE< OutputType >::FieldVariableTestCurl
private

Definition at line 61 of file MooseVariableFE.h.

◆ FieldVariableTestDivergence

template<typename OutputType>
typedef MooseArray<std::vector<OutputDivergence> > MooseVariableFE< OutputType >::FieldVariableTestDivergence
private

Definition at line 62 of file MooseVariableFE.h.

◆ FieldVariableTestGradient

template<typename OutputType>
typedef MooseArray<std::vector<OutputGradient> > MooseVariableFE< OutputType >::FieldVariableTestGradient
private

Definition at line 59 of file MooseVariableFE.h.

◆ FieldVariableTestSecond

template<typename OutputType>
typedef MooseArray<std::vector<OutputSecond> > MooseVariableFE< OutputType >::FieldVariableTestSecond
private

Definition at line 60 of file MooseVariableFE.h.

◆ FieldVariableTestValue

template<typename OutputType>
typedef MooseArray<std::vector<OutputShape> > MooseVariableFE< OutputType >::FieldVariableTestValue
private

Definition at line 58 of file MooseVariableFE.h.

◆ FieldVariableValue

template<typename OutputType>
typedef MooseArray<OutputShape> MooseVariableFE< OutputType >::FieldVariableValue
private

Definition at line 46 of file MooseVariableFE.h.

◆ OutputDivergence

template<typename OutputType>
typedef TensorTools::DecrementRank<OutputShape>::type MooseVariableFE< OutputType >::OutputDivergence
private

Definition at line 44 of file MooseVariableFE.h.

◆ OutputGradient

template<typename OutputType>
typedef TensorTools::IncrementRank<OutputShape>::type MooseVariableFE< OutputType >::OutputGradient
private

Definition at line 42 of file MooseVariableFE.h.

◆ OutputSecond

template<typename OutputType>
typedef TensorTools::IncrementRank<OutputGradient>::type MooseVariableFE< OutputType >::OutputSecond
private

Definition at line 43 of file MooseVariableFE.h.

◆ OutputShape

template<typename OutputType>
typedef OutputType MooseVariableFE< OutputType >::OutputShape
private

Definition at line 40 of file MooseVariableFE.h.

◆ OutputValue

template<typename OutputType>
typedef OutputType MooseVariableFE< OutputType >::OutputValue
private

Definition at line 41 of file MooseVariableFE.h.

Constructor & Destructor Documentation

◆ MooseVariableFE()

template<typename OutputType >
MooseVariableFE< OutputType >::MooseVariableFE ( unsigned int  var_num,
const FEType &  fe_type,
SystemBase sys,
Assembly assembly,
Moose::VarKindType  var_kind,
THREAD_ID  tid 
)

Definition at line 18 of file MooseVariableFE.C.

24  : MooseVariableFEBase(var_num, fe_type, sys, var_kind, tid),
25  _displaced(dynamic_cast<DisplacedSystem *>(&sys) ? true : false),
26  _assembly(assembly),
30  _elem(_assembly.elem()),
33  _need_u_old(false),
34  _need_u_older(false),
35  _need_u_previous_nl(false),
36  _need_u_dot(false),
37  _need_u_dotdot(false),
38  _need_u_dot_old(false),
39  _need_u_dotdot_old(false),
40  _need_du_dot_du(false),
41  _need_du_dotdot_du(false),
42  _need_grad_old(false),
43  _need_grad_older(false),
45  _need_grad_dot(false),
46  _need_grad_dotdot(false),
47  _need_second(false),
48  _need_second_old(false),
49  _need_second_older(false),
51  _need_curl(false),
52  _need_curl_old(false),
53  _need_curl_older(false),
54  _need_ad(false),
55  _need_ad_u(false),
56  _need_ad_grad_u(false),
57  _need_ad_second_u(false),
58  _need_neighbor_ad(false),
59  _need_neighbor_ad_u(false),
62  _need_u_old_neighbor(false),
65  _need_u_dot_neighbor(false),
76  _need_second_neighbor(false),
80  _need_curl_neighbor(false),
83  _need_dof_values(false),
84  _need_dof_values_old(false),
87  _need_dof_values_dot(false),
91  _need_dof_du_dot_du(false),
104  _is_nodal(true),
105  _has_dof_indices(false),
107  _has_dof_values(false),
109  _node(_assembly.node()),
111  _phi(_assembly.fePhi<OutputType>(_fe_type)),
112  _grad_phi(_assembly.feGradPhi<OutputType>(_fe_type)),
113  _phi_face(_assembly.fePhiFace<OutputType>(_fe_type)),
121  _ad_u(),
122  _ad_grad_u(),
123  _ad_second_u(),
124  _ad_dof_values(),
125  _neighbor_ad_u(),
129  _ad_zero(0),
130  _time_integrator(nullptr)
131 {
132  // FIXME: continuity of FE type seems equivalent with the definition of nodal variables.
133  // Continuity does not depend on the FE dimension, so we just pass in a valid dimension.
134  if (_fe_type.family == NEDELEC_ONE || _fe_type.family == LAGRANGE_VEC)
135  _continuity = _assembly.getVectorFE(_fe_type, _sys.mesh().dimension())->get_continuity();
136  else
137  _continuity = _assembly.getFE(_fe_type, _sys.mesh().dimension())->get_continuity();
138 
139  _is_nodal = (_continuity == C_ZERO || _continuity == C_ONE);
140 
141  auto num_vector_tags = _sys.subproblem().numVectorTags();
142 
143  _vector_tags_dof_u.resize(num_vector_tags);
144  _need_vector_tag_dof_u.resize(num_vector_tags);
145 
146  _need_vector_tag_u.resize(num_vector_tags);
147  _vector_tag_u.resize(num_vector_tags);
148 
149  auto num_matrix_tags = _sys.subproblem().numMatrixTags();
150 
151  _matrix_tags_dof_u.resize(num_matrix_tags);
152  _need_matrix_tag_dof_u.resize(num_matrix_tags);
153 
154  _need_matrix_tag_u.resize(num_matrix_tags);
155  _matrix_tag_u.resize(num_matrix_tags);
156 
158 }
const FieldVariablePhiValue & _phi
std::vector< bool > _need_vector_tag_dof_u
QBase *& qRuleFace()
Returns the reference to the current quadrature being used on a current face.
Definition: Assembly.h:278
bool _has_dof_indices
If we have dofs.
QBase *& _qrule_neighbor
Quadrature rule for the neighbor.
bool _need_second_old_neighbor
FEType _fe_type
The FEType associated with this variable.
std::vector< bool > _need_matrix_tag_dof_u
std::vector< FieldVariableValue > _vector_tag_u
const MooseArray< Point > & _normals
Normals at QPs on faces.
bool _need_dof_values_dotdot_neighbor
VariableSecondType< OutputShape, JACOBIAN >::type _neighbor_ad_second_u
const VariableTestGradientType< OutputShape, JACOBIAN >::type & _ad_grad_phi
bool _need_dof_values_previous_nl_neighbor
VariableSecondType< OutputShape, JACOBIAN >::type _ad_second_u
const Node *& _node
bool _need_dof_values_dot_neighbor
bool _need_second_previous_nl_neighbor
bool _need_u_previous_nl_neighbor
Assembly & _assembly
Our assembly.
TimeIntegrator * getTimeIntegrator()
Definition: SystemBase.h:689
bool _is_nodal
if variable is nodal
VariableGradientType< OutputShape, JACOBIAN >::type _ad_grad_u
const Elem *& neighbor()
Return the neighbor element.
Definition: Assembly.h:366
const MooseArray< Point > & normals()
Returns the array of normals for quadrature points on a current side.
Definition: Assembly.h:296
const FieldVariablePhiGradient & _grad_phi_face
virtual unsigned int numVectorTags()
The total number of tags.
Definition: SubProblem.h:117
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiFaceNeighbor(FEType type)
Definition: Assembly.h:963
MooseArray< DualReal > _neighbor_ad_dof_values
const OutputTools< OutputType >::VariablePhiValue & fePhiNeighbor(FEType type)
Definition: Assembly.h:934
QBase *& qRule()
Returns the reference to the current quadrature being used.
Definition: Assembly.h:217
const VariableTestGradientType< OutputType, ComputeStage::JACOBIAN >::type & feADGradPhi(FEType type)
Definition: Assembly.h:891
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiFace(FEType type)
Definition: Assembly.h:912
bool _need_grad_older_neighbor
bool _need_dof_values_neighbor
QBase *& _qrule
Quadrature rule for interior.
std::vector< bool > _need_vector_tag_u
bool _need_dof_du_dot_du_neighbor
unsigned int & side()
Returns the current side.
Definition: Assembly.h:342
const OutputTools< OutputType >::VariablePhiValue & fePhiFace(FEType type)
Definition: Assembly.h:905
const Node *& node()
Returns the reference to the node.
Definition: Assembly.h:400
bool _need_grad_neighbor_dotdot
virtual unsigned int dimension() const
Returns MeshBase::mesh_dimsension(), (not MeshBase::spatial_dimension()!) of the underlying libMesh m...
Definition: MooseMesh.C:2128
SystemBase & _sys
System this variable is part of.
bool _need_du_dotdot_du_neighbor
MooseVariableFEBase(unsigned int var_num, const FEType &fe_type, SystemBase &sys, Moose::VarKindType var_kind, THREAD_ID tid)
TimeIntegrator * _time_integrator
A pointer to TimeIntegrator. nullptr if _sys is not a NonlinearSystemBase.
const DualReal _ad_zero
A zero AD variable.
VariableGradientType< OutputShape, JACOBIAN >::type _neighbor_ad_grad_u
const VariableTestGradientType< OutputShape, JACOBIAN >::type & _ad_grad_phi_face
VariableValueType< OutputShape, JACOBIAN >::type _neighbor_ad_u
virtual SubProblem & subproblem()
Definition: SystemBase.h:105
bool _need_grad_previous_nl_neighbor
FEContinuity _continuity
Continuity type of the variable.
const Elem *& _neighbor
neighboring element
const FieldVariablePhiValue & _phi_face
const FieldVariablePhiValue & _phi_neighbor
const OutputTools< OutputType >::VariablePhiGradient & feGradPhi(FEType type)
Definition: Assembly.h:883
std::vector< MooseArray< Real > > _vector_tags_dof_u
bool _need_dof_values_dotdot_old_neighbor
const Node *& nodeNeighbor()
Returns the reference to the neighboring node.
Definition: Assembly.h:406
VariableValueType< OutputShape, JACOBIAN >::type _ad_u
bool _need_u_dotdot_old_neighbor
std::vector< FieldVariableValue > _matrix_tag_u
bool _need_dof_values_older_neighbor
const Elem *& elem()
Return the current element.
Definition: Assembly.h:320
unsigned int & _current_side
the side of the current element (valid when doing face assembly)
bool _has_dof_values
If true, the dof values get inserted on calling insert()
std::vector< bool > _need_matrix_tag_u
const FieldVariablePhiValue & _phi_face_neighbor
FEBase *& getFE(FEType type, unsigned int dim)
Get a reference to a pointer that will contain the current volume FE.
Definition: Assembly.h:123
QBase *& qRuleNeighbor()
Returns the reference to the current quadrature being used on a current neighbor. ...
Definition: Assembly.h:388
const bool _displaced
Whether this variable is on the displaced system.
virtual MooseMesh & mesh()
Definition: SystemBase.h:104
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiNeighbor(FEType type)
Definition: Assembly.h:941
const Elem *& _elem
current element
const FieldVariablePhiGradient & _grad_phi_neighbor
std::vector< MooseArray< Real > > _matrix_tags_dof_u
bool _need_dof_du_dotdot_du_neighbor
QBase *& _qrule_face
Quadrature rule for the face.
MooseArray< DualReal > _ad_dof_values
const VariableTestGradientType< OutputType, ComputeStage::JACOBIAN >::type & feADGradPhiFace(FEType type)
Definition: Assembly.h:920
const Node *& _node_neighbor
bool _neighbor_has_dof_indices
If the neighor has dofs.
bool _need_dof_values_dot_old_neighbor
const FieldVariablePhiGradient & _grad_phi_face_neighbor
bool _need_neighbor_ad_second_u
bool _need_second_older_neighbor
const FieldVariablePhiGradient & _grad_phi
const OutputTools< OutputType >::VariablePhiValue & fePhiFaceNeighbor(FEType type)
Definition: Assembly.h:956
bool _need_dof_values_previous_nl
SystemBase & sys()
Get the system this variable is part of.
virtual unsigned int numMatrixTags()
The total number of tags.
Definition: SubProblem.h:152
bool _need_dof_values_dotdot_old
const OutputTools< OutputType >::VariablePhiValue & fePhi(FEType type)
Definition: Assembly.h:876
bool _need_curl_older_neighbor
bool _need_dof_values_old_neighbor
FEVectorBase *& getVectorFE(FEType type, unsigned int dim)
Get a reference to a pointer that will contain the current volume FEVector.
Definition: Assembly.h:171

◆ ~MooseVariableFE()

template<typename OutputType >
MooseVariableFE< OutputType >::~MooseVariableFE ( )
virtual

Definition at line 161 of file MooseVariableFE.C.

162 {
173 
184 
185  for (auto & dof_u : _vector_tags_dof_u)
186  dof_u.release();
187 
188  _vector_tags_dof_u.clear();
189 
190  for (auto & dof_u : _matrix_tags_dof_u)
191  dof_u.release();
192 
193  _matrix_tags_dof_u.clear();
194 
195  for (auto & tag_u : _vector_tag_u)
196  tag_u.release();
197 
198  _vector_tag_u.clear();
199 
200  for (auto & tag_u : _matrix_tag_u)
201  tag_u.release();
202 
203  _matrix_tag_u.clear();
204 
205  _u.release();
206  _u_old.release();
207  _u_older.release();
209 
210  _grad_u.release();
217 
218  _second_u.release();
222 
223  _curl_u.release();
226 
227  _ad_u.release();
228  _ad_grad_u.release();
229  _ad_second_u.release();
230 
231  _u_dot.release();
233 
234  _u_dotdot.release();
238 
243 
248 
251 
256 
258 
263 
270 
275 
279 
280  _ad_u.release();
281  _ad_grad_u.release();
282  _ad_second_u.release();
285  _ad_u_dot.release();
286 
287  _neighbor_ad_u.release();
288  _neighbor_ad_grad_u.release();
289  _neighbor_ad_second_u.release();
292  _neighbor_ad_u_dot.release();
293 }
FieldVariableGradient _grad_u_old
MooseArray< Real > _dof_values_old
FieldVariableValue _u_dot_old
u_dot_old (time derivative)
FieldVariableValue _u_old_neighbor
FieldVariableSecond _second_u_previous_nl_neighbor
FieldVariableGradient _grad_u_older_neighbor
MooseArray< Real > _dof_du_dot_du_neighbor
MooseArray< Real > _dof_values_neighbor
std::vector< FieldVariableValue > _vector_tag_u
FieldVariableValue _u_dot_neighbor
VariableValueType< OutputShape, JACOBIAN >::type _ad_u_dot
VariableSecondType< OutputShape, JACOBIAN >::type _neighbor_ad_second_u
FieldVariableGradient _grad_u_dot
MooseArray< Real > _dof_values_older_neighbor
FieldVariableValue _u
MooseArray< Real > _dof_values_older
FieldVariableValue _u_old
FieldVariableCurl _curl_u_neighbor
MooseArray< Real > _dof_du_dotdot_du_neighbor
FieldVariableValue _u_dotdot_old
u_dotdot_old (second time derivative)
VariableSecondType< OutputShape, JACOBIAN >::type _ad_second_u
VariableValue _du_dotdot_du
derivative of u_dotdot wrt u
VariableGradientType< OutputShape, JACOBIAN >::type _ad_grad_u
FieldVariableGradient _grad_u_neighbor_dot
MooseArray< Real > _dof_du_dotdot_du
nodal values of derivative of u_dotdot wrt u
FieldVariableValue _u_dot
u_dot (time derivative)
MooseArray< Real > _dof_values_previous_nl
FieldVariableSecond _second_u
MooseArray< Real > _dof_values_dotdot_old
nodal values of u_dotdot_old
FieldVariableValue _u_dotdot_old_bak
FieldVariableSecond _second_u_old
FieldVariableCurl _curl_u_old
FieldVariableValue _u_neighbor
VariableValue _du_dotdot_du_bak_neighbor
VariableValue _du_dot_du_neighbor
MooseArray< DualReal > _neighbor_ad_dof_values
FieldVariableValue _u_dot_old_bak_neighbor
MooseArray< Real > _dof_values_previous_nl_neighbor
MooseArray< Real > _dof_values_dotdot_old_neighbor
MooseArray< Real > _dof_values_dot
nodal values of u_dot
MooseArray< DualReal > _ad_dofs_dot
FieldVariableGradient _grad_u_neighbor
FieldVariableValue _increment
Increment in the variable used in dampers.
FieldVariableGradient _grad_u_neighbor_dotdot
FieldVariableCurl _curl_u
FieldVariableValue _u_dot_old_neighbor
VariableGradientType< OutputShape, JACOBIAN >::type _neighbor_ad_grad_u
FieldVariableGradient _grad_u
FieldVariableValue _u_dotdot_bak_neighbor
FieldVariableSecond _second_u_neighbor
FieldVariableValue _u_dotdot_bak
VariableValueType< OutputShape, JACOBIAN >::type _neighbor_ad_u
FieldVariableValue _u_previous_nl_neighbor
FieldVariableGradient _grad_u_dotdot
FieldVariableGradient _grad_u_previous_nl_neighbor
FieldVariableSecond _second_u_older
std::vector< MooseArray< Real > > _vector_tags_dof_u
VariableValue _du_dot_du
derivative of u_dot wrt u
MooseArray< Real > _dof_values_dot_old
nodal values of u_dot_old
MooseArray< Real > _dof_values_old_neighbor
MooseArray< Real > _dof_values_dot_old_neighbor
FieldVariableValue _u_dotdot_old_bak_neighbor
MooseArray< Real > _dof_values_dot_neighbor
FieldVariableValue _u_dotdot_old_neighbor
MooseArray< Real > _dof_values_dotdot_neighbor
VariableValueType< OutputShape, JACOBIAN >::type _ad_u
FieldVariableGradient _grad_u_older
std::vector< FieldVariableValue > _matrix_tag_u
FieldVariableCurl _curl_u_older
FieldVariableCurl _curl_u_older_neighbor
FieldVariableSecond _second_u_old_neighbor
void release()
Manually deallocates the data pointer.
Definition: MooseArray.h:51
MooseArray< Real > _dof_values
MooseArray< Real > _dof_du_dot_du
nodal values of derivative of u_dot wrt u
VariableValue _du_dotdot_du_neighbor
MooseArray< DualReal > _neighbor_ad_dofs_dot
FieldVariableValue _u_dotdot_neighbor
std::vector< MooseArray< Real > > _matrix_tags_dof_u
FieldVariableValue _u_older
VariableValue _du_dotdot_du_bak
MooseArray< DualReal > _ad_dof_values
FieldVariableGradient _grad_u_previous_nl
FieldVariableValue _u_older_neighbor
VariableValueType< OutputShape, JACOBIAN >::type _neighbor_ad_u_dot
FieldVariableValue _u_dotdot
u_dotdot (second time derivative)
FieldVariableSecond _second_u_previous_nl
MooseArray< Real > _dof_values_dotdot
nodal values of u_dotdot
FieldVariableValue _u_previous_nl
FieldVariableGradient _grad_u_old_neighbor
FieldVariableValue _u_dot_old_bak
FieldVariableSecond _second_u_older_neighbor
FieldVariableCurl _curl_u_old_neighbor

Member Function Documentation

◆ activeOnSubdomain()

template<typename OutputType >
bool MooseVariableFE< OutputType >::activeOnSubdomain ( SubdomainID  subdomain) const
overridevirtual

Is the variable active on the subdomain?

Parameters
subdomainThe subdomain id in question
Returns
true if active on subdomain, false otherwise

Implements MooseVariableFEBase.

Definition at line 304 of file MooseVariableFE.C.

305 {
306  return _sys.system().variable(_var_num).active_on_subdomain(subdomain);
307 }
SystemBase & _sys
System this variable is part of.
virtual System & system()=0
Get the reference to the libMesh system.
unsigned int _var_num
variable number (from libMesh)

◆ activeSubdomains()

template<typename OutputType >
const std::set< SubdomainID > & MooseVariableFE< OutputType >::activeSubdomains ( ) const
overridevirtual

The subdomains the variable is active on.

Implements MooseVariableFEBase.

Definition at line 297 of file MooseVariableFE.C.

298 {
299  return _sys.system().variable(_var_num).active_subdomains();
300 }
SystemBase & _sys
System this variable is part of.
virtual System & system()=0
Get the reference to the libMesh system.
unsigned int _var_num
variable number (from libMesh)

◆ add()

template<typename OutputType >
void MooseVariableFE< OutputType >::add ( NumericVector< Number > &  residual)

Definition at line 569 of file MooseVariableFE.C.

Referenced by ComputeIndicatorThread::onElement().

570 {
571  if (_has_dof_values)
572  residual.add_vector(&_dof_values[0], _dof_indices);
573 }
std::vector< dof_id_type > _dof_indices
DOF indices.
bool _has_dof_values
If true, the dof values get inserted on calling insert()
MooseArray< Real > _dof_values

◆ adDofValues()

template<typename OutputType >
template<ComputeStage compute_stage>
const MooseArray< typename Moose::RealType< compute_stage >::type > & MooseVariableFE< OutputType >::adDofValues ( )

Return the AD dof values.

Definition at line 2638 of file MooseVariableFE.C.

2639 {
2640  _need_ad = true;
2641  return _ad_dof_values;
2642 }
MooseArray< DualReal > _ad_dof_values

◆ adGradPhi()

template<typename OutputType>
template<ComputeStage compute_stage>
const VariableTestGradientType<OutputType, compute_stage>::type& MooseVariableFE< OutputType >::adGradPhi ( )
inline

Definition at line 185 of file MooseVariableFE.h.

186  {
187  return _ad_grad_phi;
188  }
const VariableTestGradientType< OutputShape, JACOBIAN >::type & _ad_grad_phi

◆ adGradPhiFace()

template<typename OutputType>
template<ComputeStage compute_stage>
const VariableTestGradientType<OutputType, compute_stage>::type& MooseVariableFE< OutputType >::adGradPhiFace ( )
inline

Definition at line 191 of file MooseVariableFE.h.

192  {
193  return _ad_grad_phi_face;
194  }
const VariableTestGradientType< OutputShape, JACOBIAN >::type & _ad_grad_phi_face

◆ adGradSln()

template<typename OutputType>
template<ComputeStage compute_stage>
const VariableGradientType<OutputType, compute_stage>::type& MooseVariableFE< OutputType >::adGradSln ( )
inline

Definition at line 322 of file MooseVariableFE.h.

Referenced by Coupleable::adCoupledGradientTemplate(), and Coupleable::adCoupledVectorGradientTemplate().

323  {
324  _need_ad = _need_ad_grad_u = true;
325  return _ad_grad_u;
326  }
VariableGradientType< OutputShape, JACOBIAN >::type _ad_grad_u

◆ adGradSlnNeighbor()

template<typename OutputType>
template<ComputeStage compute_stage>
const VariableGradientType<OutputType, compute_stage>::type& MooseVariableFE< OutputType >::adGradSlnNeighbor ( )
inline

Definition at line 352 of file MooseVariableFE.h.

Referenced by Coupleable::adCoupledGradientTemplate(), and Coupleable::adCoupledVectorGradientTemplate().

353  {
355  return _neighbor_ad_grad_u;
356  }
VariableGradientType< OutputShape, JACOBIAN >::type _neighbor_ad_grad_u

◆ adNodalValue()

template<typename OutputType >
template<ComputeStage compute_stage>
const Moose::ValueType< OutputType, compute_stage >::type & MooseVariableFE< OutputType >::adNodalValue ( )

Definition at line 2663 of file MooseVariableFE.C.

2664 {
2665  _need_ad = true;
2666  return _ad_nodal_value;
2667 }
Moose::ValueType< OutputType, JACOBIAN >::type _ad_nodal_value
AD nodal value.

◆ adSecondSln()

template<typename OutputType>
template<ComputeStage compute_stage>
const VariableSecondType<OutputType, compute_stage>::type& MooseVariableFE< OutputType >::adSecondSln ( )
inline

Definition at line 329 of file MooseVariableFE.h.

Referenced by Coupleable::adCoupledSecondTemplate().

330  {
331  _need_ad = _need_ad_second_u = true;
332  secondPhi();
333  secondPhiFace();
334  return _ad_second_u;
335  }
VariableSecondType< OutputShape, JACOBIAN >::type _ad_second_u
const FieldVariablePhiSecond & secondPhi()
const FieldVariablePhiSecond & secondPhiFace()

◆ adSecondSlnNeighbor()

template<typename OutputType>
template<ComputeStage compute_stage>
const VariableSecondType<OutputType, compute_stage>::type& MooseVariableFE< OutputType >::adSecondSlnNeighbor ( )
inline

Definition at line 359 of file MooseVariableFE.h.

Referenced by Coupleable::adCoupledSecondTemplate().

360  {
363  return _neighbor_ad_second_u;
364  }
VariableSecondType< OutputShape, JACOBIAN >::type _neighbor_ad_second_u
const FieldVariablePhiSecond & secondPhiFaceNeighbor()
bool _need_neighbor_ad_second_u

◆ adSln()

template<typename OutputType>
template<ComputeStage compute_stage>
const VariableValueType<OutputType, compute_stage>::type& MooseVariableFE< OutputType >::adSln ( )
inline

Definition at line 315 of file MooseVariableFE.h.

Referenced by Coupleable::adCoupledValueTemplate(), and Coupleable::adCoupledVectorValueTemplate().

316  {
317  _need_ad = _need_ad_u = true;
318  return _ad_u;
319  }
VariableValueType< OutputShape, JACOBIAN >::type _ad_u

◆ adSlnNeighbor()

template<typename OutputType>
template<ComputeStage compute_stage>
const VariableValueType<OutputType, compute_stage>::type& MooseVariableFE< OutputType >::adSlnNeighbor ( )
inline

Definition at line 345 of file MooseVariableFE.h.

Referenced by Coupleable::adCoupledValueTemplate(), and Coupleable::adCoupledVectorValueTemplate().

346  {
348  return _neighbor_ad_u;
349  }
VariableValueType< OutputShape, JACOBIAN >::type _neighbor_ad_u

◆ adUDot()

template<typename OutputType>
template<ComputeStage compute_stage>
const VariableValueType<OutputType, compute_stage>::type& MooseVariableFE< OutputType >::adUDot ( )
inline

Definition at line 338 of file MooseVariableFE.h.

339  {
340  _need_ad = true;
341  return _ad_u_dot;
342  }
VariableValueType< OutputShape, JACOBIAN >::type _ad_u_dot

◆ adUDotNeighbor()

template<typename OutputType>
template<ComputeStage compute_stage>
const VariableValueType<OutputType, compute_stage>::type& MooseVariableFE< OutputType >::adUDotNeighbor ( )
inline

Definition at line 430 of file MooseVariableFE.h.

431  {
432  _need_neighbor_ad = true;
433  return _neighbor_ad_u_dot;
434  }
VariableValueType< OutputShape, JACOBIAN >::type _neighbor_ad_u_dot

◆ allDofIndices()

const std::vector< dof_id_type > & MooseVariableBase::allDofIndices ( ) const
inherited

Get all global dofindices for the variable.

Definition at line 46 of file MooseVariableBase.C.

Referenced by FEProblemBase::addJacobianBlock(), NonlocalIntegratedBC::computeNonlocalJacobian(), NonlocalKernel::computeNonlocalJacobian(), NonlocalIntegratedBC::computeNonlocalOffDiagJacobian(), NonlocalKernel::computeNonlocalOffDiagJacobian(), FEProblemBase::prepare(), Assembly::prepareNonlocal(), Assembly::prepareVariableNonlocal(), and MooseVariableBase::totalVarDofs().

47 {
48  const auto it = _sys.subproblem()._var_dof_map.find(name());
49  if (it != _sys.subproblem()._var_dof_map.end())
50  return it->second;
51  else
52  mooseError("VariableAllDoFMap not prepared for ",
53  name(),
54  " . Check nonlocal coupling requirement for the variable.");
55 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
std::map< std::string, std::vector< dof_id_type > > _var_dof_map
Definition: SubProblem.h:502
SystemBase & _sys
System this variable is part of.
virtual SubProblem & subproblem()
Definition: SystemBase.h:105
const std::string & name() const
Get the variable name.

◆ assignADNodalValue()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignADNodalValue ( const DualReal value,
const unsigned int &  component 
)

Definition at line 2265 of file MooseVariableFE.C.

2266 {
2267  _ad_nodal_value = value;
2268 }
Moose::ValueType< OutputType, JACOBIAN >::type _ad_nodal_value
AD nodal value.

◆ assignNeighborNodalValue()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNeighborNodalValue ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2385 of file MooseVariableFE.C.

2386 {
2387  _neighbor_nodal_value = value;
2388 }
OutputType _neighbor_nodal_value

◆ assignNeighborNodalValueOld()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNeighborNodalValueOld ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2400 of file MooseVariableFE.C.

2401 {
2402  _neighbor_nodal_value_old = value;
2403 }
OutputType _neighbor_nodal_value_old

◆ assignNeighborNodalValueOlder()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNeighborNodalValueOlder ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2415 of file MooseVariableFE.C.

2416 {
2418 }
OutputType _neighbor_nodal_value_older

◆ assignNeighborNodalValuePreviousNL()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNeighborNodalValuePreviousNL ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2430 of file MooseVariableFE.C.

2432 {
2434 }
OutputType _neighbor_nodal_value_previous_nl

◆ assignNodalValue()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNodalValue ( const Real &  value,
const unsigned int &  component 
)

Helper methods for assigning nodal values from their corresponding solution values (dof values as they're referred to here in this class).

These methods are only truly meaningful for nodal basis families

Definition at line 2250 of file MooseVariableFE.C.

2251 {
2252  _nodal_value = value;
2253 }
OutputType _nodal_value
Nodal values.

◆ assignNodalValueDot()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNodalValueDot ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2325 of file MooseVariableFE.C.

2326 {
2327  _nodal_value_dot = value;
2328 }
OutputType _nodal_value_dot
nodal values of u_dot

◆ assignNodalValueDotDot()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNodalValueDotDot ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2355 of file MooseVariableFE.C.

2356 {
2357  _nodal_value_dotdot = value;
2358 }
OutputType _nodal_value_dotdot
nodal values of u_dotdot

◆ assignNodalValueDotDotOld()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNodalValueDotDotOld ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2370 of file MooseVariableFE.C.

2371 {
2372  _nodal_value_dotdot_old = value;
2373 }
OutputType _nodal_value_dotdot_old
nodal values of u_dotdot_old

◆ assignNodalValueDotOld()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNodalValueDotOld ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2340 of file MooseVariableFE.C.

2341 {
2342  _nodal_value_dot_old = value;
2343 }
OutputType _nodal_value_dot_old
nodal values of u_dot_old

◆ assignNodalValueOld()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNodalValueOld ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2280 of file MooseVariableFE.C.

2281 {
2282  _nodal_value_old = value;
2283 }
OutputType _nodal_value_old

◆ assignNodalValueOlder()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNodalValueOlder ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2295 of file MooseVariableFE.C.

2296 {
2297  _nodal_value_older = value;
2298 }
OutputType _nodal_value_older

◆ assignNodalValuePreviousNL()

template<typename OutputType >
void MooseVariableFE< OutputType >::assignNodalValuePreviousNL ( const Real &  value,
const unsigned int &  component 
)

Definition at line 2310 of file MooseVariableFE.C.

2311 {
2312  _nodal_value_previous_nl = value;
2313 }
OutputType _nodal_value_previous_nl

◆ clearDofIndices()

template<typename OutputType >
void MooseVariableFE< OutputType >::clearDofIndices ( )
overridevirtual

Clear out the dof indices.

We do this in case this variable is not going to be prepared at all...

Implements MooseVariableFEBase.

Definition at line 311 of file MooseVariableFE.C.

312 {
313  _dof_indices.clear();
314 }
std::vector< dof_id_type > _dof_indices
DOF indices.

◆ computeAD()

template<typename OutputType>
void MooseVariableFE< OutputType >::computeAD ( const unsigned int &  num_dofs,
const unsigned int &  nqp,
const bool &  is_transient,
const FieldVariablePhiValue phi,
const FieldVariablePhiGradient grad_phi,
const FieldVariablePhiSecond *&  second_phi,
const typename VariableTestGradientType< OutputType, JACOBIAN >::type ad_grad_phi 
)

Definition at line 1324 of file MooseVariableFE.C.

1332 {
1333  _ad_dof_values.resize(num_dofs);
1334  if (_need_ad_u)
1335  _ad_u.resize(nqp);
1336 
1337  if (_need_ad_grad_u)
1338  _ad_grad_u.resize(nqp);
1339 
1340  if (_need_ad_second_u)
1341  _ad_second_u.resize(nqp);
1342 
1343  if (is_transient)
1344  {
1345  _ad_dofs_dot.resize(num_dofs);
1346  _ad_u_dot.resize(nqp);
1347  }
1348 
1349  // Derivatives are offset by the variable number
1350  size_t ad_offset = _var_num * _sys.getMaxVarNDofsPerElem();
1351 
1352  // Hopefully this problem can go away at some point
1353  if (ad_offset + num_dofs > AD_MAX_DOFS_PER_ELEM)
1354  mooseError("Current number of dofs per element is greater than AD_MAX_DOFS_PER_ELEM of ",
1355  AD_MAX_DOFS_PER_ELEM);
1356 
1357  for (unsigned int qp = 0; qp < nqp; qp++)
1358  {
1359  if (_need_ad_u)
1360  _ad_u[qp] = _ad_zero;
1361 
1362  if (_need_ad_grad_u)
1363  _ad_grad_u[qp] = _ad_zero;
1364 
1365  if (_need_ad_second_u)
1366  _ad_second_u[qp] = _ad_zero;
1367 
1368  if (is_transient)
1369  _ad_u_dot[qp] = _ad_zero;
1370  }
1371 
1372  for (unsigned int i = 0; i < num_dofs; i++)
1373  {
1375 
1376  // NOTE! You have to do this AFTER setting the value!
1377  _ad_dof_values[i].derivatives()[ad_offset + i] = 1.0;
1378 
1379  if (is_transient && _time_integrator)
1380  {
1381  _ad_dofs_dot[i] = _ad_dof_values[i];
1383  }
1384  }
1385 
1386  // Now build up the solution at each quadrature point:
1387  for (unsigned int i = 0; i < num_dofs; i++)
1388  {
1389  for (unsigned int qp = 0; qp < nqp; qp++)
1390  {
1391  if (_need_ad_u)
1392  _ad_u[qp] += _ad_dof_values[i] * phi[i][qp];
1393 
1394  if (_need_ad_grad_u)
1395  {
1396  if (_displaced)
1397  _ad_grad_u[qp] += _ad_dof_values[i] * ad_grad_phi[i][qp];
1398  else
1399  _ad_grad_u[qp] += _ad_dof_values[i] * grad_phi[i][qp];
1400  }
1401 
1402  if (_need_ad_second_u)
1403  _ad_second_u[qp] += _ad_dof_values[i] * (*second_phi)[i][qp];
1404 
1405  if (is_transient)
1406  _ad_u_dot[qp] += phi[i][qp] * _ad_dofs_dot[i];
1407  }
1408  }
1409 }
virtual void computeADTimeDerivatives(DualReal &ad_u_dot, const dof_id_type &dof)=0
method for computing local automatic differentiation time derivatives
VariableValueType< OutputShape, JACOBIAN >::type _ad_u_dot
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
void resize(const unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:205
VariableSecondType< OutputShape, JACOBIAN >::type _ad_second_u
VariableGradientType< OutputShape, JACOBIAN >::type _ad_grad_u
size_t getMaxVarNDofsPerElem()
Gets the maximum number of dofs used by any one variable on any one element.
Definition: SystemBase.h:413
std::vector< dof_id_type > _dof_indices
DOF indices.
MooseArray< DualReal > _ad_dofs_dot
const FieldVariablePhiValue & phi()
SystemBase & _sys
System this variable is part of.
TimeIntegrator * _time_integrator
A pointer to TimeIntegrator. nullptr if _sys is not a NonlinearSystemBase.
const DualReal _ad_zero
A zero AD variable.
VariableValueType< OutputShape, JACOBIAN >::type _ad_u
unsigned int _var_num
variable number (from libMesh)
const bool _displaced
Whether this variable is on the displaced system.
MooseArray< DualReal > _ad_dof_values
virtual const NumericVector< Number > *& currentSolution()=0
The solution vector that is currently being operated on.

◆ computeADNeighbor()

template<typename OutputType >
void MooseVariableFE< OutputType >::computeADNeighbor ( const unsigned int &  num_dofs,
const unsigned int &  nqp,
const bool &  is_transient,
const FieldVariablePhiValue phi,
const FieldVariablePhiGradient grad_phi,
const FieldVariablePhiSecond *&  second_phi 
)

Definition at line 1413 of file MooseVariableFE.C.

1420 {
1421  _neighbor_ad_dof_values.resize(num_dofs);
1422  if (_need_neighbor_ad_u)
1423  _neighbor_ad_u.resize(nqp);
1424 
1426  _neighbor_ad_grad_u.resize(nqp);
1427 
1429  _neighbor_ad_second_u.resize(nqp);
1430 
1431  // Derivatives are offset by the variable number
1432  size_t ad_offset = _var_num * _sys.getMaxVarNDofsPerElem();
1433 
1434  // Hopefully this problem can go away at some point
1435  if (ad_offset + num_dofs > AD_MAX_DOFS_PER_ELEM)
1436  mooseError("Current number of dofs per element is greater than AD_MAX_DOFS_PER_ELEM of ",
1437  AD_MAX_DOFS_PER_ELEM);
1438 
1439  for (unsigned int qp = 0; qp < nqp; qp++)
1440  {
1441  if (_need_neighbor_ad_u)
1442  _neighbor_ad_u[qp] = _ad_zero;
1443 
1446 
1449 
1450  if (is_transient)
1451  {
1454  }
1455  }
1456 
1457  for (unsigned int i = 0; i < num_dofs; i++)
1458  {
1460 
1461  // NOTE! You have to do this AFTER setting the value!
1462  _neighbor_ad_dof_values[i].derivatives()[ad_offset + i] = 1.0;
1463 
1464  if (is_transient && _time_integrator)
1465  {
1469  }
1470  }
1471 
1472  // Now build up the solution at each quadrature point:
1473  for (unsigned int i = 0; i < num_dofs; i++)
1474  {
1475  for (unsigned int qp = 0; qp < nqp; qp++)
1476  {
1477  if (_need_neighbor_ad_u)
1478  _neighbor_ad_u[qp] += _neighbor_ad_dof_values[i] * phi[i][qp];
1479 
1481  _neighbor_ad_grad_u[qp] += _neighbor_ad_dof_values[i] * grad_phi[i][qp];
1482 
1484  _neighbor_ad_second_u[qp] += _neighbor_ad_dof_values[i] * (*second_phi)[i][qp];
1485 
1486  if (is_transient)
1487  _neighbor_ad_u_dot[qp] += phi[i][qp] * _neighbor_ad_dofs_dot[i];
1488  }
1489  }
1490 }
std::vector< dof_id_type > _dof_indices_neighbor
DOF indices (neighbor)
virtual void computeADTimeDerivatives(DualReal &ad_u_dot, const dof_id_type &dof)=0
method for computing local automatic differentiation time derivatives
VariableSecondType< OutputShape, JACOBIAN >::type _neighbor_ad_second_u
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
void resize(const unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:205
MooseArray< DualReal > _neighbor_ad_dof_values
size_t getMaxVarNDofsPerElem()
Gets the maximum number of dofs used by any one variable on any one element.
Definition: SystemBase.h:413
const FieldVariablePhiValue & phi()
SystemBase & _sys
System this variable is part of.
TimeIntegrator * _time_integrator
A pointer to TimeIntegrator. nullptr if _sys is not a NonlinearSystemBase.
const DualReal _ad_zero
A zero AD variable.
VariableGradientType< OutputShape, JACOBIAN >::type _neighbor_ad_grad_u
VariableValueType< OutputShape, JACOBIAN >::type _neighbor_ad_u
unsigned int _var_num
variable number (from libMesh)
MooseArray< DualReal > _neighbor_ad_dofs_dot
bool _need_neighbor_ad_second_u
VariableValueType< OutputShape, JACOBIAN >::type _neighbor_ad_u_dot
virtual const NumericVector< Number > *& currentSolution()=0
The solution vector that is currently being operated on.

◆ computeElemValues()

template<typename OutputType >
void MooseVariableFE< OutputType >::computeElemValues ( )
overridevirtual

Compute values at interior quadrature points.

Implements MooseVariableFEBase.

Reimplemented in MooseVariableConstMonomial.

Definition at line 810 of file MooseVariableFE.C.

Referenced by AuxiliarySystem::reinitElem().

811 {
813 }
const FieldVariablePhiValue & _phi
const VariableTestGradientType< OutputShape, JACOBIAN >::type & _ad_grad_phi
virtual void computeValuesHelper(QBase *&qrule, const FieldVariablePhiValue &phi, const FieldVariablePhiGradient &grad_phi, const FieldVariablePhiSecond *&second_phi, const FieldVariablePhiCurl *&curl_phi, const typename VariableTestGradientType< OutputType, JACOBIAN >::type &ad_grad_phi)
Helper function for computing values.
QBase *& _qrule
Quadrature rule for interior.
const FieldVariablePhiCurl * _curl_phi
const FieldVariablePhiGradient & _grad_phi
const FieldVariablePhiSecond * _second_phi

◆ computeElemValuesFace()

template<typename OutputType >
void MooseVariableFE< OutputType >::computeElemValuesFace ( )
overridevirtual

Compute values at facial quadrature points.

Implements MooseVariableFEBase.

Reimplemented in MooseVariableConstMonomial.

Definition at line 817 of file MooseVariableFE.C.

Referenced by AuxiliarySystem::reinitElemFace().

818 {
821 }
const FieldVariablePhiGradient & _grad_phi_face
virtual void computeValuesHelper(QBase *&qrule, const FieldVariablePhiValue &phi, const FieldVariablePhiGradient &grad_phi, const FieldVariablePhiSecond *&second_phi, const FieldVariablePhiCurl *&curl_phi, const typename VariableTestGradientType< OutputType, JACOBIAN >::type &ad_grad_phi)
Helper function for computing values.
const VariableTestGradientType< OutputShape, JACOBIAN >::type & _ad_grad_phi_face
const FieldVariablePhiValue & _phi_face
QBase *& _qrule_face
Quadrature rule for the face.
const FieldVariablePhiSecond * _second_phi_face
const FieldVariablePhiCurl * _curl_phi_face

◆ computeIncrementAtNode()

template<typename OutputType >
void MooseVariableFE< OutputType >::computeIncrementAtNode ( const NumericVector< Number > &  increment_vec)

Compute and store incremental change at the current node based on increment_vec.

Definition at line 858 of file MooseVariableFE.C.

859 {
860  if (!isNodal())
861  mooseError("computeIncrementAtNode can only be called for nodal variables");
862 
863  _increment.resize(1);
864 
865  // Compute the increment for the current DOF
866  _increment[0] = increment_vec(_dof_indices[0]);
867 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
void resize(const unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:205
std::vector< dof_id_type > _dof_indices
DOF indices.
FieldVariableValue _increment
Increment in the variable used in dampers.
bool isNodal() const override
Is this variable nodal.

◆ computeIncrementAtQps()

template<typename OutputType >
void MooseVariableFE< OutputType >::computeIncrementAtQps ( const NumericVector< Number > &  increment_vec)

Compute and store incremental change in solution at QPs based on increment_vec.

Definition at line 841 of file MooseVariableFE.C.

842 {
843  unsigned int nqp = _qrule->n_points();
844 
845  _increment.resize(nqp);
846  // Compute the increment at each quadrature point
847  unsigned int num_dofs = _dof_indices.size();
848  for (unsigned int qp = 0; qp < nqp; qp++)
849  {
850  _increment[qp] = 0;
851  for (unsigned int i = 0; i < num_dofs; i++)
852  _increment[qp] += _phi[i][qp] * increment_vec(_dof_indices[i]);
853  }
854 }
const FieldVariablePhiValue & _phi
void resize(const unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:205
std::vector< dof_id_type > _dof_indices
DOF indices.
QBase *& _qrule
Quadrature rule for interior.
FieldVariableValue _increment
Increment in the variable used in dampers.

◆ computeNeighborValues()

template<typename OutputType >
void MooseVariableFE< OutputType >::computeNeighborValues ( )
overridevirtual

Compute values at quadrature points for the neighbor.

Implements MooseVariableFEBase.

Reimplemented in MooseVariableConstMonomial.

Definition at line 833 of file MooseVariableFE.C.

834 {
837 }
QBase *& _qrule_neighbor
Quadrature rule for the neighbor.
const FieldVariablePhiValue & _phi_neighbor
virtual void computeNeighborValuesHelper(QBase *&qrule, const FieldVariablePhiValue &phi, const FieldVariablePhiGradient &grad_phi, const FieldVariablePhiSecond *&second_phi)
Helper function for computing values.
const FieldVariablePhiGradient & _grad_phi_neighbor
const FieldVariablePhiSecond * _second_phi_neighbor

◆ computeNeighborValuesFace()

template<typename OutputType >
void MooseVariableFE< OutputType >::computeNeighborValuesFace ( )
overridevirtual

Compute values at facial quadrature points for the neighbor.

Implements MooseVariableFEBase.

Reimplemented in MooseVariableConstMonomial.

Definition at line 825 of file MooseVariableFE.C.

826 {
829 }
QBase *& _qrule_neighbor
Quadrature rule for the neighbor.
const FieldVariablePhiSecond * _second_phi_face_neighbor
virtual void computeNeighborValuesHelper(QBase *&qrule, const FieldVariablePhiValue &phi, const FieldVariablePhiGradient &grad_phi, const FieldVariablePhiSecond *&second_phi)
Helper function for computing values.
const FieldVariablePhiValue & _phi_face_neighbor
const FieldVariablePhiGradient & _grad_phi_face_neighbor

◆ computeNeighborValuesHelper()

template<typename OutputType >
void MooseVariableFE< OutputType >::computeNeighborValuesHelper ( QBase *&  qrule,
const FieldVariablePhiValue phi,
const FieldVariablePhiGradient grad_phi,
const FieldVariablePhiSecond *&  second_phi 
)
virtual

Helper function for computing values.

Definition at line 1494 of file MooseVariableFE.C.

1498 {
1499  bool is_transient = _subproblem.isTransient();
1500  unsigned int nqp = qrule->n_points();
1501 
1502  _u_neighbor.resize(nqp);
1503  _grad_u_neighbor.resize(nqp);
1504 
1507 
1508  if (is_transient)
1509  {
1511  _u_dot_neighbor.resize(nqp);
1512 
1515 
1518 
1521 
1524 
1527 
1530 
1533 
1535  _u_old_neighbor.resize(nqp);
1536 
1539 
1542 
1545 
1548 
1551  }
1552 
1553  for (unsigned int i = 0; i < nqp; ++i)
1554  {
1555  _u_neighbor[i] = 0;
1556  _grad_u_neighbor[i] = 0;
1557 
1559  _second_u_neighbor[i] = 0;
1560 
1561  if (_need_grad_dot)
1562  _grad_u_neighbor_dot[i] = 0;
1563  if (_need_grad_dotdot)
1564  _grad_u_neighbor_dotdot[i] = 0;
1565 
1566  if (is_transient)
1567  {
1569  _u_dot_neighbor[i] = 0;
1570 
1572  _u_dotdot_neighbor[i] = 0;
1573 
1575  _u_dot_old_neighbor[i] = 0;
1576 
1578  _u_dotdot_old_neighbor[i] = 0;
1579 
1581  _du_dot_du_neighbor[i] = 0;
1582 
1584  _du_dotdot_du_neighbor[i] = 0;
1585 
1587  _u_old_neighbor[i] = 0;
1588 
1590  _u_older_neighbor[i] = 0;
1591 
1593  _grad_u_old_neighbor[i] = 0;
1594 
1596  _grad_u_older_neighbor[i] = 0;
1597 
1599  _second_u_old_neighbor[i] = 0;
1600 
1602  _second_u_older_neighbor[i] = 0;
1603  }
1604  }
1605 
1606  unsigned int num_dofs = _dof_indices_neighbor.size();
1607 
1609  _dof_values_neighbor.resize(num_dofs);
1610  if (is_transient)
1611  {
1613  _dof_values_old_neighbor.resize(num_dofs);
1617  _dof_values_dot_neighbor.resize(num_dofs);
1624  }
1625 
1626  const NumericVector<Real> & current_solution = *_sys.currentSolution();
1627  const NumericVector<Real> & solution_old = _sys.solutionOld();
1628  const NumericVector<Real> & solution_older = _sys.solutionOlder();
1629  const NumericVector<Real> * u_dot = _sys.solutionUDot();
1630  const NumericVector<Real> * u_dotdot = _sys.solutionUDotDot();
1631  const NumericVector<Real> * u_dot_old = _sys.solutionUDotOld();
1632  const NumericVector<Real> * u_dotdot_old = _sys.solutionUDotDotOld();
1633  const Real & du_dot_du = _sys.duDotDu();
1634  const Real & du_dotdot_du = _sys.duDotDotDu();
1635 
1636  dof_id_type idx;
1637  Real soln_local;
1638  Real soln_old_local = 0;
1639  Real soln_older_local = 0;
1640  Real u_dot_local = 0;
1641  Real u_dotdot_local = 0;
1642  Real u_dot_old_local = 0;
1643  Real u_dotdot_old_local = 0;
1644 
1645  OutputType phi_local;
1646  typename OutputTools<OutputType>::OutputGradient dphi_local;
1647  typename OutputTools<OutputType>::OutputSecond d2phi_local;
1648 
1649  for (unsigned int i = 0; i < num_dofs; ++i)
1650  {
1651  idx = _dof_indices_neighbor[i];
1652  soln_local = current_solution(idx);
1653 
1655  _dof_values_neighbor[i] = soln_local;
1656 
1657  if (is_transient)
1658  {
1660  soln_old_local = solution_old(idx);
1661 
1663  soln_older_local = solution_older(idx);
1664 
1666  _dof_values_old_neighbor[i] = soln_old_local;
1668  _dof_values_older_neighbor[i] = soln_older_local;
1669 
1670  if (u_dot)
1671  {
1672  u_dot_local = (*u_dot)(idx);
1674  _dof_values_dot_neighbor[i] = u_dot_local;
1675  }
1676 
1677  if (u_dotdot)
1678  {
1679  u_dotdot_local = (*u_dotdot)(idx);
1681  _dof_values_dotdot_neighbor[i] = u_dotdot_local;
1682  }
1683 
1684  if (u_dot_old)
1685  {
1686  u_dot_old_local = (*u_dot_old)(idx);
1688  _dof_values_dot_old_neighbor[i] = u_dot_old_local;
1689  }
1690 
1691  if (u_dotdot_old)
1692  {
1693  u_dotdot_old_local = (*u_dotdot_old)(idx);
1695  _dof_values_dotdot_old_neighbor[i] = u_dotdot_old_local;
1696  }
1697  }
1698 
1699  for (unsigned int qp = 0; qp < nqp; ++qp)
1700  {
1701  phi_local = phi[i][qp];
1702  dphi_local = grad_phi[i][qp];
1703 
1705  d2phi_local = (*second_phi)[i][qp];
1706 
1707  _u_neighbor[qp] += phi_local * soln_local;
1708  _grad_u_neighbor[qp] += dphi_local * soln_local;
1709 
1711  _second_u_neighbor[qp] += d2phi_local * soln_local;
1712 
1713  if (is_transient)
1714  {
1716  _u_dot_neighbor[qp] += phi_local * u_dot_local;
1717 
1719  _u_dotdot_neighbor[qp] += phi_local * u_dotdot_local;
1720 
1722  _u_dot_old_neighbor[qp] += phi_local * u_dot_old_local;
1723 
1725  _u_dotdot_old_neighbor[qp] += phi_local * u_dotdot_old_local;
1726 
1728  _du_dot_du_neighbor[qp] = du_dot_du;
1729 
1731  _du_dotdot_du_neighbor[qp] = du_dotdot_du;
1732 
1734  _grad_u_neighbor_dot[qp].add_scaled(dphi_local, u_dot_local);
1735 
1737  _grad_u_neighbor_dotdot[qp].add_scaled(dphi_local, u_dotdot_local);
1738 
1740  _u_old_neighbor[qp] += phi_local * soln_old_local;
1741 
1743  _u_older_neighbor[qp] += phi_local * soln_older_local;
1744 
1746  _grad_u_old_neighbor[qp] += dphi_local * soln_old_local;
1747 
1749  _grad_u_older_neighbor[qp] += dphi_local * soln_older_local;
1750 
1752  _second_u_old_neighbor[qp] += d2phi_local * soln_old_local;
1753 
1755  _second_u_older_neighbor[qp] += d2phi_local * soln_older_local;
1756  }
1757  }
1758  }
1759 
1760  // Automatic differentiation
1762  computeADNeighbor(num_dofs, nqp, is_transient, phi, grad_phi, second_phi);
1763 }
FieldVariableValue _u_old_neighbor
virtual NumericVector< Number > * solutionUDot()=0
bool _need_second_old_neighbor
FieldVariableGradient _grad_u_older_neighbor
MooseArray< Real > _dof_values_neighbor
std::vector< dof_id_type > _dof_indices_neighbor
DOF indices (neighbor)
FieldVariableValue _u_dot_neighbor
bool _need_dof_values_dotdot_neighbor
void computeADNeighbor(const unsigned int &num_dofs, const unsigned int &nqp, const bool &is_transient, const FieldVariablePhiValue &phi, const FieldVariablePhiGradient &grad_phi, const FieldVariablePhiSecond *&second_phi)
TensorTools::IncrementRank< OutputGradient >::type OutputSecond
Definition: MooseTypes.h:139
virtual const bool & currentlyComputingJacobian() const
Returns true if the problem is in the process of computing Jacobian.
Definition: SubProblem.h:508
MooseArray< Real > _dof_values_older_neighbor
void resize(const unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:205
virtual NumericVector< Number > & solutionOld()=0
bool _need_dof_values_dot_neighbor
FieldVariableGradient _grad_u_neighbor_dot
virtual NumericVector< Number > * solutionUDotDotOld()=0
FieldVariableValue _u_neighbor
VariableValue _du_dot_du_neighbor
MooseArray< Real > _dof_values_dotdot_old_neighbor
bool _need_grad_older_neighbor
bool _need_dof_values_neighbor
const FieldVariablePhiValue & phi()
virtual Number & duDotDu()
Definition: SystemBase.h:158
bool _need_grad_neighbor_dotdot
virtual Number & duDotDotDu()
Definition: SystemBase.h:159
FieldVariableGradient _grad_u_neighbor
SubProblem & _subproblem
Problem this variable is part of.
FieldVariableGradient _grad_u_neighbor_dotdot
SystemBase & _sys
System this variable is part of.
bool _need_du_dotdot_du_neighbor
FieldVariableValue _u_dot_old_neighbor
virtual bool isTransient() const =0
FieldVariableSecond _second_u_neighbor
MooseArray< Real > _dof_values_old_neighbor
MooseArray< Real > _dof_values_dot_old_neighbor
bool _need_dof_values_dotdot_old_neighbor
MooseArray< Real > _dof_values_dot_neighbor
FieldVariableValue _u_dotdot_old_neighbor
MooseArray< Real > _dof_values_dotdot_neighbor
bool _need_u_dotdot_old_neighbor
bool _need_dof_values_older_neighbor
FieldVariableSecond _second_u_old_neighbor
VariableValue _du_dotdot_du_neighbor
virtual NumericVector< Number > & solutionOlder()=0
FieldVariableValue _u_dotdot_neighbor
virtual NumericVector< Number > * solutionUDotOld()=0
virtual NumericVector< Number > * solutionUDotDot()=0
bool _need_dof_values_dot_old_neighbor
FieldVariableValue _u_older_neighbor
TensorTools::IncrementRank< OutputShape >::type OutputGradient
Definition: MooseTypes.h:138
bool _need_second_older_neighbor
FieldVariableGradient _grad_u_old_neighbor
bool _need_dof_values_old_neighbor
FieldVariableSecond _second_u_older_neighbor
virtual const NumericVector< Number > *& currentSolution()=0
The solution vector that is currently being operated on.

◆ computeNodalNeighborValues()

template<typename OutputType >
void MooseVariableFE< OutputType >::computeNodalNeighborValues ( )
overridevirtual

Compute nodal values of this variable in the neighbor.

Implements MooseVariableFEBase.

Definition at line 2176 of file MooseVariableFE.C.

2177 {
2179  {
2180  const unsigned int n = _dof_indices_neighbor.size();
2181  mooseAssert(n, "There must be a non-zero number of degrees of freedom");
2184  for (unsigned int i = 0; i < n; ++i)
2186 
2188  {
2192  for (unsigned int i = 0; i < n; ++i)
2194  }
2195  if (_subproblem.isTransient())
2196  {
2201  for (unsigned int i = 0; i < n; ++i)
2202  {
2205  }
2206 
2213  for (unsigned int i = 0; i < n; i++)
2214  {
2215  if (_sys.solutionUDot())
2217  if (_sys.solutionUDotDot())
2219  if (_sys.solutionUDotOld())
2221  if (_sys.solutionUDotDotOld())
2226  }
2227  }
2228  }
2229  else
2230  {
2234  if (_subproblem.isTransient())
2235  {
2244  }
2245  }
2246 }
virtual NumericVector< Number > * solutionUDot()=0
MooseArray< Real > _dof_du_dot_du_neighbor
MooseArray< Real > _dof_values_neighbor
std::vector< dof_id_type > _dof_indices_neighbor
DOF indices (neighbor)
void assignNeighborNodalValuePreviousNL(const Real &value, const unsigned int &component)
MooseArray< Real > _dof_values_older_neighbor
void resize(const unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:205
virtual NumericVector< Number > & solutionOld()=0
bool _need_dof_values_previous_nl_neighbor
MooseArray< Real > _dof_du_dotdot_du_neighbor
virtual NumericVector< Number > * solutionUDotDotOld()=0
MooseArray< Real > _dof_values_previous_nl_neighbor
MooseArray< Real > _dof_values_dotdot_old_neighbor
virtual NumericVector< Number > * solutionPreviousNewton()=0
virtual Number & duDotDu()
Definition: SystemBase.h:158
virtual Number & duDotDotDu()
Definition: SystemBase.h:159
SubProblem & _subproblem
Problem this variable is part of.
SystemBase & _sys
System this variable is part of.
void assignNeighborNodalValueOld(const Real &value, const unsigned int &component)
virtual bool isTransient() const =0
MooseArray< Real > _dof_values_old_neighbor
MooseArray< Real > _dof_values_dot_old_neighbor
MooseArray< Real > _dof_values_dot_neighbor
MooseArray< Real > _dof_values_dotdot_neighbor
void assignNeighborNodalValueOlder(const Real &value, const unsigned int &component)
PetscInt n
virtual NumericVector< Number > & solutionOlder()=0
virtual NumericVector< Number > * solutionUDotOld()=0
virtual NumericVector< Number > * solutionUDotDot()=0
bool _neighbor_has_dof_indices
If the neighor has dofs.
void assignNeighborNodalValue(const Real &value, const unsigned int &component)
virtual const NumericVector< Number > *& currentSolution()=0
The solution vector that is currently being operated on.

◆ computeNodalValues()

template<typename OutputType >
void MooseVariableFE< OutputType >::computeNodalValues ( )
overridevirtual

Compute nodal values of this variable.

Implements MooseVariableFEBase.

Definition at line 2046 of file MooseVariableFE.C.

2047 {
2048  auto safe_access_tagged_vectors = _sys.subproblem().safeAccessTaggedVectors();
2049  auto safe_access_tagged_matrices = _sys.subproblem().safeAccessTaggedMatrices();
2050  auto & active_coupleable_matrix_tags =
2052  auto & active_coupleable_vector_tags =
2054 
2055  if (_has_dof_indices)
2056  {
2057  auto n = _dof_indices.size();
2058  mooseAssert(n, "There must be a non-zero number of degrees of freedom");
2059  _dof_values.resize(n);
2060 
2062  for (decltype(n) i = 0; i < n; ++i)
2064 
2065  for (auto tag : active_coupleable_vector_tags)
2066  _vector_tags_dof_u[tag].resize(n);
2067 
2068  for (auto tag : active_coupleable_matrix_tags)
2069  _matrix_tags_dof_u[tag].resize(n);
2070 
2071  if (safe_access_tagged_vectors)
2072  {
2073  for (auto tag : active_coupleable_vector_tags)
2074  if (_need_vector_tag_dof_u[tag] && _sys.hasVector(tag) && _sys.getVector(tag).closed())
2075  {
2076  auto & vec = _sys.getVector(tag);
2077  vec.get(_dof_indices, &_vector_tags_dof_u[tag][0]);
2078  }
2079  }
2080 
2081  if (safe_access_tagged_matrices)
2082  {
2083  for (auto tag : active_coupleable_matrix_tags)
2084  if (_need_matrix_tag_dof_u[tag] && _sys.hasMatrix(tag) && _sys.matrixTagActive(tag) &&
2085  _sys.getMatrix(tag).closed())
2086  {
2087  auto & mat = _sys.getMatrix(tag);
2088  for (unsigned i = 0; i < _dof_indices.size(); i++)
2089  {
2090  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
2091  _matrix_tags_dof_u[tag][i] = mat(_dof_indices[i], _dof_indices[i]);
2092  }
2093  }
2094  }
2095 
2097  {
2100  for (decltype(n) i = 0; i < n; ++i)
2102  }
2103  if (_subproblem.isTransient())
2104  {
2109  for (decltype(n) i = 0; i < n; ++i)
2110  {
2113  }
2114 
2121 
2122  if (_sys.solutionUDot())
2124  if (_sys.solutionUDotDot())
2126  if (_sys.solutionUDotOld())
2128  if (_sys.solutionUDotDotOld())
2130  _dof_du_dot_du[0] = _sys.duDotDu();
2132 
2133  for (decltype(n) i = 0; i < n; ++i)
2134  {
2139  }
2140  }
2141 
2143  {
2145  auto ad_offset = _var_num * _sys.getMaxVarNDofsPerNode();
2146 
2147  for (decltype(n) i = 0; i < n; ++i)
2148  {
2149  _ad_dof_values[i] = _dof_values[i];
2150  _ad_dof_values[i].derivatives()[ad_offset + i] = 1.;
2152  }
2153  }
2154  }
2155  else
2156  {
2157  _dof_values.resize(0);
2160  if (_subproblem.isTransient())
2161  {
2170  }
2171  }
2172 }
std::vector< bool > _need_vector_tag_dof_u
MooseArray< Real > _dof_values_old
bool _has_dof_indices
If we have dofs.
virtual NumericVector< Number > * solutionUDot()=0
std::vector< bool > _need_matrix_tag_dof_u
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:685
virtual const bool & currentlyComputingJacobian() const
Returns true if the problem is in the process of computing Jacobian.
Definition: SubProblem.h:508
void resize(const unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:205
virtual NumericVector< Number > & solutionOld()=0
MooseArray< Real > _dof_values_older
MooseArray< Real > _dof_du_dotdot_du
nodal values of derivative of u_dotdot wrt u
void assignNodalValueDotDotOld(const Real &value, const unsigned int &component)
MooseArray< Real > _dof_values_previous_nl
virtual NumericVector< Number > * solutionUDotDotOld()=0
virtual bool hasMatrix(TagID tag)
Check if the tagged matrix exists in the system.
Definition: SystemBase.C:781
MooseArray< Real > _dof_values_dotdot_old
nodal values of u_dotdot_old
void assignNodalValue(const Real &value, const unsigned int &component)
Helper methods for assigning nodal values from their corresponding solution values (dof values as the...
MooseArray< Real > _dof_values_dot
nodal values of u_dot
THREAD_ID _tid
Thread ID.
virtual NumericVector< Number > * solutionPreviousNewton()=0
void assignNodalValueOlder(const Real &value, const unsigned int &component)
std::vector< dof_id_type > _dof_indices
DOF indices.
virtual Number & duDotDu()
Definition: SystemBase.h:158
std::set< TagID > & getActiveFEVariableCoupleableVectorTags(THREAD_ID tid)
Definition: SubProblem.C:184
virtual Number & duDotDotDu()
Definition: SystemBase.h:159
SubProblem & _subproblem
Problem this variable is part of.
SystemBase & _sys
System this variable is part of.
virtual bool isTransient() const =0
virtual SubProblem & subproblem()
Definition: SystemBase.h:105
void assignNodalValueDotDot(const Real &value, const unsigned int &component)
virtual bool matrixTagActive(TagID tag)
If or not a matrix tag is active.
Definition: SystemBase.C:879
std::vector< MooseArray< Real > > _vector_tags_dof_u
MooseArray< Real > _dof_values_dot_old
nodal values of u_dot_old
void assignNodalValueDotOld(const Real &value, const unsigned int &component)
bool safeAccessTaggedMatrices()
Is it safe to access the tagged matrices.
Definition: SubProblem.h:519
PetscInt n
virtual SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:787
MooseArray< Real > _dof_values
unsigned int _var_num
variable number (from libMesh)
MooseArray< Real > _dof_du_dot_du
nodal values of derivative of u_dot wrt u
virtual NumericVector< Number > & solutionOlder()=0
void assignADNodalValue(const DualReal &value, const unsigned int &component)
std::set< TagID > & getActiveFEVariableCoupleableMatrixTags(THREAD_ID tid)
Definition: SubProblem.C:178
std::vector< MooseArray< Real > > _matrix_tags_dof_u
MooseArray< DualReal > _ad_dof_values
virtual NumericVector< Number > * solutionUDotOld()=0
virtual NumericVector< Number > * solutionUDotDot()=0
void assignNodalValueOld(const Real &value, const unsigned int &component)
size_t getMaxVarNDofsPerNode()
Gets the maximum number of dofs used by any one variable on any one node.
Definition: SystemBase.h:420
void assignNodalValueDot(const Real &value, const unsigned int &component)
bool safeAccessTaggedVectors()
Is it safe to access the tagged vectors.
Definition: SubProblem.h:522
bool _need_dof_values_previous_nl
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector.
Definition: SystemBase.C:735
MooseArray< Real > _dof_values_dotdot
nodal values of u_dotdot
void assignNodalValuePreviousNL(const Real &value, const unsigned int &component)
virtual const NumericVector< Number > *& currentSolution()=0
The solution vector that is currently being operated on.

◆ computeValuesHelper()

template<typename OutputType>
void MooseVariableFE< OutputType >::computeValuesHelper ( QBase *&  qrule,
const FieldVariablePhiValue phi,
const FieldVariablePhiGradient grad_phi,
const FieldVariablePhiSecond *&  second_phi,
const FieldVariablePhiCurl *&  curl_phi,
const typename VariableTestGradientType< OutputType, JACOBIAN >::type ad_grad_phi 
)
virtual

Helper function for computing values.

Definition at line 897 of file MooseVariableFE.C.

905 {
906  bool is_transient = _subproblem.isTransient();
907  unsigned int nqp = qrule->n_points();
908  auto safe_access_tagged_vectors = _sys.subproblem().safeAccessTaggedVectors();
909  auto safe_access_tagged_matrices = _sys.subproblem().safeAccessTaggedMatrices();
910  auto & active_coupleable_matrix_tags =
912  auto & active_coupleable_vector_tags =
914 
915  _u.resize(nqp);
916  _grad_u.resize(nqp);
917 
918  for (auto tag : active_coupleable_vector_tags)
919  if (_need_vector_tag_u[tag])
920  _vector_tag_u[tag].resize(nqp);
921 
922  for (auto tag : active_coupleable_matrix_tags)
923  if (_need_matrix_tag_u[tag])
924  _matrix_tag_u[tag].resize(nqp);
925 
926  if (_need_second)
927  _second_u.resize(nqp);
928 
929  if (_need_curl)
930  _curl_u.resize(nqp);
931 
933  _u_previous_nl.resize(nqp);
934 
937 
940 
941  if (is_transient)
942  {
943  if (_need_u_dot)
944  _u_dot.resize(nqp);
945 
946  if (_need_u_dotdot)
947  _u_dotdot.resize(nqp);
948 
949  if (_need_u_dot_old)
950  _u_dot_old.resize(nqp);
951 
952  if (_need_u_dotdot_old)
953  _u_dotdot_old.resize(nqp);
954 
955  if (_need_du_dot_du)
956  _du_dot_du.resize(nqp);
957 
958  if (_need_du_dotdot_du)
959  _du_dotdot_du.resize(nqp);
960 
961  if (_need_grad_dot)
962  _grad_u_dot.resize(nqp);
963 
964  if (_need_grad_dotdot)
965  _grad_u_dotdot.resize(nqp);
966 
967  if (_need_u_old)
968  _u_old.resize(nqp);
969 
970  if (_need_u_older)
971  _u_older.resize(nqp);
972 
973  if (_need_grad_old)
974  _grad_u_old.resize(nqp);
975 
976  if (_need_grad_older)
977  _grad_u_older.resize(nqp);
978 
979  if (_need_second_old)
980  _second_u_old.resize(nqp);
981 
982  if (_need_curl_old)
983  _curl_u_old.resize(nqp);
984 
985  if (_need_second_older)
986  _second_u_older.resize(nqp);
987  }
988 
989  for (unsigned int i = 0; i < nqp; ++i)
990  {
991  _u[i] = 0;
992  _grad_u[i] = 0;
993 
994  for (auto tag : active_coupleable_vector_tags)
995  if (_need_vector_tag_u[tag])
996  _vector_tag_u[tag][i] = 0;
997 
998  for (auto tag : active_coupleable_matrix_tags)
999  if (_need_matrix_tag_u[tag])
1000  _matrix_tag_u[tag][i] = 0;
1001 
1002  if (_need_second)
1003  _second_u[i] = 0;
1004 
1005  if (_need_curl)
1006  _curl_u[i] = 0;
1007 
1008  if (_need_u_previous_nl)
1009  _u_previous_nl[i] = 0;
1010 
1012  _grad_u_previous_nl[i] = 0;
1013 
1015  _second_u_previous_nl[i] = 0;
1016 
1017  if (is_transient)
1018  {
1019  if (_need_u_dot)
1020  _u_dot[i] = 0;
1021 
1022  if (_need_u_dotdot)
1023  _u_dotdot[i] = 0;
1024 
1025  if (_need_u_dot_old)
1026  _u_dot_old[i] = 0;
1027 
1028  if (_need_u_dotdot_old)
1029  _u_dotdot_old[i] = 0;
1030 
1031  if (_need_du_dot_du)
1032  _du_dot_du[i] = 0;
1033 
1034  if (_need_du_dotdot_du)
1035  _du_dotdot_du[i] = 0;
1036 
1037  if (_need_grad_dot)
1038  _grad_u_dot[i] = 0;
1039 
1040  if (_need_grad_dotdot)
1041  _grad_u_dotdot[i] = 0;
1042 
1043  if (_need_u_old)
1044  _u_old[i] = 0;
1045 
1046  if (_need_u_older)
1047  _u_older[i] = 0;
1048 
1049  if (_need_grad_old)
1050  _grad_u_old[i] = 0;
1051 
1052  if (_need_grad_older)
1053  _grad_u_older[i] = 0;
1054 
1055  if (_need_second_old)
1056  _second_u_old[i] = 0;
1057 
1058  if (_need_second_older)
1059  _second_u_older[i] = 0;
1060 
1061  if (_need_curl_old)
1062  _curl_u_old[i] = 0;
1063  }
1064  }
1065 
1066  unsigned int num_dofs = _dof_indices.size();
1067 
1068  if (_need_dof_values)
1069  _dof_values.resize(num_dofs);
1070 
1072  _dof_values_previous_nl.resize(num_dofs);
1073 
1074  if (is_transient)
1075  {
1077  _dof_values_old.resize(num_dofs);
1079  _dof_values_older.resize(num_dofs);
1081  _dof_values_dot.resize(num_dofs);
1083  _dof_values_dotdot.resize(num_dofs);
1085  _dof_values_dot_old.resize(num_dofs);
1087  _dof_values_dotdot_old.resize(num_dofs);
1088  }
1089 
1090  const NumericVector<Real> & current_solution = *_sys.currentSolution();
1091  const NumericVector<Real> & solution_old = _sys.solutionOld();
1092  const NumericVector<Real> & solution_older = _sys.solutionOlder();
1093  const NumericVector<Real> * solution_prev_nl = _sys.solutionPreviousNewton();
1094  const NumericVector<Real> * u_dot = _sys.solutionUDot();
1095  const NumericVector<Real> * u_dotdot = _sys.solutionUDotDot();
1096  const NumericVector<Real> * u_dot_old = _sys.solutionUDotOld();
1097  const NumericVector<Real> * u_dotdot_old = _sys.solutionUDotDotOld();
1098  const Real & du_dot_du = _sys.duDotDu();
1099  const Real & du_dotdot_du = _sys.duDotDotDu();
1100 
1101  dof_id_type idx = 0;
1102  Real soln_local = 0;
1103  Real tag_local_value = 0;
1104  Real soln_old_local = 0;
1105  Real soln_older_local = 0;
1106  Real soln_previous_nl_local = 0;
1107  Real u_dot_local = 0;
1108  Real u_dotdot_local = 0;
1109  Real u_dot_old_local = 0;
1110  Real u_dotdot_old_local = 0;
1111 
1112  const OutputType * phi_local = NULL;
1113  const typename OutputTools<OutputType>::OutputGradient * dphi_qp = NULL;
1114  const typename OutputTools<OutputType>::OutputSecond * d2phi_local = NULL;
1115  const OutputType * curl_phi_local = NULL;
1116 
1117  typename OutputTools<OutputType>::OutputGradient * grad_u_qp = NULL;
1118  typename OutputTools<OutputType>::OutputGradient * grad_u_old_qp = NULL;
1119  typename OutputTools<OutputType>::OutputGradient * grad_u_older_qp = NULL;
1120  typename OutputTools<OutputType>::OutputGradient * grad_u_previous_nl_qp = NULL;
1121 
1122  typename OutputTools<OutputType>::OutputSecond * second_u_qp = NULL;
1123  typename OutputTools<OutputType>::OutputSecond * second_u_old_qp = NULL;
1124  typename OutputTools<OutputType>::OutputSecond * second_u_older_qp = NULL;
1125  typename OutputTools<OutputType>::OutputSecond * second_u_previous_nl_qp = NULL;
1126 
1127  for (unsigned int i = 0; i < num_dofs; i++)
1128  {
1129  idx = _dof_indices[i];
1130  soln_local = current_solution(idx);
1131 
1132  if (_need_dof_values)
1133  _dof_values[i] = soln_local;
1134 
1137  soln_previous_nl_local = (*solution_prev_nl)(idx);
1138 
1140  _dof_values_previous_nl[i] = soln_previous_nl_local;
1141 
1142  if (is_transient)
1143  {
1145  soln_old_local = solution_old(idx);
1146 
1148  soln_older_local = solution_older(idx);
1149 
1151  _dof_values_old[i] = soln_old_local;
1153  _dof_values_older[i] = soln_older_local;
1154 
1155  if (u_dot)
1156  {
1157  u_dot_local = (*u_dot)(idx);
1159  _dof_values_dot[i] = u_dot_local;
1160  }
1161 
1162  if (u_dotdot)
1163  {
1164  u_dotdot_local = (*u_dotdot)(idx);
1166  _dof_values_dotdot[i] = u_dotdot_local;
1167  }
1168 
1169  if (u_dot_old)
1170  {
1171  u_dot_old_local = (*u_dot_old)(idx);
1173  _dof_values_dot_old[i] = u_dot_old_local;
1174  }
1175 
1176  if (u_dotdot_old)
1177  {
1178  u_dotdot_old_local = (*u_dotdot_old)(idx);
1180  _dof_values_dotdot_old[i] = u_dotdot_old_local;
1181  }
1182  }
1183 
1184  for (unsigned int qp = 0; qp < nqp; qp++)
1185  {
1186  phi_local = &phi[i][qp];
1187  dphi_qp = &grad_phi[i][qp];
1188 
1189  grad_u_qp = &_grad_u[qp];
1190 
1192  grad_u_previous_nl_qp = &_grad_u_previous_nl[qp];
1193 
1194  if (is_transient)
1195  {
1196  if (_need_grad_old)
1197  grad_u_old_qp = &_grad_u_old[qp];
1198 
1199  if (_need_grad_older)
1200  grad_u_older_qp = &_grad_u_older[qp];
1201  }
1202 
1204  {
1205  d2phi_local = &(*second_phi)[i][qp];
1206 
1207  if (_need_second)
1208  {
1209  second_u_qp = &_second_u[qp];
1210  second_u_qp->add_scaled(*d2phi_local, soln_local);
1211  }
1212 
1214  {
1215  second_u_previous_nl_qp = &_second_u_previous_nl[qp];
1216  second_u_previous_nl_qp->add_scaled(*d2phi_local, soln_previous_nl_local);
1217  }
1218 
1219  if (is_transient)
1220  {
1221  if (_need_second_old)
1222  second_u_old_qp = &_second_u_old[qp];
1223 
1224  if (_need_second_older)
1225  second_u_older_qp = &_second_u_older[qp];
1226  }
1227  }
1228 
1229  if (_need_curl || _need_curl_old)
1230  {
1231  curl_phi_local = &(*curl_phi)[i][qp];
1232 
1233  if (_need_curl)
1234  _curl_u[qp] += *curl_phi_local * soln_local;
1235 
1236  if (is_transient && _need_curl_old)
1237  _curl_u_old[qp] += *curl_phi_local * soln_old_local;
1238  }
1239 
1240  _u[qp] += *phi_local * soln_local;
1241 
1242  if (safe_access_tagged_vectors)
1243  {
1244  for (auto tag : active_coupleable_vector_tags)
1245  if (_need_vector_tag_u[tag] && _sys.hasVector(tag) && _sys.getVector(tag).closed())
1246  {
1247  tag_local_value = _sys.getVector(tag)(idx);
1248  _vector_tag_u[tag][qp] += *phi_local * tag_local_value;
1249  }
1250  }
1251 
1252  if (safe_access_tagged_matrices)
1253  {
1254  for (auto tag : active_coupleable_matrix_tags)
1255  if (_need_matrix_tag_u[tag] && _sys.hasMatrix(tag) && _sys.getMatrix(tag).closed())
1256  {
1257  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
1258  tag_local_value = _sys.getMatrix(tag)(idx, idx);
1259  _matrix_tag_u[tag][qp] += *phi_local * tag_local_value;
1260  }
1261  }
1262 
1263  grad_u_qp->add_scaled(*dphi_qp, soln_local);
1264 
1265  if (_need_u_previous_nl)
1266  _u_previous_nl[qp] += *phi_local * soln_previous_nl_local;
1268  grad_u_previous_nl_qp->add_scaled(*dphi_qp, soln_previous_nl_local);
1269 
1270  if (is_transient)
1271  {
1272  if (_need_u_dot)
1273  _u_dot[qp] += *phi_local * u_dot_local;
1274 
1275  if (_need_u_dotdot)
1276  _u_dotdot[qp] += *phi_local * u_dotdot_local;
1277 
1278  if (_need_u_dot_old)
1279  _u_dot_old[qp] += *phi_local * u_dot_old_local;
1280 
1281  if (_need_u_dotdot_old)
1282  _u_dotdot_old[qp] += *phi_local * u_dotdot_old_local;
1283 
1284  if (_need_du_dot_du)
1285  _du_dot_du[qp] = du_dot_du;
1286 
1287  if (_need_du_dotdot_du)
1288  _du_dotdot_du[qp] = du_dotdot_du;
1289 
1290  if (_need_grad_dot)
1291  _grad_u_dot[qp].add_scaled(*dphi_qp, u_dot_local);
1292 
1293  if (_need_grad_dotdot)
1294  _grad_u_dotdot[qp].add_scaled(*dphi_qp, u_dotdot_local);
1295 
1296  if (_need_u_old)
1297  _u_old[qp] += *phi_local * soln_old_local;
1298 
1299  if (_need_u_older)
1300  _u_older[qp] += *phi_local * soln_older_local;
1301 
1302  if (_need_grad_old)
1303  grad_u_old_qp->add_scaled(*dphi_qp, soln_old_local);
1304 
1305  if (_need_grad_older)
1306  grad_u_older_qp->add_scaled(*dphi_qp, soln_older_local);
1307 
1308  if (_need_second_old)
1309  second_u_old_qp->add_scaled(*d2phi_local, soln_old_local);
1310 
1311  if (_need_second_older)
1312  second_u_older_qp->add_scaled(*d2phi_local, soln_older_local);
1313  }
1314  }
1315  }
1316 
1317  // Automatic differentiation
1319  computeAD(num_dofs, nqp, is_transient, phi, grad_phi, second_phi, ad_grad_phi);
1320 }
FieldVariableGradient _grad_u_old
MooseArray< Real > _dof_values_old
FieldVariableValue _u_dot_old
u_dot_old (time derivative)
virtual NumericVector< Number > * solutionUDot()=0
std::vector< FieldVariableValue > _vector_tag_u
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:685
TensorTools::IncrementRank< OutputGradient >::type OutputSecond
Definition: MooseTypes.h:139
FieldVariableGradient _grad_u_dot
virtual const bool & currentlyComputingJacobian() const
Returns true if the problem is in the process of computing Jacobian.
Definition: SubProblem.h:508
void resize(const unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:205
FieldVariableValue _u
virtual NumericVector< Number > & solutionOld()=0
MooseArray< Real > _dof_values_older
FieldVariableValue _u_old
FieldVariableValue _u_dotdot_old
u_dotdot_old (second time derivative)
VariableValue _du_dotdot_du
derivative of u_dotdot wrt u
void computeAD(const unsigned int &num_dofs, const unsigned int &nqp, const bool &is_transient, const FieldVariablePhiValue &phi, const FieldVariablePhiGradient &grad_phi, const FieldVariablePhiSecond *&second_phi, const typename VariableTestGradientType< OutputType, JACOBIAN >::type &ad_grad_phi)
FieldVariableValue _u_dot
u_dot (time derivative)
MooseArray< Real > _dof_values_previous_nl
FieldVariableSecond _second_u
virtual NumericVector< Number > * solutionUDotDotOld()=0
virtual bool hasMatrix(TagID tag)
Check if the tagged matrix exists in the system.
Definition: SystemBase.C:781
MooseArray< Real > _dof_values_dotdot_old
nodal values of u_dotdot_old
FieldVariableSecond _second_u_old
FieldVariableCurl _curl_u_old
MooseArray< Real > _dof_values_dot
nodal values of u_dot
THREAD_ID _tid
Thread ID.
virtual NumericVector< Number > * solutionPreviousNewton()=0
std::vector< dof_id_type > _dof_indices
DOF indices.
std::vector< bool > _need_vector_tag_u
const FieldVariablePhiValue & phi()
virtual Number & duDotDu()
Definition: SystemBase.h:158
std::set< TagID > & getActiveFEVariableCoupleableVectorTags(THREAD_ID tid)
Definition: SubProblem.C:184
virtual Number & duDotDotDu()
Definition: SystemBase.h:159
SubProblem & _subproblem
Problem this variable is part of.
SystemBase & _sys
System this variable is part of.
FieldVariableCurl _curl_u
virtual bool isTransient() const =0
FieldVariableGradient _grad_u
virtual SubProblem & subproblem()
Definition: SystemBase.h:105
FieldVariableGradient _grad_u_dotdot
FieldVariableSecond _second_u_older
VariableValue _du_dot_du
derivative of u_dot wrt u
MooseArray< Real > _dof_values_dot_old
nodal values of u_dot_old
FieldVariableGradient _grad_u_older
std::vector< FieldVariableValue > _matrix_tag_u
bool safeAccessTaggedMatrices()
Is it safe to access the tagged matrices.
Definition: SubProblem.h:519
std::vector< bool > _need_matrix_tag_u
virtual SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:787
MooseArray< Real > _dof_values
virtual NumericVector< Number > & solutionOlder()=0
std::set< TagID > & getActiveFEVariableCoupleableMatrixTags(THREAD_ID tid)
Definition: SubProblem.C:178
FieldVariableValue _u_older
virtual NumericVector< Number > * solutionUDotOld()=0
virtual NumericVector< Number > * solutionUDotDot()=0
FieldVariableGradient _grad_u_previous_nl
TensorTools::IncrementRank< OutputShape >::type OutputGradient
Definition: MooseTypes.h:138
FieldVariableValue _u_dotdot
u_dotdot (second time derivative)
bool safeAccessTaggedVectors()
Is it safe to access the tagged vectors.
Definition: SubProblem.h:522
FieldVariableSecond _second_u_previous_nl
bool _need_dof_values_previous_nl
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector.
Definition: SystemBase.C:735
MooseArray< Real > _dof_values_dotdot
nodal values of u_dotdot
bool _need_dof_values_dotdot_old
FieldVariableValue _u_previous_nl
virtual const NumericVector< Number > *& currentSolution()=0
The solution vector that is currently being operated on.

◆ computingCurl()

template<typename OutputType>
bool MooseVariableFE< OutputType >::computingCurl ( )
inline

Whether or not this variable is computing the curl.

Definition at line 133 of file MooseVariableFE.h.

Referenced by Assembly::copyFaceShapes(), and Assembly::copyShapes().

◆ computingSecond()

template<typename OutputType>
bool MooseVariableFE< OutputType >::computingSecond ( )
inline

Whether or not this variable is computing any second derivatives.

Definition at line 129 of file MooseVariableFE.h.

Referenced by Assembly::copyFaceShapes(), and Assembly::copyShapes().

129 { return usesSecondPhi(); }
bool usesSecondPhi()
Whether or not this variable is computing any second derivatives.

◆ curlPhi()

template<typename OutputType >
const MooseVariableFE< OutputType >::FieldVariablePhiCurl & MooseVariableFE< OutputType >::curlPhi ( )

Definition at line 2695 of file MooseVariableFE.C.

Referenced by Assembly::copyFaceShapes(), Assembly::copyShapes(), MooseVariableFE< Real >::curlSln(), MooseVariableFE< Real >::curlSlnOld(), and MooseVariableFE< Real >::curlSlnOlder().

2696 {
2697  _curl_phi = &_assembly.feCurlPhi<OutputType>(_fe_type);
2698  return *_curl_phi;
2699 }
FEType _fe_type
The FEType associated with this variable.
Assembly & _assembly
Our assembly.
const FieldVariablePhiCurl * _curl_phi
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhi(FEType type)
Definition: Assembly.h:978

◆ curlPhiFace()

template<typename OutputType >
const MooseVariableFE< OutputType >::FieldVariablePhiCurl & MooseVariableFE< OutputType >::curlPhiFace ( )

Definition at line 2711 of file MooseVariableFE.C.

Referenced by MooseVariableFE< Real >::curlSln(), MooseVariableFE< Real >::curlSlnOld(), and MooseVariableFE< Real >::curlSlnOlder().

2712 {
2714  return *_curl_phi_face;
2715 }
FEType _fe_type
The FEType associated with this variable.
Assembly & _assembly
Our assembly.
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhiFace(FEType type)
Definition: Assembly.h:986
const FieldVariablePhiCurl * _curl_phi_face

◆ curlPhiFaceNeighbor()

template<typename OutputType >
const MooseVariableFE< OutputType >::FieldVariablePhiCurl & MooseVariableFE< OutputType >::curlPhiFaceNeighbor ( )

Definition at line 2743 of file MooseVariableFE.C.

Referenced by MooseVariableFE< Real >::curlSlnNeighbor(), MooseVariableFE< Real >::curlSlnOlderNeighbor(), and MooseVariableFE< Real >::curlSlnOldNeighbor().

2744 {
2746  return *_curl_phi_face_neighbor;
2747 }
FEType _fe_type
The FEType associated with this variable.
Assembly & _assembly
Our assembly.
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhiFaceNeighbor(FEType type)
Definition: Assembly.h:1002
const FieldVariablePhiCurl * _curl_phi_face_neighbor

◆ curlPhiNeighbor()

template<typename OutputType >
const MooseVariableFE< OutputType >::FieldVariablePhiCurl & MooseVariableFE< OutputType >::curlPhiNeighbor ( )

Definition at line 2727 of file MooseVariableFE.C.

2728 {
2730  return *_curl_phi_neighbor;
2731 }
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhiNeighbor(FEType type)
Definition: Assembly.h:994
FEType _fe_type
The FEType associated with this variable.
Assembly & _assembly
Our assembly.
const FieldVariablePhiCurl * _curl_phi_neighbor

◆ curlSln()

template<typename OutputType>
const FieldVariableValue& MooseVariableFE< OutputType >::curlSln ( )
inline

Definition at line 292 of file MooseVariableFE.h.

Referenced by Coupleable::coupledCurl().

293  {
294  _need_curl = true;
295  curlPhi();
296  curlPhiFace();
297  return _curl_u;
298  }
const FieldVariablePhiCurl & curlPhiFace()
const FieldVariablePhiCurl & curlPhi()
FieldVariableCurl _curl_u

◆ curlSlnNeighbor()

template<typename OutputType>
const FieldVariableCurl& MooseVariableFE< OutputType >::curlSlnNeighbor ( )
inline

Definition at line 516 of file MooseVariableFE.h.

Referenced by Coupleable::coupledCurl().

517  {
518  _need_curl_neighbor = true;
520  return _curl_u_neighbor;
521  }
const FieldVariablePhiCurl & curlPhiFaceNeighbor()
FieldVariableCurl _curl_u_neighbor

◆ curlSlnOld()

template<typename OutputType>
const FieldVariableValue& MooseVariableFE< OutputType >::curlSlnOld ( )
inline

Definition at line 299 of file MooseVariableFE.h.

Referenced by Coupleable::coupledCurl(), and Coupleable::coupledCurlOld().

300  {
301  _need_curl_old = true;
302  curlPhi();
303  curlPhiFace();
304  return _curl_u_old;
305  }
const FieldVariablePhiCurl & curlPhiFace()
FieldVariableCurl _curl_u_old
const FieldVariablePhiCurl & curlPhi()

◆ curlSlnOlder()

template<typename OutputType>
const FieldVariableValue& MooseVariableFE< OutputType >::curlSlnOlder ( )
inline

Definition at line 306 of file MooseVariableFE.h.

Referenced by Coupleable::coupledCurlOld(), and Coupleable::coupledCurlOlder().

307  {
308  _need_curl_older = true;
309  curlPhi();
310  curlPhiFace();
311  return _curl_u_older;
312  }
const FieldVariablePhiCurl & curlPhiFace()
const FieldVariablePhiCurl & curlPhi()
FieldVariableCurl _curl_u_older

◆ curlSlnOlderNeighbor()

template<typename OutputType>
const FieldVariableCurl& MooseVariableFE< OutputType >::curlSlnOlderNeighbor ( )
inline

Definition at line 528 of file MooseVariableFE.h.

Referenced by Coupleable::coupledCurlOld(), and Coupleable::coupledCurlOlder().

529  {
532  return _curl_u_older_neighbor;
533  }
const FieldVariablePhiCurl & curlPhiFaceNeighbor()
FieldVariableCurl _curl_u_older_neighbor
bool _need_curl_older_neighbor

◆ curlSlnOldNeighbor()

template<typename OutputType>
const FieldVariableCurl& MooseVariableFE< OutputType >::curlSlnOldNeighbor ( )
inline

Definition at line 522 of file MooseVariableFE.h.

Referenced by Coupleable::coupledCurl(), and Coupleable::coupledCurlOld().

523  {
526  return _curl_u_old_neighbor;
527  }
const FieldVariablePhiCurl & curlPhiFaceNeighbor()
FieldVariableCurl _curl_u_old_neighbor

◆ currentElem()

template<typename OutputType>
const Elem*& MooseVariableFE< OutputType >::currentElem ( ) const
inlineoverridevirtual

Current element this variable is evaluated at.

Implements MooseVariableFEBase.

Definition at line 148 of file MooseVariableFE.h.

148 { return _elem; }
const Elem *& _elem
current element

◆ currentSide()

template<typename OutputType>
unsigned int& MooseVariableFE< OutputType >::currentSide ( ) const
inline

Current side this variable is being evaluated on.

Definition at line 153 of file MooseVariableFE.h.

153 { return _current_side; }
unsigned int & _current_side
the side of the current element (valid when doing face assembly)

◆ dofIndices() [1/2]

std::vector<dof_id_type>& MooseVariableBase::dofIndices ( )
inlineinherited

◆ dofIndices() [2/2]

const std::vector<dof_id_type>& MooseVariableBase::dofIndices ( ) const
inlineinherited

Definition at line 94 of file MooseVariableBase.h.

94 { return _dof_indices; }
std::vector< dof_id_type > _dof_indices
DOF indices.

◆ dofIndicesNeighbor()

template<typename OutputType>
std::vector<dof_id_type>& MooseVariableFE< OutputType >::dofIndicesNeighbor ( )
inlineoverridevirtual

Get neighbor DOF indices for currently selected element.

Returns
the neighbor degree of freedom indices

Implements MooseVariableFEBase.

Definition at line 631 of file MooseVariableFE.h.

Referenced by NodalConstraint::computeJacobian(), and NodalConstraint::computeResidual().

631 { return _dof_indices_neighbor; }
std::vector< dof_id_type > _dof_indices_neighbor
DOF indices (neighbor)

◆ dofMap()

const DofMap& MooseVariableBase::dofMap ( ) const
inlineinherited

The DofMap associated with the system this variable is in.

Definition at line 90 of file MooseVariableBase.h.

Referenced by AuxScalarKernel::compute(), and ScalarVariable::getValue().

90 { return _dof_map; }
const DofMap & _dof_map
DOF map.

◆ dofValue()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValue ( )
overridevirtual

Deprecated method.

Use dofValues

Implements MooseVariableFEBase.

Definition at line 577 of file MooseVariableFE.C.

578 {
579  mooseDeprecated("Use dofValues instead of dofValue");
580  return dofValues();
581 }
void mooseDeprecated(Args &&... args)
Emit a deprecated code/feature message with the given stringified, concatenated args.
Definition: MooseError.h:237
const MooseArray< Number > & dofValues() override
Returns dof solution on element.

◆ dofValues()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValues ( )
overridevirtual

Returns dof solution on element.

Implements MooseVariableFEBase.

Definition at line 585 of file MooseVariableFE.C.

Referenced by Coupleable::coupledValue(), and InternalSideIndicator::finalize().

586 {
587  _need_dof_values = true;
588  return _dof_values;
589 }
MooseArray< Real > _dof_values

◆ dofValuesDot()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDot ( )
overridevirtual

Returns time derivative of degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 649 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDot().

650 {
651  if (_sys.solutionUDot())
652  {
653  _need_dof_values_dot = true;
654  return _dof_values_dot;
655  }
656  else
657  mooseError("MooseVariableFE: Time derivative of solution (`u_dot`) is not stored. Please set "
658  "uDotRequested() to true in FEProblemBase before requesting `u_dot`.");
659 }
virtual NumericVector< Number > * solutionUDot()=0
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
MooseArray< Real > _dof_values_dot
nodal values of u_dot
SystemBase & _sys
System this variable is part of.

◆ dofValuesDotDot()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDotDot ( )
overridevirtual

Returns second time derivative of degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 663 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDotDot(), and Coupleable::coupledNodalDotDot().

664 {
665  if (_sys.solutionUDotDot())
666  {
668  return _dof_values_dotdot;
669  }
670  else
671  mooseError("MooseVariableFE: Second time derivative of solution (`u_dotdot`) is not stored. "
672  "Please set uDotDotRequested() to true in FEProblemBase before requesting "
673  "`u_dotdot`.");
674 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
SystemBase & _sys
System this variable is part of.
virtual NumericVector< Number > * solutionUDotDot()=0
MooseArray< Real > _dof_values_dotdot
nodal values of u_dotdot

◆ dofValuesDotDotNeighbor()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDotDotNeighbor ( )
overridevirtual

Returns second time derivative of neighboring degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 722 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDotDot(), and Coupleable::coupledNodalDotDot().

723 {
724  if (_sys.solutionUDotDot())
725  {
728  }
729  else
730  mooseError("MooseVariableFE: Second time derivative of solution (`u_dotdot`) is not stored. "
731  "Please set uDotDotRequested() to true in FEProblemBase before requesting "
732  "`u_dotdot`.");
733 }
bool _need_dof_values_dotdot_neighbor
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
SystemBase & _sys
System this variable is part of.
MooseArray< Real > _dof_values_dotdot_neighbor
virtual NumericVector< Number > * solutionUDotDot()=0

◆ dofValuesDotDotOld()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDotDotOld ( )
overridevirtual

Returns old second time derivative of degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 693 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDotDotOld(), and Coupleable::coupledNodalDotDotOld().

694 {
695  if (_sys.solutionUDotDotOld())
696  {
698  return _dof_values_dotdot_old;
699  }
700  else
701  mooseError("MooseVariableFE: Old second time derivative of solution (`u_dotdot_old`) is not "
702  "stored. Please set uDotDotOldRequested() to true in FEProblemBase before "
703  "requesting `u_dotdot_old`.");
704 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
virtual NumericVector< Number > * solutionUDotDotOld()=0
MooseArray< Real > _dof_values_dotdot_old
nodal values of u_dotdot_old
SystemBase & _sys
System this variable is part of.
bool _need_dof_values_dotdot_old

◆ dofValuesDotDotOldNeighbor()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDotDotOldNeighbor ( )
overridevirtual

Returns old second time derivative of neighboring degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 752 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDotDotOld(), and Coupleable::coupledNodalDotDotOld().

753 {
754  if (_sys.solutionUDotDotOld())
755  {
758  }
759  else
760  mooseError("MooseVariableFE: Old second time derivative of solution (`u_dotdot_old`) is not "
761  "stored. Please set uDotDotOldRequested() to true in FEProblemBase before "
762  "requesting `u_dotdot_old`.");
763 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
virtual NumericVector< Number > * solutionUDotDotOld()=0
MooseArray< Real > _dof_values_dotdot_old_neighbor
SystemBase & _sys
System this variable is part of.
bool _need_dof_values_dotdot_old_neighbor

◆ dofValuesDotNeighbor()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDotNeighbor ( )
overridevirtual

Returns time derivative of neighboring degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 708 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDot(), and NeighborCoupleable::coupledNeighborValueDot().

709 {
710  if (_sys.solutionUDot())
711  {
714  }
715  else
716  mooseError("MooseVariableFE: Time derivative of solution (`u_dot`) is not stored. Please set "
717  "uDotRequested() to true in FEProblemBase before requesting `u_dot`.");
718 }
virtual NumericVector< Number > * solutionUDot()=0
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
bool _need_dof_values_dot_neighbor
SystemBase & _sys
System this variable is part of.
MooseArray< Real > _dof_values_dot_neighbor

◆ dofValuesDotOld()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDotOld ( )
overridevirtual

Returns old time derivative of degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 678 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDotOld(), and Coupleable::coupledNodalDotOld().

679 {
680  if (_sys.solutionUDotOld())
681  {
683  return _dof_values_dot_old;
684  }
685  else
686  mooseError("MooseVariableFE: Old time derivative of solution (`u_dot_old`) is not stored. "
687  "Please set uDotOldRequested() to true in FEProblemBase before requesting "
688  "`u_dot_old`.");
689 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
SystemBase & _sys
System this variable is part of.
MooseArray< Real > _dof_values_dot_old
nodal values of u_dot_old
virtual NumericVector< Number > * solutionUDotOld()=0

◆ dofValuesDotOldNeighbor()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDotOldNeighbor ( )
overridevirtual

Returns old time derivative of neighboring degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 737 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDotOld(), and Coupleable::coupledNodalDotOld().

738 {
739  if (_sys.solutionUDotOld())
740  {
743  }
744  else
745  mooseError("MooseVariableFE: Old time derivative of solution (`u_dot_old`) is not stored. "
746  "Please set uDotOldRequested() to true in FEProblemBase before requesting "
747  "`u_dot_old`.");
748 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:208
SystemBase & _sys
System this variable is part of.
MooseArray< Real > _dof_values_dot_old_neighbor
virtual NumericVector< Number > * solutionUDotOld()=0
bool _need_dof_values_dot_old_neighbor

◆ dofValuesDuDotDotDu()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDuDotDotDu ( )
overridevirtual

Returns derivative of second time derivative of degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 775 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDotDotDu().

776 {
777  _need_dof_du_dotdot_du = true;
778  return _dof_du_dotdot_du;
779 }
MooseArray< Real > _dof_du_dotdot_du
nodal values of derivative of u_dotdot wrt u

◆ dofValuesDuDotDotDuNeighbor()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDuDotDotDuNeighbor ( )
overridevirtual

Returns derivative of second time derivative of neighboring degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 791 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDotDotDu().

792 {
795 }
MooseArray< Real > _dof_du_dotdot_du_neighbor
bool _need_dof_du_dotdot_du_neighbor

◆ dofValuesDuDotDu()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDuDotDu ( )
overridevirtual

Returns derivative of time derivative of degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 767 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDotDu().

768 {
769  _need_dof_du_dot_du = true;
770  return _dof_du_dot_du;
771 }
MooseArray< Real > _dof_du_dot_du
nodal values of derivative of u_dot wrt u

◆ dofValuesDuDotDuNeighbor()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesDuDotDuNeighbor ( )
overridevirtual

Returns derivative of time derivative of neighboring degrees of freedom.

Implements MooseVariableFEBase.

Definition at line 783 of file MooseVariableFE.C.

Referenced by Coupleable::coupledDotDu(), and NeighborCoupleable::coupledNeighborValueDotDu().

784 {
787 }
MooseArray< Real > _dof_du_dot_du_neighbor
bool _need_dof_du_dot_du_neighbor

◆ dofValuesNeighbor()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesNeighbor ( )
overridevirtual

Returns dof solution on neighbor element.

Implements MooseVariableFEBase.

Definition at line 617 of file MooseVariableFE.C.

Referenced by NeighborCoupleable::coupledNeighborDofValues(), NeighborCoupleable::coupledNeighborValue(), and Coupleable::coupledValue().

618 {
620  return _dof_values_neighbor;
621 }
MooseArray< Real > _dof_values_neighbor
bool _need_dof_values_neighbor

◆ dofValuesOld()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesOld ( )
overridevirtual

Returns old dof solution on element.

Implements MooseVariableFEBase.

Definition at line 593 of file MooseVariableFE.C.

Referenced by Coupleable::coupledValue(), and Coupleable::coupledValueOld().

594 {
595  _need_dof_values_old = true;
596  return _dof_values_old;
597 }
MooseArray< Real > _dof_values_old

◆ dofValuesOlder()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesOlder ( )
overridevirtual

Returns older dof solution on element.

Implements MooseVariableFEBase.

Definition at line 601 of file MooseVariableFE.C.

Referenced by Coupleable::coupledValueOld(), and Coupleable::coupledValueOlder().

602 {
603  _need_dof_values_older = true;
604  return _dof_values_older;
605 }
MooseArray< Real > _dof_values_older

◆ dofValuesOlderNeighbor()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesOlderNeighbor ( )
overridevirtual

◆ dofValuesOldNeighbor()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesOldNeighbor ( )
overridevirtual

◆ dofValuesPreviousNL()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesPreviousNL ( )
overridevirtual

Returns previous nl solution on element.

Implements MooseVariableFEBase.

Definition at line 609 of file MooseVariableFE.C.

Referenced by Coupleable::coupledValuePreviousNL().

610 {
613 }
MooseArray< Real > _dof_values_previous_nl
bool _need_dof_values_previous_nl

◆ dofValuesPreviousNLNeighbor()

template<typename OutputType >
const MooseArray< Number > & MooseVariableFE< OutputType >::dofValuesPreviousNLNeighbor ( )
overridevirtual

Returns previous nl solution on neighbor element.

Implements MooseVariableFEBase.

Definition at line 641 of file MooseVariableFE.C.

Referenced by Coupleable::coupledValuePreviousNL().

642 {
645 }
bool _need_dof_values_previous_nl_neighbor
MooseArray< Real > _dof_values_previous_nl_neighbor

◆ duDotDotDu()

template<typename OutputType>
const VariableValue& MooseVariableFE< OutputType >::duDotDotDu ( )
inline

Definition at line 423 of file MooseVariableFE.h.

Referenced by Coupleable::coupledDotDotDu().

424  {
425  _need_du_dotdot_du = true;
426  return _du_dotdot_du;
427  }
VariableValue _du_dotdot_du
derivative of u_dotdot wrt u

◆ duDotDotDuNeighbor()

template<typename OutputType>
const VariableValue& MooseVariableFE< OutputType >::duDotDotDuNeighbor ( )
inline

Definition at line 592 of file MooseVariableFE.h.

593  {
595  return _du_dotdot_du_neighbor;
596  }
bool _need_du_dotdot_du_neighbor
VariableValue _du_dotdot_du_neighbor

◆ duDotDu()

template<typename OutputType>
const VariableValue& MooseVariableFE< OutputType >::duDotDu ( )
inline

Definition at line 417 of file MooseVariableFE.h.

Referenced by Coupleable::coupledDotDu().

418  {
419  _need_du_dot_du = true;
420  return _du_dot_du;
421  }
VariableValue _du_dot_du
derivative of u_dot wrt u

◆ duDotDuNeighbor()

template<typename OutputType>
const VariableValue& MooseVariableFE< OutputType >::duDotDuNeighbor ( )
inline

Definition at line 586 of file MooseVariableFE.h.

Referenced by Coupleable::coupledDotDu(), and NeighborCoupleable::coupledNeighborValueDotDu().

587  {
589  return _du_dot_du_neighbor;
590  }