https://mooseframework.inl.gov
Classes | Public Member Functions | Static Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
Assembly Class Reference

Keeps track of stuff related to assembling. More...

#include <Assembly.h>

Classes

class  FEShapeData
 
class  GlobalDataKey
 Key structure for APIs manipulating global vectors/matrices. More...
 
class  LocalDataKey
 Key structure for APIs adding/caching local element residuals/Jacobians. More...
 
struct  QRules
 Data structure for tracking/grouping a set of quadrature rules for a particular dimensionality of mesh element. More...
 
class  VectorFEShapeData
 

Public Member Functions

 Assembly (SystemBase &sys, THREAD_ID tid)
 
virtual ~Assembly ()
 
const FEBase *const & getFE (FEType type, unsigned int dim) const
 Get a reference to a pointer that will contain the current volume FE. More...
 
const FEBase *const & getFENeighbor (FEType type, unsigned int dim) const
 Get a reference to a pointer that will contain the current 'neighbor' FE. More...
 
const FEBase *const & getFEFace (FEType type, unsigned int dim) const
 Get a reference to a pointer that will contain the current "face" FE. More...
 
const FEBase *const & getFEFaceNeighbor (FEType type, unsigned int dim) const
 Get a reference to a pointer that will contain the current "neighbor" FE. More...
 
const FEVectorBase *const & getVectorFE (FEType type, unsigned int dim) const
 Get a reference to a pointer that will contain the current volume FEVector. More...
 
const FEVectorBase *const & getVectorFENeighbor (FEType type, unsigned int dim) const
 GetVector a reference to a pointer that will contain the current 'neighbor' FE. More...
 
const FEVectorBase *const & getVectorFEFace (FEType type, unsigned int dim) const
 GetVector a reference to a pointer that will contain the current "face" FE. More...
 
const FEVectorBase *const & getVectorFEFaceNeighbor (FEType type, unsigned int dim) const
 GetVector a reference to a pointer that will contain the current "neighbor" FE. More...
 
const libMesh::QBase *const & qRule () const
 Returns the reference to the current quadrature being used. More...
 
libMesh::QBase *const & writeableQRule ()
 Returns the reference to the current quadrature being used. More...
 
const MooseArray< Point > & qPoints () const
 Returns the reference to the quadrature points. More...
 
const std::vector< Point > & qPointsMortar () const
 Returns the reference to the mortar segment element quadrature points. More...
 
const MooseArray< Point > & physicalPoints () const
 The current points in physical space where we have reinited through reinitAtPhysical() More...
 
const MooseArray< Real > & JxW () const
 Returns the reference to the transformed jacobian weights. More...
 
const MooseArray< ADReal > & adJxW () const
 
const MooseArray< ADReal > & adJxWFace () const
 
const MooseArray< ADReal > & adCurvatures () const
 
const MooseArray< Real > & coordTransformation () const
 Returns the reference to the coordinate transformation coefficients. More...
 
const MooseArray< Real > & mortarCoordTransformation () const
 Returns the reference to the coordinate transformation coefficients on the mortar segment mesh. More...
 
const MooseArray< ADReal > & adCoordTransformation () const
 Returns the reference to the AD version of the coordinate transformation coefficients. More...
 
const Moose::CoordinateSystemTypecoordSystem () const
 Get the coordinate system type. More...
 
const libMesh::QBase *const & qRuleFace () const
 Returns the reference to the current quadrature being used on a current face. More...
 
libMesh::QBase *const & writeableQRuleFace ()
 Returns the reference to the current quadrature being used on a current face. More...
 
const MooseArray< Point > & qPointsFace () const
 Returns the reference to the current quadrature being used. More...
 
const MooseArray< Real > & JxWFace () const
 Returns the reference to the transformed jacobian weights on a current face. More...
 
const MooseArray< Point > & normals () const
 Returns the array of normals for quadrature points on a current side. More...
 
const std::vector< Eigen::Map< RealDIMValue > > & mappedNormals () const
 
const MooseArray< std::vector< Point > > & tangents () const
 Returns the array of tangents for quadrature points on a current side. More...
 
unsigned int numExtraElemIntegers () const
 Number of extra element integers Assembly tracked. More...
 
const dof_id_typeextraElemID (unsigned int id) const
 Returns an integer ID of the current element given the index associated with the integer. More...
 
const dof_id_typeextraElemIDNeighbor (unsigned int id) const
 Returns an integer ID of the current element given the index associated with the integer. More...
 
const MooseArray< ADPoint > & adNormals () const
 
const MooseArray< ADPoint > & adQPoints () const
 
const MooseArray< ADPoint > & adQPointsFace () const
 
template<bool is_ad>
const MooseArray< Moose::GenericType< Point, is_ad > > & genericQPoints () const
 
const Elem *const & elem () const
 Return the current element. More...
 
const SubdomainIDcurrentSubdomainID () const
 Return the current subdomain ID. More...
 
void setCurrentSubdomainID (SubdomainID i)
 set the current subdomain ID More...
 
const BoundaryIDcurrentBoundaryID () const
 Return the current boundary ID. More...
 
void setCurrentBoundaryID (BoundaryID i)
 set the current boundary ID More...
 
const RealelemVolume () const
 Returns the reference to the current element volume. More...
 
const unsigned intside () const
 Returns the current side. More...
 
const unsigned intneighborSide () const
 Returns the current neighboring side. More...
 
const Elem *& sideElem ()
 Returns the side element. More...
 
const RealsideElemVolume () const
 Returns the reference to the volume of current side element. More...
 
const Elem *const & neighbor () const
 Return the neighbor element. More...
 
const Elem *const & lowerDElem () const
 Return the lower dimensional element. More...
 
const Elem *const & neighborLowerDElem () const
 Return the neighboring lower dimensional element. More...
 
const ReallowerDElemVolume () const
 
const RealneighborLowerDElemVolume () const
 
const SubdomainIDcurrentNeighborSubdomainID () const
 Return the current subdomain ID. More...
 
void setCurrentNeighborSubdomainID (SubdomainID i)
 set the current subdomain ID More...
 
const RealneighborVolume ()
 Returns the reference to the current neighbor volume. More...
 
const libMesh::QBase *const & qRuleNeighbor () const
 Returns the reference to the current quadrature being used on a current neighbor. More...
 
libMesh::QBase *const & writeableQRuleNeighbor ()
 Returns the reference to the current quadrature being used on a current neighbor. More...
 
const MooseArray< Real > & JxWNeighbor () const
 Returns the reference to the transformed jacobian weights on a current face. More...
 
const MooseArray< Point > & qPointsFaceNeighbor () const
 Returns the reference to the current quadrature points being used on the neighbor face. More...
 
const Node *const & node () const
 Returns the reference to the node. More...
 
const Node *const & nodeNeighbor () const
 Returns the reference to the neighboring node. More...
 
void createQRules (QuadratureType type, Order order, Order volume_order, Order face_order, SubdomainID block, bool allow_negative_qweights=true)
 Creates block-specific volume, face and arbitrary qrules based on the orders and the flag of whether or not to allow negative qweights passed in. More...
 
void bumpVolumeQRuleOrder (Order volume_order, SubdomainID block)
 Increases the element/volume quadrature order for the specified mesh block if and only if the current volume quadrature order is lower. More...
 
void bumpAllQRuleOrder (Order order, SubdomainID block)
 Increases the element/volume and face/area quadrature orders for the specified mesh block if and only if the current volume or face quadrature order is lower. More...
 
void setVolumeQRule (libMesh::QBase *qrule, unsigned int dim)
 Set the qrule to be used for volume integration. More...
 
void setFaceQRule (libMesh::QBase *qrule, unsigned int dim)
 Set the qrule to be used for face integration. More...
 
void setMortarQRule (Order order)
 Specifies a custom qrule for integration on mortar segment mesh. More...
 
void activateDual ()
 Indicates that dual shape functions are used for mortar constraint. More...
 
bool needDual () const
 Indicates whether dual shape functions are used (computation is now repeated on each element so expense of computing dual shape functions is no longer trivial) More...
 
void clearCachedQRules ()
 Set the cached quadrature rules to nullptr. More...
 
void setNeighborQRule (libMesh::QBase *qrule, unsigned int dim)
 Set the qrule to be used for neighbor integration. More...
 
void reinit (const Elem *elem)
 Reinitialize objects (JxW, q_points, ...) for an elements. More...
 
void setVolumeQRule (const Elem *elem)
 Set the volumetric quadrature rule based on the provided element. More...
 
void reinitElemFaceRef (const Elem *elem, unsigned int elem_side, Real tolerance, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)
 Reinitialize FE data for the given element on the given side, optionally with a given set of reference points. More...
 
void reinitNeighborFaceRef (const Elem *neighbor_elem, unsigned int neighbor_side, Real tolerance, const std::vector< Point > *const pts, const std::vector< Real > *const weights=nullptr)
 Reinitialize FE data for the given neighbor_element on the given side with a given set of reference points. More...
 
void reinitDual (const Elem *elem, const std::vector< Point > &pts, const std::vector< Real > &JxW)
 Reintialize dual basis coefficients based on a customized quadrature rule. More...
 
void reinitLowerDElem (const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)
 Reinitialize FE data for a lower dimenesional element with a given set of reference points. More...
 
void reinitNeighborLowerDElem (const Elem *elem)
 reinitialize a neighboring lower dimensional element More...
 
void reinitMortarElem (const Elem *elem)
 reinitialize a mortar segment mesh element in order to get a proper JxW More...
 
const std::vector< Real > & jxWMortar () const
 Returns a reference to JxW for mortar segment elements. More...
 
const libMesh::QBase *const & qRuleMortar () const
 Returns a reference to the quadrature rule for the mortar segments. More...
 
void reinitAtPhysical (const Elem *elem, const std::vector< Point > &physical_points)
 Reinitialize the assembly data at specific physical point in the given element. More...
 
void reinit (const Elem *elem, const std::vector< Point > &reference_points)
 Reinitialize the assembly data at specific points in the reference element. More...
 
void setFaceQRule (const Elem *const elem, const unsigned int side)
 Set the face quadrature rule based on the provided element and side. More...
 
void reinit (const Elem *elem, unsigned int side)
 Reinitialize the assembly data on an side of an element. More...
 
void reinit (const Elem *elem, unsigned int side, const std::vector< Point > &reference_points)
 Reinitialize the assembly data on the side of a element at the custom reference points. More...
 
void reinitFVFace (const FaceInfo &fi)
 
void reinitElemAndNeighbor (const Elem *elem, unsigned int side, const Elem *neighbor, unsigned int neighbor_side, const std::vector< Point > *neighbor_reference_points=nullptr)
 Reinitialize an element and its neighbor along a particular side. More...
 
void reinitNeighborAtPhysical (const Elem *neighbor, unsigned int neighbor_side, const std::vector< Point > &physical_points)
 Reinitializes the neighbor at the physical coordinates on neighbor side given. More...
 
void reinitNeighborAtPhysical (const Elem *neighbor, const std::vector< Point > &physical_points)
 Reinitializes the neighbor at the physical coordinates within element given. More...
 
void reinitNeighbor (const Elem *neighbor, const std::vector< Point > &reference_points)
 Reinitializes the neighbor side using reference coordinates. More...
 
void reinit (const Node *node)
 Reinitialize assembly data for a node. More...
 
void init (const libMesh::CouplingMatrix *cm)
 Initialize the Assembly object and set the CouplingMatrix for use throughout. More...
 
void initNonlocalCoupling ()
 Create pair of variables requiring nonlocal jacobian contributions. More...
 
void prepareJacobianBlock ()
 Sizes and zeroes the Jacobian blocks used for the current element. More...
 
void prepareResidual ()
 Sizes and zeroes the residual for the current element. More...
 
void prepare ()
 
void prepareNonlocal ()
 
void prepareVariable (MooseVariableFieldBase *var)
 Used for preparing the dense residual and jacobian blocks for one particular variable. More...
 
void prepareVariableNonlocal (MooseVariableFieldBase *var)
 
void prepareNeighbor ()
 
void prepareLowerD ()
 Prepare the Jacobians and residuals for a lower dimensional element. More...
 
void prepareBlock (unsigned int ivar, unsigned jvar, const std::vector< dof_id_type > &dof_indices)
 
void prepareBlockNonlocal (unsigned int ivar, unsigned jvar, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices)
 
void prepareScalar ()
 
void prepareOffDiagScalar ()
 
template<typename T >
void copyShapes (MooseVariableField< T > &v)
 
void copyShapes (unsigned int var)
 
template<typename T >
void copyFaceShapes (MooseVariableField< T > &v)
 
void copyFaceShapes (unsigned int var)
 
template<typename T >
void copyNeighborShapes (MooseVariableField< T > &v)
 
void copyNeighborShapes (unsigned int var)
 
void addResidual (GlobalDataKey, const std::vector< VectorTag > &vector_tags)
 Add local residuals of all field variables for a set of tags onto the global residual vectors associated with the tags. More...
 
void addResidualNeighbor (GlobalDataKey, const std::vector< VectorTag > &vector_tags)
 Add local neighbor residuals of all field variables for a set of tags onto the global residual vectors associated with the tags. More...
 
void addResidualLower (GlobalDataKey, const std::vector< VectorTag > &vector_tags)
 Add local neighbor residuals of all field variables for a set of tags onto the global residual vectors associated with the tags. More...
 
void addResidualScalar (GlobalDataKey, const std::vector< VectorTag > &vector_tags)
 Add residuals of all scalar variables for a set of tags onto the global residual vectors associated with the tags. More...
 
void cacheResidual (GlobalDataKey, const std::vector< VectorTag > &tags)
 Takes the values that are currently in _sub_Re of all field variables and appends them to the cached values. More...
 
void cacheResidualNeighbor (GlobalDataKey, const std::vector< VectorTag > &tags)
 Takes the values that are currently in _sub_Rn of all field variables and appends them to the cached values. More...
 
void cacheResidualLower (GlobalDataKey, const std::vector< VectorTag > &tags)
 Takes the values that are currently in _sub_Rl and appends them to the cached values. More...
 
void addCachedResiduals (GlobalDataKey, const std::vector< VectorTag > &tags)
 Pushes all cached residuals to the global residual vectors associated with each tag. More...
 
void clearCachedResiduals (GlobalDataKey)
 Clears all of the residuals in _cached_residual_rows and _cached_residual_values. More...
 
void addCachedResidualDirectly (NumericVector< Number > &residual, GlobalDataKey, const VectorTag &vector_tag)
 Adds the values that have been cached by calling cacheResidual(), cacheResidualNeighbor(), and/or cacheResidualLower() to a user-defined residual (that is, not necessarily the vector that vector_tag points to) More...
 
void setResidual (NumericVector< Number > &residual, GlobalDataKey, const VectorTag &vector_tag)
 Sets local residuals of all field variables to the global residual vector for a tag. More...
 
void setResidualNeighbor (NumericVector< Number > &residual, GlobalDataKey, const VectorTag &vector_tag)
 Sets local neighbor residuals of all field variables to the global residual vector for a tag. More...
 
void addJacobian (GlobalDataKey)
 Adds all local Jacobian to the global Jacobian matrices. More...
 
void addJacobianNonlocal (GlobalDataKey)
 Adds non-local Jacobian to the global Jacobian matrices. More...
 
void addJacobianNeighbor (GlobalDataKey)
 Add ElementNeighbor, NeighborElement, and NeighborNeighbor portions of the Jacobian for compute objects like DGKernels. More...
 
void addJacobianScalar (GlobalDataKey)
 Add Jacobians for pairs of scalar variables into the global Jacobian matrices. More...
 
void addJacobianOffDiagScalar (unsigned int ivar, GlobalDataKey)
 Add Jacobians for a scalar variables with all other field variables into the global Jacobian matrices. More...
 
void addJacobianBlock (libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, GlobalDataKey, TagID tag)
 Adds element matrix for ivar rows and jvar columns to the global Jacobian matrix. More...
 
void addJacobianBlockTags (libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, GlobalDataKey, const std::set< TagID > &tags)
 Add element matrix for ivar rows and jvar columns to the global Jacobian matrix for given tags. More...
 
void addJacobianBlockNonlocal (libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, GlobalDataKey, TagID tag)
 Adds non-local element matrix for ivar rows and jvar columns to the global Jacobian matrix. More...
 
void addJacobianBlockNonlocalTags (libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, GlobalDataKey, const std::set< TagID > &tags)
 Adds non-local element matrix for ivar rows and jvar columns to the global Jacobian matrix. More...
 
void addJacobianNeighborLowerD (GlobalDataKey)
 Add all portions of the Jacobian except PrimaryPrimary, e.g. More...
 
void addJacobianLowerD (GlobalDataKey)
 Add portions of the Jacobian of LowerLower, LowerSecondary, and SecondaryLower for boundary conditions. More...
 
void cacheJacobianMortar (GlobalDataKey)
 Cache all portions of the Jacobian, e.g. More...
 
void addJacobianNeighbor (libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, std::vector< dof_id_type > &neighbor_dof_indices, GlobalDataKey, TagID tag)
 Adds three neighboring element matrices for ivar rows and jvar columns to the global Jacobian matrix. More...
 
void addJacobianNeighborTags (libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, std::vector< dof_id_type > &neighbor_dof_indices, GlobalDataKey, const std::set< TagID > &tags)
 Adds three neighboring element matrices for ivar rows and jvar columns to the global Jacobian matrix. More...
 
void cacheJacobian (GlobalDataKey)
 Takes the values that are currently in _sub_Kee and appends them to the cached values. More...
 
void cacheJacobianNonlocal (GlobalDataKey)
 Takes the values that are currently in _sub_Keg and appends them to the cached values. More...
 
void cacheJacobianNeighbor (GlobalDataKey)
 Takes the values that are currently in the neighbor Dense Matrices and appends them to the cached values. More...
 
void addCachedJacobian (GlobalDataKey)
 Adds the values that have been cached by calling cacheJacobian() and or cacheJacobianNeighbor() to the jacobian matrix. More...
 
void setCachedJacobian (GlobalDataKey)
 Sets previously-cached Jacobian values via SparseMatrix::set() calls. More...
 
void zeroCachedJacobian (GlobalDataKey)
 Zero out previously-cached Jacobian rows. More...
 
DenseVector< Number > & residualBlock (unsigned int var_num, LocalDataKey, TagID tag_id)
 Get local residual block for a variable and a tag. More...
 
DenseVector< Number > & residualBlockNeighbor (unsigned int var_num, LocalDataKey, TagID tag_id)
 Get local neighbor residual block for a variable and a tag. More...
 
DenseVector< Number > & residualBlockLower (unsigned int var_num, LocalDataKey, TagID tag_id)
 Get residual block for lower. More...
 
DenseMatrix< Number > & jacobianBlock (unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
 Get local Jacobian block for a pair of variables and a tag. More...
 
DenseMatrix< Number > & jacobianBlockNonlocal (unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
 Get local Jacobian block from non-local contribution for a pair of variables and a tag. More...
 
DenseMatrix< Number > & jacobianBlockNeighbor (Moose::DGJacobianType type, unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
 Get local Jacobian block of a DG Jacobian type for a pair of variables and a tag. More...
 
DenseMatrix< Number > & jacobianBlockMortar (Moose::ConstraintJacobianType type, unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
 Returns the jacobian block for the given mortar Jacobian type. More...
 
void cacheResidualNodes (const DenseVector< Number > &res, const std::vector< dof_id_type > &dof_index, LocalDataKey, TagID tag)
 Lets an external class cache residual at a set of nodes. More...
 
void cacheJacobian (numeric_index_type i, numeric_index_type j, Real value, LocalDataKey, TagID tag)
 Caches the Jacobian entry 'value', to eventually be added/set in the (i,j) location of the matrix. More...
 
void cacheJacobian (numeric_index_type i, numeric_index_type j, Real value, LocalDataKey, const std::set< TagID > &tags)
 Caches the Jacobian entry 'value', to eventually be added/set in the (i,j) location of the matrices in corresponding to tags. More...
 
void cacheJacobianBlock (DenseMatrix< Number > &jac_block, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, Real scaling_factor, LocalDataKey, TagID tag)
 Cache a local Jacobian block with the provided rows (idof_indices) and columns (jdof_indices) for eventual accumulation into the global matrix specified by tag. More...
 
template<typename Residuals , typename Indices >
void cacheResiduals (const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &vector_tags)
 Process the supplied residual values. More...
 
template<typename Residuals , typename Indices >
void cacheJacobian (const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &matrix_tags)
 Process the derivatives() data of a vector of ADReals. More...
 
template<typename Residuals , typename Indices >
void cacheResidualsWithoutConstraints (const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &vector_tags)
 Process the supplied residual values. More...
 
template<typename Residuals , typename Indices >
void cacheJacobianWithoutConstraints (const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &matrix_tags)
 Process the derivatives() data of a vector of ADReals. More...
 
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & couplingEntries ()
 
const std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & couplingEntries () const
 
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & nonlocalCouplingEntries ()
 
const std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > & fieldScalarCouplingEntries () const
 
const std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > & scalarFieldCouplingEntries () const
 
const VariablePhiValuephi () const
 
template<typename T >
const ADTemplateVariablePhiGradient< T > & adGradPhi (const MooseVariableFE< T > &v) const
 
const VariablePhiValuephi (const MooseVariableField< Real > &) const
 
const VariablePhiGradientgradPhi () const
 
const VariablePhiGradientgradPhi (const MooseVariableField< Real > &) const
 
const VariablePhiSecondsecondPhi () const
 
const VariablePhiSecondsecondPhi (const MooseVariableField< Real > &) const
 
const VariablePhiValuephiFace () const
 
const VariablePhiValuephiFace (const MooseVariableField< Real > &) const
 
const VariablePhiGradientgradPhiFace () const
 
const VariablePhiGradientgradPhiFace (const MooseVariableField< Real > &) const
 
const VariablePhiSecondsecondPhiFace (const MooseVariableField< Real > &) const
 
const VariablePhiValuephiNeighbor (const MooseVariableField< Real > &) const
 
const VariablePhiGradientgradPhiNeighbor (const MooseVariableField< Real > &) const
 
const VariablePhiSecondsecondPhiNeighbor (const MooseVariableField< Real > &) const
 
const VariablePhiValuephiFaceNeighbor (const MooseVariableField< Real > &) const
 
const VariablePhiGradientgradPhiFaceNeighbor (const MooseVariableField< Real > &) const
 
const VariablePhiSecondsecondPhiFaceNeighbor (const MooseVariableField< Real > &) const
 
const VectorVariablePhiValuephi (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiGradientgradPhi (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiSecondsecondPhi (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiCurlcurlPhi (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiDivergencedivPhi (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiValuephiFace (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiGradientgradPhiFace (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiSecondsecondPhiFace (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiCurlcurlPhiFace (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiDivergencedivPhiFace (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiValuephiNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiGradientgradPhiNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiSecondsecondPhiNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiCurlcurlPhiNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiDivergencedivPhiNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiValuephiFaceNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiGradientgradPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiSecondsecondPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiCurlcurlPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiDivergencedivPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &) const
 
VariablePhiValuephi (const MooseVariableField< Real > &)
 
VariablePhiGradientgradPhi (const MooseVariableField< Real > &)
 
VariablePhiSecondsecondPhi (const MooseVariableField< Real > &)
 
VariablePhiValuephiFace (const MooseVariableField< Real > &)
 
VariablePhiGradientgradPhiFace (const MooseVariableField< Real > &)
 
VariablePhiSecondsecondPhiFace (const MooseVariableField< Real > &)
 
VariablePhiValuephiNeighbor (const MooseVariableField< Real > &)
 
VariablePhiGradientgradPhiNeighbor (const MooseVariableField< Real > &)
 
VariablePhiSecondsecondPhiNeighbor (const MooseVariableField< Real > &)
 
VariablePhiValuephiFaceNeighbor (const MooseVariableField< Real > &)
 
VariablePhiGradientgradPhiFaceNeighbor (const MooseVariableField< Real > &)
 
VariablePhiSecondsecondPhiFaceNeighbor (const MooseVariableField< Real > &)
 
VectorVariablePhiValuephi (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiGradientgradPhi (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiSecondsecondPhi (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiCurlcurlPhi (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiDivergencedivPhi (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiValuephiFace (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiGradientgradPhiFace (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiSecondsecondPhiFace (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiCurlcurlPhiFace (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiDivergencedivPhiFace (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiValuephiNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiGradientgradPhiNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiSecondsecondPhiNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiCurlcurlPhiNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiDivergencedivPhiNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiValuephiFaceNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiGradientgradPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiSecondsecondPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiCurlcurlPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiDivergencedivPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &)
 
VariablePhiValuephi (const MooseVariableField< RealEigenVector > &)
 
VariablePhiGradientgradPhi (const MooseVariableField< RealEigenVector > &)
 
VariablePhiSecondsecondPhi (const MooseVariableField< RealEigenVector > &)
 
VariablePhiValuephiFace (const MooseVariableField< RealEigenVector > &)
 
VariablePhiGradientgradPhiFace (const MooseVariableField< RealEigenVector > &)
 
VariablePhiSecondsecondPhiFace (const MooseVariableField< RealEigenVector > &)
 
VariablePhiValuephiNeighbor (const MooseVariableField< RealEigenVector > &)
 
VariablePhiGradientgradPhiNeighbor (const MooseVariableField< RealEigenVector > &)
 
VariablePhiSecondsecondPhiNeighbor (const MooseVariableField< RealEigenVector > &)
 
VariablePhiValuephiFaceNeighbor (const MooseVariableField< RealEigenVector > &)
 
VariablePhiGradientgradPhiFaceNeighbor (const MooseVariableField< RealEigenVector > &)
 
VariablePhiSecondsecondPhiFaceNeighbor (const MooseVariableField< RealEigenVector > &)
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValuefePhi (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradientfeGradPhi (FEType type) const
 
template<typename OutputType >
const ADTemplateVariablePhiGradient< OutputType > & feADGradPhi (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiSecondfeSecondPhi (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValuefePhiLower (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValuefeDualPhiLower (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradientfeGradPhiLower (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradientfeGradDualPhiLower (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValuefePhiFace (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradientfeGradPhiFace (FEType type) const
 
template<typename OutputType >
const ADTemplateVariablePhiGradient< OutputType > & feADGradPhiFace (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiSecondfeSecondPhiFace (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValuefePhiNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradientfeGradPhiNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiSecondfeSecondPhiNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValuefePhiFaceNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradientfeGradPhiFaceNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiSecondfeSecondPhiFaceNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiCurlfeCurlPhi (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiCurlfeCurlPhiFace (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiCurlfeCurlPhiNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiCurlfeCurlPhiFaceNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiDivergencefeDivPhi (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiDivergencefeDivPhiFace (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiDivergencefeDivPhiNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiDivergencefeDivPhiFaceNeighbor (FEType type) const
 
Real elementVolume (const Elem *elem) const
 On-demand computation of volume element accounting for RZ/RSpherical. More...
 
void setXFEM (std::shared_ptr< XFEMInterface > xfem)
 Set the pointer to the XFEM controller object. More...
 
void assignDisplacements (std::vector< std::pair< unsigned int, unsigned short >> &&disp_numbers_and_directions)
 Assign the displacement numbers and directions. More...
 
void saveLocalArrayResidual (DenseVector< Number > &re, unsigned int i, unsigned int ntest, const RealEigenVector &v) const
 Helper function for assembling residual contriubutions on local quadrature points for an array kernel, bc, etc. More...
 
void saveDiagLocalArrayJacobian (DenseMatrix< Number > &ke, unsigned int i, unsigned int ntest, unsigned int j, unsigned int nphi, unsigned int ivar, const RealEigenVector &v) const
 Helper function for assembling diagonal Jacobian contriubutions on local quadrature points for an array kernel, bc, etc. More...
 
void saveFullLocalArrayJacobian (DenseMatrix< Number > &ke, unsigned int i, unsigned int ntest, unsigned int j, unsigned int nphi, unsigned int ivar, unsigned int jvar, const RealEigenMatrix &v) const
 Helper function for assembling full Jacobian contriubutions on local quadrature points for an array kernel, bc, etc. More...
 
DenseVector< RealgetJacobianDiagonal (DenseMatrix< Number > &ke)
 
const libMesh::QBaseattachQRuleElem (unsigned int dim, FEBase &fe)
 Attaches the current elem/volume quadrature rule to the given fe. More...
 
const libMesh::QBaseattachQRuleFace (unsigned int dim, FEBase &fe)
 Attaches the current face/area quadrature rule to the given fe. More...
 
void hasScalingVector ()
 signals this object that a vector containing variable scaling factors should be used when doing residual and matrix assembly More...
 
void modifyArbitraryWeights (const std::vector< Real > &weights)
 Modify the weights when using the arbitrary quadrature rule. More...
 
bool computingResidual () const
 
bool computingJacobian () const
 
bool computingResidualAndJacobian () const
 
const Elem *const & msmElem () const
 
void havePRefinement (const std::unordered_set< FEFamily > &disable_p_refinement_for_families)
 Indicate that we have p-refinement. More...
 
void setCurrentLowerDElem (const Elem *const lower_d_elem)
 Set the current lower dimensional element. More...
 
template<>
const ADTemplateVariablePhiGradient< RealVectorValue > & feADGradPhi (FEType type) const
 
template<>
const ADTemplateVariablePhiGradient< RealVectorValue > & feADGradPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefePhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecondfeSecondPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefePhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefeDualPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradDualPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefePhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecondfeSecondPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefePhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecondfeSecondPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefePhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecondfeSecondPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurlfeCurlPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurlfeCurlPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurlfeCurlPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurlfeCurlPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergencefeDivPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergencefeDivPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergencefeDivPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergencefeDivPhiFaceNeighbor (FEType type) const
 
template<>
const ADTemplateVariablePhiGradient< RealVectorValue > & adGradPhi (const MooseVariableFE< RealVectorValue > &v) const
 
template<typename OutputType >
void computeGradPhiAD (const Elem *elem, unsigned int n_qp, ADTemplateVariablePhiGradient< OutputType > &grad_phi, FEGenericBase< OutputType > *fe)
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefePhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecondfeSecondPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefePhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefeDualPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradDualPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefePhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecondfeSecondPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefePhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecondfeSecondPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValuefePhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradientfeGradPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecondfeSecondPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurlfeCurlPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurlfeCurlPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurlfeCurlPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurlfeCurlPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergencefeDivPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergencefeDivPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergencefeDivPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergencefeDivPhiFaceNeighbor (FEType type) const
 
template<>
const MooseArray< Moose::GenericType< Point, false > > & genericQPoints () const
 
template<>
const MooseArray< Moose::GenericType< Point, true > > & genericQPoints () const
 

Static Public Member Functions

template<typename T >
static const T *const & constify_ref (T *const &inref)
 Workaround for C++ compilers thinking they can't just cast a const-reference-to-pointer to const-reference-to-const-pointer. More...
 

Protected Attributes

const Elem * _current_elem
 The current "element" we are currently on. More...
 
SubdomainID _current_subdomain_id
 The current subdomain ID. More...
 
BoundaryID _current_boundary_id
 The current boundary ID. More...
 
Real _current_elem_volume
 Volume of the current element. More...
 
unsigned int _current_side
 The current side of the selected element (valid only when working with sides) More...
 
const Elem * _current_side_elem
 The current "element" making up the side we are currently on. More...
 
Real _current_side_volume
 Volume of the current side element. More...
 
const Elem * _current_neighbor_elem
 The current neighbor "element". More...
 
SubdomainID _current_neighbor_subdomain_id
 The current neighbor subdomain ID. More...
 
unsigned int _current_neighbor_side
 The current side of the selected neighboring element (valid only when working with sides) More...
 
const Elem * _current_neighbor_side_elem
 The current side element of the ncurrent neighbor element. More...
 
bool _need_neighbor_elem_volume
 true is apps need to compute neighbor element volume More...
 
Real _current_neighbor_volume
 Volume of the current neighbor. More...
 
const Node * _current_node
 The current node we are working with. More...
 
const Node * _current_neighbor_node
 The current neighboring node we are working with. More...
 
bool _current_elem_volume_computed
 Boolean to indicate whether current element volumes has been computed. More...
 
bool _current_side_volume_computed
 Boolean to indicate whether current element side volumes has been computed. More...
 
const Elem * _current_lower_d_elem
 The current lower dimensional element. More...
 
const Elem * _current_neighbor_lower_d_elem
 The current neighboring lower dimensional element. More...
 
bool _need_lower_d_elem_volume
 Whether we need to compute the lower dimensional element volume. More...
 
Real _current_lower_d_elem_volume
 The current lower dimensional element volume. More...
 
bool _need_neighbor_lower_d_elem_volume
 Whether we need to compute the neighboring lower dimensional element volume. More...
 
Real _current_neighbor_lower_d_elem_volume
 The current neighboring lower dimensional element volume. More...
 
bool _need_dual
 Whether dual shape functions need to be computed for mortar constraints. More...
 
MooseArray< Point > _current_physical_points
 This will be filled up with the physical points passed into reinitAtPhysical() if it is called. Invalid at all other times. More...
 
std::vector< std::vector< DenseVector< Number > > > _sub_Re
 
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
 
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
 residual contributions for each variable from the lower dimensional element More...
 
DenseVector< Number_tmp_Re
 auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction) More...
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Keg
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Ken
 jacobian contributions from the element and neighbor <Tag, ivar, jvar> More...
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kne
 jacobian contributions from the neighbor and element <Tag, ivar, jvar> More...
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knn
 jacobian contributions from the neighbor <Tag, ivar, jvar> More...
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kll
 dlower/dlower More...
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kle
 dlower/dsecondary (or dlower/delement) More...
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kln
 dlower/dprimary (or dlower/dneighbor) More...
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kel
 dsecondary/dlower (or delement/dlower) More...
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knl
 dprimary/dlower (or dneighbor/dlower) More...
 
DenseMatrix< Number_tmp_Ke
 auxiliary matrix for scaling jacobians (optimization to avoid expensive construction/destruction) More...
 
VariablePhiValue _phi
 
VariablePhiGradient _grad_phi
 
VariablePhiSecond _second_phi
 
VariablePhiValue _phi_face
 
VariablePhiGradient _grad_phi_face
 
VariablePhiSecond _second_phi_face
 
VariablePhiValue _phi_neighbor
 
VariablePhiGradient _grad_phi_neighbor
 
VariablePhiSecond _second_phi_neighbor
 
VariablePhiValue _phi_face_neighbor
 
VariablePhiGradient _grad_phi_face_neighbor
 
VariablePhiSecond _second_phi_face_neighbor
 
VectorVariablePhiValue _vector_phi
 
VectorVariablePhiGradient _vector_grad_phi
 
VectorVariablePhiSecond _vector_second_phi
 
VectorVariablePhiCurl _vector_curl_phi
 
VectorVariablePhiDivergence _vector_div_phi
 
VectorVariablePhiValue _vector_phi_face
 
VectorVariablePhiGradient _vector_grad_phi_face
 
VectorVariablePhiSecond _vector_second_phi_face
 
VectorVariablePhiCurl _vector_curl_phi_face
 
VectorVariablePhiDivergence _vector_div_phi_face
 
VectorVariablePhiValue _vector_phi_neighbor
 
VectorVariablePhiGradient _vector_grad_phi_neighbor
 
VectorVariablePhiSecond _vector_second_phi_neighbor
 
VectorVariablePhiCurl _vector_curl_phi_neighbor
 
VectorVariablePhiDivergence _vector_div_phi_neighbor
 
VectorVariablePhiValue _vector_phi_face_neighbor
 
VectorVariablePhiGradient _vector_grad_phi_face_neighbor
 
VectorVariablePhiSecond _vector_second_phi_face_neighbor
 
VectorVariablePhiCurl _vector_curl_phi_face_neighbor
 
VectorVariablePhiDivergence _vector_div_phi_face_neighbor
 
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
 Shape function values, gradients, second derivatives for each FE type. More...
 
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
 
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
 
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
 
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_lower
 
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
 
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data
 Shape function values, gradients, second derivatives for each vector FE type. More...
 
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
 
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
 
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
 
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_lower
 
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_dual_lower
 
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data
 
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
 
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data_face
 
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data_face
 
const std::vector< VectorTag > & _residual_vector_tags
 The residual vector tags that Assembly could possibly contribute to. More...
 
std::vector< std::vector< Real > > _cached_residual_values
 Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) More...
 
std::vector< std::vector< dof_id_type > > _cached_residual_rows
 Where the cached values should go (the first vector is for TIME vs NONTIME) More...
 
unsigned int _max_cached_residuals
 
std::vector< std::vector< Real > > _cached_jacobian_values
 Values cached by calling cacheJacobian() More...
 
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
 Row where the corresponding cached value should go. More...
 
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
 Column where the corresponding cached value should go. More...
 
unsigned int _max_cached_jacobians
 
bool _block_diagonal_matrix
 Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take some shortcuts. More...
 
std::vector< bool > _component_block_diagonal
 An flag array Indiced by variable index to show if there is no component-wise coupling for the variable. More...
 
std::vector< dof_id_type_temp_dof_indices
 Temporary work vector to keep from reallocating it. More...
 
std::vector< Point > _temp_reference_points
 Temporary work data for reinitAtPhysical() More...
 
std::vector< VectorValue< ADReal > > _ad_dxyzdxi_map
 AD quantities. More...
 
std::vector< VectorValue< ADReal > > _ad_dxyzdeta_map
 
std::vector< VectorValue< ADReal > > _ad_dxyzdzeta_map
 
std::vector< VectorValue< ADReal > > _ad_d2xyzdxi2_map
 
std::vector< VectorValue< ADReal > > _ad_d2xyzdxideta_map
 
std::vector< VectorValue< ADReal > > _ad_d2xyzdeta2_map
 
std::vector< ADReal_ad_jac
 
MooseArray< ADReal_ad_JxW
 
MooseArray< VectorValue< ADReal > > _ad_q_points
 
std::vector< ADReal_ad_dxidx_map
 
std::vector< ADReal_ad_dxidy_map
 
std::vector< ADReal_ad_dxidz_map
 
std::vector< ADReal_ad_detadx_map
 
std::vector< ADReal_ad_detady_map
 
std::vector< ADReal_ad_detadz_map
 
std::vector< ADReal_ad_dzetadx_map
 
std::vector< ADReal_ad_dzetady_map
 
std::vector< ADReal_ad_dzetadz_map
 
MooseArray< ADReal_ad_JxW_face
 
MooseArray< VectorValue< ADReal > > _ad_normals
 
MooseArray< VectorValue< ADReal > > _ad_q_points_face
 
MooseArray< Real_curvatures
 
MooseArray< ADReal_ad_curvatures
 
std::vector< std::pair< unsigned int, unsigned short > > _disp_numbers_and_directions
 Container of displacement numbers and directions. More...
 
bool _calculate_xyz
 
bool _calculate_face_xyz
 
bool _calculate_curvatures
 
bool _calculate_ad_coord
 Whether to calculate coord with AD. More...
 
std::set< FEType_need_second_derivative
 
std::set< FEType_need_second_derivative_neighbor
 
std::set< FEType_need_curl
 
std::set< FEType_need_div
 
std::set< FEType_need_face_div
 
std::set< FEType_need_neighbor_div
 
std::set< FEType_need_face_neighbor_div
 
const NumericVector< Real > * _scaling_vector = nullptr
 The map from global index to variable scaling factor. More...
 
libMesh::ElemSideBuilder _current_side_elem_builder
 In place side element builder for _current_side_elem. More...
 
libMesh::ElemSideBuilder _current_neighbor_side_elem_builder
 In place side element builder for _current_neighbor_side_elem. More...
 
libMesh::ElemSideBuilder _compute_face_map_side_elem_builder
 In place side element builder for computeFaceMap() More...
 
const Elem * _msm_elem = nullptr
 
DenseVector< Number_element_vector
 A working vector to avoid repeated heap allocations when caching residuals that must have libMesh-level constraints (hanging nodes, periodic bcs) applied to them. More...
 
DenseMatrix< Number_element_matrix
 A working matrix to avoid repeated heap allocations when caching Jacobians that must have libMesh-level constraints (hanging nodes, periodic bcs) applied to them. More...
 
std::vector< dof_id_type_row_indices
 Working vectors to avoid repeated heap allocations when caching residuals/Jacobians that must have libMesh-level constraints (hanging nodes, periodic bcs) applied to them. More...
 
std::vector< dof_id_type_column_indices
 
bool _have_p_refinement
 Whether we have ever conducted p-refinement. More...
 
std::vector< Point > _current_neighbor_ref_points
 The current reference points on the neighbor element. More...
 

Private Member Functions

void setLowerQRule (libMesh::QBase *qrule, unsigned int dim)
 Set the qrule to be used for lower dimensional integration. More...
 
void computeADFace (const Elem &elem, const unsigned int side)
 compute AD things on an element face More...
 
void reinitFE (const Elem *elem)
 Just an internal helper function to reinit the volume FE objects. More...
 
void reinitFEFace (const Elem *elem, unsigned int side)
 Just an internal helper function to reinit the face FE objects. More...
 
void computeFaceMap (const Elem &elem, const unsigned int side, const std::vector< Real > &qw)
 
void reinitFEFaceNeighbor (const Elem *neighbor, const std::vector< Point > &reference_points)
 
void reinitFENeighbor (const Elem *neighbor, const std::vector< Point > &reference_points)
 
template<typename Points , typename Coords >
void setCoordinateTransformation (const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
 
void computeCurrentElemVolume ()
 
void computeCurrentFaceVolume ()
 
void computeCurrentNeighborVolume ()
 
void modifyWeightsDueToXFEM (const Elem *elem)
 Update the integration weights for XFEM partial elements. More...
 
void modifyFaceWeightsDueToXFEM (const Elem *elem, unsigned int side=0)
 Update the face integration weights for XFEM partial elements. More...
 
template<typename OutputType >
void computeGradPhiAD (const Elem *elem, unsigned int n_qp, ADTemplateVariablePhiGradient< OutputType > &grad_phi, libMesh::FEGenericBase< OutputType > *fe)
 compute gradient of phi possibly with derivative information with respect to nonlinear displacement variables More...
 
void resizeADMappingObjects (unsigned int n_qp, unsigned int dim)
 resize any objects that contribute to automatic differentiation-related mapping calculations More...
 
void computeSinglePointMapAD (const Elem *elem, const std::vector< Real > &qw, unsigned p, FEBase *fe)
 compute the finite element reference-physical mapping quantities (such as JxW) with possible dependence on nonlinear displacement variables at a single quadrature point More...
 
void addResidual (const VectorTag &vector_tag)
 Add local residuals of all field variables for a tag onto the tag's residual vector. More...
 
void addResidualNeighbor (const VectorTag &vector_tag)
 Add local neighbor residuals of all field variables for a tag onto the tag's residual vector. More...
 
void addResidualLower (const VectorTag &vector_tag)
 Add local lower-dimensional block residuals of all field variables for a tag onto the tag's residual vector. More...
 
void addResidualScalar (const VectorTag &vector_tag)
 Add residuals of all scalar variables for a tag onto the tag's residual vector. More...
 
void clearCachedResiduals (const VectorTag &vector_tag)
 Clears all of the cached residuals for a specific vector tag. More...
 
void cacheResidual (dof_id_type dof, Real value, TagID tag_id)
 Cache individual residual contributions. More...
 
void cacheResidual (dof_id_type dof, Real value, const std::set< TagID > &tags)
 Cache individual residual contributions. More...
 
void processLocalResidual (DenseVector< Number > &res_block, std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
 Appling scaling, constraints to the local residual block and populate the full DoF indices for array variable. More...
 
void addResidualBlock (NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
 Add a local residual block to a global residual vector with proper scaling. More...
 
void cacheResidualBlock (std::vector< Real > &cached_residual_values, std::vector< dof_id_type > &cached_residual_rows, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
 Push a local residual block with proper scaling into cache. More...
 
void setResidualBlock (NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
 Set a local residual block to a global residual vector with proper scaling. More...
 
void addJacobianBlock (libMesh::SparseMatrix< Number > &jacobian, DenseMatrix< Number > &jac_block, const MooseVariableBase &ivar, const MooseVariableBase &jvar, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices)
 Add a local Jacobian block to a global Jacobian with proper scaling. More...
 
void cacheJacobianBlock (DenseMatrix< Number > &jac_block, const MooseVariableBase &ivar, const MooseVariableBase &jvar, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, TagID tag)
 Push a local Jacobian block with proper scaling into cache for a certain tag. More...
 
void cacheJacobianBlockNonzero (DenseMatrix< Number > &jac_block, const MooseVariableBase &ivar, const MooseVariableBase &jvar, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, TagID tag)
 Push non-zeros of a local Jacobian block with proper scaling into cache for a certain tag. More...
 
void addJacobianCoupledVarPair (const MooseVariableBase &ivar, const MooseVariableBase &jvar)
 Adds element matrices for ivar rows and jvar columns to the global Jacobian matrices. More...
 
void cacheJacobianCoupledVarPair (const MooseVariableBase &ivar, const MooseVariableBase &jvar)
 Caches element matrix for ivar rows and jvar columns. More...
 
void clearCachedJacobian ()
 Clear any currently cached jacobians. More...
 
void buildFE (FEType type) const
 Build FEs with a type. More...
 
void buildFaceFE (FEType type) const
 Build FEs for a face with a type. More...
 
void buildNeighborFE (FEType type) const
 Build FEs for a neighbor with a type. More...
 
void buildFaceNeighborFE (FEType type) const
 Build FEs for a neighbor face with a type. More...
 
void buildLowerDFE (FEType type) const
 Build FEs for a lower dimensional element with a type. More...
 
void buildLowerDDualFE (FEType type) const
 
void buildVectorFE (FEType type) const
 Build Vector FEs with a type. More...
 
void buildVectorFaceFE (FEType type) const
 Build Vector FEs for a face with a type. More...
 
void buildVectorNeighborFE (FEType type) const
 Build Vector FEs for a neighbor with a type. More...
 
void buildVectorFaceNeighborFE (FEType type) const
 Build Vector FEs for a neighbor face with a type. More...
 
void buildVectorLowerDFE (FEType type) const
 Build Vector FEs for a lower dimensional element with a type. More...
 
void buildVectorDualLowerDFE (FEType type) const
 
void jacobianBlockUsed (TagID tag, unsigned int ivar, unsigned int jvar, bool used)
 Sets whether or not Jacobian coupling between ivar and jvar is used to the value used. More...
 
char jacobianBlockUsed (TagID tag, unsigned int ivar, unsigned int jvar) const
 Return a flag to indicate if a particular coupling Jacobian block between ivar and jvar is used. More...
 
void jacobianBlockNeighborUsed (TagID tag, unsigned int ivar, unsigned int jvar, bool used)
 Sets whether or not neighbor Jacobian coupling between ivar and jvar is used to the value used. More...
 
char jacobianBlockNeighborUsed (TagID tag, unsigned int ivar, unsigned int jvar) const
 Return a flag to indicate if a particular coupling neighbor Jacobian block between ivar and jvar is used. More...
 
void jacobianBlockLowerUsed (TagID tag, unsigned int ivar, unsigned int jvar, bool used)
 Sets whether or not lower Jacobian coupling between ivar and jvar is used to the value used. More...
 
char jacobianBlockLowerUsed (TagID tag, unsigned int ivar, unsigned int jvar) const
 Return a flag to indicate if a particular coupling lower Jacobian block between ivar and jvar is used. More...
 
void jacobianBlockNonlocalUsed (TagID tag, unsigned int ivar, unsigned int jvar, bool used)
 Sets whether or not nonlocal Jacobian coupling between ivar and jvar is used to the value used. More...
 
char jacobianBlockNonlocalUsed (TagID tag, unsigned int ivar, unsigned int jvar) const
 Return a flag to indicate if a particular coupling nonlocal Jacobian block between ivar and jvar is used. More...
 
void helpersRequestData ()
 request phi, dphi, xyz, JxW, etc. More...
 
libMesh::QBaseqruleFace (const Elem *elem, unsigned int side)
 This is an abstraction over the internal qrules function. More...
 
ArbitraryQuadratureqruleArbitraryFace (const Elem *elem, unsigned int side)
 
template<typename T >
T * qruleFaceHelper (const Elem *elem, unsigned int side, std::function< T *(QRules &)> rule_fn)
 
QRulesqrules (unsigned int dim)
 
QRulesqrules (unsigned int dim, SubdomainID block)
 This is a helper function for accessing quadrature rules for a particular dimensionality of element. More...
 

Private Attributes

SystemBase_sys
 
SubProblem_subproblem
 
const bool _displaced
 
const libMesh::CouplingMatrix_cm
 Coupling matrices. More...
 
const libMesh::CouplingMatrix_nonlocal_cm
 
const bool & _computing_residual
 Whether we are currently computing the residual. More...
 
const bool & _computing_jacobian
 Whether we are currently computing the Jacobian. More...
 
const bool & _computing_residual_and_jacobian
 Whether we are currently computing the residual and Jacobian. More...
 
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
 Entries in the coupling matrix for field variables. More...
 
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
 Entries in the coupling matrix for field variables vs scalar variables. More...
 
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
 Entries in the coupling matrix for scalar variables vs field variables. More...
 
std::vector< std::pair< MooseVariableScalar *, MooseVariableScalar * > > _cm_ss_entry
 Entries in the coupling matrix for scalar variables. More...
 
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
 Entries in the coupling matrix for field variables for nonlocal calculations. More...
 
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
 Flag that indicates if the jacobian block was used. More...
 
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
 
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_neighbor_used
 Flag that indicates if the jacobian block for neighbor was used. More...
 
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_lower_used
 Flag that indicates if the jacobian block for the lower dimensional element was used. More...
 
const libMesh::DofMap_dof_map
 DOF map. More...
 
THREAD_ID _tid
 Thread number (id) More...
 
MooseMesh_mesh
 
unsigned int _mesh_dimension
 
const FEType _helper_type
 The finite element type of the FE helper classes. More...
 
bool _user_added_fe_of_helper_type
 Whether user code requested a FEType the same as our _helper_type. More...
 
bool _user_added_fe_face_of_helper_type
 
bool _user_added_fe_face_neighbor_of_helper_type
 
bool _user_added_fe_neighbor_of_helper_type
 
bool _user_added_fe_lower_of_helper_type
 
std::vector< std::unique_ptr< FEBase > > _unique_fe_helper
 Containers for holding unique FE helper types if we are doing p-refinement. More...
 
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
 
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
 
std::vector< std::unique_ptr< FEBase > > _unique_fe_neighbor_helper
 
std::vector< std::unique_ptr< FEBase > > _unique_fe_lower_helper
 
bool _building_helpers
 Whether we are currently building the FE classes for the helpers. More...
 
std::shared_ptr< XFEMInterface_xfem
 The XFEM controller. More...
 
std::map< FEType, FEBase * > _current_fe
 The "volume" fe object that matches the current elem. More...
 
std::map< FEType, FEBase * > _current_fe_face
 The "face" fe object that matches the current elem. More...
 
std::map< FEType, FEBase * > _current_fe_neighbor
 The "neighbor" fe object that matches the current elem. More...
 
std::map< FEType, FEBase * > _current_fe_face_neighbor
 The "neighbor face" fe object that matches the current elem. More...
 
std::map< FEType, FEVectorBase * > _current_vector_fe
 The "volume" vector fe object that matches the current elem. More...
 
std::map< FEType, FEVectorBase * > _current_vector_fe_face
 The "face" vector fe object that matches the current elem. More...
 
std::map< FEType, FEVectorBase * > _current_vector_fe_neighbor
 The "neighbor" vector fe object that matches the current elem. More...
 
std::map< FEType, FEVectorBase * > _current_vector_fe_face_neighbor
 The "neighbor face" vector fe object that matches the current elem. More...
 
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
 Each dimension's actual fe objects indexed on type. More...
 
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
 Each dimension's actual vector fe objects indexed on type. More...
 
std::map< unsigned int, FEBase * > _holder_fe_helper
 Each dimension's helper objects. More...
 
FEBase_current_fe_helper
 The current helper object for transforming coordinates. More...
 
libMesh::QBase_current_qrule
 The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac kernels) More...
 
libMesh::QBase_current_qrule_volume
 The current volumetric quadrature for the element. More...
 
ArbitraryQuadrature_current_qrule_arbitrary
 The current arbitrary quadrature rule used within the element interior. More...
 
ArbitraryQuadrature_current_qrule_arbitrary_face
 The current arbitrary quadrature rule used on the element face. More...
 
MooseArray< Point > _current_q_points
 The current list of quadrature points. More...
 
MooseArray< Real_current_JxW
 The current list of transformed jacobian weights. More...
 
Moose::CoordinateSystemType _coord_type
 The coordinate system. More...
 
MooseArray< Real_coord
 The current coordinate transformation coefficients. More...
 
MooseArray< ADReal_ad_coord
 The AD version of the current coordinate transformation coefficients. More...
 
std::unordered_map< SubdomainID, std::vector< QRules > > _qrules
 Holds quadrature rules for each dimension. More...
 
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
 types of finite elements More...
 
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
 types of vector finite elements More...
 
std::map< unsigned int, FEBase * > _holder_fe_face_helper
 Each dimension's helper objects. More...
 
FEBase_current_fe_face_helper
 helper object for transforming coordinates More...
 
libMesh::QBase_current_qrule_face
 quadrature rule used on faces More...
 
ArbitraryQuadrature_current_qface_arbitrary
 The current arbitrary quadrature rule used on element faces. More...
 
MooseArray< Point > _current_q_points_face
 The current quadrature points on a face. More...
 
MooseArray< Real_current_JxW_face
 The current transformed jacobian weights on a face. More...
 
MooseArray< Point > _current_normals
 The current Normal vectors at the quadrature points. More...
 
std::vector< Eigen::Map< RealDIMValue > > _mapped_normals
 Mapped normals. More...
 
MooseArray< std::vector< Point > > _current_tangents
 The current tangent vectors at the quadrature points. More...
 
std::vector< dof_id_type_extra_elem_ids
 Extra element IDs. More...
 
std::vector< dof_id_type_neighbor_extra_elem_ids
 Extra element IDs of neighbor. More...
 
std::map< unsigned int, const std::vector< Point > * > _holder_normals
 Holds pointers to the dimension's normal vectors. More...
 
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
 types of finite elements More...
 
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
 
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
 
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
 
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
 Each dimension's helper objects. More...
 
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
 
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
 FE objects for lower dimensional elements. More...
 
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
 Vector FE objects for lower dimensional elements. More...
 
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
 helper object for transforming coordinates for lower dimensional element quadrature points More...
 
libMesh::QBase_current_qrule_neighbor
 quadrature rule used on neighbors More...
 
MooseArray< Point > _current_q_points_face_neighbor
 The current quadrature points on the neighbor face. More...
 
bool _need_JxW_neighbor
 Flag to indicate that JxW_neighbor is needed. More...
 
MooseArray< Real_current_JxW_neighbor
 The current transformed jacobian weights on a neighbor's face. More...
 
MooseArray< Real_coord_neighbor
 The current coordinate transformation coefficients. More...
 
MooseArray< Real_coord_msm
 The coordinate transformation coefficients evaluated on the quadrature points of the mortar segment mesh. More...
 
const std::vector< Real > * _JxW_msm
 A JxW for working on mortar segement elements. More...
 
std::unique_ptr< FEBase_fe_msm
 A FE object for working on mortar segement elements. More...
 
libMesh::QBase_qrule_msm
 A qrule object for working on mortar segement elements. More...
 
bool _custom_mortar_qrule
 Flag specifying whether a custom quadrature rule has been specified for mortar segment mesh. More...
 
libMesh::QBase_current_qrule_lower
 quadrature rule used on lower dimensional elements. More...
 

Detailed Description

Keeps track of stuff related to assembling.

Definition at line 101 of file Assembly.h.

Constructor & Destructor Documentation

◆ Assembly()

Assembly::Assembly ( SystemBase sys,
THREAD_ID  tid 
)

Definition at line 79 of file Assembly.C.

80  : _sys(sys),
82  _displaced(dynamic_cast<DisplacedSystem *>(&sys) ? true : false),
87  _dof_map(_sys.dofMap()),
88  _tid(tid),
89  _mesh(sys.mesh()),
97  _building_helpers(false),
98  _current_qrule(nullptr),
99  _current_qrule_volume(nullptr),
100  _current_qrule_arbitrary(nullptr),
102  _current_qrule_face(nullptr),
103  _current_qface_arbitrary(nullptr),
104  _current_qrule_neighbor(nullptr),
105  _need_JxW_neighbor(false),
106  _qrule_msm(nullptr),
107  _custom_mortar_qrule(false),
108  _current_qrule_lower(nullptr),
109 
110  _current_elem(nullptr),
112  _current_side(0),
113  _current_side_elem(nullptr),
115  _current_neighbor_elem(nullptr),
120  _current_node(nullptr),
121  _current_neighbor_node(nullptr),
124 
125  _current_lower_d_elem(nullptr),
129  _need_dual(false),
130 
132  _cached_residual_values(2), // The 2 is for TIME and NONTIME
133  _cached_residual_rows(2), // The 2 is for TIME and NONTIME
136 
137  _block_diagonal_matrix(false),
138  _calculate_xyz(false),
139  _calculate_face_xyz(false),
140  _calculate_curvatures(false),
141  _calculate_ad_coord(false),
142  _have_p_refinement(false)
143 {
144  const Order helper_order = _mesh.hasSecondOrderElements() ? SECOND : FIRST;
145  _building_helpers = true;
146  // Build fe's for the helpers
147  buildFE(FEType(helper_order, LAGRANGE));
148  buildFaceFE(FEType(helper_order, LAGRANGE));
149  buildNeighborFE(FEType(helper_order, LAGRANGE));
150  buildFaceNeighborFE(FEType(helper_order, LAGRANGE));
151  buildLowerDFE(FEType(helper_order, LAGRANGE));
152  _building_helpers = false;
153 
154  // Build an FE helper object for this type for each dimension up to the dimension of the current
155  // mesh
156  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
157  {
158  _holder_fe_helper[dim] = _fe[dim][FEType(helper_order, LAGRANGE)];
159  _holder_fe_face_helper[dim] = _fe_face[dim][FEType(helper_order, LAGRANGE)];
160  _holder_fe_face_neighbor_helper[dim] = _fe_face_neighbor[dim][FEType(helper_order, LAGRANGE)];
161  _holder_fe_neighbor_helper[dim] = _fe_neighbor[dim][FEType(helper_order, LAGRANGE)];
162  }
163 
164  for (unsigned int dim = 0; dim < _mesh_dimension; dim++)
165  _holder_fe_lower_helper[dim] = _fe_lower[dim][FEType(helper_order, LAGRANGE)];
166 
167  // request phi, dphi, xyz, JxW, etc. data
169 
170  // For 3D mortar, mortar segments are always TRI3 elements so we want FIRST LAGRANGE regardless
171  // of discretization
172  _fe_msm = (_mesh_dimension == 2)
173  ? FEGenericBase<Real>::build(_mesh_dimension - 1, FEType(helper_order, LAGRANGE))
174  : FEGenericBase<Real>::build(_mesh_dimension - 1, FEType(FIRST, LAGRANGE));
175  // This FE object should not take part in p-refinement
176  _fe_msm->add_p_level_in_reinit(false);
177  _JxW_msm = &_fe_msm->get_JxW();
178  // Prerequest xyz so that it is computed for _fe_msm so that it can be used for calculating
179  // _coord_msm
180  _fe_msm->get_xyz();
181 
184 }
LAGRANGE
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2474
bool _need_neighbor_elem_volume
true is apps need to compute neighbor element volume
Definition: Assembly.h:2578
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
Definition: Assembly.h:2374
MooseMesh & mesh()
Definition: SystemBase.h:99
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
Definition: Assembly.h:2761
unsigned int _max_cached_residuals
Definition: Assembly.h:2763
bool _user_added_fe_lower_of_helper_type
Definition: Assembly.h:2325
Order
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:314
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:266
const bool & _computing_residual
Whether we are currently computing the residual.
Definition: Assembly.h:2282
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition: Assembly.h:2523
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2512
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
Definition: Assembly.h:2541
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
Definition: Assembly.h:2586
bool _user_added_fe_face_neighbor_of_helper_type
Definition: Assembly.h:2323
bool _have_p_refinement
Whether we have ever conducted p-refinement.
Definition: Assembly.h:2861
FIRST
Real _current_neighbor_volume
Volume of the current neighbor.
Definition: Assembly.h:2580
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition: Assembly.h:2570
MooseMesh & _mesh
Definition: Assembly.h:2312
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition: Assembly.h:2513
unsigned int n_elem_integers() const
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2556
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
Real _current_elem_volume
Volume of the current element.
Definition: Assembly.h:2562
const FEType _helper_type
The finite element type of the FE helper classes.
Definition: Assembly.h:2318
const bool & _computing_residual_and_jacobian
Whether we are currently computing the residual and Jacobian.
Definition: Assembly.h:2288
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2482
const bool & currentlyComputingResidualAndJacobian() const
Returns true if the problem is in the process of computing the residual and the Jacobian.
Definition: SubProblem.h:1487
SECOND
unsigned int _mesh_dimension
Definition: Assembly.h:2314
virtual const libMesh::CouplingMatrix & nonlocalCouplingMatrix(const unsigned i) const =0
const bool & currentlyComputingResidual() const
Returns true if the problem is in the process of computing the residual.
Definition: SubProblem.h:720
unsigned int _max_cached_jacobians
Definition: Assembly.h:2772
const Elem * _current_neighbor_lower_d_elem
The current neighboring lower dimensional element.
Definition: Assembly.h:2593
unsigned int _current_neighbor_side
The current side of the selected neighboring element (valid only when working with sides) ...
Definition: Assembly.h:2574
bool _user_added_fe_neighbor_of_helper_type
Definition: Assembly.h:2324
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:336
virtual libMesh::DofMap & dofMap()
Gets writeable reference to the dof map.
Definition: SystemBase.C:1155
const std::vector< Real > * _JxW_msm
A JxW for working on mortar segement elements.
Definition: Assembly.h:2539
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
Definition: MooseMesh.C:3448
virtual unsigned int dimension() const
Returns MeshBase::mesh_dimension(), (not MeshBase::spatial_dimension()!) of the underlying libMesh me...
Definition: MooseMesh.C:2928
SubProblem & subproblem()
Definition: SystemBase.h:101
libMesh::QBase * _current_qrule_lower
quadrature rule used on lower dimensional elements.
Definition: Assembly.h:2552
SubProblem & _subproblem
Definition: Assembly.h:2273
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:292
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2506
bool _calculate_xyz
Definition: Assembly.h:2817
bool _calculate_curvatures
Definition: Assembly.h:2819
const std::vector< VectorTag > & _residual_vector_tags
The residual vector tags that Assembly could possibly contribute to.
Definition: Assembly.h:2755
std::vector< dof_id_type > _neighbor_extra_elem_ids
Extra element IDs of neighbor.
Definition: Assembly.h:2499
std::vector< VectorTag > getVectorTags(const std::set< TagID > &tag_ids) const
Definition: SubProblem.C:172
ArbitraryQuadrature * _current_qface_arbitrary
The current arbitrary quadrature rule used on element faces.
Definition: Assembly.h:2484
libMesh::QBase * _current_qrule_volume
The current volumetric quadrature for the element.
Definition: Assembly.h:2372
unsigned int number() const
Gets the number of this system.
Definition: SystemBase.C:1149
bool _calculate_ad_coord
Whether to calculate coord with AD.
Definition: Assembly.h:2823
const Elem * _current_lower_d_elem
The current lower dimensional element.
Definition: Assembly.h:2591
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2516
bool hasSecondOrderElements()
check if the mesh has SECOND order elements
Definition: MooseMesh.C:3711
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition: Assembly.h:2546
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2370
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2362
Real _current_side_volume
Volume of the current side element.
Definition: Assembly.h:2568
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2758
const bool _displaced
Definition: Assembly.h:2275
const Node * _current_node
The current node we are working with.
Definition: Assembly.h:2582
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
Definition: Assembly.h:2336
bool _calculate_face_xyz
Definition: Assembly.h:2818
bool _need_lower_d_elem_volume
Whether we need to compute the lower dimensional element volume.
Definition: Assembly.h:2595
bool _user_added_fe_face_of_helper_type
Definition: Assembly.h:2322
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2478
const bool & _computing_jacobian
Whether we are currently computing the Jacobian.
Definition: Assembly.h:2285
void helpersRequestData()
request phi, dphi, xyz, JxW, etc.
Definition: Assembly.C:4826
void buildLowerDFE(FEType type) const
Build FEs for a lower dimensional element with a type.
Definition: Assembly.C:358
unsigned int _current_side
The current side of the selected element (valid only when working with sides)
Definition: Assembly.h:2564
std::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2366
const libMesh::CouplingMatrix & _nonlocal_cm
Definition: Assembly.h:2279
const Elem * _current_neighbor_side_elem
The current side element of the ncurrent neighbor element.
Definition: Assembly.h:2576
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition: Assembly.h:2497
bool _current_side_volume_computed
Boolean to indicate whether current element side volumes has been computed.
Definition: Assembly.h:2588
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2507
bool _custom_mortar_qrule
Flag specifying whether a custom quadrature rule has been specified for mortar segment mesh...
Definition: Assembly.h:2548
const bool & currentlyComputingJacobian() const
Returns true if the problem is in the process of computing the Jacobian.
Definition: SubProblem.h:684
bool _need_neighbor_lower_d_elem_volume
Whether we need to compute the neighboring lower dimensional element volume.
Definition: Assembly.h:2599
bool _user_added_fe_of_helper_type
Whether user code requested a FEType the same as our _helper_type.
Definition: Assembly.h:2321
Moose::CoordinateSystemType _coord_type
The coordinate system.
Definition: Assembly.h:2382
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
helper object for transforming coordinates for lower dimensional element quadrature points ...
Definition: Assembly.h:2520
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2308
const Elem * _current_side_elem
The current "element" making up the side we are currently on.
Definition: Assembly.h:2566
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775
bool _need_JxW_neighbor
Flag to indicate that JxW_neighbor is needed.
Definition: Assembly.h:2527
bool _need_dual
Whether dual shape functions need to be computed for mortar constraints.
Definition: Assembly.h:2603
const Node * _current_neighbor_node
The current neighboring node we are working with.
Definition: Assembly.h:2584

◆ ~Assembly()

Assembly::~Assembly ( )
virtual

Definition at line 186 of file Assembly.C.

187 {
188  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
189  for (auto & it : _fe[dim])
190  delete it.second;
191 
192  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
193  for (auto & it : _fe_face[dim])
194  delete it.second;
195 
196  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
197  for (auto & it : _fe_neighbor[dim])
198  delete it.second;
199 
200  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
201  for (auto & it : _fe_face_neighbor[dim])
202  delete it.second;
203 
204  for (unsigned int dim = 0; dim <= _mesh_dimension - 1; dim++)
205  for (auto & it : _fe_lower[dim])
206  delete it.second;
207 
208  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
209  for (auto & it : _vector_fe[dim])
210  delete it.second;
211 
212  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
213  for (auto & it : _vector_fe_face[dim])
214  delete it.second;
215 
216  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
217  for (auto & it : _vector_fe_neighbor[dim])
218  delete it.second;
219 
220  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
221  for (auto & it : _vector_fe_face_neighbor[dim])
222  delete it.second;
223 
224  for (unsigned int dim = 0; dim <= _mesh_dimension - 1; dim++)
225  for (auto & it : _vector_fe_lower[dim])
226  delete it.second;
227 
228  for (auto & it : _ad_grad_phi_data)
229  it.second.release();
230 
231  for (auto & it : _ad_vector_grad_phi_data)
232  it.second.release();
233 
234  for (auto & it : _ad_grad_phi_data_face)
235  it.second.release();
236 
237  for (auto & it : _ad_vector_grad_phi_data_face)
238  it.second.release();
239 
241 
242  _coord.release();
245 
246  _ad_JxW.release();
253  _ad_coord.release();
254 
255  delete _qrule_msm;
256 }
MooseArray< VectorValue< ADReal > > _ad_normals
Definition: Assembly.h:2807
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2474
MooseArray< Real > _curvatures
Definition: Assembly.h:2809
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data_face
Definition: Assembly.h:2742
MooseArray< Point > _current_physical_points
This will be filled up with the physical points passed into reinitAtPhysical() if it is called...
Definition: Assembly.h:2606
MooseArray< ADReal > _ad_coord
The AD version of the current coordinate transformation coefficients.
Definition: Assembly.h:2386
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension&#39;s actual vector fe objects indexed on type.
Definition: Assembly.h:2364
MooseArray< Real > _coord_neighbor
The current coordinate transformation coefficients.
Definition: Assembly.h:2531
MooseArray< Real > _coord
The current coordinate transformation coefficients.
Definition: Assembly.h:2384
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2509
unsigned int _mesh_dimension
Definition: Assembly.h:2314
MooseArray< ADReal > _ad_curvatures
Definition: Assembly.h:2810
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data
Definition: Assembly.h:2740
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2506
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
Definition: Assembly.h:2741
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2476
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2516
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition: Assembly.h:2546
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2362
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition: Assembly.h:2518
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2795
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition: Assembly.h:2808
void release()
Manually deallocates the data pointer.
Definition: MooseArray.h:66
MooseArray< Real > _coord_msm
The coordinate transformation coefficients evaluated on the quadrature points of the mortar segment m...
Definition: Assembly.h:2534
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition: Assembly.h:2508
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data_face
Definition: Assembly.h:2744
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2507
MooseArray< ADReal > _ad_JxW
Definition: Assembly.h:2794
MooseArray< ADReal > _ad_JxW_face
Definition: Assembly.h:2806

Member Function Documentation

◆ activateDual()

void Assembly::activateDual ( )
inline

Indicates that dual shape functions are used for mortar constraint.

Definition at line 578 of file Assembly.h.

Referenced by MortarConstraintBase::MortarConstraintBase().

578 { _need_dual = true; }
bool _need_dual
Whether dual shape functions need to be computed for mortar constraints.
Definition: Assembly.h:2603

◆ adCoordTransformation()

const MooseArray<ADReal>& Assembly::adCoordTransformation ( ) const
inline

Returns the reference to the AD version of the coordinate transformation coefficients.

Returns
A reference. Make sure to store this as a reference!

Definition at line 272 of file Assembly.h.

273  {
274  // Coord values for non-cartesian coordinate systems are functions of the locations of the
275  // quadrature points in physical space. We also have no way of knowing whether this was called
276  // from a volumetric or face object so we should set both volumetric and face xyz to true
277  _calculate_xyz = true;
278  _calculate_face_xyz = true;
279 
280  _calculate_ad_coord = true;
281  return _ad_coord;
282  }
MooseArray< ADReal > _ad_coord
The AD version of the current coordinate transformation coefficients.
Definition: Assembly.h:2386
bool _calculate_xyz
Definition: Assembly.h:2817
bool _calculate_ad_coord
Whether to calculate coord with AD.
Definition: Assembly.h:2823
bool _calculate_face_xyz
Definition: Assembly.h:2818

◆ adCurvatures()

const MooseArray< ADReal > & Assembly::adCurvatures ( ) const

Definition at line 4813 of file Assembly.C.

4814 {
4815  _calculate_curvatures = true;
4816  const Order helper_order = _mesh.hasSecondOrderElements() ? SECOND : FIRST;
4817  const FEType helper_type(helper_order, LAGRANGE);
4818  // Must prerequest the second derivatives. Sadly because there is only one
4819  // _need_second_derivative map for both volumetric and face FE objects we must request both here
4820  feSecondPhi<Real>(helper_type);
4821  feSecondPhiFace<Real>(helper_type);
4822  return _ad_curvatures;
4823 }
Order
FIRST
MooseMesh & _mesh
Definition: Assembly.h:2312
SECOND
MooseArray< ADReal > _ad_curvatures
Definition: Assembly.h:2810
bool _calculate_curvatures
Definition: Assembly.h:2819
bool hasSecondOrderElements()
check if the mesh has SECOND order elements
Definition: MooseMesh.C:3711

◆ addCachedJacobian()

void Assembly::addCachedJacobian ( GlobalDataKey  )

Adds the values that have been cached by calling cacheJacobian() and or cacheJacobianNeighbor() to the jacobian matrix.

Note that this will also clear the cache.

Definition at line 3815 of file Assembly.C.

Referenced by SubProblem::addCachedJacobian(), NonlinearSystemBase::computeJacobianInternal(), and ComputeMortarFunctor::operator()().

3816 {
3817 #ifndef NDEBUG
3819  {
3820  mooseAssert(_cached_jacobian_rows.size() == _cached_jacobian_cols.size(),
3821  "Error: Cached data sizes MUST be the same!");
3822  for (MooseIndex(_cached_jacobian_rows) i = 0; i < _cached_jacobian_rows.size(); i++)
3823  mooseAssert(_cached_jacobian_rows[i].size() == _cached_jacobian_cols[i].size(),
3824  "Error: Cached data sizes MUST be the same for a given tag!");
3825  }
3826 #endif
3827 
3828  for (MooseIndex(_cached_jacobian_rows) i = 0; i < _cached_jacobian_rows.size(); i++)
3829  if (_sys.hasMatrix(i))
3830  for (MooseIndex(_cached_jacobian_rows[i]) j = 0; j < _cached_jacobian_rows[i].size(); j++)
3832  _cached_jacobian_cols[i][j],
3833  _cached_jacobian_values[i][j]);
3834 
3835  for (MooseIndex(_cached_jacobian_rows) i = 0; i < _cached_jacobian_rows.size(); i++)
3836  {
3837  if (!_sys.hasMatrix(i))
3838  continue;
3839 
3842 
3843  // Try to be more efficient from now on
3844  // The 2 is just a fudge factor to keep us from having to grow the vector during assembly
3845  _cached_jacobian_values[i].clear();
3847 
3848  _cached_jacobian_rows[i].clear();
3850 
3851  _cached_jacobian_cols[i].clear();
3853  }
3854 }
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2768
virtual bool checkNonlocalCouplingRequirement() const =0
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2766
unsigned int _max_cached_jacobians
Definition: Assembly.h:2772
virtual void add(const numeric_index_type i, const numeric_index_type j, const T value)=0
SubProblem & _subproblem
Definition: Assembly.h:2273
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1016
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2770

◆ addCachedResidualDirectly()

void Assembly::addCachedResidualDirectly ( NumericVector< Number > &  residual,
GlobalDataKey  ,
const VectorTag vector_tag 
)

Adds the values that have been cached by calling cacheResidual(), cacheResidualNeighbor(), and/or cacheResidualLower() to a user-defined residual (that is, not necessarily the vector that vector_tag points to)

Note that this will also clear the cache.

Definition at line 3530 of file Assembly.C.

Referenced by addCachedResiduals().

3533 {
3534  const auto & values = _cached_residual_values[vector_tag._type_id];
3535  const auto & rows = _cached_residual_rows[vector_tag._type_id];
3536 
3537  mooseAssert(values.size() == rows.size(),
3538  "Number of cached residuals and number of rows must match!");
3539 
3540  if (!values.empty())
3541  {
3542  residual.add_vector(values, rows);
3543  clearCachedResiduals(vector_tag);
3544  }
3545 }
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
Definition: Assembly.h:2761
virtual void add_vector(const T *v, const std::vector< numeric_index_type > &dof_indices)
TagTypeID _type_id
The index for this tag into a vector that contains tags of only its type ordered by ID...
Definition: VectorTag.h:47
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2758
void clearCachedResiduals(GlobalDataKey)
Clears all of the residuals in _cached_residual_rows and _cached_residual_values. ...
Definition: Assembly.C:3500

◆ addCachedResiduals()

void Assembly::addCachedResiduals ( GlobalDataKey  ,
const std::vector< VectorTag > &  tags 
)

Pushes all cached residuals to the global residual vectors associated with each tag.

Note that this will also clear the cache.

Definition at line 3485 of file Assembly.C.

Referenced by SubProblem::addCachedResidual(), and ComputeMortarFunctor::operator()().

3486 {
3487  for (const auto & vector_tag : tags)
3488  {
3489  if (!_sys.hasVector(vector_tag._id))
3490  {
3491  _cached_residual_values[vector_tag._type_id].clear();
3492  _cached_residual_rows[vector_tag._type_id].clear();
3493  continue;
3494  }
3495  addCachedResidualDirectly(_sys.getVector(vector_tag._id), GlobalDataKey{}, vector_tag);
3496  }
3497 }
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
Definition: Assembly.h:2761
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:916
void addCachedResidualDirectly(NumericVector< Number > &residual, GlobalDataKey, const VectorTag &vector_tag)
Adds the values that have been cached by calling cacheResidual(), cacheResidualNeighbor(), and/or cacheResidualLower() to a user-defined residual (that is, not necessarily the vector that vector_tag points to)
Definition: Assembly.C:3530
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2758
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:925

◆ addJacobian()

void Assembly::addJacobian ( GlobalDataKey  )

Adds all local Jacobian to the global Jacobian matrices.

Definition at line 3872 of file Assembly.C.

3873 {
3874  for (const auto & it : _cm_ff_entry)
3875  addJacobianCoupledVarPair(*it.first, *it.second);
3876 
3877  for (const auto & it : _cm_sf_entry)
3878  addJacobianCoupledVarPair(*it.first, *it.second);
3879 
3880  for (const auto & it : _cm_fs_entry)
3881  addJacobianCoupledVarPair(*it.first, *it.second);
3882 }
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
Entries in the coupling matrix for scalar variables vs field variables.
Definition: Assembly.h:2295
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
void addJacobianCoupledVarPair(const MooseVariableBase &ivar, const MooseVariableBase &jvar)
Adds element matrices for ivar rows and jvar columns to the global Jacobian matrices.
Definition: Assembly.C:3857
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
Entries in the coupling matrix for field variables vs scalar variables.
Definition: Assembly.h:2293

◆ addJacobianBlock() [1/2]

void Assembly::addJacobianBlock ( libMesh::SparseMatrix< Number > &  jacobian,
unsigned int  ivar,
unsigned int  jvar,
const libMesh::DofMap dof_map,
std::vector< dof_id_type > &  dof_indices,
GlobalDataKey  ,
TagID  tag 
)

Adds element matrix for ivar rows and jvar columns to the global Jacobian matrix.

Referenced by addJacobianBlockTags(), addJacobianCoupledVarPair(), addJacobianLowerD(), addJacobianNeighbor(), addJacobianNeighborLowerD(), and addJacobianNonlocal().

◆ addJacobianBlock() [2/2]

void Assembly::addJacobianBlock ( libMesh::SparseMatrix< Number > &  jacobian,
DenseMatrix< Number > &  jac_block,
const MooseVariableBase ivar,
const MooseVariableBase jvar,
const std::vector< dof_id_type > &  idof_indices,
const std::vector< dof_id_type > &  jdof_indices 
)
private

Add a local Jacobian block to a global Jacobian with proper scaling.

Definition at line 3577 of file Assembly.C.

3583 {
3584  if (idof_indices.size() == 0 || jdof_indices.size() == 0)
3585  return;
3586  if (jac_block.n() == 0 || jac_block.m() == 0)
3587  return;
3588 
3589  auto & scaling_factor = ivar.arrayScalingFactor();
3590 
3591  for (unsigned int i = 0; i < ivar.count(); ++i)
3592  {
3593  unsigned int iv = ivar.number();
3594  for (const auto & jt : ConstCouplingRow(iv + i, *_cm))
3595  {
3596  unsigned int jv = jvar.number();
3597  if (jt < jv || jt >= jv + jvar.count())
3598  continue;
3599  unsigned int j = jt - jv;
3600 
3601  auto di = ivar.componentDofIndices(idof_indices, i);
3602  auto dj = jvar.componentDofIndices(jdof_indices, j);
3603  auto indof = di.size();
3604  auto jndof = dj.size();
3605 
3606  unsigned int jj = j;
3607  if (iv == jv && _component_block_diagonal[iv])
3608  // here i must be equal to j
3609  jj = 0;
3610 
3611  auto sub = jac_block.sub_matrix(i * indof, indof, jj * jndof, jndof);
3612  if (scaling_factor[i] != 1.0)
3613  sub *= scaling_factor[i];
3614 
3615  // If we're computing the jacobian for automatically scaling variables we do not want
3616  // to constrain the element matrix because it introduces 1s on the diagonal for the
3617  // constrained dofs
3619  _dof_map.constrain_element_matrix(sub, di, dj, false);
3620 
3621  jacobian.add_matrix(sub, di, dj);
3622  }
3623  }
3624 }
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< dof_id_type > componentDofIndices(const std::vector< dof_id_type > &dof_indices, unsigned int component) const
Obtain DoF indices of a component with the indices of the 0th component.
const std::vector< Real > & arrayScalingFactor() const
unsigned int number() const
Get variable number coming from libMesh.
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one...
bool computingScalingJacobian() const
Whether we are computing an initial Jacobian for automatic variable scaling.
Definition: SystemBase.C:1544
unsigned int m() const
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
virtual void add_matrix(const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols)=0
const libMesh::CouplingMatrix * _cm
Coupling matrices.
Definition: Assembly.h:2278
unsigned int n() const
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2308
DenseMatrix sub_matrix(unsigned int row_id, unsigned int row_size, unsigned int col_id, unsigned int col_size) const
void constrain_element_matrix(DenseMatrix< Number > &matrix, std::vector< dof_id_type > &elem_dofs, bool asymmetric_constraint_rows=true) const

◆ addJacobianBlockNonlocal()

void Assembly::addJacobianBlockNonlocal ( libMesh::SparseMatrix< Number > &  jacobian,
unsigned int  ivar,
unsigned int  jvar,
const libMesh::DofMap dof_map,
const std::vector< dof_id_type > &  idof_indices,
const std::vector< dof_id_type > &  jdof_indices,
GlobalDataKey  ,
TagID  tag 
)

Adds non-local element matrix for ivar rows and jvar columns to the global Jacobian matrix.

Definition at line 4298 of file Assembly.C.

Referenced by addJacobianBlockNonlocalTags().

4306 {
4307  if (idof_indices.size() == 0 || jdof_indices.size() == 0)
4308  return;
4309  if (jacobian.n() == 0 || jacobian.m() == 0)
4310  return;
4311  if (!(*_cm)(ivar, jvar))
4312  return;
4313 
4314  auto & iv = _sys.getVariable(_tid, ivar);
4315  auto & jv = _sys.getVariable(_tid, jvar);
4316  auto & scaling_factor = iv.arrayScalingFactor();
4317 
4318  const unsigned int ivn = iv.number();
4319  const unsigned int jvn = jv.number();
4320  auto & keg = jacobianBlockNonlocal(ivn, jvn, LocalDataKey{}, tag);
4321 
4322  // It is guaranteed by design iv.number <= ivar since iv is obtained
4323  // through SystemBase::getVariable with ivar.
4324  // Most of times ivar will just be equal to iv.number except for array variables,
4325  // where ivar could be a number for a component of an array variable but calling
4326  // getVariable will return the array variable that has the number of the 0th component.
4327  // It is the same for jvar.
4328  const unsigned int i = ivar - ivn;
4329  const unsigned int j = jvar - jvn;
4330 
4331  // DoF indices are independently given
4332  auto di = idof_indices;
4333  auto dj = jdof_indices;
4334 
4335  auto indof = di.size();
4336  auto jndof = dj.size();
4337 
4338  unsigned int jj = j;
4339  if (ivar == jvar && _component_block_diagonal[ivn])
4340  jj = 0;
4341 
4342  auto sub = keg.sub_matrix(i * indof, indof, jj * jndof, jndof);
4343  // If we're computing the jacobian for automatically scaling variables we do not want to
4344  // constrain the element matrix because it introduces 1s on the diagonal for the constrained
4345  // dofs
4347  dof_map.constrain_element_matrix(sub, di, dj, false);
4348 
4349  if (scaling_factor[i] != 1.0)
4350  sub *= scaling_factor[i];
4351 
4352  jacobian.add_matrix(sub, di, dj);
4353 }
SystemBase & _sys
Definition: Assembly.h:2272
DenseMatrix< Number > & jacobianBlockNonlocal(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block from non-local contribution for a pair of variables and a tag...
Definition: Assembly.h:1114
const std::vector< Real > & arrayScalingFactor() const
bool computingScalingJacobian() const
Whether we are computing an initial Jacobian for automatic variable scaling.
Definition: SystemBase.C:1544
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
virtual void add_matrix(const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols)=0
virtual numeric_index_type m() const=0
const libMesh::CouplingMatrix * _cm
Coupling matrices.
Definition: Assembly.h:2278
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:90
DenseMatrix sub_matrix(unsigned int row_id, unsigned int row_size, unsigned int col_id, unsigned int col_size) const
virtual numeric_index_type n() const=0
void constrain_element_matrix(DenseMatrix< Number > &matrix, std::vector< dof_id_type > &elem_dofs, bool asymmetric_constraint_rows=true) const

◆ addJacobianBlockNonlocalTags()

void Assembly::addJacobianBlockNonlocalTags ( libMesh::SparseMatrix< Number > &  jacobian,
unsigned int  ivar,
unsigned int  jvar,
const libMesh::DofMap dof_map,
const std::vector< dof_id_type > &  idof_indices,
const std::vector< dof_id_type > &  jdof_indices,
GlobalDataKey  ,
const std::set< TagID > &  tags 
)

Adds non-local element matrix for ivar rows and jvar columns to the global Jacobian matrix.

Definition at line 4356 of file Assembly.C.

4364 {
4365  for (auto tag : tags)
4367  jacobian, ivar, jvar, dof_map, idof_indices, jdof_indices, GlobalDataKey{}, tag);
4368 }
void addJacobianBlockNonlocal(libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, GlobalDataKey, TagID tag)
Adds non-local element matrix for ivar rows and jvar columns to the global Jacobian matrix...
Definition: Assembly.C:4298

◆ addJacobianBlockTags()

void Assembly::addJacobianBlockTags ( libMesh::SparseMatrix< Number > &  jacobian,
unsigned int  ivar,
unsigned int  jvar,
const libMesh::DofMap dof_map,
std::vector< dof_id_type > &  dof_indices,
GlobalDataKey  ,
const std::set< TagID > &  tags 
)

Add element matrix for ivar rows and jvar columns to the global Jacobian matrix for given tags.

Definition at line 4230 of file Assembly.C.

4237 {
4238  for (auto tag : tags)
4239  addJacobianBlock(jacobian, ivar, jvar, dof_map, dof_indices, GlobalDataKey{}, tag);
4240 }
void addJacobianBlock(libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, GlobalDataKey, TagID tag)
Adds element matrix for ivar rows and jvar columns to the global Jacobian matrix. ...

◆ addJacobianCoupledVarPair()

void Assembly::addJacobianCoupledVarPair ( const MooseVariableBase ivar,
const MooseVariableBase jvar 
)
inlineprivate

Adds element matrices for ivar rows and jvar columns to the global Jacobian matrices.

Definition at line 3857 of file Assembly.C.

Referenced by addJacobian(), addJacobianOffDiagScalar(), and addJacobianScalar().

3858 {
3859  auto i = ivar.number();
3860  auto j = jvar.number();
3861  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
3862  if (jacobianBlockUsed(tag, i, j) && _sys.hasMatrix(tag))
3864  jacobianBlock(i, j, LocalDataKey{}, tag),
3865  ivar,
3866  jvar,
3867  ivar.dofIndices(),
3868  jvar.dofIndices());
3869 }
SystemBase & _sys
Definition: Assembly.h:2272
unsigned int number() const
Get variable number coming from libMesh.
void jacobianBlockUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not Jacobian coupling between ivar and jvar is used to the value used.
Definition: Assembly.h:2199
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
DenseMatrix< Number > & jacobianBlock(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block for a pair of variables and a tag.
Definition: Assembly.h:1103
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2301
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
void addJacobianBlock(libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, GlobalDataKey, TagID tag)
Adds element matrix for ivar rows and jvar columns to the global Jacobian matrix. ...
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1016

◆ addJacobianLowerD()

void Assembly::addJacobianLowerD ( GlobalDataKey  )

Add portions of the Jacobian of LowerLower, LowerSecondary, and SecondaryLower for boundary conditions.

Secondary indicates the boundary element. Lower denotes the lower-dimensional element living on the boundary side.

Definition at line 4023 of file Assembly.C.

4024 {
4025  for (const auto & it : _cm_ff_entry)
4026  {
4027  auto ivar = it.first;
4028  auto jvar = it.second;
4029  auto i = ivar->number();
4030  auto j = jvar->number();
4031  for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
4032  tag++)
4033  if (jacobianBlockLowerUsed(tag, i, j) && _sys.hasMatrix(tag))
4034  {
4036  jacobianBlockMortar(Moose::LowerLower, i, j, LocalDataKey{}, tag),
4037  *ivar,
4038  *jvar,
4039  ivar->dofIndicesLower(),
4040  jvar->dofIndicesLower());
4041 
4043  jacobianBlockMortar(Moose::LowerSecondary, i, j, LocalDataKey{}, tag),
4044  *ivar,
4045  *jvar,
4046  ivar->dofIndicesLower(),
4047  jvar->dofIndices());
4048 
4050  jacobianBlockMortar(Moose::SecondaryLower, i, j, LocalDataKey{}, tag),
4051  *ivar,
4052  *jvar,
4053  ivar->dofIndices(),
4054  jvar->dofIndicesLower());
4055  }
4056  }
4057 }
SystemBase & _sys
Definition: Assembly.h:2272
void jacobianBlockLowerUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not lower Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2235
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
DenseMatrix< Number > & jacobianBlockMortar(Moose::ConstraintJacobianType type, unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Returns the jacobian block for the given mortar Jacobian type.
Definition: Assembly.C:3153
void addJacobianBlock(libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, GlobalDataKey, TagID tag)
Adds element matrix for ivar rows and jvar columns to the global Jacobian matrix. ...
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1016
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_lower_used
Flag that indicates if the jacobian block for the lower dimensional element was used.
Definition: Assembly.h:2306

◆ addJacobianNeighbor() [1/2]

void Assembly::addJacobianNeighbor ( GlobalDataKey  )

Add ElementNeighbor, NeighborElement, and NeighborNeighbor portions of the Jacobian for compute objects like DGKernels.

Definition at line 3907 of file Assembly.C.

Referenced by addJacobianNeighborTags().

3908 {
3909  for (const auto & it : _cm_ff_entry)
3910  {
3911  auto ivar = it.first;
3912  auto jvar = it.second;
3913  auto i = ivar->number();
3914  auto j = jvar->number();
3915  for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
3916  tag < _jacobian_block_neighbor_used.size();
3917  tag++)
3918  if (jacobianBlockNeighborUsed(tag, i, j) && _sys.hasMatrix(tag))
3919  {
3921  jacobianBlockNeighbor(Moose::ElementNeighbor, i, j, LocalDataKey{}, tag),
3922  *ivar,
3923  *jvar,
3924  ivar->dofIndices(),
3925  jvar->dofIndicesNeighbor());
3926 
3928  jacobianBlockNeighbor(Moose::NeighborElement, i, j, LocalDataKey{}, tag),
3929  *ivar,
3930  *jvar,
3931  ivar->dofIndicesNeighbor(),
3932  jvar->dofIndices());
3933 
3935  jacobianBlockNeighbor(Moose::NeighborNeighbor, i, j, LocalDataKey{}, tag),
3936  *ivar,
3937  *jvar,
3938  ivar->dofIndicesNeighbor(),
3939  jvar->dofIndicesNeighbor());
3940  }
3941  }
3942 }
SystemBase & _sys
Definition: Assembly.h:2272
DenseMatrix< Number > & jacobianBlockNeighbor(Moose::DGJacobianType type, unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block of a DG Jacobian type for a pair of variables and a tag. ...
Definition: Assembly.C:3112
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
void addJacobianBlock(libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, GlobalDataKey, TagID tag)
Adds element matrix for ivar rows and jvar columns to the global Jacobian matrix. ...
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1016
void jacobianBlockNeighborUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not neighbor Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2217
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_neighbor_used
Flag that indicates if the jacobian block for neighbor was used.
Definition: Assembly.h:2304

◆ addJacobianNeighbor() [2/2]

void Assembly::addJacobianNeighbor ( libMesh::SparseMatrix< Number > &  jacobian,
unsigned int  ivar,
unsigned int  jvar,
const libMesh::DofMap dof_map,
std::vector< dof_id_type > &  dof_indices,
std::vector< dof_id_type > &  neighbor_dof_indices,
GlobalDataKey  ,
TagID  tag 
)

Adds three neighboring element matrices for ivar rows and jvar columns to the global Jacobian matrix.

◆ addJacobianNeighborLowerD()

void Assembly::addJacobianNeighborLowerD ( GlobalDataKey  )

Add all portions of the Jacobian except PrimaryPrimary, e.g.

LowerLower, LowerSecondary, LowerPrimary, SecondaryLower, SecondarySecondary, SecondaryPrimary, PrimaryLower, PrimarySecondary, for mortar-like objects. Primary indicates the interior parent element on the primary side of the mortar interface. Secondary indicates the neighbor of the interior parent element. Lower denotes the lower-dimensional element living on the primary side of the mortar interface.

Definition at line 3945 of file Assembly.C.

3946 {
3947  for (const auto & it : _cm_ff_entry)
3948  {
3949  auto ivar = it.first;
3950  auto jvar = it.second;
3951  auto i = ivar->number();
3952  auto j = jvar->number();
3953  for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
3954  tag++)
3955  if (jacobianBlockLowerUsed(tag, i, j) && _sys.hasMatrix(tag))
3956  {
3958  jacobianBlockMortar(Moose::LowerLower, i, j, LocalDataKey{}, tag),
3959  *ivar,
3960  *jvar,
3961  ivar->dofIndicesLower(),
3962  jvar->dofIndicesLower());
3963 
3965  jacobianBlockMortar(Moose::LowerSecondary, i, j, LocalDataKey{}, tag),
3966  *ivar,
3967  *jvar,
3968  ivar->dofIndicesLower(),
3969  jvar->dofIndicesNeighbor());
3970 
3972  jacobianBlockMortar(Moose::LowerPrimary, i, j, LocalDataKey{}, tag),
3973  *ivar,
3974  *jvar,
3975  ivar->dofIndicesLower(),
3976  jvar->dofIndices());
3977 
3979  jacobianBlockMortar(Moose::SecondaryLower, i, j, LocalDataKey{}, tag),
3980  *ivar,
3981  *jvar,
3982  ivar->dofIndicesNeighbor(),
3983  jvar->dofIndicesLower());
3984 
3986  jacobianBlockMortar(Moose::PrimaryLower, i, j, LocalDataKey{}, tag),
3987  *ivar,
3988  *jvar,
3989  ivar->dofIndices(),
3990  jvar->dofIndicesLower());
3991  }
3992 
3993  for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
3994  tag < _jacobian_block_neighbor_used.size();
3995  tag++)
3996  if (jacobianBlockNeighborUsed(tag, i, j) && _sys.hasMatrix(tag))
3997  {
3999  jacobianBlockNeighbor(Moose::ElementNeighbor, i, j, LocalDataKey{}, tag),
4000  *ivar,
4001  *jvar,
4002  ivar->dofIndices(),
4003  jvar->dofIndicesNeighbor());
4004 
4006  jacobianBlockNeighbor(Moose::NeighborElement, i, j, LocalDataKey{}, tag),
4007  *ivar,
4008  *jvar,
4009  ivar->dofIndicesNeighbor(),
4010  jvar->dofIndices());
4011 
4013  jacobianBlockNeighbor(Moose::NeighborNeighbor, i, j, LocalDataKey{}, tag),
4014  *ivar,
4015  *jvar,
4016  ivar->dofIndicesNeighbor(),
4017  jvar->dofIndicesNeighbor());
4018  }
4019  }
4020 }
SystemBase & _sys
Definition: Assembly.h:2272
DenseMatrix< Number > & jacobianBlockNeighbor(Moose::DGJacobianType type, unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block of a DG Jacobian type for a pair of variables and a tag. ...
Definition: Assembly.C:3112
void jacobianBlockLowerUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not lower Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2235
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
DenseMatrix< Number > & jacobianBlockMortar(Moose::ConstraintJacobianType type, unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Returns the jacobian block for the given mortar Jacobian type.
Definition: Assembly.C:3153
void addJacobianBlock(libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, GlobalDataKey, TagID tag)
Adds element matrix for ivar rows and jvar columns to the global Jacobian matrix. ...
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1016
void jacobianBlockNeighborUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not neighbor Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2217
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_lower_used
Flag that indicates if the jacobian block for the lower dimensional element was used.
Definition: Assembly.h:2306
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_neighbor_used
Flag that indicates if the jacobian block for neighbor was used.
Definition: Assembly.h:2304

◆ addJacobianNeighborTags()

void Assembly::addJacobianNeighborTags ( libMesh::SparseMatrix< Number > &  jacobian,
unsigned int  ivar,
unsigned int  jvar,
const libMesh::DofMap dof_map,
std::vector< dof_id_type > &  dof_indices,
std::vector< dof_id_type > &  neighbor_dof_indices,
GlobalDataKey  ,
const std::set< TagID > &  tags 
)

Adds three neighboring element matrices for ivar rows and jvar columns to the global Jacobian matrix.

Definition at line 4440 of file Assembly.C.

4448 {
4449  for (const auto tag : tags)
4451  jacobian, ivar, jvar, dof_map, dof_indices, neighbor_dof_indices, GlobalDataKey{}, tag);
4452 }
void addJacobianNeighbor(GlobalDataKey)
Add ElementNeighbor, NeighborElement, and NeighborNeighbor portions of the Jacobian for compute objec...
Definition: Assembly.C:3907

◆ addJacobianNonlocal()

void Assembly::addJacobianNonlocal ( GlobalDataKey  )

Adds non-local Jacobian to the global Jacobian matrices.

Definition at line 3885 of file Assembly.C.

3886 {
3887  for (const auto & it : _cm_nonlocal_entry)
3888  {
3889  auto ivar = it.first;
3890  auto jvar = it.second;
3891  auto i = ivar->number();
3892  auto j = jvar->number();
3893  for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
3894  tag < _jacobian_block_nonlocal_used.size();
3895  tag++)
3896  if (jacobianBlockNonlocalUsed(tag, i, j) && _sys.hasMatrix(tag))
3898  jacobianBlockNonlocal(i, j, LocalDataKey{}, tag),
3899  *ivar,
3900  *jvar,
3901  ivar->dofIndices(),
3902  jvar->allDofIndices());
3903  }
3904 }
SystemBase & _sys
Definition: Assembly.h:2272
DenseMatrix< Number > & jacobianBlockNonlocal(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block from non-local contribution for a pair of variables and a tag...
Definition: Assembly.h:1114
void jacobianBlockNonlocalUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not nonlocal Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2253
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2302
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
void addJacobianBlock(libMesh::SparseMatrix< Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, GlobalDataKey, TagID tag)
Adds element matrix for ivar rows and jvar columns to the global Jacobian matrix. ...
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1016
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition: Assembly.h:2299

◆ addJacobianOffDiagScalar()

void Assembly::addJacobianOffDiagScalar ( unsigned int  ivar,
GlobalDataKey   
)

Add Jacobians for a scalar variables with all other field variables into the global Jacobian matrices.

Definition at line 4462 of file Assembly.C.

4463 {
4464  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
4466  for (const auto & var_j : vars)
4467  addJacobianCoupledVarPair(var_i, *var_j);
4468 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
void addJacobianCoupledVarPair(const MooseVariableBase &ivar, const MooseVariableBase &jvar)
Adds element matrices for ivar rows and jvar columns to the global Jacobian matrices.
Definition: Assembly.C:3857
virtual MooseVariableScalar & getScalarVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a scalar variable with specified number.
Definition: SystemBase.C:145
Class for scalar variables (they are different).

◆ addJacobianScalar()

void Assembly::addJacobianScalar ( GlobalDataKey  )

Add Jacobians for pairs of scalar variables into the global Jacobian matrices.

Definition at line 4455 of file Assembly.C.

4456 {
4457  for (const auto & it : _cm_ss_entry)
4458  addJacobianCoupledVarPair(*it.first, *it.second);
4459 }
std::vector< std::pair< MooseVariableScalar *, MooseVariableScalar * > > _cm_ss_entry
Entries in the coupling matrix for scalar variables.
Definition: Assembly.h:2297
void addJacobianCoupledVarPair(const MooseVariableBase &ivar, const MooseVariableBase &jvar)
Adds element matrices for ivar rows and jvar columns to the global Jacobian matrices.
Definition: Assembly.C:3857

◆ addResidual() [1/2]

void Assembly::addResidual ( GlobalDataKey  ,
const std::vector< VectorTag > &  vector_tags 
)

Add local residuals of all field variables for a set of tags onto the global residual vectors associated with the tags.

Definition at line 3322 of file Assembly.C.

3323 {
3324  for (const auto & vector_tag : vector_tags)
3325  if (_sys.hasVector(vector_tag._id))
3326  addResidual(vector_tag);
3327 }
SystemBase & _sys
Definition: Assembly.h:2272
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:916
void addResidual(GlobalDataKey, const std::vector< VectorTag > &vector_tags)
Add local residuals of all field variables for a set of tags onto the global residual vectors associa...
Definition: Assembly.C:3322

◆ addResidual() [2/2]

void Assembly::addResidual ( const VectorTag vector_tag)
private

Add local residuals of all field variables for a tag onto the tag's residual vector.

Definition at line 3305 of file Assembly.C.

3306 {
3307  mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3308  "Non-residual tag in Assembly::addResidual");
3309 
3310  auto & tag_Re = _sub_Re[vector_tag._type_id];
3311  NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3312  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3313  for (const auto & var : vars)
3314  addResidualBlock(residual,
3315  tag_Re[var->number()],
3316  var->dofIndices(),
3317  var->arrayScalingFactor(),
3318  var->isNodal());
3319 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
TagID _id
The id associated with the vector tag.
Definition: VectorTag.h:30
char ** vars
TagTypeID _type_id
The index for this tag into a vector that contains tags of only its type ordered by ID...
Definition: VectorTag.h:47
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2620
void addResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Add a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3249
Moose::VectorTagType _type
The type of the vector tag.
Definition: VectorTag.h:53
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:925

◆ addResidualBlock()

void Assembly::addResidualBlock ( NumericVector< Number > &  residual,
DenseVector< Number > &  res_block,
const std::vector< dof_id_type > &  dof_indices,
const std::vector< Real > &  scaling_factor,
bool  is_nodal 
)
private

Add a local residual block to a global residual vector with proper scaling.

Definition at line 3249 of file Assembly.C.

Referenced by addResidual(), addResidualLower(), addResidualNeighbor(), and addResidualScalar().

3254 {
3255  if (dof_indices.size() > 0 && res_block.size())
3256  {
3257  _temp_dof_indices = dof_indices;
3258  _tmp_Re = res_block;
3259  processLocalResidual(_tmp_Re, _temp_dof_indices, scaling_factor, is_nodal);
3261  }
3262 }
virtual void add_vector(const T *v, const std::vector< numeric_index_type > &dof_indices)
void processLocalResidual(DenseVector< Number > &res_block, std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Appling scaling, constraints to the local residual block and populate the full DoF indices for array ...
Definition: Assembly.C:3213
DenseVector< Number > _tmp_Re
auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction) ...
Definition: Assembly.h:2626
std::vector< dof_id_type > _temp_dof_indices
Temporary work vector to keep from reallocating it.
Definition: Assembly.h:2781
virtual unsigned int size() const override final

◆ addResidualLower() [1/2]

void Assembly::addResidualLower ( GlobalDataKey  ,
const std::vector< VectorTag > &  vector_tags 
)

Add local neighbor residuals of all field variables for a set of tags onto the global residual vectors associated with the tags.

Definition at line 3372 of file Assembly.C.

3373 {
3374  for (const auto & vector_tag : vector_tags)
3375  if (_sys.hasVector(vector_tag._id))
3376  addResidualLower(vector_tag);
3377 }
SystemBase & _sys
Definition: Assembly.h:2272
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:916
void addResidualLower(GlobalDataKey, const std::vector< VectorTag > &vector_tags)
Add local neighbor residuals of all field variables for a set of tags onto the global residual vector...
Definition: Assembly.C:3372

◆ addResidualLower() [2/2]

void Assembly::addResidualLower ( const VectorTag vector_tag)
private

Add local lower-dimensional block residuals of all field variables for a tag onto the tag's residual vector.

Definition at line 3355 of file Assembly.C.

3356 {
3357  mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3358  "Non-residual tag in Assembly::addResidualLower");
3359 
3360  auto & tag_Rl = _sub_Rl[vector_tag._type_id];
3361  NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3362  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3363  for (const auto & var : vars)
3364  addResidualBlock(residual,
3365  tag_Rl[var->number()],
3366  var->dofIndicesLower(),
3367  var->arrayScalingFactor(),
3368  var->isNodal());
3369 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
TagID _id
The id associated with the vector tag.
Definition: VectorTag.h:30
char ** vars
TagTypeID _type_id
The index for this tag into a vector that contains tags of only its type ordered by ID...
Definition: VectorTag.h:47
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition: Assembly.h:2623
void addResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Add a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3249
Moose::VectorTagType _type
The type of the vector tag.
Definition: VectorTag.h:53
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:925

◆ addResidualNeighbor() [1/2]

void Assembly::addResidualNeighbor ( GlobalDataKey  ,
const std::vector< VectorTag > &  vector_tags 
)

Add local neighbor residuals of all field variables for a set of tags onto the global residual vectors associated with the tags.

Definition at line 3347 of file Assembly.C.

3348 {
3349  for (const auto & vector_tag : vector_tags)
3350  if (_sys.hasVector(vector_tag._id))
3351  addResidualNeighbor(vector_tag);
3352 }
SystemBase & _sys
Definition: Assembly.h:2272
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:916
void addResidualNeighbor(GlobalDataKey, const std::vector< VectorTag > &vector_tags)
Add local neighbor residuals of all field variables for a set of tags onto the global residual vector...
Definition: Assembly.C:3347

◆ addResidualNeighbor() [2/2]

void Assembly::addResidualNeighbor ( const VectorTag vector_tag)
private

Add local neighbor residuals of all field variables for a tag onto the tag's residual vector.

Definition at line 3330 of file Assembly.C.

3331 {
3332  mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3333  "Non-residual tag in Assembly::addResidualNeighbor");
3334 
3335  auto & tag_Rn = _sub_Rn[vector_tag._type_id];
3336  NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3337  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3338  for (const auto & var : vars)
3339  addResidualBlock(residual,
3340  tag_Rn[var->number()],
3341  var->dofIndicesNeighbor(),
3342  var->arrayScalingFactor(),
3343  var->isNodal());
3344 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
TagID _id
The id associated with the vector tag.
Definition: VectorTag.h:30
char ** vars
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2621
TagTypeID _type_id
The index for this tag into a vector that contains tags of only its type ordered by ID...
Definition: VectorTag.h:47
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
void addResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Add a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3249
Moose::VectorTagType _type
The type of the vector tag.
Definition: VectorTag.h:53
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:925

◆ addResidualScalar() [1/2]

void Assembly::addResidualScalar ( GlobalDataKey  ,
const std::vector< VectorTag > &  vector_tags 
)

Add residuals of all scalar variables for a set of tags onto the global residual vectors associated with the tags.

Definition at line 3396 of file Assembly.C.

3397 {
3398  for (const auto & vector_tag : vector_tags)
3399  if (_sys.hasVector(vector_tag._id))
3400  addResidualScalar(vector_tag);
3401 }
SystemBase & _sys
Definition: Assembly.h:2272
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:916
void addResidualScalar(GlobalDataKey, const std::vector< VectorTag > &vector_tags)
Add residuals of all scalar variables for a set of tags onto the global residual vectors associated w...
Definition: Assembly.C:3396

◆ addResidualScalar() [2/2]

void Assembly::addResidualScalar ( const VectorTag vector_tag)
private

Add residuals of all scalar variables for a tag onto the tag's residual vector.

Definition at line 3381 of file Assembly.C.

3382 {
3383  mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3384  "Non-residual tag in Assembly::addResidualScalar");
3385 
3386  // add the scalar variables residuals
3387  auto & tag_Re = _sub_Re[vector_tag._type_id];
3388  NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3389  const std::vector<MooseVariableScalar *> & vars = _sys.getScalarVariables(_tid);
3390  for (const auto & var : vars)
3392  residual, tag_Re[var->number()], var->dofIndices(), var->arrayScalingFactor(), false);
3393 }
SystemBase & _sys
Definition: Assembly.h:2272
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition: SystemBase.h:756
TagID _id
The id associated with the vector tag.
Definition: VectorTag.h:30
char ** vars
TagTypeID _type_id
The index for this tag into a vector that contains tags of only its type ordered by ID...
Definition: VectorTag.h:47
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2620
void addResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Add a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3249
Moose::VectorTagType _type
The type of the vector tag.
Definition: VectorTag.h:53
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:925

◆ adGradPhi() [1/2]

template<typename T >
const ADTemplateVariablePhiGradient<T>& Assembly::adGradPhi ( const MooseVariableFE< T > &  v) const
inline

Definition at line 1282 of file Assembly.h.

1283  {
1284  return _ad_grad_phi_data.at(v.feType());
1285  }
const libMesh::FEType & feType() const
Get the type of finite element object.
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data
Definition: Assembly.h:2740

◆ adGradPhi() [2/2]

template<>
const ADTemplateVariablePhiGradient<RealVectorValue>& Assembly::adGradPhi ( const MooseVariableFE< RealVectorValue > &  v) const
inline

Definition at line 3011 of file Assembly.h.

3012 {
3013  return _ad_vector_grad_phi_data.at(v.feType());
3014 }
const libMesh::FEType & feType() const
Get the type of finite element object.
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
Definition: Assembly.h:2741

◆ adJxW()

const MooseArray<ADReal>& Assembly::adJxW ( ) const
inline

Definition at line 250 of file Assembly.h.

250 { return _ad_JxW; }
MooseArray< ADReal > _ad_JxW
Definition: Assembly.h:2794

◆ adJxWFace()

const MooseArray<ADReal>& Assembly::adJxWFace ( ) const
inline

Definition at line 252 of file Assembly.h.

252 { return _ad_JxW_face; }
MooseArray< ADReal > _ad_JxW_face
Definition: Assembly.h:2806

◆ adNormals()

const MooseArray<ADPoint>& Assembly::adNormals ( ) const
inline

Definition at line 354 of file Assembly.h.

354 { return _ad_normals; }
MooseArray< VectorValue< ADReal > > _ad_normals
Definition: Assembly.h:2807

◆ adQPoints()

const MooseArray<ADPoint>& Assembly::adQPoints ( ) const
inline

Definition at line 356 of file Assembly.h.

357  {
358  _calculate_xyz = true;
359  return _ad_q_points;
360  }
bool _calculate_xyz
Definition: Assembly.h:2817
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2795

◆ adQPointsFace()

const MooseArray<ADPoint>& Assembly::adQPointsFace ( ) const
inline

Definition at line 362 of file Assembly.h.

363  {
364  _calculate_face_xyz = true;
365  return _ad_q_points_face;
366  }
bool _calculate_face_xyz
Definition: Assembly.h:2818
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition: Assembly.h:2808

◆ assignDisplacements()

void Assembly::assignDisplacements ( std::vector< std::pair< unsigned int, unsigned short >> &&  disp_numbers_and_directions)
inline

Assign the displacement numbers and directions.

Definition at line 3180 of file Assembly.h.

3182 {
3183  _disp_numbers_and_directions = std::move(disp_numbers_and_directions);
3184 }
std::vector< std::pair< unsigned int, unsigned short > > _disp_numbers_and_directions
Container of displacement numbers and directions.
Definition: Assembly.h:2815

◆ attachQRuleElem()

const libMesh::QBase* Assembly::attachQRuleElem ( unsigned int  dim,
FEBase fe 
)
inline

Attaches the current elem/volume quadrature rule to the given fe.

The current subdomain (as set via setCurrentSubdomainID is used to determine the correct rule. The attached quadrature rule is also returned.

Definition at line 1863 of file Assembly.h.

1864  {
1865  auto qrule = qrules(dim).vol.get();
1866  fe.attach_quadrature_rule(qrule);
1867  return qrule;
1868  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2450
std::unique_ptr< libMesh::QBase > vol
volume/elem (meshdim) quadrature rule
Definition: Assembly.h:2402
virtual void attach_quadrature_rule(QBase *q)=0

◆ attachQRuleFace()

const libMesh::QBase* Assembly::attachQRuleFace ( unsigned int  dim,
FEBase fe 
)
inline

Attaches the current face/area quadrature rule to the given fe.

The current subdomain (as set via setCurrentSubdomainID is used to determine the correct rule. The attached quadrature rule is also returned.

Definition at line 1875 of file Assembly.h.

1876  {
1877  auto qrule = qrules(dim).face.get();
1878  fe.attach_quadrature_rule(qrule);
1879  return qrule;
1880  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::unique_ptr< libMesh::QBase > face
area/face (meshdim-1) quadrature rule
Definition: Assembly.h:2404
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2450
virtual void attach_quadrature_rule(QBase *q)=0

◆ buildFaceFE()

void Assembly::buildFaceFE ( FEType  type) const
private

Build FEs for a face with a type.

Parameters
typeThe type of FE

Definition at line 292 of file Assembly.C.

Referenced by Assembly(), feCurlPhiFace(), feDivPhiFace(), feGradPhiFace(), fePhiFace(), feSecondPhiFace(), and getFEFace().

293 {
294  if (!_building_helpers && type == _helper_type)
296 
297  if (!_fe_shape_data_face[type])
298  _fe_shape_data_face[type] = std::make_unique<FEShapeData>();
299 
300  // Build an FE object for this type for each dimension up to the dimension of the current mesh
301  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
302  {
303  if (!_fe_face[dim][type])
304  _fe_face[dim][type] = FEGenericBase<Real>::build(dim, type).release();
305 
306  _fe_face[dim][type]->get_phi();
307  _fe_face[dim][type]->get_dphi();
308  if (_need_second_derivative.count(type))
309  _fe_face[dim][type]->get_d2phi();
310  }
311 }
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2474
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
const FEType _helper_type
The finite element type of the FE helper classes.
Definition: Assembly.h:2318
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
Definition: Assembly.h:2336
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2726
bool _user_added_fe_face_of_helper_type
Definition: Assembly.h:2322

◆ buildFaceNeighborFE()

void Assembly::buildFaceNeighborFE ( FEType  type) const
private

Build FEs for a neighbor face with a type.

Parameters
typeThe type of FE

Definition at line 336 of file Assembly.C.

Referenced by Assembly(), feCurlPhiFaceNeighbor(), feDivPhiFaceNeighbor(), feGradPhiFaceNeighbor(), fePhiFaceNeighbor(), feSecondPhiFaceNeighbor(), and getFEFaceNeighbor().

337 {
338  if (!_building_helpers && type == _helper_type)
340 
341  if (!_fe_shape_data_face_neighbor[type])
342  _fe_shape_data_face_neighbor[type] = std::make_unique<FEShapeData>();
343 
344  // Build an FE object for this type for each dimension up to the dimension of the current mesh
345  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
346  {
347  if (!_fe_face_neighbor[dim][type])
348  _fe_face_neighbor[dim][type] = FEGenericBase<Real>::build(dim, type).release();
349 
350  _fe_face_neighbor[dim][type]->get_phi();
351  _fe_face_neighbor[dim][type]->get_dphi();
352  if (_need_second_derivative_neighbor.count(type))
353  _fe_face_neighbor[dim][type]->get_d2phi();
354  }
355 }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2728
bool _user_added_fe_face_neighbor_of_helper_type
Definition: Assembly.h:2323
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
const FEType _helper_type
The finite element type of the FE helper classes.
Definition: Assembly.h:2318
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826
unsigned int _mesh_dimension
Definition: Assembly.h:2314
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
Definition: Assembly.h:2336
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2507

◆ buildFE()

void Assembly::buildFE ( FEType  type) const
private

Build FEs with a type.

Parameters
typeThe type of FE

Definition at line 266 of file Assembly.C.

Referenced by Assembly(), feCurlPhi(), feDivPhi(), feGradPhi(), fePhi(), feSecondPhi(), and getFE().

267 {
268  if (!_building_helpers && type == _helper_type)
270 
271  if (!_fe_shape_data[type])
272  _fe_shape_data[type] = std::make_unique<FEShapeData>();
273 
274  // Build an FE object for this type for each dimension up to the dimension of the current mesh
275  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
276  {
277  if (!_fe[dim][type])
278  _fe[dim][type] = FEGenericBase<Real>::build(dim, type).release();
279 
280  _fe[dim][type]->get_phi();
281  _fe[dim][type]->get_dphi();
282  // Pre-request xyz. We have always computed xyz, but due to
283  // recent optimizations in libmesh, we now need to explicity
284  // request it, since apps (Yak) may rely on it being computed.
285  _fe[dim][type]->get_xyz();
286  if (_need_second_derivative.count(type))
287  _fe[dim][type]->get_d2phi();
288  }
289 }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2725
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
const FEType _helper_type
The finite element type of the FE helper classes.
Definition: Assembly.h:2318
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2362
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
Definition: Assembly.h:2336
bool _user_added_fe_of_helper_type
Whether user code requested a FEType the same as our _helper_type.
Definition: Assembly.h:2321

◆ buildLowerDDualFE()

void Assembly::buildLowerDDualFE ( FEType  type) const
private

Definition at line 382 of file Assembly.C.

Referenced by feDualPhiLower(), and feGradDualPhiLower().

383 {
384  if (!_fe_shape_data_dual_lower[type])
385  _fe_shape_data_dual_lower[type] = std::make_unique<FEShapeData>();
386 
387  // Build an FE object for this type for each dimension up to the dimension of
388  // the current mesh minus one (because this is for lower-dimensional
389  // elements!)
390  for (unsigned int dim = 0; dim <= _mesh_dimension - 1; dim++)
391  {
392  if (!_fe_lower[dim][type])
393  _fe_lower[dim][type] = FEGenericBase<Real>::build(dim, type).release();
394 
395  _fe_lower[dim][type]->get_dual_phi();
396  _fe_lower[dim][type]->get_dual_dphi();
397  if (_need_second_derivative.count(type))
398  _fe_lower[dim][type]->get_dual_d2phi();
399  }
400 }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2516
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
Definition: Assembly.h:2730

◆ buildLowerDFE()

void Assembly::buildLowerDFE ( FEType  type) const
private

Build FEs for a lower dimensional element with a type.

Parameters
typeThe type of FE

Definition at line 358 of file Assembly.C.

Referenced by Assembly(), feGradPhiLower(), and fePhiLower().

359 {
360  if (!_building_helpers && type == _helper_type)
362 
363  if (!_fe_shape_data_lower[type])
364  _fe_shape_data_lower[type] = std::make_unique<FEShapeData>();
365 
366  // Build an FE object for this type for each dimension up to the dimension of
367  // the current mesh minus one (because this is for lower-dimensional
368  // elements!)
369  for (unsigned int dim = 0; dim <= _mesh_dimension - 1; dim++)
370  {
371  if (!_fe_lower[dim][type])
372  _fe_lower[dim][type] = FEGenericBase<Real>::build(dim, type).release();
373 
374  _fe_lower[dim][type]->get_phi();
375  _fe_lower[dim][type]->get_dphi();
376  if (_need_second_derivative.count(type))
377  _fe_lower[dim][type]->get_d2phi();
378  }
379 }
bool _user_added_fe_lower_of_helper_type
Definition: Assembly.h:2325
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
const FEType _helper_type
The finite element type of the FE helper classes.
Definition: Assembly.h:2318
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_lower
Definition: Assembly.h:2729
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2516
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
Definition: Assembly.h:2336

◆ buildNeighborFE()

void Assembly::buildNeighborFE ( FEType  type) const
private

Build FEs for a neighbor with a type.

Parameters
typeThe type of FE

Definition at line 314 of file Assembly.C.

Referenced by Assembly(), feCurlPhiNeighbor(), feDivPhiNeighbor(), feGradPhiNeighbor(), fePhiNeighbor(), feSecondPhiNeighbor(), and getFENeighbor().

315 {
316  if (!_building_helpers && type == _helper_type)
318 
319  if (!_fe_shape_data_neighbor[type])
320  _fe_shape_data_neighbor[type] = std::make_unique<FEShapeData>();
321 
322  // Build an FE object for this type for each dimension up to the dimension of the current mesh
323  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
324  {
325  if (!_fe_neighbor[dim][type])
326  _fe_neighbor[dim][type] = FEGenericBase<Real>::build(dim, type).release();
327 
328  _fe_neighbor[dim][type]->get_phi();
329  _fe_neighbor[dim][type]->get_dphi();
330  if (_need_second_derivative_neighbor.count(type))
331  _fe_neighbor[dim][type]->get_d2phi();
332  }
333 }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2727
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
const FEType _helper_type
The finite element type of the FE helper classes.
Definition: Assembly.h:2318
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826
unsigned int _mesh_dimension
Definition: Assembly.h:2314
bool _user_added_fe_neighbor_of_helper_type
Definition: Assembly.h:2324
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2506
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
Definition: Assembly.h:2336

◆ buildVectorDualLowerDFE()

void Assembly::buildVectorDualLowerDFE ( FEType  type) const
private

Definition at line 428 of file Assembly.C.

429 {
431  _vector_fe_shape_data_dual_lower[type] = std::make_unique<VectorFEShapeData>();
432 
433  // Build an FE object for this type for each dimension up to the dimension of
434  // the current mesh minus one (because this is for lower-dimensional
435  // elements!)
436  unsigned int dim = ((type.family == LAGRANGE_VEC) || (type.family == MONOMIAL_VEC)) ? 0 : 2;
437  const auto ending_dim = cast_int<unsigned int>(_mesh_dimension - 1);
438  if (ending_dim < dim)
439  return;
440  for (; dim <= ending_dim; dim++)
441  {
442  if (!_vector_fe_lower[dim][type])
443  _vector_fe_lower[dim][type] = FEVectorBase::build(dim, type).release();
444 
445  _vector_fe_lower[dim][type]->get_dual_phi();
446  _vector_fe_lower[dim][type]->get_dual_dphi();
447  if (_need_second_derivative.count(type))
448  _vector_fe_lower[dim][type]->get_dual_d2phi();
449  }
450 }
std::unique_ptr< FEGenericBase< Real > > build(const unsigned int dim, const FEType &fet)
LAGRANGE_VEC
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_dual_lower
Definition: Assembly.h:2738
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition: Assembly.h:2518

◆ buildVectorFaceFE()

void Assembly::buildVectorFaceFE ( FEType  type) const
private

Build Vector FEs for a face with a type.

Parameters
typeThe type of FE

Definition at line 484 of file Assembly.C.

Referenced by getVectorFEFace().

485 {
486  if (!_vector_fe_shape_data_face[type])
487  _vector_fe_shape_data_face[type] = std::make_unique<VectorFEShapeData>();
488 
489  // Note that NEDELEC_ONE and RAVIART_THOMAS elements can only be built for dimension > 2
490  unsigned int min_dim;
491  if (type.family == NEDELEC_ONE || type.family == RAVIART_THOMAS ||
492  type.family == L2_RAVIART_THOMAS)
493  min_dim = 2;
494  else
495  min_dim = 0;
496 
497  // Build an FE object for this type for each dimension from the min_dim up to the dimension of the
498  // current mesh
499  for (unsigned int dim = min_dim; dim <= _mesh_dimension; dim++)
500  {
501  if (!_vector_fe_face[dim][type])
502  _vector_fe_face[dim][type] = FEGenericBase<VectorValue<Real>>::build(dim, type).release();
503 
504  _vector_fe_face[dim][type]->get_phi();
505  _vector_fe_face[dim][type]->get_dphi();
506  if (_need_curl.count(type))
507  _vector_fe_face[dim][type]->get_curl_phi();
508  if (_need_face_div.count(type))
509  _vector_fe_face[dim][type]->get_div_phi();
510  }
511 }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2734
std::set< FEType > _need_curl
Definition: Assembly.h:2827
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2476
std::set< FEType > _need_face_div
Definition: Assembly.h:2829

◆ buildVectorFaceNeighborFE()

void Assembly::buildVectorFaceNeighborFE ( FEType  type) const
private

Build Vector FEs for a neighbor face with a type.

Parameters
typeThe type of FE

Definition at line 544 of file Assembly.C.

Referenced by getVectorFEFaceNeighbor().

545 {
547  _vector_fe_shape_data_face_neighbor[type] = std::make_unique<VectorFEShapeData>();
548 
549  // Note that NEDELEC_ONE and RAVIART_THOMAS elements can only be built for dimension > 2
550  unsigned int min_dim;
551  if (type.family == NEDELEC_ONE || type.family == RAVIART_THOMAS ||
552  type.family == L2_RAVIART_THOMAS)
553  min_dim = 2;
554  else
555  min_dim = 0;
556 
557  // Build an FE object for this type for each dimension from the min_dim up to the dimension of the
558  // current mesh
559  for (unsigned int dim = min_dim; dim <= _mesh_dimension; dim++)
560  {
561  if (!_vector_fe_face_neighbor[dim][type])
563  FEGenericBase<VectorValue<Real>>::build(dim, type).release();
564 
565  _vector_fe_face_neighbor[dim][type]->get_phi();
566  _vector_fe_face_neighbor[dim][type]->get_dphi();
567  if (_need_curl.count(type))
568  _vector_fe_face_neighbor[dim][type]->get_curl_phi();
569  if (_need_face_neighbor_div.count(type))
570  _vector_fe_face_neighbor[dim][type]->get_div_phi();
571  }
572 }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2509
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::set< FEType > _need_curl
Definition: Assembly.h:2827
std::set< FEType > _need_face_neighbor_div
Definition: Assembly.h:2831
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2736

◆ buildVectorFE()

void Assembly::buildVectorFE ( FEType  type) const
private

Build Vector FEs with a type.

Parameters
typeThe type of FE

Definition at line 453 of file Assembly.C.

Referenced by getVectorFE().

454 {
455  if (!_vector_fe_shape_data[type])
456  _vector_fe_shape_data[type] = std::make_unique<VectorFEShapeData>();
457 
458  // Note that NEDELEC_ONE and RAVIART_THOMAS elements can only be built for dimension > 2
459  unsigned int min_dim;
460  if (type.family == NEDELEC_ONE || type.family == RAVIART_THOMAS ||
461  type.family == L2_RAVIART_THOMAS)
462  min_dim = 2;
463  else
464  min_dim = 0;
465 
466  // Build an FE object for this type for each dimension from the min_dim up to the dimension of the
467  // current mesh
468  for (unsigned int dim = min_dim; dim <= _mesh_dimension; dim++)
469  {
470  if (!_vector_fe[dim][type])
471  _vector_fe[dim][type] = FEGenericBase<VectorValue<Real>>::build(dim, type).release();
472 
473  _vector_fe[dim][type]->get_phi();
474  _vector_fe[dim][type]->get_dphi();
475  if (_need_curl.count(type))
476  _vector_fe[dim][type]->get_curl_phi();
477  if (_need_div.count(type))
478  _vector_fe[dim][type]->get_div_phi();
479  _vector_fe[dim][type]->get_xyz();
480  }
481 }
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension&#39;s actual vector fe objects indexed on type.
Definition: Assembly.h:2364
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::set< FEType > _need_curl
Definition: Assembly.h:2827
std::set< FEType > _need_div
Definition: Assembly.h:2828
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data
Shape function values, gradients, second derivatives for each vector FE type.
Definition: Assembly.h:2733

◆ buildVectorLowerDFE()

void Assembly::buildVectorLowerDFE ( FEType  type) const
private

Build Vector FEs for a lower dimensional element with a type.

Parameters
typeThe type of FE

Definition at line 403 of file Assembly.C.

404 {
405  if (!_vector_fe_shape_data_lower[type])
406  _vector_fe_shape_data_lower[type] = std::make_unique<VectorFEShapeData>();
407 
408  // Build an FE object for this type for each dimension up to the dimension of
409  // the current mesh minus one (because this is for lower-dimensional
410  // elements!)
411  unsigned int dim = ((type.family == LAGRANGE_VEC) || (type.family == MONOMIAL_VEC)) ? 0 : 2;
412  const auto ending_dim = cast_int<unsigned int>(_mesh_dimension - 1);
413  if (ending_dim < dim)
414  return;
415  for (; dim <= ending_dim; dim++)
416  {
417  if (!_vector_fe_lower[dim][type])
418  _vector_fe_lower[dim][type] = FEVectorBase::build(dim, type).release();
419 
420  _vector_fe_lower[dim][type]->get_phi();
421  _vector_fe_lower[dim][type]->get_dphi();
422  if (_need_second_derivative.count(type))
423  _vector_fe_lower[dim][type]->get_d2phi();
424  }
425 }
std::unique_ptr< FEGenericBase< Real > > build(const unsigned int dim, const FEType &fet)
LAGRANGE_VEC
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_lower
Definition: Assembly.h:2737
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition: Assembly.h:2518

◆ buildVectorNeighborFE()

void Assembly::buildVectorNeighborFE ( FEType  type) const
private

Build Vector FEs for a neighbor with a type.

Parameters
typeThe type of FE

Definition at line 514 of file Assembly.C.

Referenced by getVectorFENeighbor().

515 {
517  _vector_fe_shape_data_neighbor[type] = std::make_unique<VectorFEShapeData>();
518 
519  // Note that NEDELEC_ONE and RAVIART_THOMAS elements can only be built for dimension > 2
520  unsigned int min_dim;
521  if (type.family == NEDELEC_ONE || type.family == RAVIART_THOMAS ||
522  type.family == L2_RAVIART_THOMAS)
523  min_dim = 2;
524  else
525  min_dim = 0;
526 
527  // Build an FE object for this type for each dimension from the min_dim up to the dimension of the
528  // current mesh
529  for (unsigned int dim = min_dim; dim <= _mesh_dimension; dim++)
530  {
531  if (!_vector_fe_neighbor[dim][type])
532  _vector_fe_neighbor[dim][type] = FEGenericBase<VectorValue<Real>>::build(dim, type).release();
533 
534  _vector_fe_neighbor[dim][type]->get_phi();
535  _vector_fe_neighbor[dim][type]->get_dphi();
536  if (_need_curl.count(type))
537  _vector_fe_neighbor[dim][type]->get_curl_phi();
538  if (_need_neighbor_div.count(type))
539  _vector_fe_neighbor[dim][type]->get_div_phi();
540  }
541 }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::set< FEType > _need_neighbor_div
Definition: Assembly.h:2830
std::set< FEType > _need_curl
Definition: Assembly.h:2827
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition: Assembly.h:2508
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2735

◆ bumpAllQRuleOrder()

void Assembly::bumpAllQRuleOrder ( Order  order,
SubdomainID  block 
)

Increases the element/volume and face/area quadrature orders for the specified mesh block if and only if the current volume or face quadrature order is lower.

This can only cause the quadrature level to increase. If order is lower than or equal to the current volume+face quadrature rule order, then nothing is done (i.e. this function is idempotent).

Definition at line 598 of file Assembly.C.

599 {
600  auto & qdefault = _qrules[Moose::ANY_BLOCK_ID];
601  mooseAssert(qdefault.size() > 0, "default quadrature must be initialized before order bumps");
602 
603  unsigned int ndims = _mesh_dimension + 1; // must account for 0-dimensional quadrature.
604  auto & qvec = _qrules[block];
605  if (qvec.size() != ndims || !qvec[0].vol)
606  createQRules(qdefault[0].vol->type(), order, order, order, block);
607  else if (qvec[0].vol->get_order() < order || qvec[0].face->get_order() < order)
608  createQRules(qvec[0].vol->type(),
609  std::max(order, qvec[0].arbitrary_vol->get_order()),
610  std::max(order, qvec[0].vol->get_order()),
611  std::max(order, qvec[0].face->get_order()),
612  block);
613  // otherwise do nothing - quadrature order is already as high as requested
614 }
void createQRules(QuadratureType type, Order order, Order volume_order, Order face_order, SubdomainID block, bool allow_negative_qweights=true)
Creates block-specific volume, face and arbitrary qrules based on the orders and the flag of whether ...
Definition: Assembly.C:617
unsigned int _mesh_dimension
Definition: Assembly.h:2314
auto max(const L &left, const R &right)
std::unordered_map< SubdomainID, std::vector< QRules > > _qrules
Holds quadrature rules for each dimension.
Definition: Assembly.h:2419
const SubdomainID ANY_BLOCK_ID
Definition: MooseTypes.C:19

◆ bumpVolumeQRuleOrder()

void Assembly::bumpVolumeQRuleOrder ( Order  volume_order,
SubdomainID  block 
)

Increases the element/volume quadrature order for the specified mesh block if and only if the current volume quadrature order is lower.

This works exactly like the bumpAllQRuleOrder function, except it only affects the volume quadrature rule (not face quadrature).

Definition at line 575 of file Assembly.C.

576 {
577  auto & qdefault = _qrules[Moose::ANY_BLOCK_ID];
578  mooseAssert(qdefault.size() > 0, "default quadrature must be initialized before order bumps");
579 
580  unsigned int ndims = _mesh_dimension + 1; // must account for 0-dimensional quadrature.
581  auto & qvec = _qrules[block];
582  if (qvec.size() != ndims || !qvec[0].vol)
583  createQRules(qdefault[0].vol->type(),
584  qdefault[0].arbitrary_vol->get_order(),
585  volume_order,
586  qdefault[0].face->get_order(),
587  block);
588  else if (qvec[0].vol->get_order() < volume_order)
589  createQRules(qvec[0].vol->type(),
590  qvec[0].arbitrary_vol->get_order(),
591  volume_order,
592  qvec[0].face->get_order(),
593  block);
594  // otherwise do nothing - quadrature order is already as high as requested
595 }
void createQRules(QuadratureType type, Order order, Order volume_order, Order face_order, SubdomainID block, bool allow_negative_qweights=true)
Creates block-specific volume, face and arbitrary qrules based on the orders and the flag of whether ...
Definition: Assembly.C:617
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::unordered_map< SubdomainID, std::vector< QRules > > _qrules
Holds quadrature rules for each dimension.
Definition: Assembly.h:2419
const SubdomainID ANY_BLOCK_ID
Definition: MooseTypes.C:19

◆ cacheJacobian() [1/4]

void Assembly::cacheJacobian ( GlobalDataKey  )

Takes the values that are currently in _sub_Kee and appends them to the cached values.

Definition at line 4060 of file Assembly.C.

Referenced by TaggingInterface::addJacobian(), TaggingInterface::addJacobianElement(), SubProblem::cacheJacobian(), cacheJacobian(), and cacheJacobianWithoutConstraints().

4061 {
4062  for (const auto & it : _cm_ff_entry)
4063  cacheJacobianCoupledVarPair(*it.first, *it.second);
4064 
4065  for (const auto & it : _cm_fs_entry)
4066  cacheJacobianCoupledVarPair(*it.first, *it.second);
4067 
4068  for (const auto & it : _cm_sf_entry)
4069  cacheJacobianCoupledVarPair(*it.first, *it.second);
4070 }
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
Entries in the coupling matrix for scalar variables vs field variables.
Definition: Assembly.h:2295
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
Entries in the coupling matrix for field variables vs scalar variables.
Definition: Assembly.h:2293
void cacheJacobianCoupledVarPair(const MooseVariableBase &ivar, const MooseVariableBase &jvar)
Caches element matrix for ivar rows and jvar columns.
Definition: Assembly.C:4074

◆ cacheJacobian() [2/4]

void Assembly::cacheJacobian ( numeric_index_type  i,
numeric_index_type  j,
Real  value,
LocalDataKey  ,
TagID  tag 
)

Caches the Jacobian entry 'value', to eventually be added/set in the (i,j) location of the matrix.

We use numeric_index_type for the index arrays (rather than dof_id_type) since that is what the SparseMatrix interface uses, but at the time of this writing, those two types are equivalent.

Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 4471 of file Assembly.C.

4473 {
4474  _cached_jacobian_rows[tag].push_back(i);
4475  _cached_jacobian_cols[tag].push_back(j);
4476  _cached_jacobian_values[tag].push_back(value);
4477 }
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2768
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2766
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2770

◆ cacheJacobian() [3/4]

void Assembly::cacheJacobian ( numeric_index_type  i,
numeric_index_type  j,
Real  value,
LocalDataKey  ,
const std::set< TagID > &  tags 
)

Caches the Jacobian entry 'value', to eventually be added/set in the (i,j) location of the matrices in corresponding to tags.

We use numeric_index_type for the index arrays (rather than dof_id_type) since that is what the SparseMatrix interface uses, but at the time of this writing, those two types are equivalent.

Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 4480 of file Assembly.C.

4485 {
4486  for (auto tag : tags)
4487  if (_sys.hasMatrix(tag))
4488  cacheJacobian(i, j, value, LocalDataKey{}, tag);
4489 }
SystemBase & _sys
Definition: Assembly.h:2272
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
void cacheJacobian(GlobalDataKey)
Takes the values that are currently in _sub_Kee and appends them to the cached values.
Definition: Assembly.C:4060

◆ cacheJacobian() [4/4]

template<typename Residuals , typename Indices >
void Assembly::cacheJacobian ( const Residuals &  residuals,
const Indices &  row_indices,
Real  scaling_factor,
LocalDataKey  ,
const std::set< TagID > &  matrix_tags 
)

Process the derivatives() data of a vector of ADReals.

This method simply caches the derivative values for the corresponding column indices for the provided matrix_tags. Note that this overload will call DofMap::constrain_element_matrix. Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 3076 of file Assembly.h.

3081 {
3082  if (!computingJacobian() || matrix_tags.empty())
3083  return;
3084 
3085  if (residuals.size() == 1)
3086  {
3087  // No constraining is required. (This is likely a finite volume computation if we only have a
3088  // single dof)
3090  residuals, input_row_indices, scaling_factor, LocalDataKey{}, matrix_tags);
3091  return;
3092  }
3093 
3094  const auto & compare_dofs = residuals[0].derivatives().nude_indices();
3095 #ifndef NDEBUG
3096  auto compare_dofs_set = std::set<dof_id_type>(compare_dofs.begin(), compare_dofs.end());
3097 
3098  for (const auto i : make_range(decltype(residuals.size())(1), residuals.size()))
3099  {
3100  const auto & residual = residuals[i];
3101  auto current_dofs_set = std::set<dof_id_type>(residual.derivatives().nude_indices().begin(),
3102  residual.derivatives().nude_indices().end());
3103  mooseAssert(compare_dofs_set == current_dofs_set,
3104  "We're going to see whether the dof sets are the same. IIRC the degree of freedom "
3105  "dependence (as indicated by the dof index set held by the ADReal) has to be the "
3106  "same for every residual passed to this method otherwise constrain_element_matrix "
3107  "will not work.");
3108  }
3109 #endif
3110  _column_indices.assign(compare_dofs.begin(), compare_dofs.end());
3111 
3112  // If there's no derivatives then there is nothing to do. Moreover, if we pass zero size column
3113  // indices to constrain_element_matrix then we will potentially get errors out of BLAS
3114  if (!_column_indices.size())
3115  return;
3116 
3117  // Need to make a copy because we might modify this in constrain_element_matrix
3118  _row_indices.assign(input_row_indices.begin(), input_row_indices.end());
3119 
3121  for (const auto i : index_range(_row_indices))
3122  {
3123  const auto & sparse_derivatives = residuals[i].derivatives();
3124 
3125  for (const auto j : index_range(_column_indices))
3126  _element_matrix(i, j) = sparse_derivatives[_column_indices[j]] * scaling_factor;
3127  }
3128 
3130 
3131  for (const auto i : index_range(_row_indices))
3132  for (const auto j : index_range(_column_indices))
3133  cacheJacobian(_row_indices[i], _column_indices[j], _element_matrix(i, j), {}, matrix_tags);
3134 }
void cacheJacobian(GlobalDataKey)
Takes the values that are currently in _sub_Kee and appends them to the cached values.
Definition: Assembly.C:4060
void cacheJacobianWithoutConstraints(const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &matrix_tags)
Process the derivatives() data of a vector of ADReals.
Definition: Assembly.h:3138
void resize(const unsigned int new_m, const unsigned int new_n)
IntRange< T > make_range(T beg, T end)
std::vector< dof_id_type > _row_indices
Working vectors to avoid repeated heap allocations when caching residuals/Jacobians that must have li...
Definition: Assembly.h:2858
DenseMatrix< Number > _element_matrix
A working matrix to avoid repeated heap allocations when caching Jacobians that must have libMesh-lev...
Definition: Assembly.h:2853
std::vector< dof_id_type > _column_indices
Definition: Assembly.h:2858
bool computingJacobian() const
Definition: Assembly.h:1906
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2308
auto index_range(const T &sizable)
void constrain_element_matrix(DenseMatrix< Number > &matrix, std::vector< dof_id_type > &elem_dofs, bool asymmetric_constraint_rows=true) const

◆ cacheJacobianBlock() [1/2]

void Assembly::cacheJacobianBlock ( DenseMatrix< Number > &  jac_block,
const std::vector< dof_id_type > &  idof_indices,
const std::vector< dof_id_type > &  jdof_indices,
Real  scaling_factor,
LocalDataKey  ,
TagID  tag 
)

Cache a local Jacobian block with the provided rows (idof_indices) and columns (jdof_indices) for eventual accumulation into the global matrix specified by tag.

The scaling_factor will be applied before caching. Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Referenced by TaggingInterface::addJacobian(), cacheJacobianCoupledVarPair(), cacheJacobianMortar(), and cacheJacobianNeighbor().

◆ cacheJacobianBlock() [2/2]

void Assembly::cacheJacobianBlock ( DenseMatrix< Number > &  jac_block,
const MooseVariableBase ivar,
const MooseVariableBase jvar,
const std::vector< dof_id_type > &  idof_indices,
const std::vector< dof_id_type > &  jdof_indices,
TagID  tag 
)
private

Push a local Jacobian block with proper scaling into cache for a certain tag.

◆ cacheJacobianBlockNonzero()

void Assembly::cacheJacobianBlockNonzero ( DenseMatrix< Number > &  jac_block,
const MooseVariableBase ivar,
const MooseVariableBase jvar,
const std::vector< dof_id_type > &  idof_indices,
const std::vector< dof_id_type > &  jdof_indices,
TagID  tag 
)
private

Push non-zeros of a local Jacobian block with proper scaling into cache for a certain tag.

Definition at line 3689 of file Assembly.C.

Referenced by cacheJacobianNonlocal().

3695 {
3696  if (idof_indices.size() == 0 || jdof_indices.size() == 0)
3697  return;
3698  if (jac_block.n() == 0 || jac_block.m() == 0)
3699  return;
3700  if (!_sys.hasMatrix(tag))
3701  return;
3702 
3703  auto & scaling_factor = ivar.arrayScalingFactor();
3704 
3705  for (unsigned int i = 0; i < ivar.count(); ++i)
3706  {
3707  unsigned int iv = ivar.number();
3708  for (const auto & jt : ConstCouplingRow(iv + i, *_cm))
3709  {
3710  unsigned int jv = jvar.number();
3711  if (jt < jv || jt >= jv + jvar.count())
3712  continue;
3713  unsigned int j = jt - jv;
3714 
3715  auto di = ivar.componentDofIndices(idof_indices, i);
3716  auto dj = jvar.componentDofIndices(jdof_indices, j);
3717  auto indof = di.size();
3718  auto jndof = dj.size();
3719 
3720  unsigned int jj = j;
3721  if (iv == jv && _component_block_diagonal[iv])
3722  // here i must be equal to j
3723  jj = 0;
3724 
3725  auto sub = jac_block.sub_matrix(i * indof, indof, jj * jndof, jndof);
3726  if (scaling_factor[i] != 1.0)
3727  sub *= scaling_factor[i];
3728 
3729  _dof_map.constrain_element_matrix(sub, di, dj, false);
3730 
3731  for (MooseIndex(di) i = 0; i < di.size(); i++)
3732  for (MooseIndex(dj) j = 0; j < dj.size(); j++)
3733  if (sub(i, j) != 0.0) // no storage allocated for unimplemented jacobian terms,
3734  // maintaining maximum sparsity possible
3735  {
3736  _cached_jacobian_values[tag].push_back(sub(i, j));
3737  _cached_jacobian_rows[tag].push_back(di[i]);
3738  _cached_jacobian_cols[tag].push_back(dj[j]);
3739  }
3740  }
3741  }
3742 
3743  jac_block.zero();
3744 }
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2768
std::vector< dof_id_type > componentDofIndices(const std::vector< dof_id_type > &dof_indices, unsigned int component) const
Obtain DoF indices of a component with the indices of the 0th component.
virtual void zero() override final
const std::vector< Real > & arrayScalingFactor() const
unsigned int number() const
Get variable number coming from libMesh.
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one...
unsigned int m() const
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2766
const libMesh::CouplingMatrix * _cm
Coupling matrices.
Definition: Assembly.h:2278
unsigned int n() const
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2308
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2770
DenseMatrix sub_matrix(unsigned int row_id, unsigned int row_size, unsigned int col_id, unsigned int col_size) const
void constrain_element_matrix(DenseMatrix< Number > &matrix, std::vector< dof_id_type > &elem_dofs, bool asymmetric_constraint_rows=true) const

◆ cacheJacobianCoupledVarPair()

void Assembly::cacheJacobianCoupledVarPair ( const MooseVariableBase ivar,
const MooseVariableBase jvar 
)
private

Caches element matrix for ivar rows and jvar columns.

Definition at line 4074 of file Assembly.C.

Referenced by cacheJacobian().

4076 {
4077  auto i = ivar.number();
4078  auto j = jvar.number();
4079  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
4080  if (jacobianBlockUsed(tag, i, j) && _sys.hasMatrix(tag))
4081  cacheJacobianBlock(jacobianBlock(i, j, LocalDataKey{}, tag),
4082  ivar,
4083  jvar,
4084  ivar.dofIndices(),
4085  jvar.dofIndices(),
4086  tag);
4087 }
SystemBase & _sys
Definition: Assembly.h:2272
unsigned int number() const
Get variable number coming from libMesh.
void jacobianBlockUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not Jacobian coupling between ivar and jvar is used to the value used.
Definition: Assembly.h:2199
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
DenseMatrix< Number > & jacobianBlock(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block for a pair of variables and a tag.
Definition: Assembly.h:1103
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2301
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
void cacheJacobianBlock(DenseMatrix< Number > &jac_block, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, Real scaling_factor, LocalDataKey, TagID tag)
Cache a local Jacobian block with the provided rows (idof_indices) and columns (jdof_indices) for eve...

◆ cacheJacobianMortar()

void Assembly::cacheJacobianMortar ( GlobalDataKey  )

Cache all portions of the Jacobian, e.g.

LowerLower, LowerSecondary, LowerPrimary, SecondaryLower, SecondarySecondary, SecondaryPrimary, PrimaryLower, PrimarySecondary, PrimaryPrimary for mortar-like objects. Primary indicates the interior parent element on the primary side of the mortar interface. Secondary indicates the interior parent element on the secondary side of the interface. Lower denotes the lower-dimensional element living on the secondary side of the mortar interface; it's the boundary face of the Secondary element.

Definition at line 4150 of file Assembly.C.

Referenced by ComputeMortarFunctor::operator()().

4151 {
4152  for (const auto & it : _cm_ff_entry)
4153  {
4154  auto ivar = it.first;
4155  auto jvar = it.second;
4156  auto i = ivar->number();
4157  auto j = jvar->number();
4158  for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
4159  tag++)
4160  if (jacobianBlockLowerUsed(tag, i, j) && _sys.hasMatrix(tag))
4161  {
4162  cacheJacobianBlock(jacobianBlockMortar(Moose::LowerLower, i, j, LocalDataKey{}, tag),
4163  *ivar,
4164  *jvar,
4165  ivar->dofIndicesLower(),
4166  jvar->dofIndicesLower(),
4167  tag);
4168 
4169  cacheJacobianBlock(jacobianBlockMortar(Moose::LowerSecondary, i, j, LocalDataKey{}, tag),
4170  *ivar,
4171  *jvar,
4172  ivar->dofIndicesLower(),
4173  jvar->dofIndices(),
4174  tag);
4175 
4176  cacheJacobianBlock(jacobianBlockMortar(Moose::LowerPrimary, i, j, LocalDataKey{}, tag),
4177  *ivar,
4178  *jvar,
4179  ivar->dofIndicesLower(),
4180  jvar->dofIndicesNeighbor(),
4181  tag);
4182 
4183  cacheJacobianBlock(jacobianBlockMortar(Moose::SecondaryLower, i, j, LocalDataKey{}, tag),
4184  *ivar,
4185  *jvar,
4186  ivar->dofIndices(),
4187  jvar->dofIndicesLower(),
4188  tag);
4189 
4191  jacobianBlockMortar(Moose::SecondarySecondary, i, j, LocalDataKey{}, tag),
4192  *ivar,
4193  *jvar,
4194  ivar->dofIndices(),
4195  jvar->dofIndices(),
4196  tag);
4197 
4199  *ivar,
4200  *jvar,
4201  ivar->dofIndices(),
4202  jvar->dofIndicesNeighbor(),
4203  tag);
4204 
4205  cacheJacobianBlock(jacobianBlockMortar(Moose::PrimaryLower, i, j, LocalDataKey{}, tag),
4206  *ivar,
4207  *jvar,
4208  ivar->dofIndicesNeighbor(),
4209  jvar->dofIndicesLower(),
4210  tag);
4211 
4213  *ivar,
4214  *jvar,
4215  ivar->dofIndicesNeighbor(),
4216  jvar->dofIndices(),
4217  tag);
4218 
4219  cacheJacobianBlock(jacobianBlockMortar(Moose::PrimaryPrimary, i, j, LocalDataKey{}, tag),
4220  *ivar,
4221  *jvar,
4222  ivar->dofIndicesNeighbor(),
4223  jvar->dofIndicesNeighbor(),
4224  tag);
4225  }
4226  }
4227 }
SystemBase & _sys
Definition: Assembly.h:2272
void jacobianBlockLowerUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not lower Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2235
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
DenseMatrix< Number > & jacobianBlockMortar(Moose::ConstraintJacobianType type, unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Returns the jacobian block for the given mortar Jacobian type.
Definition: Assembly.C:3153
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_lower_used
Flag that indicates if the jacobian block for the lower dimensional element was used.
Definition: Assembly.h:2306
void cacheJacobianBlock(DenseMatrix< Number > &jac_block, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, Real scaling_factor, LocalDataKey, TagID tag)
Cache a local Jacobian block with the provided rows (idof_indices) and columns (jdof_indices) for eve...

◆ cacheJacobianNeighbor()

void Assembly::cacheJacobianNeighbor ( GlobalDataKey  )

Takes the values that are currently in the neighbor Dense Matrices and appends them to the cached values.

Definition at line 4112 of file Assembly.C.

Referenced by SubProblem::cacheJacobianNeighbor().

4113 {
4114  for (const auto & it : _cm_ff_entry)
4115  {
4116  auto ivar = it.first;
4117  auto jvar = it.second;
4118  auto i = ivar->number();
4119  auto j = jvar->number();
4120 
4121  for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
4122  tag < _jacobian_block_neighbor_used.size();
4123  tag++)
4124  if (jacobianBlockNeighborUsed(tag, i, j) && _sys.hasMatrix(tag))
4125  {
4127  *ivar,
4128  *jvar,
4129  ivar->dofIndices(),
4130  jvar->dofIndicesNeighbor(),
4131  tag);
4133  *ivar,
4134  *jvar,
4135  ivar->dofIndicesNeighbor(),
4136  jvar->dofIndices(),
4137  tag);
4139  jacobianBlockNeighbor(Moose::NeighborNeighbor, i, j, LocalDataKey{}, tag),
4140  *ivar,
4141  *jvar,
4142  ivar->dofIndicesNeighbor(),
4143  jvar->dofIndicesNeighbor(),
4144  tag);
4145  }
4146  }
4147 }
SystemBase & _sys
Definition: Assembly.h:2272
DenseMatrix< Number > & jacobianBlockNeighbor(Moose::DGJacobianType type, unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block of a DG Jacobian type for a pair of variables and a tag. ...
Definition: Assembly.C:3112
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
void jacobianBlockNeighborUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not neighbor Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2217
void cacheJacobianBlock(DenseMatrix< Number > &jac_block, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, Real scaling_factor, LocalDataKey, TagID tag)
Cache a local Jacobian block with the provided rows (idof_indices) and columns (jdof_indices) for eve...
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_neighbor_used
Flag that indicates if the jacobian block for neighbor was used.
Definition: Assembly.h:2304

◆ cacheJacobianNonlocal()

void Assembly::cacheJacobianNonlocal ( GlobalDataKey  )

Takes the values that are currently in _sub_Keg and appends them to the cached values.

Definition at line 4090 of file Assembly.C.

Referenced by SubProblem::cacheJacobian().

4091 {
4092  for (const auto & it : _cm_nonlocal_entry)
4093  {
4094  auto ivar = it.first;
4095  auto jvar = it.second;
4096  auto i = ivar->number();
4097  auto j = jvar->number();
4098  for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
4099  tag < _jacobian_block_nonlocal_used.size();
4100  tag++)
4101  if (jacobianBlockNonlocalUsed(tag, i, j) && _sys.hasMatrix(tag))
4102  cacheJacobianBlockNonzero(jacobianBlockNonlocal(i, j, LocalDataKey{}, tag),
4103  *ivar,
4104  *jvar,
4105  ivar->dofIndices(),
4106  jvar->allDofIndices(),
4107  tag);
4108  }
4109 }
SystemBase & _sys
Definition: Assembly.h:2272
DenseMatrix< Number > & jacobianBlockNonlocal(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block from non-local contribution for a pair of variables and a tag...
Definition: Assembly.h:1114
void jacobianBlockNonlocalUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not nonlocal Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2253
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2302
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition: Assembly.h:2299
void cacheJacobianBlockNonzero(DenseMatrix< Number > &jac_block, const MooseVariableBase &ivar, const MooseVariableBase &jvar, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, TagID tag)
Push non-zeros of a local Jacobian block with proper scaling into cache for a certain tag...
Definition: Assembly.C:3689

◆ cacheJacobianWithoutConstraints()

template<typename Residuals , typename Indices >
void Assembly::cacheJacobianWithoutConstraints ( const Residuals &  residuals,
const Indices &  row_indices,
Real  scaling_factor,
LocalDataKey  ,
const std::set< TagID > &  matrix_tags 
)

Process the derivatives() data of a vector of ADReals.

This method simply caches the derivative values for the corresponding column indices for the provided matrix_tags. Note that this overload will not call DofMap::constrain_element_matrix. Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 3138 of file Assembly.h.

Referenced by TaggingInterface::addJacobianWithoutConstraints(), and cacheJacobian().

3143 {
3144  mooseAssert(residuals.size() == row_indices.size(),
3145  "The number of residuals should match the number of dof indices");
3146  mooseAssert(residuals.size() >= 1, "Why you calling me with no residuals?");
3147 
3148  if (!computingJacobian() || matrix_tags.empty())
3149  return;
3150 
3151  for (const auto i : index_range(row_indices))
3152  {
3153  const auto row_index = row_indices[i];
3154 
3155  const auto & sparse_derivatives = residuals[i].derivatives();
3156  const auto & column_indices = sparse_derivatives.nude_indices();
3157  const auto & raw_derivatives = sparse_derivatives.nude_data();
3158 
3159  for (std::size_t j = 0; j < column_indices.size(); ++j)
3160  cacheJacobian(
3161  row_index, column_indices[j], raw_derivatives[j] * scaling_factor, {}, matrix_tags);
3162  }
3163 }
void cacheJacobian(GlobalDataKey)
Takes the values that are currently in _sub_Kee and appends them to the cached values.
Definition: Assembly.C:4060
bool computingJacobian() const
Definition: Assembly.h:1906
auto index_range(const T &sizable)

◆ cacheResidual() [1/3]

void Assembly::cacheResidual ( GlobalDataKey  ,
const std::vector< VectorTag > &  tags 
)

Takes the values that are currently in _sub_Re of all field variables and appends them to the cached values.

Definition at line 3404 of file Assembly.C.

Referenced by SubProblem::cacheResidual(), cacheResidual(), cacheResiduals(), cacheResidualsWithoutConstraints(), and ComputeMortarFunctor::operator()().

3405 {
3406  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3407  for (const auto & var : vars)
3408  for (const auto & vector_tag : tags)
3409  if (_sys.hasVector(vector_tag._id))
3410  cacheResidualBlock(_cached_residual_values[vector_tag._type_id],
3411  _cached_residual_rows[vector_tag._type_id],
3412  _sub_Re[vector_tag._type_id][var->number()],
3413  var->dofIndices(),
3414  var->arrayScalingFactor(),
3415  var->isNodal());
3416 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
Definition: Assembly.h:2761
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:916
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2620
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2758
void cacheResidualBlock(std::vector< Real > &cached_residual_values, std::vector< dof_id_type > &cached_residual_rows, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Push a local residual block with proper scaling into cache.
Definition: Assembly.C:3265

◆ cacheResidual() [2/3]

void Assembly::cacheResidual ( dof_id_type  dof,
Real  value,
TagID  tag_id 
)
private

Cache individual residual contributions.

These will ultimately get added to the residual when addCachedResidual() is called.

Parameters
dofThe degree of freedom to add the residual contribution to
valueThe value of the residual contribution.
TagIDthe contribution should go to this tagged residual

Definition at line 3420 of file Assembly.C.

3421 {
3422  const VectorTag & tag = _subproblem.getVectorTag(tag_id);
3423 
3424  _cached_residual_values[tag._type_id].push_back(value);
3425  _cached_residual_rows[tag._type_id].push_back(dof);
3426 }
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
Definition: Assembly.h:2761
TagTypeID _type_id
The index for this tag into a vector that contains tags of only its type ordered by ID...
Definition: VectorTag.h:47
SubProblem & _subproblem
Definition: Assembly.h:2273
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2758
Storage for all of the information pretaining to a vector tag.
Definition: VectorTag.h:17
virtual const VectorTag & getVectorTag(const TagID tag_id) const
Get a VectorTag from a TagID.
Definition: SubProblem.C:161

◆ cacheResidual() [3/3]

void Assembly::cacheResidual ( dof_id_type  dof,
Real  value,
const std::set< TagID > &  tags 
)
private

Cache individual residual contributions.

These will ultimately get added to the residual when addCachedResidual() is called.

Parameters
dofThe degree of freedom to add the residual contribution to
valueThe value of the residual contribution.
tagsthe contribution should go to all these tags

Definition at line 3430 of file Assembly.C.

3431 {
3432  for (auto & tag : tags)
3433  cacheResidual(dof, value, tag);
3434 }
void cacheResidual(GlobalDataKey, const std::vector< VectorTag > &tags)
Takes the values that are currently in _sub_Re of all field variables and appends them to the cached ...
Definition: Assembly.C:3404

◆ cacheResidualBlock()

void Assembly::cacheResidualBlock ( std::vector< Real > &  cached_residual_values,
std::vector< dof_id_type > &  cached_residual_rows,
DenseVector< Number > &  res_block,
const std::vector< dof_id_type > &  dof_indices,
const std::vector< Real > &  scaling_factor,
bool  is_nodal 
)
private

Push a local residual block with proper scaling into cache.

Definition at line 3265 of file Assembly.C.

Referenced by cacheResidual(), cacheResidualLower(), and cacheResidualNeighbor().

3271 {
3272  if (dof_indices.size() > 0 && res_block.size())
3273  {
3274  _temp_dof_indices = dof_indices;
3275  _tmp_Re = res_block;
3276  processLocalResidual(_tmp_Re, _temp_dof_indices, scaling_factor, is_nodal);
3277 
3278  for (MooseIndex(_tmp_Re) i = 0; i < _tmp_Re.size(); i++)
3279  {
3280  cached_residual_values.push_back(_tmp_Re(i));
3281  cached_residual_rows.push_back(_temp_dof_indices[i]);
3282  }
3283  }
3284 
3285  res_block.zero();
3286 }
virtual void zero() override final
void processLocalResidual(DenseVector< Number > &res_block, std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Appling scaling, constraints to the local residual block and populate the full DoF indices for array ...
Definition: Assembly.C:3213
DenseVector< Number > _tmp_Re
auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction) ...
Definition: Assembly.h:2626
std::vector< dof_id_type > _temp_dof_indices
Temporary work vector to keep from reallocating it.
Definition: Assembly.h:2781
virtual unsigned int size() const override final

◆ cacheResidualLower()

void Assembly::cacheResidualLower ( GlobalDataKey  ,
const std::vector< VectorTag > &  tags 
)

Takes the values that are currently in _sub_Rl and appends them to the cached values.

Definition at line 3470 of file Assembly.C.

Referenced by ComputeMortarFunctor::operator()().

3471 {
3472  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3473  for (const auto & var : vars)
3474  for (const auto & vector_tag : tags)
3475  if (_sys.hasVector(vector_tag._id))
3476  cacheResidualBlock(_cached_residual_values[vector_tag._type_id],
3477  _cached_residual_rows[vector_tag._type_id],
3478  _sub_Rl[vector_tag._type_id][var->number()],
3479  var->dofIndicesLower(),
3480  var->arrayScalingFactor(),
3481  var->isNodal());
3482 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
Definition: Assembly.h:2761
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:916
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition: Assembly.h:2623
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2758
void cacheResidualBlock(std::vector< Real > &cached_residual_values, std::vector< dof_id_type > &cached_residual_rows, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Push a local residual block with proper scaling into cache.
Definition: Assembly.C:3265

◆ cacheResidualNeighbor()

void Assembly::cacheResidualNeighbor ( GlobalDataKey  ,
const std::vector< VectorTag > &  tags 
)

Takes the values that are currently in _sub_Rn of all field variables and appends them to the cached values.

Definition at line 3455 of file Assembly.C.

Referenced by SubProblem::cacheResidualNeighbor(), and ComputeMortarFunctor::operator()().

3456 {
3457  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3458  for (const auto & var : vars)
3459  for (const auto & vector_tag : tags)
3460  if (_sys.hasVector(vector_tag._id))
3461  cacheResidualBlock(_cached_residual_values[vector_tag._type_id],
3462  _cached_residual_rows[vector_tag._type_id],
3463  _sub_Rn[vector_tag._type_id][var->number()],
3464  var->dofIndicesNeighbor(),
3465  var->arrayScalingFactor(),
3466  var->isNodal());
3467 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
Definition: Assembly.h:2761
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:916
char ** vars
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2621
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2758
void cacheResidualBlock(std::vector< Real > &cached_residual_values, std::vector< dof_id_type > &cached_residual_rows, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Push a local residual block with proper scaling into cache.
Definition: Assembly.C:3265

◆ cacheResidualNodes()

void Assembly::cacheResidualNodes ( const DenseVector< Number > &  res,
const std::vector< dof_id_type > &  dof_index,
LocalDataKey  ,
TagID  tag 
)

Lets an external class cache residual at a set of nodes.

Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 3437 of file Assembly.C.

3441 {
3442  // Add the residual value and dof_index to cached_residual_values and cached_residual_rows
3443  // respectively.
3444  // This is used by NodalConstraint.C to cache the residual calculated for primary and secondary
3445  // node.
3446  const VectorTag & vector_tag = _subproblem.getVectorTag(tag);
3447  for (MooseIndex(dof_index) i = 0; i < dof_index.size(); ++i)
3448  {
3449  _cached_residual_values[vector_tag._type_id].push_back(res(i));
3450  _cached_residual_rows[vector_tag._type_id].push_back(dof_index[i]);
3451  }
3452 }
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
Definition: Assembly.h:2761
TagTypeID _type_id
The index for this tag into a vector that contains tags of only its type ordered by ID...
Definition: VectorTag.h:47
SubProblem & _subproblem
Definition: Assembly.h:2273
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2758
Storage for all of the information pretaining to a vector tag.
Definition: VectorTag.h:17
virtual const VectorTag & getVectorTag(const TagID tag_id) const
Get a VectorTag from a TagID.
Definition: SubProblem.C:161

◆ cacheResiduals()

template<typename Residuals , typename Indices >
void Assembly::cacheResiduals ( const Residuals &  residuals,
const Indices &  row_indices,
Real  scaling_factor,
LocalDataKey  ,
const std::set< TagID > &  vector_tags 
)

Process the supplied residual values.

This is a mirror of of the non-templated version of addResiduals except that it's meant for only processing residuals (and not their derivatives/Jacobian). We supply this API such that residual objects that leverage the AD version of this method when computing the Jacobian (or residual + Jacobian) can mirror the same behavior when doing pure residual evaluations, such as when evaluating linear residuals during (P)JFNK. This method will call constrain_element_vector on the supplied residuals. Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 3018 of file Assembly.h.

Referenced by TaggingInterface::addResiduals().

3023 {
3024  mooseAssert(residuals.size() == input_row_indices.size(),
3025  "The number of residuals should match the number of dof indices");
3026  mooseAssert(residuals.size() >= 1, "Why you calling me with no residuals?");
3027 
3028  if (!computingResidual() || vector_tags.empty())
3029  return;
3030 
3031  if (residuals.size() == 1)
3032  {
3033  // No constraining is required. (This is likely a finite volume computation if we only have a
3034  // single dof)
3036  residuals, input_row_indices, scaling_factor, LocalDataKey{}, vector_tags);
3037  return;
3038  }
3039 
3040  // Need to make a copy because we might modify this in constrain_element_vector
3041  _row_indices.assign(input_row_indices.begin(), input_row_indices.end());
3042 
3044  for (const auto i : index_range(_row_indices))
3045  _element_vector(i) = MetaPhysicL::raw_value(residuals[i]) * scaling_factor;
3046 
3047  // At time of writing, this method doesn't do anything with the asymmetric_constraint_rows
3048  // argument, but we set it to false to be consistent with processLocalResidual
3050  _element_vector, _row_indices, /*asymmetric_constraint_rows=*/false);
3051 
3052  for (const auto i : index_range(_row_indices))
3053  cacheResidual(_row_indices[i], _element_vector(i), vector_tags);
3054 }
void resize(const unsigned int n)
auto raw_value(const Eigen::Map< T > &in)
Definition: EigenADReal.h:73
void cacheResidual(GlobalDataKey, const std::vector< VectorTag > &tags)
Takes the values that are currently in _sub_Re of all field variables and appends them to the cached ...
Definition: Assembly.C:3404
void constrain_element_vector(DenseVector< Number > &rhs, std::vector< dof_id_type > &dofs, bool asymmetric_constraint_rows=true) const
bool computingResidual() const
Definition: Assembly.h:1901
std::vector< dof_id_type > _row_indices
Working vectors to avoid repeated heap allocations when caching residuals/Jacobians that must have li...
Definition: Assembly.h:2858
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2308
auto index_range(const T &sizable)
DenseVector< Number > _element_vector
A working vector to avoid repeated heap allocations when caching residuals that must have libMesh-lev...
Definition: Assembly.h:2848
void cacheResidualsWithoutConstraints(const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &vector_tags)
Process the supplied residual values.
Definition: Assembly.h:3058

◆ cacheResidualsWithoutConstraints()

template<typename Residuals , typename Indices >
void Assembly::cacheResidualsWithoutConstraints ( const Residuals &  residuals,
const Indices &  row_indices,
Real  scaling_factor,
LocalDataKey  ,
const std::set< TagID > &  vector_tags 
)

Process the supplied residual values.

This is a mirror of of the non-templated version of addResiduals except that it's meant for only processing residuals (and not their derivatives/Jacobian). We supply this API such that residual objects that leverage the AD version of this method when computing the Jacobian (or residual + Jacobian) can mirror the same behavior when doing pure residual evaluations, such as when evaluating linear residuals during (P)JFNK. This method will not call constrain_element_vector on the supplied residuals. Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 3058 of file Assembly.h.

Referenced by TaggingInterface::addResidualsWithoutConstraints(), and cacheResiduals().

3063 {
3064  mooseAssert(residuals.size() == row_indices.size(),
3065  "The number of residuals should match the number of dof indices");
3066  mooseAssert(residuals.size() >= 1, "Why you calling me with no residuals?");
3067 
3068  if (computingResidual() && !vector_tags.empty())
3069  for (const auto i : index_range(row_indices))
3070  cacheResidual(
3071  row_indices[i], MetaPhysicL::raw_value(residuals[i]) * scaling_factor, vector_tags);
3072 }
auto raw_value(const Eigen::Map< T > &in)
Definition: EigenADReal.h:73
void cacheResidual(GlobalDataKey, const std::vector< VectorTag > &tags)
Takes the values that are currently in _sub_Re of all field variables and appends them to the cached ...
Definition: Assembly.C:3404
bool computingResidual() const
Definition: Assembly.h:1901
auto index_range(const T &sizable)

◆ clearCachedJacobian()

void Assembly::clearCachedJacobian ( )
private

Clear any currently cached jacobians.

This is automatically called by setCachedJacobian

Definition at line 4522 of file Assembly.C.

Referenced by setCachedJacobian(), and zeroCachedJacobian().

4523 {
4524  for (MooseIndex(_cached_jacobian_rows) tag = 0; tag < _cached_jacobian_rows.size(); tag++)
4525  {
4526  _cached_jacobian_rows[tag].clear();
4527  _cached_jacobian_cols[tag].clear();
4528  _cached_jacobian_values[tag].clear();
4529  }
4530 }
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2768
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2766
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2770

◆ clearCachedQRules()

void Assembly::clearCachedQRules ( )

Set the cached quadrature rules to nullptr.

Definition at line 726 of file Assembly.C.

727 {
728  _current_qrule = nullptr;
729  _current_qrule_face = nullptr;
730  _current_qrule_lower = nullptr;
731  _current_qrule_neighbor = nullptr;
732 }
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition: Assembly.h:2523
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2482
libMesh::QBase * _current_qrule_lower
quadrature rule used on lower dimensional elements.
Definition: Assembly.h:2552
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2370

◆ clearCachedResiduals() [1/2]

void Assembly::clearCachedResiduals ( GlobalDataKey  )

Clears all of the residuals in _cached_residual_rows and _cached_residual_values.

This method is designed specifically for use after calling FEProblemBase::addCachedResidualDirectly() and DisplacedProblem::addCachedResidualDirectly() to ensure that we don't have any extra residuals hanging around that we didn't have the vectors for

Definition at line 3500 of file Assembly.C.

Referenced by addCachedResidualDirectly().

3501 {
3502  for (const auto & vector_tag : _residual_vector_tags)
3503  clearCachedResiduals(vector_tag);
3504 }
const std::vector< VectorTag > & _residual_vector_tags
The residual vector tags that Assembly could possibly contribute to.
Definition: Assembly.h:2755
void clearCachedResiduals(GlobalDataKey)
Clears all of the residuals in _cached_residual_rows and _cached_residual_values. ...
Definition: Assembly.C:3500

◆ clearCachedResiduals() [2/2]

void Assembly::clearCachedResiduals ( const VectorTag vector_tag)
private

Clears all of the cached residuals for a specific vector tag.

Definition at line 3508 of file Assembly.C.

3509 {
3510  auto & values = _cached_residual_values[vector_tag._type_id];
3511  auto & rows = _cached_residual_rows[vector_tag._type_id];
3512 
3513  mooseAssert(values.size() == rows.size(),
3514  "Number of cached residuals and number of rows must match!");
3515 
3516  // Keep track of the largest size so we can use it to reserve and avoid
3517  // as much dynamic allocation as possible
3518  if (_max_cached_residuals < values.size())
3519  _max_cached_residuals = values.size();
3520 
3521  // Clear both vectors (keeps the capacity the same)
3522  values.clear();
3523  rows.clear();
3524  // And then reserve: use 2 as a fudge factor to *really* avoid dynamic allocation!
3525  values.reserve(_max_cached_residuals * 2);
3526  rows.reserve(_max_cached_residuals * 2);
3527 }
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
Definition: Assembly.h:2761
unsigned int _max_cached_residuals
Definition: Assembly.h:2763
TagTypeID _type_id
The index for this tag into a vector that contains tags of only its type ordered by ID...
Definition: VectorTag.h:47
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2758

◆ computeADFace()

void Assembly::computeADFace ( const Elem elem,
const unsigned int  side 
)
private

compute AD things on an element face

Definition at line 2109 of file Assembly.C.

Referenced by reinitElemFaceRef(), and reinitFEFace().

2110 {
2111  const auto dim = elem.dim();
2112 
2113  if (_subproblem.haveADObjects())
2114  {
2115  auto n_qp = _current_qrule_face->n_points();
2116  resizeADMappingObjects(n_qp, dim);
2117  _ad_normals.resize(n_qp);
2118  _ad_JxW_face.resize(n_qp);
2119  if (_calculate_face_xyz)
2120  _ad_q_points_face.resize(n_qp);
2122  _ad_curvatures.resize(n_qp);
2123 
2124  if (_displaced)
2125  {
2126  const auto & qw = _current_qrule_face->get_weights();
2127  computeFaceMap(elem, side, qw);
2128  const std::vector<Real> dummy_qw(n_qp, 1.);
2129 
2130  for (unsigned int qp = 0; qp != n_qp; qp++)
2132  }
2133  else
2134  {
2135  for (unsigned qp = 0; qp < n_qp; ++qp)
2136  {
2137  _ad_JxW_face[qp] = _current_JxW_face[qp];
2138  _ad_normals[qp] = _current_normals[qp];
2139  }
2140  if (_calculate_face_xyz)
2141  for (unsigned qp = 0; qp < n_qp; ++qp)
2144  for (unsigned qp = 0; qp < n_qp; ++qp)
2145  _ad_curvatures[qp] = _curvatures[qp];
2146  }
2147 
2148  for (const auto & it : _fe_face[dim])
2149  {
2150  FEBase & fe = *it.second;
2151  auto fe_type = it.first;
2152  auto num_shapes = FEInterface::n_shape_functions(fe_type, &elem);
2153  auto & grad_phi = _ad_grad_phi_data_face[fe_type];
2154 
2155  grad_phi.resize(num_shapes);
2156  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2157  grad_phi[i].resize(n_qp);
2158 
2159  const auto & regular_grad_phi = _fe_shape_data_face[fe_type]->_grad_phi;
2160 
2161  if (_displaced)
2162  computeGradPhiAD(&elem, n_qp, grad_phi, &fe);
2163  else
2164  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2165  for (unsigned qp = 0; qp < n_qp; ++qp)
2166  grad_phi[i][qp] = regular_grad_phi[i][qp];
2167  }
2168  for (const auto & it : _vector_fe_face[dim])
2169  {
2170  FEVectorBase & fe = *it.second;
2171  auto fe_type = it.first;
2172  auto num_shapes = FEInterface::n_shape_functions(fe_type, &elem);
2173  auto & grad_phi = _ad_vector_grad_phi_data_face[fe_type];
2174 
2175  grad_phi.resize(num_shapes);
2176  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2177  grad_phi[i].resize(n_qp);
2178 
2179  const auto & regular_grad_phi = _vector_fe_shape_data_face[fe_type]->_grad_phi;
2180 
2181  if (_displaced)
2182  computeGradPhiAD(&elem, n_qp, grad_phi, &fe);
2183  else
2184  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2185  for (unsigned qp = 0; qp < n_qp; ++qp)
2186  grad_phi[i][qp] = regular_grad_phi[i][qp];
2187  }
2188  }
2189 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
MooseArray< VectorValue< ADReal > > _ad_normals
Definition: Assembly.h:2807
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2474
MooseArray< Real > _curvatures
Definition: Assembly.h:2809
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data_face
Definition: Assembly.h:2742
virtual void haveADObjects(bool have_ad_objects)
Method for setting whether we have any ad objects.
Definition: SubProblem.h:767
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2488
const std::vector< Real > & get_weights() const
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
void resizeADMappingObjects(unsigned int n_qp, unsigned int dim)
resize any objects that contribute to automatic differentiation-related mapping calculations ...
Definition: Assembly.C:971
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2482
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2734
MooseArray< ADReal > _ad_curvatures
Definition: Assembly.h:2810
void computeGradPhiAD(const Elem *elem, unsigned int n_qp, ADTemplateVariablePhiGradient< OutputType > &grad_phi, libMesh::FEGenericBase< OutputType > *fe)
compute gradient of phi possibly with derivative information with respect to nonlinear displacement v...
SubProblem & _subproblem
Definition: Assembly.h:2273
bool _calculate_curvatures
Definition: Assembly.h:2819
unsigned int n_points() const
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2476
const bool _displaced
Definition: Assembly.h:2275
bool _calculate_face_xyz
Definition: Assembly.h:2818
MooseArray< Point > _current_normals
The current Normal vectors at the quadrature points.
Definition: Assembly.h:2490
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition: Assembly.h:2808
virtual unsigned short dim() const=0
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2726
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2478
void resize(unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:216
void computeSinglePointMapAD(const Elem *elem, const std::vector< Real > &qw, unsigned p, FEBase *fe)
compute the finite element reference-physical mapping quantities (such as JxW) with possible dependen...
Definition: Assembly.C:1001
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data_face
Definition: Assembly.h:2744
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:407
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2486
MooseArray< ADReal > _ad_JxW_face
Definition: Assembly.h:2806
void computeFaceMap(const Elem &elem, const unsigned int side, const std::vector< Real > &qw)
Definition: Assembly.C:1347

◆ computeCurrentElemVolume()

void Assembly::computeCurrentElemVolume ( )
private

Definition at line 1752 of file Assembly.C.

1753 {
1755  return;
1756 
1759  if (_calculate_ad_coord)
1762 
1763  _current_elem_volume = 0.;
1764  for (unsigned int qp = 0; qp < _current_qrule->n_points(); qp++)
1766 
1768 }
MooseArray< ADReal > _ad_coord
The AD version of the current coordinate transformation coefficients.
Definition: Assembly.h:2386
MooseArray< Real > _coord
The current coordinate transformation coefficients.
Definition: Assembly.h:2384
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
Definition: Assembly.h:2586
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2556
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
Definition: Assembly.C:1729
Real _current_elem_volume
Volume of the current element.
Definition: Assembly.h:2562
MooseArray< Real > _current_JxW
The current list of transformed jacobian weights.
Definition: Assembly.h:2380
unsigned int n_points() const
bool _calculate_ad_coord
Whether to calculate coord with AD.
Definition: Assembly.h:2823
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2370
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2795
subdomain_id_type subdomain_id() const
MooseArray< Point > _current_q_points
The current list of quadrature points.
Definition: Assembly.h:2378

◆ computeCurrentFaceVolume()

void Assembly::computeCurrentFaceVolume ( )
private

Definition at line 1771 of file Assembly.C.

1772 {
1774  return;
1775 
1778  if (_calculate_ad_coord)
1781 
1782  _current_side_volume = 0.;
1783  for (unsigned int qp = 0; qp < _current_qrule_face->n_points(); qp++)
1785 
1787 }
MooseArray< ADReal > _ad_coord
The AD version of the current coordinate transformation coefficients.
Definition: Assembly.h:2386
MooseArray< Real > _coord
The current coordinate transformation coefficients.
Definition: Assembly.h:2384
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2488
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2556
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
Definition: Assembly.C:1729
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2482
unsigned int n_points() const
bool _calculate_ad_coord
Whether to calculate coord with AD.
Definition: Assembly.h:2823
Real _current_side_volume
Volume of the current side element.
Definition: Assembly.h:2568
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition: Assembly.h:2808
subdomain_id_type subdomain_id() const
bool _current_side_volume_computed
Boolean to indicate whether current element side volumes has been computed.
Definition: Assembly.h:2588
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2486

◆ computeCurrentNeighborVolume()

void Assembly::computeCurrentNeighborVolume ( )
private

◆ computeFaceMap()

void Assembly::computeFaceMap ( const Elem elem,
const unsigned int  side,
const std::vector< Real > &  qw 
)
private

Definition at line 1347 of file Assembly.C.

Referenced by computeADFace().

1348 {
1349  // Important quantities calculated by this method:
1350  // - _ad_JxW_face
1351  // - _ad_q_points_face
1352  // - _ad_normals
1353  // - _ad_curvatures
1354 
1355  const Elem & side_elem = _compute_face_map_side_elem_builder(elem, side);
1356  const auto dim = elem.dim();
1357  const auto n_qp = qw.size();
1358  const auto & dpsidxi_map = _holder_fe_face_helper[dim]->get_fe_map().get_dpsidxi();
1359  const auto & dpsideta_map = _holder_fe_face_helper[dim]->get_fe_map().get_dpsideta();
1360  const auto & psi_map = _holder_fe_face_helper[dim]->get_fe_map().get_psi();
1361  std::vector<std::vector<Real>> const * d2psidxi2_map = nullptr;
1362  std::vector<std::vector<Real>> const * d2psidxideta_map = nullptr;
1363  std::vector<std::vector<Real>> const * d2psideta2_map = nullptr;
1364  const auto sys_num = _sys.number();
1365  const bool do_derivatives = ADReal::do_derivatives && sys_num == _subproblem.currentNlSysNum();
1366 
1368  {
1369  d2psidxi2_map = &_holder_fe_face_helper[dim]->get_fe_map().get_d2psidxi2();
1370  d2psidxideta_map = &_holder_fe_face_helper[dim]->get_fe_map().get_d2psidxideta();
1371  d2psideta2_map = &_holder_fe_face_helper[dim]->get_fe_map().get_d2psideta2();
1372  }
1373 
1374  switch (dim)
1375  {
1376  case 1:
1377  {
1378  if (!n_qp)
1379  break;
1380 
1381  if (side_elem.node_id(0) == elem.node_id(0))
1382  _ad_normals[0] = Point(-1.);
1383  else
1384  _ad_normals[0] = Point(1.);
1385 
1386  VectorValue<ADReal> side_point;
1387  if (_calculate_face_xyz)
1388  {
1389  const Node & node = side_elem.node_ref(0);
1390  side_point = node;
1391 
1392  if (do_derivatives)
1393  for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1395  side_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1396  }
1397 
1398  for (const auto p : make_range(n_qp))
1399  {
1400  if (_calculate_face_xyz)
1401  {
1402  _ad_q_points_face[p].zero();
1403  _ad_q_points_face[p].add_scaled(side_point, psi_map[0][p]);
1404  }
1405 
1406  _ad_normals[p] = _ad_normals[0];
1407  _ad_JxW_face[p] = 1.0 * qw[p];
1408  }
1409 
1410  break;
1411  }
1412 
1413  case 2:
1414  {
1415  _ad_dxyzdxi_map.resize(n_qp);
1417  _ad_d2xyzdxi2_map.resize(n_qp);
1418 
1419  for (const auto p : make_range(n_qp))
1420  _ad_dxyzdxi_map[p].zero();
1421  if (_calculate_face_xyz)
1422  for (const auto p : make_range(n_qp))
1423  _ad_q_points_face[p].zero();
1425  for (const auto p : make_range(n_qp))
1426  _ad_d2xyzdxi2_map[p].zero();
1427 
1428  const auto n_mapping_shape_functions =
1429  FE<2, LAGRANGE>::n_dofs(&side_elem, side_elem.default_order());
1430 
1431  for (unsigned int i = 0; i < n_mapping_shape_functions; i++)
1432  {
1433  const Node & node = side_elem.node_ref(i);
1434  VectorValue<ADReal> side_point = node;
1435 
1436  if (do_derivatives)
1437  for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1439  side_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1440 
1441  for (const auto p : make_range(n_qp))
1442  _ad_dxyzdxi_map[p].add_scaled(side_point, dpsidxi_map[i][p]);
1443  if (_calculate_face_xyz)
1444  for (const auto p : make_range(n_qp))
1445  _ad_q_points_face[p].add_scaled(side_point, psi_map[i][p]);
1447  for (const auto p : make_range(n_qp))
1448  _ad_d2xyzdxi2_map[p].add_scaled(side_point, (*d2psidxi2_map)[i][p]);
1449  }
1450 
1451  for (const auto p : make_range(n_qp))
1452  {
1453  _ad_normals[p] =
1454  (VectorValue<ADReal>(_ad_dxyzdxi_map[p](1), -_ad_dxyzdxi_map[p](0), 0.)).unit();
1455  const auto the_jac = _ad_dxyzdxi_map[p].norm();
1456  _ad_JxW_face[p] = the_jac * qw[p];
1458  {
1459  const auto numerator = _ad_d2xyzdxi2_map[p] * _ad_normals[p];
1460  const auto denominator = _ad_dxyzdxi_map[p].norm_sq();
1461  libmesh_assert_not_equal_to(denominator, 0);
1462  _ad_curvatures[p] = numerator / denominator;
1463  }
1464  }
1465 
1466  break;
1467  }
1468 
1469  case 3:
1470  {
1471  _ad_dxyzdxi_map.resize(n_qp);
1472  _ad_dxyzdeta_map.resize(n_qp);
1474  {
1475  _ad_d2xyzdxi2_map.resize(n_qp);
1476  _ad_d2xyzdxideta_map.resize(n_qp);
1477  _ad_d2xyzdeta2_map.resize(n_qp);
1478  }
1479 
1480  for (const auto p : make_range(n_qp))
1481  {
1482  _ad_dxyzdxi_map[p].zero();
1483  _ad_dxyzdeta_map[p].zero();
1484  }
1485  if (_calculate_face_xyz)
1486  for (const auto p : make_range(n_qp))
1487  _ad_q_points_face[p].zero();
1489  for (const auto p : make_range(n_qp))
1490  {
1491  _ad_d2xyzdxi2_map[p].zero();
1492  _ad_d2xyzdxideta_map[p].zero();
1493  _ad_d2xyzdeta2_map[p].zero();
1494  }
1495 
1496  const unsigned int n_mapping_shape_functions =
1497  FE<3, LAGRANGE>::n_dofs(&side_elem, side_elem.default_order());
1498 
1499  for (unsigned int i = 0; i < n_mapping_shape_functions; i++)
1500  {
1501  const Node & node = side_elem.node_ref(i);
1502  VectorValue<ADReal> side_point = node;
1503 
1504  if (do_derivatives)
1505  for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1507  side_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1508 
1509  for (const auto p : make_range(n_qp))
1510  {
1511  _ad_dxyzdxi_map[p].add_scaled(side_point, dpsidxi_map[i][p]);
1512  _ad_dxyzdeta_map[p].add_scaled(side_point, dpsideta_map[i][p]);
1513  }
1514  if (_calculate_face_xyz)
1515  for (const auto p : make_range(n_qp))
1516  _ad_q_points_face[p].add_scaled(side_point, psi_map[i][p]);
1518  for (const auto p : make_range(n_qp))
1519  {
1520  _ad_d2xyzdxi2_map[p].add_scaled(side_point, (*d2psidxi2_map)[i][p]);
1521  _ad_d2xyzdxideta_map[p].add_scaled(side_point, (*d2psidxideta_map)[i][p]);
1522  _ad_d2xyzdeta2_map[p].add_scaled(side_point, (*d2psideta2_map)[i][p]);
1523  }
1524  }
1525 
1526  for (const auto p : make_range(n_qp))
1527  {
1528  _ad_normals[p] = _ad_dxyzdxi_map[p].cross(_ad_dxyzdeta_map[p]).unit();
1529 
1530  const auto &dxdxi = _ad_dxyzdxi_map[p](0), &dxdeta = _ad_dxyzdeta_map[p](0),
1531  &dydxi = _ad_dxyzdxi_map[p](1), &dydeta = _ad_dxyzdeta_map[p](1),
1532  &dzdxi = _ad_dxyzdxi_map[p](2), &dzdeta = _ad_dxyzdeta_map[p](2);
1533 
1534  const auto g11 = (dxdxi * dxdxi + dydxi * dydxi + dzdxi * dzdxi);
1535 
1536  const auto g12 = (dxdxi * dxdeta + dydxi * dydeta + dzdxi * dzdeta);
1537 
1538  const auto & g21 = g12;
1539 
1540  const auto g22 = (dxdeta * dxdeta + dydeta * dydeta + dzdeta * dzdeta);
1541 
1542  const auto the_jac = std::sqrt(g11 * g22 - g12 * g21);
1543 
1544  _ad_JxW_face[p] = the_jac * qw[p];
1545 
1547  {
1548  const auto L = -_ad_d2xyzdxi2_map[p] * _ad_normals[p];
1549  const auto M = -_ad_d2xyzdxideta_map[p] * _ad_normals[p];
1550  const auto N = -_ad_d2xyzdeta2_map[p] * _ad_normals[p];
1551  const auto E = _ad_dxyzdxi_map[p].norm_sq();
1552  const auto F = _ad_dxyzdxi_map[p] * _ad_dxyzdeta_map[p];
1553  const auto G = _ad_dxyzdeta_map[p].norm_sq();
1554 
1555  const auto numerator = E * N - 2. * F * M + G * L;
1556  const auto denominator = E * G - F * F;
1557  libmesh_assert_not_equal_to(denominator, 0.);
1558  _ad_curvatures[p] = 0.5 * numerator / denominator;
1559  }
1560  }
1561 
1562  break;
1563  }
1564 
1565  default:
1566  mooseError("Invalid dimension dim = ", dim);
1567  }
1568 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
MooseArray< VectorValue< ADReal > > _ad_normals
Definition: Assembly.h:2807
libMesh::ElemSideBuilder _compute_face_map_side_elem_builder
In place side element builder for computeFaceMap()
Definition: Assembly.h:2841
SystemBase & _sys
Definition: Assembly.h:2272
dof_id_type dof_number(const unsigned int s, const unsigned int var, const unsigned int comp) const
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:333
virtual unsigned int currentNlSysNum() const =0
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::vector< VectorValue< ADReal > > _ad_dxyzdeta_map
Definition: Assembly.h:2788
MooseArray< ADReal > _ad_curvatures
Definition: Assembly.h:2810
const Node & node_ref(const unsigned int i) const
SubProblem & _subproblem
Definition: Assembly.h:2273
bool _calculate_curvatures
Definition: Assembly.h:2819
std::vector< VectorValue< ADReal > > _ad_dxyzdxi_map
AD quantities.
Definition: Assembly.h:2787
std::vector< std::pair< unsigned int, unsigned short > > _disp_numbers_and_directions
Container of displacement numbers and directions.
Definition: Assembly.h:2815
std::vector< VectorValue< ADReal > > _ad_d2xyzdxi2_map
Definition: Assembly.h:2790
unsigned int number() const
Gets the number of this system.
Definition: SystemBase.C:1149
bool _calculate_face_xyz
Definition: Assembly.h:2818
std::vector< VectorValue< ADReal > > _ad_d2xyzdxideta_map
Definition: Assembly.h:2791
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition: Assembly.h:2808
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
virtual unsigned short dim() const=0
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2478
IntRange< T > make_range(T beg, T end)
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N >> &derivs, libMesh::dof_id_type index, Real value)
Definition: ADReal.h:21
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:407
const Node *const & node() const
Returns the reference to the node.
Definition: Assembly.h:506
virtual Order default_order() const=0
dof_id_type node_id(const unsigned int i) const
std::vector< VectorValue< ADReal > > _ad_d2xyzdeta2_map
Definition: Assembly.h:2792
MooseArray< ADReal > _ad_JxW_face
Definition: Assembly.h:2806

◆ computeGradPhiAD() [1/2]

template<typename OutputType >
void Assembly::computeGradPhiAD ( const Elem elem,
unsigned int  n_qp,
ADTemplateVariablePhiGradient< OutputType > &  grad_phi,
FEGenericBase< OutputType > *  fe 
)

Definition at line 891 of file Assembly.C.

895 {
896  // This function relies on the fact that FE::reinit has already been called. FE::reinit will
897  // importantly have already called FEMap::init_shape_functions which will have computed
898  // these quantities at the integration/quadrature points: dphidxi,
899  // dphideta, and dphidzeta (e.g. \nabla phi w.r.t. reference coordinates). These *phi* quantities
900  // are independent of mesh displacements when using a quadrature rule.
901  //
902  // Note that a user could have specified custom integration points (e.g. independent of a
903  // quadrature rule) which could very well depend on displacements. In that case even the *phi*
904  // quantities from the above paragraph would be a function of the displacements and we would be
905  // missing that derivative information in the calculations below
906 
907  auto dim = elem->dim();
908  const auto & dphidxi = fe->get_dphidxi();
909  const auto & dphideta = fe->get_dphideta();
910  const auto & dphidzeta = fe->get_dphidzeta();
911  auto num_shapes = grad_phi.size();
912 
913  switch (dim)
914  {
915  case 0:
916  {
917  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
918  for (unsigned qp = 0; qp < n_qp; ++qp)
919  grad_phi[i][qp] = 0;
920  break;
921  }
922 
923  case 1:
924  {
925  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
926  for (unsigned qp = 0; qp < n_qp; ++qp)
927  {
928  grad_phi[i][qp].slice(0) = dphidxi[i][qp] * _ad_dxidx_map[qp];
929  grad_phi[i][qp].slice(1) = dphidxi[i][qp] * _ad_dxidy_map[qp];
930  grad_phi[i][qp].slice(2) = dphidxi[i][qp] * _ad_dxidz_map[qp];
931  }
932  break;
933  }
934 
935  case 2:
936  {
937  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
938  for (unsigned qp = 0; qp < n_qp; ++qp)
939  {
940  grad_phi[i][qp].slice(0) =
941  dphidxi[i][qp] * _ad_dxidx_map[qp] + dphideta[i][qp] * _ad_detadx_map[qp];
942  grad_phi[i][qp].slice(1) =
943  dphidxi[i][qp] * _ad_dxidy_map[qp] + dphideta[i][qp] * _ad_detady_map[qp];
944  grad_phi[i][qp].slice(2) =
945  dphidxi[i][qp] * _ad_dxidz_map[qp] + dphideta[i][qp] * _ad_detadz_map[qp];
946  }
947  break;
948  }
949 
950  case 3:
951  {
952  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
953  for (unsigned qp = 0; qp < n_qp; ++qp)
954  {
955  grad_phi[i][qp].slice(0) = dphidxi[i][qp] * _ad_dxidx_map[qp] +
956  dphideta[i][qp] * _ad_detadx_map[qp] +
957  dphidzeta[i][qp] * _ad_dzetadx_map[qp];
958  grad_phi[i][qp].slice(1) = dphidxi[i][qp] * _ad_dxidy_map[qp] +
959  dphideta[i][qp] * _ad_detady_map[qp] +
960  dphidzeta[i][qp] * _ad_dzetady_map[qp];
961  grad_phi[i][qp].slice(2) = dphidxi[i][qp] * _ad_dxidz_map[qp] +
962  dphideta[i][qp] * _ad_detadz_map[qp] +
963  dphidzeta[i][qp] * _ad_dzetadz_map[qp];
964  }
965  break;
966  }
967  }
968 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
std::vector< ADReal > _ad_detadz_map
Definition: Assembly.h:2801
std::vector< ADReal > _ad_detady_map
Definition: Assembly.h:2800
std::vector< ADReal > _ad_dzetadz_map
Definition: Assembly.h:2804
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
const std::vector< std::vector< OutputShape > > & get_dphideta() const
const std::vector< std::vector< OutputShape > > & get_dphidzeta() const
std::vector< ADReal > _ad_dzetadx_map
Definition: Assembly.h:2802
std::vector< ADReal > _ad_dzetady_map
Definition: Assembly.h:2803
std::vector< ADReal > _ad_dxidz_map
Definition: Assembly.h:2798
std::vector< ADReal > _ad_detadx_map
Definition: Assembly.h:2799
std::vector< ADReal > _ad_dxidx_map
Definition: Assembly.h:2796
std::vector< ADReal > _ad_dxidy_map
Definition: Assembly.h:2797
virtual unsigned short dim() const=0
const std::vector< std::vector< OutputShape > > & get_dphidxi() const

◆ computeGradPhiAD() [2/2]

template<typename OutputType >
void Assembly::computeGradPhiAD ( const Elem *  elem,
unsigned int  n_qp,
ADTemplateVariablePhiGradient< OutputType > &  grad_phi,
libMesh::FEGenericBase< OutputType > *  fe 
)
private

compute gradient of phi possibly with derivative information with respect to nonlinear displacement variables

Referenced by computeADFace(), and reinitFE().

◆ computeSinglePointMapAD()

void Assembly::computeSinglePointMapAD ( const Elem elem,
const std::vector< Real > &  qw,
unsigned  p,
FEBase fe 
)
private

compute the finite element reference-physical mapping quantities (such as JxW) with possible dependence on nonlinear displacement variables at a single quadrature point

Definition at line 1001 of file Assembly.C.

Referenced by computeADFace(), and reinitFE().

1005 {
1006  // This function relies on the fact that FE::reinit has already been called. FE::reinit will
1007  // importantly have already called FEMap::init_reference_to_physical_map which will have computed
1008  // these quantities at the integration/quadrature points: phi_map, dphidxi_map,
1009  // dphideta_map, and dphidzeta_map (e.g. phi and \nabla phi w.r.t reference coordinates). *_map is
1010  // used to denote that quantities are in reference to a mapping Lagrange FE object. The FE<Dim,
1011  // LAGRANGE> objects used for mapping will in general have an order matching the order of the
1012  // mesh. These *phi*_map quantities are independent of mesh displacements when using a quadrature
1013  // rule.
1014  //
1015  // Note that a user could have specified custom integration points (e.g. independent of a
1016  // quadrature rule) which could very well depend on displacements. In that case even the *phi*_map
1017  // quantities from the above paragraph would be a function of the displacements and we would be
1018  // missing that derivative information in the calculations below
1019  //
1020  // Important quantities calculated by this method:
1021  // - _ad_JxW;
1022  // - _ad_q_points;
1023  // And the following quantities are important because they are used in the computeGradPhiAD method
1024  // to calculate the shape function gradients with respect to the physical coordinates
1025  // dphi/dphys = dphi/dref * dref/dphys:
1026  // - _ad_dxidx_map;
1027  // - _ad_dxidy_map;
1028  // - _ad_dxidz_map;
1029  // - _ad_detadx_map;
1030  // - _ad_detady_map;
1031  // - _ad_detadz_map;
1032  // - _ad_dzetadx_map;
1033  // - _ad_dzetady_map;
1034  // - _ad_dzetadz_map;
1035  //
1036  // Some final notes. This method will be called both when we are reinit'ing in the volume and on
1037  // faces. When reinit'ing on faces, computation of _ad_JxW will be garbage because we will be
1038  // using dummy quadrature weights. _ad_q_points computation is also currently extraneous during
1039  // face reinit because we compute _ad_q_points_face in the computeFaceMap method. However,
1040  // computation of dref/dphys is absolutely necessary (and the reason we call this method for the
1041  // face case) for both volume and face reinit
1042 
1043  auto dim = elem->dim();
1044  const auto & elem_nodes = elem->get_nodes();
1045  auto num_shapes = FEInterface::n_shape_functions(fe->get_fe_type(), elem);
1046  const auto & phi_map = fe->get_fe_map().get_phi_map();
1047  const auto & dphidxi_map = fe->get_fe_map().get_dphidxi_map();
1048  const auto & dphideta_map = fe->get_fe_map().get_dphideta_map();
1049  const auto & dphidzeta_map = fe->get_fe_map().get_dphidzeta_map();
1050  const auto sys_num = _sys.number();
1051  const bool do_derivatives =
1052  ADReal::do_derivatives && _sys.number() == _subproblem.currentNlSysNum();
1053 
1054  switch (dim)
1055  {
1056  case 0:
1057  {
1058  _ad_jac[p] = 1.0;
1059  _ad_JxW[p] = qw[p];
1060  if (_calculate_xyz)
1061  _ad_q_points[p] = *elem_nodes[0];
1062  break;
1063  }
1064 
1065  case 1:
1066  {
1067  if (_calculate_xyz)
1068  _ad_q_points[p].zero();
1069 
1070  _ad_dxyzdxi_map[p].zero();
1071 
1072  for (std::size_t i = 0; i < num_shapes; i++)
1073  {
1074  libmesh_assert(elem_nodes[i]);
1075  const Node & node = *elem_nodes[i];
1076  libMesh::VectorValue<ADReal> elem_point = node;
1077  if (do_derivatives)
1078  for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1079  if (node.n_dofs(sys_num, disp_num))
1081  elem_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1082 
1083  _ad_dxyzdxi_map[p].add_scaled(elem_point, dphidxi_map[i][p]);
1084 
1085  if (_calculate_xyz)
1086  _ad_q_points[p].add_scaled(elem_point, phi_map[i][p]);
1087  }
1088 
1089  _ad_jac[p] = _ad_dxyzdxi_map[p].norm();
1090 
1091  if (_ad_jac[p].value() <= -TOLERANCE * TOLERANCE)
1092  {
1093  static bool failing = false;
1094  if (!failing)
1095  {
1096  failing = true;
1098  libmesh_error_msg("ERROR: negative Jacobian " << _ad_jac[p].value() << " at point index "
1099  << p << " in element " << elem->id());
1100  }
1101  else
1102  return;
1103  }
1104 
1105  const auto jacm2 = 1. / _ad_jac[p] / _ad_jac[p];
1106  _ad_dxidx_map[p] = jacm2 * _ad_dxyzdxi_map[p](0);
1107  _ad_dxidy_map[p] = jacm2 * _ad_dxyzdxi_map[p](1);
1108  _ad_dxidz_map[p] = jacm2 * _ad_dxyzdxi_map[p](2);
1109 
1110  _ad_JxW[p] = _ad_jac[p] * qw[p];
1111 
1112  break;
1113  }
1114 
1115  case 2:
1116  {
1117  if (_calculate_xyz)
1118  _ad_q_points[p].zero();
1119  _ad_dxyzdxi_map[p].zero();
1120  _ad_dxyzdeta_map[p].zero();
1121 
1122  for (std::size_t i = 0; i < num_shapes; i++)
1123  {
1124  libmesh_assert(elem_nodes[i]);
1125  const Node & node = *elem_nodes[i];
1126  libMesh::VectorValue<ADReal> elem_point = node;
1127  if (do_derivatives)
1128  for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1129  if (node.n_dofs(sys_num, disp_num))
1131  elem_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1132 
1133  _ad_dxyzdxi_map[p].add_scaled(elem_point, dphidxi_map[i][p]);
1134  _ad_dxyzdeta_map[p].add_scaled(elem_point, dphideta_map[i][p]);
1135 
1136  if (_calculate_xyz)
1137  _ad_q_points[p].add_scaled(elem_point, phi_map[i][p]);
1138  }
1139 
1140  const auto &dx_dxi = _ad_dxyzdxi_map[p](0), &dx_deta = _ad_dxyzdeta_map[p](0),
1141  &dy_dxi = _ad_dxyzdxi_map[p](1), &dy_deta = _ad_dxyzdeta_map[p](1),
1142  &dz_dxi = _ad_dxyzdxi_map[p](2), &dz_deta = _ad_dxyzdeta_map[p](2);
1143 
1144  const auto g11 = (dx_dxi * dx_dxi + dy_dxi * dy_dxi + dz_dxi * dz_dxi);
1145 
1146  const auto g12 = (dx_dxi * dx_deta + dy_dxi * dy_deta + dz_dxi * dz_deta);
1147 
1148  const auto & g21 = g12;
1149 
1150  const auto g22 = (dx_deta * dx_deta + dy_deta * dy_deta + dz_deta * dz_deta);
1151 
1152  auto det = (g11 * g22 - g12 * g21);
1153 
1154  if (det.value() <= -TOLERANCE * TOLERANCE)
1155  {
1156  static bool failing = false;
1157  if (!failing)
1158  {
1159  failing = true;
1161  libmesh_error_msg("ERROR: negative Jacobian " << det << " at point index " << p
1162  << " in element " << elem->id());
1163  }
1164  else
1165  return;
1166  }
1167  else if (det.value() <= 0.)
1168  det.value() = TOLERANCE * TOLERANCE;
1169 
1170  const auto inv_det = 1. / det;
1171  _ad_jac[p] = std::sqrt(det);
1172 
1173  _ad_JxW[p] = _ad_jac[p] * qw[p];
1174 
1175  const auto g11inv = g22 * inv_det;
1176  const auto g12inv = -g12 * inv_det;
1177  const auto g21inv = -g21 * inv_det;
1178  const auto g22inv = g11 * inv_det;
1179 
1180  _ad_dxidx_map[p] = g11inv * dx_dxi + g12inv * dx_deta;
1181  _ad_dxidy_map[p] = g11inv * dy_dxi + g12inv * dy_deta;
1182  _ad_dxidz_map[p] = g11inv * dz_dxi + g12inv * dz_deta;
1183 
1184  _ad_detadx_map[p] = g21inv * dx_dxi + g22inv * dx_deta;
1185  _ad_detady_map[p] = g21inv * dy_dxi + g22inv * dy_deta;
1186  _ad_detadz_map[p] = g21inv * dz_dxi + g22inv * dz_deta;
1187 
1188  break;
1189  }
1190 
1191  case 3:
1192  {
1193  if (_calculate_xyz)
1194  _ad_q_points[p].zero();
1195  _ad_dxyzdxi_map[p].zero();
1196  _ad_dxyzdeta_map[p].zero();
1197  _ad_dxyzdzeta_map[p].zero();
1198 
1199  for (std::size_t i = 0; i < num_shapes; i++)
1200  {
1201  libmesh_assert(elem_nodes[i]);
1202  const Node & node = *elem_nodes[i];
1203  libMesh::VectorValue<ADReal> elem_point = node;
1204  if (do_derivatives)
1205  for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1206  if (node.n_dofs(sys_num, disp_num))
1208  elem_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1209 
1210  _ad_dxyzdxi_map[p].add_scaled(elem_point, dphidxi_map[i][p]);
1211  _ad_dxyzdeta_map[p].add_scaled(elem_point, dphideta_map[i][p]);
1212  _ad_dxyzdzeta_map[p].add_scaled(elem_point, dphidzeta_map[i][p]);
1213 
1214  if (_calculate_xyz)
1215  _ad_q_points[p].add_scaled(elem_point, phi_map[i][p]);
1216  }
1217 
1218  const auto &dx_dxi = _ad_dxyzdxi_map[p](0), &dy_dxi = _ad_dxyzdxi_map[p](1),
1219  &dz_dxi = _ad_dxyzdxi_map[p](2), &dx_deta = _ad_dxyzdeta_map[p](0),
1220  &dy_deta = _ad_dxyzdeta_map[p](1), &dz_deta = _ad_dxyzdeta_map[p](2),
1221  &dx_dzeta = _ad_dxyzdzeta_map[p](0), &dy_dzeta = _ad_dxyzdzeta_map[p](1),
1222  &dz_dzeta = _ad_dxyzdzeta_map[p](2);
1223 
1224  _ad_jac[p] = (dx_dxi * (dy_deta * dz_dzeta - dz_deta * dy_dzeta) +
1225  dy_dxi * (dz_deta * dx_dzeta - dx_deta * dz_dzeta) +
1226  dz_dxi * (dx_deta * dy_dzeta - dy_deta * dx_dzeta));
1227 
1228  if (_ad_jac[p].value() <= -TOLERANCE * TOLERANCE)
1229  {
1230  static bool failing = false;
1231  if (!failing)
1232  {
1233  failing = true;
1235  libmesh_error_msg("ERROR: negative Jacobian " << _ad_jac[p].value() << " at point index "
1236  << p << " in element " << elem->id());
1237  }
1238  else
1239  return;
1240  }
1241 
1242  _ad_JxW[p] = _ad_jac[p] * qw[p];
1243 
1244  const auto inv_jac = 1. / _ad_jac[p];
1245 
1246  _ad_dxidx_map[p] = (dy_deta * dz_dzeta - dz_deta * dy_dzeta) * inv_jac;
1247  _ad_dxidy_map[p] = (dz_deta * dx_dzeta - dx_deta * dz_dzeta) * inv_jac;
1248  _ad_dxidz_map[p] = (dx_deta * dy_dzeta - dy_deta * dx_dzeta) * inv_jac;
1249 
1250  _ad_detadx_map[p] = (dz_dxi * dy_dzeta - dy_dxi * dz_dzeta) * inv_jac;
1251  _ad_detady_map[p] = (dx_dxi * dz_dzeta - dz_dxi * dx_dzeta) * inv_jac;
1252  _ad_detadz_map[p] = (dy_dxi * dx_dzeta - dx_dxi * dy_dzeta) * inv_jac;
1253 
1254  _ad_dzetadx_map[p] = (dy_dxi * dz_deta - dz_dxi * dy_deta) * inv_jac;
1255  _ad_dzetady_map[p] = (dz_dxi * dx_deta - dx_dxi * dz_deta) * inv_jac;
1256  _ad_dzetadz_map[p] = (dx_dxi * dy_deta - dy_dxi * dx_deta) * inv_jac;
1257 
1258  break;
1259  }
1260 
1261  default:
1262  libmesh_error_msg("Invalid dim = " << dim);
1263  }
1264 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
std::vector< ADReal > _ad_detadz_map
Definition: Assembly.h:2801
SystemBase & _sys
Definition: Assembly.h:2272
dof_id_type dof_number(const unsigned int s, const unsigned int var, const unsigned int comp) const
void print_info(std::ostream &os=libMesh::out) const
virtual unsigned int currentNlSysNum() const =0
const std::vector< std::vector< Real > > & get_dphidzeta_map() const
std::vector< ADReal > _ad_detady_map
Definition: Assembly.h:2800
std::vector< ADReal > _ad_dzetadz_map
Definition: Assembly.h:2804
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
const std::vector< std::vector< Real > > & get_phi_map() const
std::vector< VectorValue< ADReal > > _ad_dxyzdeta_map
Definition: Assembly.h:2788
const std::vector< std::vector< Real > > & get_dphideta_map() const
FEType get_fe_type() const
unsigned int n_dofs(const unsigned int s, const unsigned int var=libMesh::invalid_uint) const
std::vector< VectorValue< ADReal > > _ad_dxyzdzeta_map
Definition: Assembly.h:2789
std::vector< ADReal > _ad_dzetadx_map
Definition: Assembly.h:2802
dof_id_type id() const
std::vector< ADReal > _ad_dzetady_map
Definition: Assembly.h:2803
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
std::vector< ADReal > _ad_dxidz_map
Definition: Assembly.h:2798
const Node *const * get_nodes() const
SubProblem & _subproblem
Definition: Assembly.h:2273
libmesh_assert(ctx)
std::vector< ADReal > _ad_detadx_map
Definition: Assembly.h:2799
bool _calculate_xyz
Definition: Assembly.h:2817
std::vector< VectorValue< ADReal > > _ad_dxyzdxi_map
AD quantities.
Definition: Assembly.h:2787
std::vector< std::pair< unsigned int, unsigned short > > _disp_numbers_and_directions
Container of displacement numbers and directions.
Definition: Assembly.h:2815
std::vector< ADReal > _ad_jac
Definition: Assembly.h:2793
OStreamProxy err(std::cerr)
unsigned int number() const
Gets the number of this system.
Definition: SystemBase.C:1149
std::vector< ADReal > _ad_dxidx_map
Definition: Assembly.h:2796
std::vector< ADReal > _ad_dxidy_map
Definition: Assembly.h:2797
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2795
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
virtual unsigned short dim() const=0
const std::vector< std::vector< Real > > & get_dphidxi_map() const
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N >> &derivs, libMesh::dof_id_type index, Real value)
Definition: ADReal.h:21
const FEMap & get_fe_map() const
const Node *const & node() const
Returns the reference to the node.
Definition: Assembly.h:506
MooseArray< ADReal > _ad_JxW
Definition: Assembly.h:2794

◆ computingJacobian()

bool Assembly::computingJacobian ( ) const
inline
Returns
whether we are computing a Jacobian

Definition at line 1906 of file Assembly.h.

Referenced by cacheJacobian(), cacheJacobianWithoutConstraints(), ComputeMortarFunctor::operator()(), and MortarConstraintBase::zeroInactiveLMDofs().

1906 { return _computing_jacobian; }
const bool & _computing_jacobian
Whether we are currently computing the Jacobian.
Definition: Assembly.h:2285

◆ computingResidual()

bool Assembly::computingResidual ( ) const
inline
Returns
whether we are computing a residual

Definition at line 1901 of file Assembly.h.

Referenced by cacheResiduals(), cacheResidualsWithoutConstraints(), ComputeMortarFunctor::operator()(), and MortarConstraintBase::zeroInactiveLMDofs().

1901 { return _computing_residual; }
const bool & _computing_residual
Whether we are currently computing the residual.
Definition: Assembly.h:2282

◆ computingResidualAndJacobian()

bool Assembly::computingResidualAndJacobian ( ) const
inline
Returns
whether we are computing a residual and a Jacobian simultaneously

Definition at line 1911 of file Assembly.h.

const bool & _computing_residual_and_jacobian
Whether we are currently computing the residual and Jacobian.
Definition: Assembly.h:2288

◆ constify_ref()

template<typename T >
static const T* const& Assembly::constify_ref ( T *const &  inref)
inlinestatic

Workaround for C++ compilers thinking they can't just cast a const-reference-to-pointer to const-reference-to-const-pointer.

Definition at line 112 of file Assembly.h.

Referenced by getFE(), getFEFace(), getFEFaceNeighbor(), getFENeighbor(), getVectorFE(), getVectorFEFace(), getVectorFEFaceNeighbor(), getVectorFENeighbor(), qRule(), qRuleFace(), qRuleMortar(), and qRuleNeighbor().

113  {
114  const T * const * ptr = &inref;
115  return *ptr;
116  }

◆ coordSystem()

const Moose::CoordinateSystemType& Assembly::coordSystem ( ) const
inline

Get the coordinate system type.

Returns
A reference to the coordinate system type

Definition at line 288 of file Assembly.h.

288 { return _coord_type; }
Moose::CoordinateSystemType _coord_type
The coordinate system.
Definition: Assembly.h:2382

◆ coordTransformation()

const MooseArray<Real>& Assembly::coordTransformation ( ) const
inline

Returns the reference to the coordinate transformation coefficients.

Returns
A reference. Make sure to store this as a reference!

Definition at line 260 of file Assembly.h.

260 { return _coord; }
MooseArray< Real > _coord
The current coordinate transformation coefficients.
Definition: Assembly.h:2384

◆ copyFaceShapes() [1/2]

template<typename T >
void Assembly::copyFaceShapes ( MooseVariableField< T > &  v)

Definition at line 3032 of file Assembly.C.

Referenced by copyFaceShapes().

3033 {
3034  phiFace(v).shallowCopy(v.phiFace());
3035  gradPhiFace(v).shallowCopy(v.gradPhiFace());
3036  if (v.computingSecond())
3037  secondPhiFace(v).shallowCopy(v.secondPhiFace());
3038 }
virtual const FieldVariablePhiSecond & secondPhiFace() const =0
Return the rank-2 tensor of second derivatives of the variable&#39;s shape functions on an element face...
const VariablePhiSecond & secondPhiFace(const MooseVariableField< Real > &) const
Definition: Assembly.h:1302
virtual bool computingSecond() const =0
Whether or not this variable is computing any second derivatives.
const VariablePhiValue & phiFace() const
Definition: Assembly.h:1295
virtual const FieldVariablePhiValue & phiFace() const =0
Return the variable&#39;s shape functions on an element face.
virtual const FieldVariablePhiGradient & gradPhiFace() const =0
Return the gradients of the variable&#39;s shape functions on an element face.
const VariablePhiGradient & gradPhiFace() const
Definition: Assembly.h:1297

◆ copyFaceShapes() [2/2]

void Assembly::copyFaceShapes ( unsigned int  var)

Definition at line 3041 of file Assembly.C.

3042 {
3043  auto & v = _sys.getVariable(_tid, var);
3044  if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_STANDARD)
3045  {
3046  auto & v = _sys.getActualFieldVariable<Real>(_tid, var);
3047  copyFaceShapes(v);
3048  }
3049  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY)
3050  {
3051  auto & v = _sys.getActualFieldVariable<RealEigenVector>(_tid, var);
3052  copyFaceShapes(v);
3053  }
3054  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3055  {
3056  auto & v = _sys.getActualFieldVariable<RealVectorValue>(_tid, var);
3057  copyFaceShapes(v);
3058  if (v.computingCurl())
3059  _vector_curl_phi_face.shallowCopy(v.curlPhi());
3060  if (v.computingDiv())
3061  _vector_div_phi_face.shallowCopy(v.divPhi());
3062  }
3063  else
3064  mooseError("Unsupported variable field type!");
3065 }
SystemBase & _sys
Definition: Assembly.h:2272
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:333
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
VectorVariablePhiDivergence _vector_div_phi_face
Definition: Assembly.h:2690
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void copyFaceShapes(MooseVariableField< T > &v)
Definition: Assembly.C:3032
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
Definition: MooseTypes.h:146
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:90
VectorVariablePhiCurl _vector_curl_phi_face
Definition: Assembly.h:2689
MooseVariableField< T > & getActualFieldVariable(THREAD_ID tid, const std::string &var_name)
Returns a field variable pointer - this includes finite volume variables.
Definition: SystemBase.C:118

◆ copyNeighborShapes() [1/2]

template<typename T >
void Assembly::copyNeighborShapes ( MooseVariableField< T > &  v)

Definition at line 3069 of file Assembly.C.

Referenced by copyNeighborShapes().

3070 {
3071  if (v.usesPhiNeighbor())
3072  {
3073  phiFaceNeighbor(v).shallowCopy(v.phiFaceNeighbor());
3074  phiNeighbor(v).shallowCopy(v.phiNeighbor());
3075  }
3076  if (v.usesGradPhiNeighbor())
3077  {
3078  gradPhiFaceNeighbor(v).shallowCopy(v.gradPhiFaceNeighbor());
3079  gradPhiNeighbor(v).shallowCopy(v.gradPhiNeighbor());
3080  }
3081  if (v.usesSecondPhiNeighbor())
3082  {
3083  secondPhiFaceNeighbor(v).shallowCopy(v.secondPhiFaceNeighbor());
3084  secondPhiNeighbor(v).shallowCopy(v.secondPhiNeighbor());
3085  }
3086 }
const VariablePhiGradient & gradPhiFaceNeighbor(const MooseVariableField< Real > &) const
Definition: Assembly.h:1324
virtual const FieldVariablePhiGradient & gradPhiNeighbor() const =0
Return the gradients of the variable&#39;s shape functions on a neighboring element.
const VariablePhiSecond & secondPhiNeighbor(const MooseVariableField< Real > &) const
Definition: Assembly.h:1315
const VariablePhiValue & phiFaceNeighbor(const MooseVariableField< Real > &) const
Definition: Assembly.h:1320
const VariablePhiValue & phiNeighbor(const MooseVariableField< Real > &) const
Definition: Assembly.h:1307
virtual const FieldVariablePhiValue & phiNeighbor() const =0
Return the variable&#39;s shape functions on a neighboring element.
virtual const FieldVariablePhiValue & phiFaceNeighbor() const =0
Return the variable&#39;s shape functions on a neighboring element face.
virtual const FieldVariablePhiSecond & secondPhiFaceNeighbor() const =0
Return the rank-2 tensor of second derivatives of the variable&#39;s shape functions on a neighboring ele...
bool usesPhiNeighbor() const
Whether or not this variable is actually using the shape function value.
virtual bool usesSecondPhiNeighbor() const =0
Whether or not this variable is actually using the shape function second derivatives.
virtual const FieldVariablePhiSecond & secondPhiNeighbor() const =0
Return the rank-2 tensor of second derivatives of the variable&#39;s shape functions on a neighboring ele...
virtual const FieldVariablePhiGradient & gradPhiFaceNeighbor() const =0
Return the gradients of the variable&#39;s shape functions on a neighboring element face.
const VariablePhiGradient & gradPhiNeighbor(const MooseVariableField< Real > &) const
Definition: Assembly.h:1311
bool usesGradPhiNeighbor() const
Whether or not this variable is actually using the shape function gradient.
const VariablePhiSecond & secondPhiFaceNeighbor(const MooseVariableField< Real > &) const
Definition: Assembly.h:1328

◆ copyNeighborShapes() [2/2]

void Assembly::copyNeighborShapes ( unsigned int  var)

Definition at line 3089 of file Assembly.C.

3090 {
3091  auto & v = _sys.getVariable(_tid, var);
3092  if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_STANDARD)
3093  {
3094  auto & v = _sys.getActualFieldVariable<Real>(_tid, var);
3095  copyNeighborShapes(v);
3096  }
3097  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY)
3098  {
3099  auto & v = _sys.getActualFieldVariable<RealEigenVector>(_tid, var);
3100  copyNeighborShapes(v);
3101  }
3102  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3103  {
3104  auto & v = _sys.getActualFieldVariable<RealVectorValue>(_tid, var);
3105  copyNeighborShapes(v);
3106  }
3107  else
3108  mooseError("Unsupported variable field type!");
3109 }
SystemBase & _sys
Definition: Assembly.h:2272
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:333
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
Definition: MooseTypes.h:146
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:90
void copyNeighborShapes(MooseVariableField< T > &v)
Definition: Assembly.C:3069
MooseVariableField< T > & getActualFieldVariable(THREAD_ID tid, const std::string &var_name)
Returns a field variable pointer - this includes finite volume variables.
Definition: SystemBase.C:118

◆ copyShapes() [1/2]

template<typename T >
void Assembly::copyShapes ( MooseVariableField< T > &  v)

Definition at line 2995 of file Assembly.C.

Referenced by copyShapes().

2996 {
2997  phi(v).shallowCopy(v.phi());
2998  gradPhi(v).shallowCopy(v.gradPhi());
2999  if (v.computingSecond())
3000  secondPhi(v).shallowCopy(v.secondPhi());
3001 }
virtual const FieldVariablePhiValue & phi() const =0
Return the variable&#39;s elemental shape functions.
const VariablePhiSecond & secondPhi() const
Definition: Assembly.h:1289
const VariablePhiValue & phi() const
Definition: Assembly.h:1280
const VariablePhiGradient & gradPhi() const
Definition: Assembly.h:1287
virtual const FieldVariablePhiSecond & secondPhi() const =0
Return the rank-2 tensor of second derivatives of the variable&#39;s elemental shape functions.
virtual bool computingSecond() const =0
Whether or not this variable is computing any second derivatives.
virtual const FieldVariablePhiGradient & gradPhi() const =0
Return the gradients of the variable&#39;s elemental shape functions.

◆ copyShapes() [2/2]

void Assembly::copyShapes ( unsigned int  var)

Definition at line 3004 of file Assembly.C.

3005 {
3006  auto & v = _sys.getVariable(_tid, var);
3007  if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_STANDARD)
3008  {
3009  auto & v = _sys.getActualFieldVariable<Real>(_tid, var);
3010  copyShapes(v);
3011  }
3012  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY)
3013  {
3014  auto & v = _sys.getActualFieldVariable<RealEigenVector>(_tid, var);
3015  copyShapes(v);
3016  }
3017  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3018  {
3019  auto & v = _sys.getActualFieldVariable<RealVectorValue>(_tid, var);
3020  copyShapes(v);
3021  if (v.computingCurl())
3022  curlPhi(v).shallowCopy(v.curlPhi());
3023  if (v.computingDiv())
3024  divPhi(v).shallowCopy(v.divPhi());
3025  }
3026  else
3027  mooseError("Unsupported variable field type!");
3028 }
void copyShapes(MooseVariableField< T > &v)
Definition: Assembly.C:2995
SystemBase & _sys
Definition: Assembly.h:2272
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:333
const VectorVariablePhiDivergence & divPhi(const MooseVariableField< RealVectorValue > &) const
Definition: Assembly.h:1349
const VectorVariablePhiCurl & curlPhi(const MooseVariableField< RealVectorValue > &) const
Definition: Assembly.h:1345
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
Definition: MooseTypes.h:146
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:90
MooseVariableField< T > & getActualFieldVariable(THREAD_ID tid, const std::string &var_name)
Returns a field variable pointer - this includes finite volume variables.
Definition: SystemBase.C:118

◆ couplingEntries() [1/2]

std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *> >& Assembly::couplingEntries ( )
inline

Definition at line 1254 of file Assembly.h.

Referenced by MortarConstraint::computeJacobian().

1255  {
1256  return _cm_ff_entry;
1257  }
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291

◆ couplingEntries() [2/2]

const std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *> >& Assembly::couplingEntries ( ) const
inline

Definition at line 1259 of file Assembly.h.

1260  {
1261  return _cm_ff_entry;
1262  }
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291

◆ createQRules()

void Assembly::createQRules ( QuadratureType  type,
Order  order,
Order  volume_order,
Order  face_order,
SubdomainID  block,
bool  allow_negative_qweights = true 
)

Creates block-specific volume, face and arbitrary qrules based on the orders and the flag of whether or not to allow negative qweights passed in.

Any quadrature rules specified using this function override those created via in the non-block-specific/global createQRules function. order is used for arbitrary volume quadrature rules, while volume_order and face_order are for elem and face quadrature respectively.

Definition at line 617 of file Assembly.C.

Referenced by bumpAllQRuleOrder(), and bumpVolumeQRuleOrder().

623 {
624  auto & qvec = _qrules[block];
625  unsigned int ndims = _mesh_dimension + 1; // must account for 0-dimensional quadrature.
626  if (qvec.size() != ndims)
627  qvec.resize(ndims);
628 
629  for (unsigned int i = 0; i < qvec.size(); i++)
630  {
631  int dim = i;
632  auto & q = qvec[dim];
633  q.vol = QBase::build(type, dim, volume_order);
634  q.vol->allow_rules_with_negative_weights = allow_negative_qweights;
635  q.face = QBase::build(type, dim - 1, face_order);
636  q.face->allow_rules_with_negative_weights = allow_negative_qweights;
637  q.fv_face = QBase::build(QMONOMIAL, dim - 1, CONSTANT);
638  q.fv_face->allow_rules_with_negative_weights = allow_negative_qweights;
639  q.neighbor = std::make_unique<ArbitraryQuadrature>(dim - 1, face_order);
640  q.neighbor->allow_rules_with_negative_weights = allow_negative_qweights;
641  q.arbitrary_vol = std::make_unique<ArbitraryQuadrature>(dim, order);
642  q.arbitrary_vol->allow_rules_with_negative_weights = allow_negative_qweights;
643  q.arbitrary_face = std::make_unique<ArbitraryQuadrature>(dim - 1, face_order);
644  q.arbitrary_face->allow_rules_with_negative_weights = allow_negative_qweights;
645  }
646 
647  delete _qrule_msm;
648  _custom_mortar_qrule = false;
649  _qrule_msm = QBase::build(type, _mesh_dimension - 1, face_order).release();
650  _qrule_msm->allow_rules_with_negative_weights = allow_negative_qweights;
651  _fe_msm->attach_quadrature_rule(_qrule_msm);
652 }
bool allow_rules_with_negative_weights
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
Definition: Assembly.h:2541
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::unordered_map< SubdomainID, std::vector< QRules > > _qrules
Holds quadrature rules for each dimension.
Definition: Assembly.h:2419
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition: Assembly.h:2546
bool _custom_mortar_qrule
Flag specifying whether a custom quadrature rule has been specified for mortar segment mesh...
Definition: Assembly.h:2548

◆ curlPhi() [1/2]

const VectorVariablePhiCurl& Assembly::curlPhi ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1345 of file Assembly.h.

Referenced by copyShapes().

1346  {
1347  return _vector_curl_phi;
1348  }
VectorVariablePhiCurl _vector_curl_phi
Definition: Assembly.h:2683

◆ curlPhi() [2/2]

VectorVariablePhiCurl& Assembly::curlPhi ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1466 of file Assembly.h.

1467  {
1468  return _vector_curl_phi;
1469  }
VectorVariablePhiCurl _vector_curl_phi
Definition: Assembly.h:2683

◆ curlPhiFace() [1/2]

const VectorVariablePhiCurl& Assembly::curlPhiFace ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1366 of file Assembly.h.

1367  {
1368  return _vector_curl_phi_face;
1369  }
VectorVariablePhiCurl _vector_curl_phi_face
Definition: Assembly.h:2689

◆ curlPhiFace() [2/2]

VectorVariablePhiCurl& Assembly::curlPhiFace ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1487 of file Assembly.h.

1488  {
1489  return _vector_curl_phi_face;
1490  }
VectorVariablePhiCurl _vector_curl_phi_face
Definition: Assembly.h:2689

◆ curlPhiFaceNeighbor() [1/2]

const VectorVariablePhiCurl& Assembly::curlPhiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1414 of file Assembly.h.

1415  {
1417  }
VectorVariablePhiCurl _vector_curl_phi_face_neighbor
Definition: Assembly.h:2701

◆ curlPhiFaceNeighbor() [2/2]

VectorVariablePhiCurl& Assembly::curlPhiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1528 of file Assembly.h.

1529  {
1531  }
VectorVariablePhiCurl _vector_curl_phi_face_neighbor
Definition: Assembly.h:2701

◆ curlPhiNeighbor() [1/2]

const VectorVariablePhiCurl& Assembly::curlPhiNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1389 of file Assembly.h.

1390  {
1392  }
VectorVariablePhiCurl _vector_curl_phi_neighbor
Definition: Assembly.h:2695

◆ curlPhiNeighbor() [2/2]

VectorVariablePhiCurl& Assembly::curlPhiNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1508 of file Assembly.h.

1509  {
1511  }
VectorVariablePhiCurl _vector_curl_phi_neighbor
Definition: Assembly.h:2695

◆ currentBoundaryID()

const BoundaryID& Assembly::currentBoundaryID ( ) const
inline

Return the current boundary ID.

Definition at line 390 of file Assembly.h.

390 { return _current_boundary_id; }
BoundaryID _current_boundary_id
The current boundary ID.
Definition: Assembly.h:2560

◆ currentNeighborSubdomainID()

const SubdomainID& Assembly::currentNeighborSubdomainID ( ) const
inline

Return the current subdomain ID.

Definition at line 458 of file Assembly.h.

SubdomainID _current_neighbor_subdomain_id
The current neighbor subdomain ID.
Definition: Assembly.h:2572

◆ currentSubdomainID()

const SubdomainID& Assembly::currentSubdomainID ( ) const
inline

Return the current subdomain ID.

Definition at line 380 of file Assembly.h.

380 { return _current_subdomain_id; }
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition: Assembly.h:2558

◆ divPhi() [1/2]

const VectorVariablePhiDivergence& Assembly::divPhi ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1349 of file Assembly.h.

Referenced by copyShapes().

1350  {
1351  return _vector_div_phi;
1352  }
VectorVariablePhiDivergence _vector_div_phi
Definition: Assembly.h:2684

◆ divPhi() [2/2]

VectorVariablePhiDivergence& Assembly::divPhi ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1470 of file Assembly.h.

1471  {
1472  return _vector_div_phi;
1473  }
VectorVariablePhiDivergence _vector_div_phi
Definition: Assembly.h:2684

◆ divPhiFace() [1/2]

const VectorVariablePhiDivergence& Assembly::divPhiFace ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1370 of file Assembly.h.

1371  {
1372  return _vector_div_phi_face;
1373  }
VectorVariablePhiDivergence _vector_div_phi_face
Definition: Assembly.h:2690

◆ divPhiFace() [2/2]

VectorVariablePhiDivergence& Assembly::divPhiFace ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1491 of file Assembly.h.

1492  {
1493  return _vector_div_phi_face;
1494  }
VectorVariablePhiDivergence _vector_div_phi_face
Definition: Assembly.h:2690

◆ divPhiFaceNeighbor() [1/2]

const VectorVariablePhiDivergence& Assembly::divPhiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1419 of file Assembly.h.

1420  {
1422  }
VectorVariablePhiDivergence _vector_div_phi_face_neighbor
Definition: Assembly.h:2702

◆ divPhiFaceNeighbor() [2/2]

VectorVariablePhiDivergence& Assembly::divPhiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1532 of file Assembly.h.

1533  {
1535  }
VectorVariablePhiDivergence _vector_div_phi_face_neighbor
Definition: Assembly.h:2702

◆ divPhiNeighbor() [1/2]

const VectorVariablePhiDivergence& Assembly::divPhiNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1394 of file Assembly.h.

1395  {
1396  return _vector_div_phi_neighbor;
1397  }
VectorVariablePhiDivergence _vector_div_phi_neighbor
Definition: Assembly.h:2696

◆ divPhiNeighbor() [2/2]

VectorVariablePhiDivergence& Assembly::divPhiNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1512 of file Assembly.h.

1513  {
1514  return _vector_div_phi_neighbor;
1515  }
VectorVariablePhiDivergence _vector_div_phi_neighbor
Definition: Assembly.h:2696

◆ elem()

const Elem* const& Assembly::elem ( ) const
inline

◆ elementVolume()

Real Assembly::elementVolume ( const Elem elem) const

On-demand computation of volume element accounting for RZ/RSpherical.

Definition at line 3782 of file Assembly.C.

Referenced by reinitLowerDElem(), and reinitNeighborLowerDElem().

3783 {
3784  FEType fe_type(elem->default_order(), LAGRANGE);
3785  std::unique_ptr<FEBase> fe(FEBase::build(elem->dim(), fe_type));
3786 
3787  // references to the quadrature points and weights
3788  const std::vector<Real> & JxW = fe->get_JxW();
3789  const std::vector<Point> & q_points = fe->get_xyz();
3790 
3791  // The default quadrature rule should integrate the mass matrix,
3792  // thus it should be plenty to compute the volume
3793  QGauss qrule(elem->dim(), fe_type.default_quadrature_order());
3794  fe->attach_quadrature_rule(&qrule);
3795  fe->reinit(elem);
3796 
3797  // perform a sanity check to ensure that size of quad rule and size of q_points is
3798  // identical
3799  mooseAssert(qrule.n_points() == q_points.size(),
3800  "The number of points in the quadrature rule doesn't match the number of passed-in "
3801  "points in Assembly::setCoordinateTransformation");
3802 
3803  // compute the coordinate transformation
3804  Real vol = 0;
3805  for (unsigned int qp = 0; qp < qrule.n_points(); ++qp)
3806  {
3807  Real coord;
3808  coordTransformFactor(_subproblem, elem->subdomain_id(), q_points[qp], coord);
3809  vol += JxW[qp] * coord;
3810  }
3811  return vol;
3812 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
LAGRANGE
std::unique_ptr< FEGenericBase< Real > > build(const unsigned int dim, const FEType &fet)
void coordTransformFactor(const SubProblem &s, const SubdomainID sub_id, const P &point, C &factor, const SubdomainID neighbor_sub_id)
Computes a conversion multiplier for use when computing integraals for the current coordinate system ...
Definition: Assembly.C:41
SubProblem & _subproblem
Definition: Assembly.h:2273
const MooseArray< Real > & JxW() const
Returns the reference to the transformed jacobian weights.
Definition: Assembly.h:248
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
subdomain_id_type subdomain_id() const
virtual unsigned short dim() const=0
virtual Order default_order() const=0

◆ elemVolume()

const Real& Assembly::elemVolume ( ) const
inline

Returns the reference to the current element volume.

Returns
A reference. Make sure to store this as a reference!

Definition at line 401 of file Assembly.h.

Referenced by FVElementalKernel::computeJacobian(), FVScalarLagrangeMultiplierConstraint::computeOffDiagJacobian(), FVScalarLagrangeMultiplierConstraint::computeResidual(), FVElementalKernel::computeResidual(), FVScalarLagrangeMultiplierConstraint::computeResidualAndJacobian(), and FVElementalKernel::computeResidualAndJacobian().

401 { return _current_elem_volume; }
Real _current_elem_volume
Volume of the current element.
Definition: Assembly.h:2562

◆ extraElemID()

const dof_id_type& Assembly::extraElemID ( unsigned int  id) const
inline

Returns an integer ID of the current element given the index associated with the integer.

Definition at line 339 of file Assembly.h.

340  {
341  mooseAssert(id < _extra_elem_ids.size(), "An invalid extra element integer id");
342  return _extra_elem_ids[id];
343  }
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition: Assembly.h:2497

◆ extraElemIDNeighbor()

const dof_id_type& Assembly::extraElemIDNeighbor ( unsigned int  id) const
inline

Returns an integer ID of the current element given the index associated with the integer.

Definition at line 348 of file Assembly.h.

349  {
350  mooseAssert(id < _neighbor_extra_elem_ids.size(), "An invalid extra element integer id");
351  return _neighbor_extra_elem_ids[id];
352  }
std::vector< dof_id_type > _neighbor_extra_elem_ids
Extra element IDs of neighbor.
Definition: Assembly.h:2499

◆ feADGradPhi() [1/2]

template<typename OutputType >
const ADTemplateVariablePhiGradient<OutputType>& Assembly::feADGradPhi ( FEType  type) const
inline

Definition at line 1593 of file Assembly.h.

1594  {
1595  return _ad_grad_phi_data[type];
1596  }
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data
Definition: Assembly.h:2740

◆ feADGradPhi() [2/2]

template<>
const ADTemplateVariablePhiGradient<RealVectorValue>& Assembly::feADGradPhi ( FEType  type) const
inline

Definition at line 2901 of file Assembly.h.

2902 {
2903  return _ad_vector_grad_phi_data[type];
2904 }
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
Definition: Assembly.h:2741

◆ feADGradPhiFace() [1/2]

template<typename OutputType >
const ADTemplateVariablePhiGradient<OutputType>& Assembly::feADGradPhiFace ( FEType  type) const
inline

Definition at line 1634 of file Assembly.h.

1635  {
1636  return _ad_grad_phi_data_face[type];
1637  }
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data_face
Definition: Assembly.h:2742

◆ feADGradPhiFace() [2/2]

template<>
const ADTemplateVariablePhiGradient<RealVectorValue>& Assembly::feADGradPhiFace ( FEType  type) const
inline

Definition at line 2908 of file Assembly.h.

2909 {
2910  return _ad_vector_grad_phi_data_face[type];
2911 }
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data_face
Definition: Assembly.h:2744

◆ feCurlPhi() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiCurl& Assembly::feCurlPhi ( FEType  type) const
inline

Definition at line 1694 of file Assembly.h.

1695  {
1696  _need_curl.insert(type);
1697  buildFE(type);
1698  return _fe_shape_data[type]->_curl_phi;
1699  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:266
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2725
std::set< FEType > _need_curl
Definition: Assembly.h:2827

◆ feCurlPhi() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiCurl& Assembly::feCurlPhi ( FEType  type) const

◆ feCurlPhi() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiCurl& Assembly::feCurlPhi ( FEType  type) const

Definition at line 4729 of file Assembly.C.

4730 {
4731  _need_curl.insert(type);
4732  buildVectorFE(type);
4733  return _vector_fe_shape_data[type]->_curl_phi;
4734 }
std::set< FEType > _need_curl
Definition: Assembly.h:2827
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:453
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data
Shape function values, gradients, second derivatives for each vector FE type.
Definition: Assembly.h:2733

◆ feCurlPhiFace() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiCurl& Assembly::feCurlPhiFace ( FEType  type) const
inline

Definition at line 1702 of file Assembly.h.

1703  {
1704  _need_curl.insert(type);
1705  buildFaceFE(type);
1706  return _fe_shape_data_face[type]->_curl_phi;
1707  }
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:292
std::set< FEType > _need_curl
Definition: Assembly.h:2827
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2726

◆ feCurlPhiFace() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiCurl& Assembly::feCurlPhiFace ( FEType  type) const

◆ feCurlPhiFace() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiCurl& Assembly::feCurlPhiFace ( FEType  type) const

Definition at line 4738 of file Assembly.C.

4739 {
4740  _need_curl.insert(type);
4741  buildVectorFaceFE(type);
4742 
4743  // If we're building for a face we probably need to build for a
4744  // neighbor while _need_curl is set;
4745  // onInterface/reinitNeighbor/etc don't distinguish
4747 
4748  return _vector_fe_shape_data_face[type]->_curl_phi;
4749 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2734
std::set< FEType > _need_curl
Definition: Assembly.h:2827
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:484
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:544

◆ feCurlPhiFaceNeighbor() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiCurl& Assembly::feCurlPhiFaceNeighbor ( FEType  type) const
inline

Definition at line 1718 of file Assembly.h.

1719  {
1720  _need_curl.insert(type);
1721  buildFaceNeighborFE(type);
1722  return _fe_shape_data_face_neighbor[type]->_curl_phi;
1723  }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2728
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:336
std::set< FEType > _need_curl
Definition: Assembly.h:2827

◆ feCurlPhiFaceNeighbor() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiCurl& Assembly::feCurlPhiFaceNeighbor ( FEType  type) const

◆ feCurlPhiFaceNeighbor() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiCurl& Assembly::feCurlPhiFaceNeighbor ( FEType  type) const

Definition at line 4762 of file Assembly.C.

4763 {
4764  _need_curl.insert(type);
4766 
4767  return _vector_fe_shape_data_face_neighbor[type]->_curl_phi;
4768 }
std::set< FEType > _need_curl
Definition: Assembly.h:2827
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2736
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:544

◆ feCurlPhiNeighbor() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiCurl& Assembly::feCurlPhiNeighbor ( FEType  type) const
inline

Definition at line 1710 of file Assembly.h.

1711  {
1712  _need_curl.insert(type);
1713  buildNeighborFE(type);
1714  return _fe_shape_data_neighbor[type]->_curl_phi;
1715  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:314
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2727
std::set< FEType > _need_curl
Definition: Assembly.h:2827

◆ feCurlPhiNeighbor() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiCurl& Assembly::feCurlPhiNeighbor ( FEType  type) const

◆ feCurlPhiNeighbor() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiCurl& Assembly::feCurlPhiNeighbor ( FEType  type) const

Definition at line 4753 of file Assembly.C.

4754 {
4755  _need_curl.insert(type);
4756  buildVectorNeighborFE(type);
4757  return _vector_fe_shape_data_neighbor[type]->_curl_phi;
4758 }
std::set< FEType > _need_curl
Definition: Assembly.h:2827
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:514
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2735

◆ feDivPhi() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiDivergence& Assembly::feDivPhi ( FEType  type) const
inline

Definition at line 1726 of file Assembly.h.

1727  {
1728  buildFE(type);
1729  return _fe_shape_data[type]->_div_phi;
1730  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:266
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2725

◆ feDivPhi() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiDivergence& Assembly::feDivPhi ( FEType  type) const

◆ feDivPhi() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiDivergence& Assembly::feDivPhi ( FEType  type) const

Definition at line 4772 of file Assembly.C.

4773 {
4774  _need_div.insert(type);
4775  buildVectorFE(type);
4776  return _vector_fe_shape_data[type]->_div_phi;
4777 }
std::set< FEType > _need_div
Definition: Assembly.h:2828
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:453
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data
Shape function values, gradients, second derivatives for each vector FE type.
Definition: Assembly.h:2733

◆ feDivPhiFace() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiDivergence& Assembly::feDivPhiFace ( FEType  type) const
inline

Definition at line 1733 of file Assembly.h.

1734  {
1735  buildFaceFE(type);
1736  return _fe_shape_data_face[type]->_div_phi;
1737  }
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:292
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2726

◆ feDivPhiFace() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiDivergence& Assembly::feDivPhiFace ( FEType  type) const

◆ feDivPhiFace() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiDivergence& Assembly::feDivPhiFace ( FEType  type) const

Definition at line 4781 of file Assembly.C.

4782 {
4783  _need_face_div.insert(type);
4784  buildVectorFaceFE(type);
4785 
4786  // If we're building for a face we probably need to build for a
4787  // neighbor while _need_face_div is set;
4788  // onInterface/reinitNeighbor/etc don't distinguish
4790 
4791  return _vector_fe_shape_data_face[type]->_div_phi;
4792 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2734
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:484
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:544
std::set< FEType > _need_face_div
Definition: Assembly.h:2829

◆ feDivPhiFaceNeighbor() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiDivergence& Assembly::feDivPhiFaceNeighbor ( FEType  type) const
inline

Definition at line 1749 of file Assembly.h.

1750  {
1751  buildFaceNeighborFE(type);
1752  return _fe_shape_data_face_neighbor[type]->_div_phi;
1753  }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2728
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:336

◆ feDivPhiFaceNeighbor() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiDivergence& Assembly::feDivPhiFaceNeighbor ( FEType  type) const

◆ feDivPhiFaceNeighbor() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiDivergence& Assembly::feDivPhiFaceNeighbor ( FEType  type) const

Definition at line 4805 of file Assembly.C.

4806 {
4807  _need_face_neighbor_div.insert(type);
4809  return _vector_fe_shape_data_face_neighbor[type]->_div_phi;
4810 }
std::set< FEType > _need_face_neighbor_div
Definition: Assembly.h:2831
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2736
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:544

◆ feDivPhiNeighbor() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiDivergence& Assembly::feDivPhiNeighbor ( FEType  type) const
inline

Definition at line 1741 of file Assembly.h.

1742  {
1743  buildNeighborFE(type);
1744  return _fe_shape_data_neighbor[type]->_div_phi;
1745  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:314
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2727

◆ feDivPhiNeighbor() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiDivergence& Assembly::feDivPhiNeighbor ( FEType  type) const

◆ feDivPhiNeighbor() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiDivergence& Assembly::feDivPhiNeighbor ( FEType  type) const

Definition at line 4796 of file Assembly.C.

4797 {
4798  _need_neighbor_div.insert(type);
4799  buildVectorNeighborFE(type);
4800  return _vector_fe_shape_data_neighbor[type]->_div_phi;
4801 }
std::set< FEType > _need_neighbor_div
Definition: Assembly.h:2830
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:514
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2735

◆ feDualPhiLower() [1/3]

template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValue & Assembly::feDualPhiLower ( FEType  type) const

Definition at line 2877 of file Assembly.h.

2878 {
2879  buildLowerDDualFE(type);
2880  return _fe_shape_data_dual_lower[type]->_phi;
2881 }
void buildLowerDDualFE(FEType type) const
Definition: Assembly.C:382
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
Definition: Assembly.h:2730

◆ feDualPhiLower() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::feDualPhiLower ( FEType  type) const

◆ feDualPhiLower() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::feDualPhiLower ( FEType  type) const

Definition at line 4624 of file Assembly.C.

4625 {
4627  return _vector_fe_shape_data_dual_lower[type]->_phi;
4628 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_dual_lower
Definition: Assembly.h:2738
void buildVectorDualLowerDFE(FEType type) const
Definition: Assembly.C:428

◆ feGradDualPhiLower() [1/3]

template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradient & Assembly::feGradDualPhiLower ( FEType  type) const

Definition at line 2893 of file Assembly.h.

2894 {
2895  buildLowerDDualFE(type);
2896  return _fe_shape_data_dual_lower[type]->_grad_phi;
2897 }
void buildLowerDDualFE(FEType type) const
Definition: Assembly.C:382
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
Definition: Assembly.h:2730

◆ feGradDualPhiLower() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradDualPhiLower ( FEType  type) const

◆ feGradDualPhiLower() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradDualPhiLower ( FEType  type) const

Definition at line 4640 of file Assembly.C.

4641 {
4643  return _vector_fe_shape_data_dual_lower[type]->_grad_phi;
4644 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_dual_lower
Definition: Assembly.h:2738
void buildVectorDualLowerDFE(FEType type) const
Definition: Assembly.C:428

◆ feGradPhi() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiGradient& Assembly::feGradPhi ( FEType  type) const
inline

Definition at line 1586 of file Assembly.h.

1587  {
1588  buildFE(type);
1589  return _fe_shape_data[type]->_grad_phi;
1590  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:266
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2725

◆ feGradPhi() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradPhi ( FEType  type) const

◆ feGradPhi() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradPhi ( FEType  type) const

Definition at line 4599 of file Assembly.C.

4600 {
4601  buildVectorFE(type);
4602  return _vector_fe_shape_data[type]->_grad_phi;
4603 }
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:453
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data
Shape function values, gradients, second derivatives for each vector FE type.
Definition: Assembly.h:2733

◆ feGradPhiFace() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiGradient& Assembly::feGradPhiFace ( FEType  type) const
inline

Definition at line 1627 of file Assembly.h.

1628  {
1629  buildFaceFE(type);
1630  return _fe_shape_data_face[type]->_grad_phi;
1631  }
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:292
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2726

◆ feGradPhiFace() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradPhiFace ( FEType  type) const

◆ feGradPhiFace() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradPhiFace ( FEType  type) const

Definition at line 4656 of file Assembly.C.

4657 {
4658  buildVectorFaceFE(type);
4659  return _vector_fe_shape_data_face[type]->_grad_phi;
4660 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2734
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:484

◆ feGradPhiFaceNeighbor() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiGradient& Assembly::feGradPhiFaceNeighbor ( FEType  type) const
inline

Definition at line 1678 of file Assembly.h.

1679  {
1680  buildFaceNeighborFE(type);
1681  return _fe_shape_data_face_neighbor[type]->_grad_phi;
1682  }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2728
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:336

◆ feGradPhiFaceNeighbor() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradPhiFaceNeighbor ( FEType  type) const

◆ feGradPhiFaceNeighbor() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradPhiFaceNeighbor ( FEType  type) const

Definition at line 4712 of file Assembly.C.

4713 {
4715  return _vector_fe_shape_data_face_neighbor[type]->_grad_phi;
4716 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2736
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:544

◆ feGradPhiLower() [1/3]

template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradient & Assembly::feGradPhiLower ( FEType  type) const

Definition at line 2885 of file Assembly.h.

2886 {
2887  buildLowerDFE(type);
2888  return _fe_shape_data_lower[type]->_grad_phi;
2889 }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_lower
Definition: Assembly.h:2729
void buildLowerDFE(FEType type) const
Build FEs for a lower dimensional element with a type.
Definition: Assembly.C:358

◆ feGradPhiLower() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradPhiLower ( FEType  type) const

◆ feGradPhiLower() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradPhiLower ( FEType  type) const

Definition at line 4632 of file Assembly.C.

4633 {
4634  buildVectorLowerDFE(type);
4635  return _vector_fe_shape_data_lower[type]->_grad_phi;
4636 }
void buildVectorLowerDFE(FEType type) const
Build Vector FEs for a lower dimensional element with a type.
Definition: Assembly.C:403
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_lower
Definition: Assembly.h:2737

◆ feGradPhiNeighbor() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiGradient& Assembly::feGradPhiNeighbor ( FEType  type) const
inline

Definition at line 1655 of file Assembly.h.

1656  {
1657  buildNeighborFE(type);
1658  return _fe_shape_data_neighbor[type]->_grad_phi;
1659  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:314
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2727

◆ feGradPhiNeighbor() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradPhiNeighbor ( FEType  type) const

◆ feGradPhiNeighbor() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiGradient& Assembly::feGradPhiNeighbor ( FEType  type) const

Definition at line 4687 of file Assembly.C.

4688 {
4689  buildVectorNeighborFE(type);
4690  return _vector_fe_shape_data_neighbor[type]->_grad_phi;
4691 }
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:514
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2735

◆ fePhi() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiValue& Assembly::fePhi ( FEType  type) const
inline

Definition at line 1579 of file Assembly.h.

1580  {
1581  buildFE(type);
1582  return _fe_shape_data[type]->_phi;
1583  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:266
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2725

◆ fePhi() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::fePhi ( FEType  type) const

◆ fePhi() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::fePhi ( FEType  type) const

Definition at line 4591 of file Assembly.C.

4592 {
4593  buildVectorFE(type);
4594  return _vector_fe_shape_data[type]->_phi;
4595 }
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:453
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data
Shape function values, gradients, second derivatives for each vector FE type.
Definition: Assembly.h:2733

◆ fePhiFace() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiValue& Assembly::fePhiFace ( FEType  type) const
inline

Definition at line 1620 of file Assembly.h.

1621  {
1622  buildFaceFE(type);
1623  return _fe_shape_data_face[type]->_phi;
1624  }
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:292
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2726

◆ fePhiFace() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::fePhiFace ( FEType  type) const

◆ fePhiFace() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::fePhiFace ( FEType  type) const

Definition at line 4648 of file Assembly.C.

4649 {
4650  buildVectorFaceFE(type);
4651  return _vector_fe_shape_data_face[type]->_phi;
4652 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2734
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:484

◆ fePhiFaceNeighbor() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiValue& Assembly::fePhiFaceNeighbor ( FEType  type) const
inline

Definition at line 1670 of file Assembly.h.

1671  {
1672  buildFaceNeighborFE(type);
1673  return _fe_shape_data_face_neighbor[type]->_phi;
1674  }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2728
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:336

◆ fePhiFaceNeighbor() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::fePhiFaceNeighbor ( FEType  type) const

◆ fePhiFaceNeighbor() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::fePhiFaceNeighbor ( FEType  type) const

Definition at line 4704 of file Assembly.C.

4705 {
4707  return _vector_fe_shape_data_face_neighbor[type]->_phi;
4708 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2736
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:544

◆ fePhiLower() [1/3]

template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValue & Assembly::fePhiLower ( FEType  type) const

Definition at line 2869 of file Assembly.h.

2870 {
2871  buildLowerDFE(type);
2872  return _fe_shape_data_lower[type]->_phi;
2873 }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_lower
Definition: Assembly.h:2729
void buildLowerDFE(FEType type) const
Build FEs for a lower dimensional element with a type.
Definition: Assembly.C:358

◆ fePhiLower() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::fePhiLower ( FEType  type) const

◆ fePhiLower() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::fePhiLower ( FEType  type) const

Definition at line 4616 of file Assembly.C.

4617 {
4618  buildVectorLowerDFE(type);
4619  return _vector_fe_shape_data_lower[type]->_phi;
4620 }
void buildVectorLowerDFE(FEType type) const
Build Vector FEs for a lower dimensional element with a type.
Definition: Assembly.C:403
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_lower
Definition: Assembly.h:2737

◆ fePhiNeighbor() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiValue& Assembly::fePhiNeighbor ( FEType  type) const
inline

Definition at line 1648 of file Assembly.h.

1649  {
1650  buildNeighborFE(type);
1651  return _fe_shape_data_neighbor[type]->_phi;
1652  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:314
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2727

◆ fePhiNeighbor() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::fePhiNeighbor ( FEType  type) const

◆ fePhiNeighbor() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiValue& Assembly::fePhiNeighbor ( FEType  type) const

Definition at line 4679 of file Assembly.C.

4680 {
4681  buildVectorNeighborFE(type);
4682  return _vector_fe_shape_data_neighbor[type]->_phi;
4683 }
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:514
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2735

◆ feSecondPhi() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiSecond& Assembly::feSecondPhi ( FEType  type) const
inline

Definition at line 1599 of file Assembly.h.

1600  {
1601  _need_second_derivative.insert(type);
1602  buildFE(type);
1603  return _fe_shape_data[type]->_second_phi;
1604  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:266
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2725
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825

◆ feSecondPhi() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiSecond& Assembly::feSecondPhi ( FEType  type) const

◆ feSecondPhi() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiSecond& Assembly::feSecondPhi ( FEType  type) const

Definition at line 4607 of file Assembly.C.

4608 {
4609  _need_second_derivative.insert(type);
4610  buildVectorFE(type);
4611  return _vector_fe_shape_data[type]->_second_phi;
4612 }
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:453
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data
Shape function values, gradients, second derivatives for each vector FE type.
Definition: Assembly.h:2733

◆ feSecondPhiFace() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiSecond& Assembly::feSecondPhiFace ( FEType  type) const
inline

Definition at line 1640 of file Assembly.h.

1641  {
1642  _need_second_derivative.insert(type);
1643  buildFaceFE(type);
1644  return _fe_shape_data_face[type]->_second_phi;
1645  }
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:292
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2726

◆ feSecondPhiFace() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiSecond& Assembly::feSecondPhiFace ( FEType  type) const

◆ feSecondPhiFace() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiSecond& Assembly::feSecondPhiFace ( FEType  type) const

Definition at line 4664 of file Assembly.C.

4665 {
4666  _need_second_derivative.insert(type);
4667  buildVectorFaceFE(type);
4668 
4669  // If we're building for a face we probably need to build for a
4670  // neighbor while _need_second_derivative is set;
4671  // onInterface/reinitNeighbor/etc don't distinguish
4673 
4674  return _vector_fe_shape_data_face[type]->_second_phi;
4675 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2734
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:484
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:544

◆ feSecondPhiFaceNeighbor() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiSecond& Assembly::feSecondPhiFaceNeighbor ( FEType  type) const
inline

Definition at line 1686 of file Assembly.h.

1687  {
1688  _need_second_derivative_neighbor.insert(type);
1689  buildFaceNeighborFE(type);
1690  return _fe_shape_data_face_neighbor[type]->_second_phi;
1691  }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2728
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:336

◆ feSecondPhiFaceNeighbor() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiSecond& Assembly::feSecondPhiFaceNeighbor ( FEType  type) const

◆ feSecondPhiFaceNeighbor() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiSecond& Assembly::feSecondPhiFaceNeighbor ( FEType  type) const

Definition at line 4720 of file Assembly.C.

4721 {
4722  _need_second_derivative_neighbor.insert(type);
4724  return _vector_fe_shape_data_face_neighbor[type]->_second_phi;
4725 }
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2736
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:544

◆ feSecondPhiNeighbor() [1/3]

template<typename OutputType >
const OutputTools<OutputType>::VariablePhiSecond& Assembly::feSecondPhiNeighbor ( FEType  type) const
inline

Definition at line 1662 of file Assembly.h.

1663  {
1664  _need_second_derivative_neighbor.insert(type);
1665  buildNeighborFE(type);
1666  return _fe_shape_data_neighbor[type]->_second_phi;
1667  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:314
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2727
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826

◆ feSecondPhiNeighbor() [2/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiSecond& Assembly::feSecondPhiNeighbor ( FEType  type) const

◆ feSecondPhiNeighbor() [3/3]

template<>
const OutputTools<VectorValue<Real> >::VariablePhiSecond& Assembly::feSecondPhiNeighbor ( FEType  type) const

Definition at line 4695 of file Assembly.C.

4696 {
4697  _need_second_derivative_neighbor.insert(type);
4698  buildVectorNeighborFE(type);
4699  return _vector_fe_shape_data_neighbor[type]->_second_phi;
4700 }
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:514
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2735

◆ fieldScalarCouplingEntries()

const std::vector<std::pair<MooseVariableFieldBase *, MooseVariableScalar *> >& Assembly::fieldScalarCouplingEntries ( ) const
inline

Definition at line 1269 of file Assembly.h.

1270  {
1271  return _cm_fs_entry;
1272  }
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
Entries in the coupling matrix for field variables vs scalar variables.
Definition: Assembly.h:2293

◆ genericQPoints() [1/3]

template<bool is_ad>
const MooseArray<Moose::GenericType<Point, is_ad> >& Assembly::genericQPoints ( ) const

◆ genericQPoints() [2/3]

template<>
const MooseArray<Moose::GenericType<Point, false> >& Assembly::genericQPoints ( ) const

Definition at line 4972 of file Assembly.C.

4973 {
4974  return qPoints();
4975 }
const MooseArray< Point > & qPoints() const
Returns the reference to the quadrature points.
Definition: Assembly.h:230

◆ genericQPoints() [3/3]

template<>
const MooseArray<Moose::GenericType<Point, true> >& Assembly::genericQPoints ( ) const

Definition at line 4979 of file Assembly.C.

4980 {
4981  return adQPoints();
4982 }
const MooseArray< ADPoint > & adQPoints() const
Definition: Assembly.h:356

◆ getFE()

const FEBase* const& Assembly::getFE ( FEType  type,
unsigned int  dim 
) const
inline

Get a reference to a pointer that will contain the current volume FE.

Parameters
typeThe type of FE
dimThe dimension of the current volume
Returns
A reference to the pointer. Make sure to store this as a reference!

Definition at line 124 of file Assembly.h.

Referenced by PointVariableSamplerBase::initialize().

125  {
126  buildFE(type);
127  return constify_ref(_fe[dim][type]);
128  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:266
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2362

◆ getFEFace()

const FEBase* const& Assembly::getFEFace ( FEType  type,
unsigned int  dim 
) const
inline

Get a reference to a pointer that will contain the current "face" FE.

Parameters
typeThe type of FE
dimThe dimension of the current face
Returns
A reference to the pointer. Make sure to store this as a reference!

Definition at line 148 of file Assembly.h.

149  {
150  buildFaceFE(type);
151  return constify_ref(_fe_face[dim][type]);
152  }
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2474
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:292

◆ getFEFaceNeighbor()

const FEBase* const& Assembly::getFEFaceNeighbor ( FEType  type,
unsigned int  dim 
) const
inline

Get a reference to a pointer that will contain the current "neighbor" FE.

Parameters
typeThe type of FE
dimThe dimension of the neighbor face
Returns
A reference to the pointer. Make sure to store this as a reference!

Definition at line 160 of file Assembly.h.

161  {
162  buildFaceNeighborFE(type);
163  return constify_ref(_fe_face_neighbor[dim][type]);
164  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:336
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2507

◆ getFENeighbor()

const FEBase* const& Assembly::getFENeighbor ( FEType  type,
unsigned int  dim 
) const
inline

Get a reference to a pointer that will contain the current 'neighbor' FE.

Parameters
typeThe type of FE
dimThe dimension of the current volume
Returns
A reference to the pointer. Make sure to store this as a reference!

Definition at line 136 of file Assembly.h.

137  {
138  buildNeighborFE(type);
139  return constify_ref(_fe_neighbor[dim][type]);
140  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:314
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2506

◆ getJacobianDiagonal()

DenseVector<Real> Assembly::getJacobianDiagonal ( DenseMatrix< Number > &  ke)
inline

Definition at line 1847 of file Assembly.h.

Referenced by ArrayDGKernel::computeElemNeighJacobian(), Kernel::computeJacobian(), ArrayKernel::computeJacobian(), EigenKernel::computeJacobian(), ArrayIntegratedBC::computeJacobian(), ArrayDGKernel::computeOffDiagElemNeighJacobian(), ArrayKernel::computeOffDiagJacobian(), and ArrayIntegratedBC::computeOffDiagJacobian().

1848  {
1849  unsigned int rows = ke.m();
1850  unsigned int cols = ke.n();
1851  DenseVector<Real> diag(rows);
1852  for (unsigned int i = 0; i < rows; i++)
1853  // % operation is needed to account for cases of no component coupling of array variables
1854  diag(i) = ke(i, i % cols);
1855  return diag;
1856  }
unsigned int m() const
unsigned int n() const

◆ getVectorFE()

const FEVectorBase* const& Assembly::getVectorFE ( FEType  type,
unsigned int  dim 
) const
inline

Get a reference to a pointer that will contain the current volume FEVector.

Parameters
typeThe type of FEVector
dimThe dimension of the current volume
Returns
A reference to the pointer. Make sure to store this as a reference!

Definition at line 172 of file Assembly.h.

173  {
174  buildVectorFE(type);
175  return constify_ref(_vector_fe[dim][type]);
176  }
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension&#39;s actual vector fe objects indexed on type.
Definition: Assembly.h:2364
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:453

◆ getVectorFEFace()

const FEVectorBase* const& Assembly::getVectorFEFace ( FEType  type,
unsigned int  dim 
) const
inline

GetVector a reference to a pointer that will contain the current "face" FE.

Parameters
typeThe type of FE
dimThe dimension of the current face
Returns
A reference to the pointer. Make sure to store this as a reference!

Definition at line 196 of file Assembly.h.

197  {
198  buildVectorFaceFE(type);
199  return constify_ref(_vector_fe_face[dim][type]);
200  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2476
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:484

◆ getVectorFEFaceNeighbor()

const FEVectorBase* const& Assembly::getVectorFEFaceNeighbor ( FEType  type,
unsigned int  dim 
) const
inline

GetVector a reference to a pointer that will contain the current "neighbor" FE.

Parameters
typeThe type of FE
dimThe dimension of the neighbor face
Returns
A reference to the pointer. Make sure to store this as a reference!

Definition at line 208 of file Assembly.h.

209  {
212  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2509
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:544

◆ getVectorFENeighbor()

const FEVectorBase* const& Assembly::getVectorFENeighbor ( FEType  type,
unsigned int  dim 
) const
inline

GetVector a reference to a pointer that will contain the current 'neighbor' FE.

Parameters
typeThe type of FE
dimThe dimension of the current volume
Returns
A reference to the pointer. Make sure to store this as a reference!

Definition at line 184 of file Assembly.h.

185  {
186  buildVectorNeighborFE(type);
187  return constify_ref(_vector_fe_neighbor[dim][type]);
188  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:514
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition: Assembly.h:2508

◆ gradPhi() [1/6]

const VariablePhiGradient& Assembly::gradPhi ( ) const
inline

Definition at line 1287 of file Assembly.h.

Referenced by copyShapes().

1287 { return _grad_phi; }
VariablePhiGradient _grad_phi
Definition: Assembly.h:2664

◆ gradPhi() [2/6]

const VariablePhiGradient& Assembly::gradPhi ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1288 of file Assembly.h.

1288 { return _grad_phi; }
VariablePhiGradient _grad_phi
Definition: Assembly.h:2664

◆ gradPhi() [3/6]

const VectorVariablePhiGradient& Assembly::gradPhi ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1337 of file Assembly.h.

1338  {
1339  return _vector_grad_phi;
1340  }
VectorVariablePhiGradient _vector_grad_phi
Definition: Assembly.h:2681

◆ gradPhi() [4/6]

VariablePhiGradient& Assembly::gradPhi ( const MooseVariableField< Real > &  )
inline

Definition at line 1426 of file Assembly.h.

1426 { return _grad_phi; }
VariablePhiGradient _grad_phi
Definition: Assembly.h:2664

◆ gradPhi() [5/6]

VectorVariablePhiGradient& Assembly::gradPhi ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1458 of file Assembly.h.

1459  {
1460  return _vector_grad_phi;
1461  }
VectorVariablePhiGradient _vector_grad_phi
Definition: Assembly.h:2681

◆ gradPhi() [6/6]

VariablePhiGradient& Assembly::gradPhi ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1539 of file Assembly.h.

1539 { return _grad_phi; }
VariablePhiGradient _grad_phi
Definition: Assembly.h:2664

◆ gradPhiFace() [1/6]

const VariablePhiGradient& Assembly::gradPhiFace ( ) const
inline

Definition at line 1297 of file Assembly.h.

Referenced by copyFaceShapes().

1297 { return _grad_phi_face; }
VariablePhiGradient _grad_phi_face
Definition: Assembly.h:2668

◆ gradPhiFace() [2/6]

const VariablePhiGradient& Assembly::gradPhiFace ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1298 of file Assembly.h.

1299  {
1300  return _grad_phi_face;
1301  }
VariablePhiGradient _grad_phi_face
Definition: Assembly.h:2668

◆ gradPhiFace() [3/6]

const VectorVariablePhiGradient& Assembly::gradPhiFace ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1358 of file Assembly.h.

1359  {
1360  return _vector_grad_phi_face;
1361  }
VectorVariablePhiGradient _vector_grad_phi_face
Definition: Assembly.h:2687

◆ gradPhiFace() [4/6]

VariablePhiGradient& Assembly::gradPhiFace ( const MooseVariableField< Real > &  )
inline

Definition at line 1430 of file Assembly.h.

1430 { return _grad_phi_face; }
VariablePhiGradient _grad_phi_face
Definition: Assembly.h:2668

◆ gradPhiFace() [5/6]

VectorVariablePhiGradient& Assembly::gradPhiFace ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1479 of file Assembly.h.

1480  {
1481  return _vector_grad_phi_face;
1482  }
VectorVariablePhiGradient _vector_grad_phi_face
Definition: Assembly.h:2687

◆ gradPhiFace() [6/6]

VariablePhiGradient& Assembly::gradPhiFace ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1543 of file Assembly.h.

1544  {
1545  return _grad_phi_face;
1546  }
VariablePhiGradient _grad_phi_face
Definition: Assembly.h:2668

◆ gradPhiFaceNeighbor() [1/5]

const VariablePhiGradient& Assembly::gradPhiFaceNeighbor ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1324 of file Assembly.h.

Referenced by copyNeighborShapes().

1325  {
1326  return _grad_phi_face_neighbor;
1327  }
VariablePhiGradient _grad_phi_face_neighbor
Definition: Assembly.h:2676

◆ gradPhiFaceNeighbor() [2/5]

const VectorVariablePhiGradient& Assembly::gradPhiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1404 of file Assembly.h.

1405  {
1407  }
VectorVariablePhiGradient _vector_grad_phi_face_neighbor
Definition: Assembly.h:2699

◆ gradPhiFaceNeighbor() [3/5]

VariablePhiGradient& Assembly::gradPhiFaceNeighbor ( const MooseVariableField< Real > &  )
inline

Definition at line 1447 of file Assembly.h.

1448  {
1449  return _grad_phi_face_neighbor;
1450  }
VariablePhiGradient _grad_phi_face_neighbor
Definition: Assembly.h:2676

◆ gradPhiFaceNeighbor() [4/5]

VectorVariablePhiGradient& Assembly::gradPhiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1520 of file Assembly.h.

1521  {
1523  }
VectorVariablePhiGradient _vector_grad_phi_face_neighbor
Definition: Assembly.h:2699

◆ gradPhiFaceNeighbor() [5/5]

VariablePhiGradient& Assembly::gradPhiFaceNeighbor ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1569 of file Assembly.h.

1570  {
1571  return _grad_phi_face_neighbor;
1572  }
VariablePhiGradient _grad_phi_face_neighbor
Definition: Assembly.h:2676

◆ gradPhiNeighbor() [1/5]

const VariablePhiGradient& Assembly::gradPhiNeighbor ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1311 of file Assembly.h.

Referenced by copyNeighborShapes().

1312  {
1313  return _grad_phi_neighbor;
1314  }
VariablePhiGradient _grad_phi_neighbor
Definition: Assembly.h:2672

◆ gradPhiNeighbor() [2/5]

const VectorVariablePhiGradient& Assembly::gradPhiNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1380 of file Assembly.h.

1381  {
1383  }
VectorVariablePhiGradient _vector_grad_phi_neighbor
Definition: Assembly.h:2693

◆ gradPhiNeighbor() [3/5]

VariablePhiGradient& Assembly::gradPhiNeighbor ( const MooseVariableField< Real > &  )
inline

Definition at line 1434 of file Assembly.h.

1435  {
1436  return _grad_phi_neighbor;
1437  }
VariablePhiGradient _grad_phi_neighbor
Definition: Assembly.h:2672

◆ gradPhiNeighbor() [4/5]

VectorVariablePhiGradient& Assembly::gradPhiNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1500 of file Assembly.h.

1501  {
1503  }
VectorVariablePhiGradient _vector_grad_phi_neighbor
Definition: Assembly.h:2693

◆ gradPhiNeighbor() [5/5]

VariablePhiGradient& Assembly::gradPhiNeighbor ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1556 of file Assembly.h.

1557  {
1558  return _grad_phi_neighbor;
1559  }
VariablePhiGradient _grad_phi_neighbor
Definition: Assembly.h:2672

◆ hasScalingVector()

void Assembly::hasScalingVector ( )

signals this object that a vector containing variable scaling factors should be used when doing residual and matrix assembly

Definition at line 4574 of file Assembly.C.

Referenced by SubProblem::hasScalingVector().

4575 {
4576  _scaling_vector = &_sys.getVector("scaling_factors");
4577 }
SystemBase & _sys
Definition: Assembly.h:2272
const NumericVector< Real > * _scaling_vector
The map from global index to variable scaling factor.
Definition: Assembly.h:2834
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:925

◆ havePRefinement()

void Assembly::havePRefinement ( const std::unordered_set< FEFamily > &  disable_p_refinement_for_families)

Indicate that we have p-refinement.

This method will perform the following tasks:

  • Disable p-refinement as requested by the user with disable_p_refinement_for_families -.Disable p-refinement of Lagrange helper types that we use for getting things like the physical locations of quadrature points and JxW. (Don't worry, we still use the element p-level when initializing the quadrature rule attached to the Lagrange helper so the number of quadrature points reflects the element p-level)
    Parameters
    disable_p_refinement_for_familiesFamilies that we should disable p-refinement for

Definition at line 4859 of file Assembly.C.

Referenced by SubProblem::preparePRefinement().

4860 {
4861  if (_have_p_refinement)
4862  // Already performed tasks for p-refinement
4863  return;
4864 
4865  const Order helper_order = _mesh.hasSecondOrderElements() ? SECOND : FIRST;
4866  const FEType helper_type(helper_order, LAGRANGE);
4867  auto process_fe =
4868  [&disable_families](const unsigned int num_dimensionalities, auto & fe_container)
4869  {
4870  if (!disable_families.empty())
4871  for (const auto dim : make_range(num_dimensionalities))
4872  {
4873  auto fe_container_it = fe_container.find(dim);
4874  if (fe_container_it != fe_container.end())
4875  for (auto & [fe_type, fe_ptr] : fe_container_it->second)
4876  if (disable_families.count(fe_type.family))
4877  fe_ptr->add_p_level_in_reinit(false);
4878  }
4879  };
4880  auto process_fe_and_helpers = [process_fe, &helper_type](auto & unique_helper_container,
4881  auto & helper_container,
4882  const unsigned int num_dimensionalities,
4883  const bool user_added_helper_type,
4884  auto & fe_container)
4885  {
4886  unique_helper_container.resize(num_dimensionalities);
4887  for (const auto dim : make_range(num_dimensionalities))
4888  {
4889  auto & unique_helper = unique_helper_container[dim];
4890  unique_helper = FEGenericBase<Real>::build(dim, helper_type);
4891  // don't participate in p-refinement
4892  unique_helper->add_p_level_in_reinit(false);
4893  helper_container[dim] = unique_helper.get();
4894 
4895  // If the user did not request the helper type then we should erase it from our FE container
4896  // so that they're not penalized (in the "we should be able to do p-refinement sense") for
4897  // our perhaps silly helpers
4898  if (!user_added_helper_type)
4899  {
4900  auto & fe_container_dim = libmesh_map_find(fe_container, dim);
4901  auto fe_it = fe_container_dim.find(helper_type);
4902  mooseAssert(fe_it != fe_container_dim.end(), "We should have the helper type");
4903  delete fe_it->second;
4904  fe_container_dim.erase(fe_it);
4905  }
4906  }
4907 
4908  process_fe(num_dimensionalities, fe_container);
4909  };
4910 
4911  // Handle scalar field families
4912  process_fe_and_helpers(_unique_fe_helper,
4914  _mesh_dimension + 1,
4916  _fe);
4917  process_fe_and_helpers(_unique_fe_face_helper,
4919  _mesh_dimension + 1,
4921  _fe_face);
4922  process_fe_and_helpers(_unique_fe_face_neighbor_helper,
4924  _mesh_dimension + 1,
4927  process_fe_and_helpers(_unique_fe_neighbor_helper,
4929  _mesh_dimension + 1,
4931  _fe_neighbor);
4932  process_fe_and_helpers(_unique_fe_lower_helper,
4936  _fe_lower);
4937  // Handle vector field families
4938  process_fe(_mesh_dimension + 1, _vector_fe);
4939  process_fe(_mesh_dimension + 1, _vector_fe_face);
4940  process_fe(_mesh_dimension + 1, _vector_fe_neighbor);
4941  process_fe(_mesh_dimension + 1, _vector_fe_face_neighbor);
4942  process_fe(_mesh_dimension, _vector_fe_lower);
4943 
4945 
4946  _have_p_refinement = true;
4947 }
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2474
bool _user_added_fe_lower_of_helper_type
Definition: Assembly.h:2325
std::vector< std::unique_ptr< FEBase > > _unique_fe_lower_helper
Definition: Assembly.h:2333
Order
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension&#39;s actual vector fe objects indexed on type.
Definition: Assembly.h:2364
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2512
std::vector< std::unique_ptr< FEBase > > _unique_fe_neighbor_helper
Definition: Assembly.h:2332
bool _user_added_fe_face_neighbor_of_helper_type
Definition: Assembly.h:2323
bool _have_p_refinement
Whether we have ever conducted p-refinement.
Definition: Assembly.h:2861
FIRST
MooseMesh & _mesh
Definition: Assembly.h:2312
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition: Assembly.h:2513
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
Definition: Assembly.h:2330
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2509
std::vector< std::unique_ptr< FEBase > > _unique_fe_helper
Containers for holding unique FE helper types if we are doing p-refinement.
Definition: Assembly.h:2329
SECOND
unsigned int _mesh_dimension
Definition: Assembly.h:2314
bool _user_added_fe_neighbor_of_helper_type
Definition: Assembly.h:2324
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2506
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2476
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2516
bool hasSecondOrderElements()
check if the mesh has SECOND order elements
Definition: MooseMesh.C:3711
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2362
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition: Assembly.h:2518
bool _user_added_fe_face_of_helper_type
Definition: Assembly.h:2322
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2478
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition: Assembly.h:2508
IntRange< T > make_range(T beg, T end)
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
Definition: Assembly.h:2331
void helpersRequestData()
request phi, dphi, xyz, JxW, etc.
Definition: Assembly.C:4826
std::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2366
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2507
bool _user_added_fe_of_helper_type
Whether user code requested a FEType the same as our _helper_type.
Definition: Assembly.h:2321
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
helper object for transforming coordinates for lower dimensional element quadrature points ...
Definition: Assembly.h:2520

◆ helpersRequestData()

void Assembly::helpersRequestData ( )
private

request phi, dphi, xyz, JxW, etc.

data through the FE helper functions

Definition at line 4826 of file Assembly.C.

Referenced by Assembly(), and havePRefinement().

4827 {
4828  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
4829  {
4830  _holder_fe_helper[dim]->get_phi();
4831  _holder_fe_helper[dim]->get_dphi();
4832  _holder_fe_helper[dim]->get_xyz();
4833  _holder_fe_helper[dim]->get_JxW();
4834 
4835  _holder_fe_face_helper[dim]->get_phi();
4836  _holder_fe_face_helper[dim]->get_dphi();
4837  _holder_fe_face_helper[dim]->get_xyz();
4838  _holder_fe_face_helper[dim]->get_JxW();
4839  _holder_fe_face_helper[dim]->get_normals();
4840 
4843  _holder_fe_face_neighbor_helper[dim]->get_normals();
4844 
4845  _holder_fe_neighbor_helper[dim]->get_xyz();
4846  _holder_fe_neighbor_helper[dim]->get_JxW();
4847  }
4848 
4849  for (unsigned int dim = 0; dim < _mesh_dimension; dim++)
4850  {
4851  // We need these computations in order to compute correct lower-d element volumes in
4852  // curvilinear coordinates
4853  _holder_fe_lower_helper[dim]->get_xyz();
4854  _holder_fe_lower_helper[dim]->get_JxW();
4855  }
4856 }
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2512
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition: Assembly.h:2513
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2478
std::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2366
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
helper object for transforming coordinates for lower dimensional element quadrature points ...
Definition: Assembly.h:2520

◆ init()

void Assembly::init ( const libMesh::CouplingMatrix cm)

Initialize the Assembly object and set the CouplingMatrix for use throughout.

Definition at line 2465 of file Assembly.C.

2466 {
2467  _cm = cm;
2468 
2469  unsigned int n_vars = _sys.nVariables();
2470 
2471  _cm_ss_entry.clear();
2472  _cm_sf_entry.clear();
2473  _cm_fs_entry.clear();
2474  _cm_ff_entry.clear();
2475 
2476  auto & vars = _sys.getVariables(_tid);
2477 
2478  _block_diagonal_matrix = true;
2479  for (auto & ivar : vars)
2480  {
2481  auto i = ivar->number();
2482  if (i >= _component_block_diagonal.size())
2483  _component_block_diagonal.resize(i + 1, true);
2484 
2485  auto ivar_start = _cm_ff_entry.size();
2486  for (unsigned int k = 0; k < ivar->count(); ++k)
2487  {
2488  unsigned int iv = i + k;
2489  for (const auto & j : ConstCouplingRow(iv, *_cm))
2490  {
2491  if (_sys.isScalarVariable(j))
2492  {
2493  auto & jvar = _sys.getScalarVariable(_tid, j);
2494  _cm_fs_entry.push_back(std::make_pair(ivar, &jvar));
2495  _block_diagonal_matrix = false;
2496  }
2497  else
2498  {
2499  auto & jvar = _sys.getVariable(_tid, j);
2500  auto pair = std::make_pair(ivar, &jvar);
2501  auto c = ivar_start;
2502  // check if the pair has been pushed or not
2503  bool has_pair = false;
2504  for (; c < _cm_ff_entry.size(); ++c)
2505  if (_cm_ff_entry[c] == pair)
2506  {
2507  has_pair = true;
2508  break;
2509  }
2510  if (!has_pair)
2511  _cm_ff_entry.push_back(pair);
2512  // only set having diagonal matrix to false when ivar and jvar numbers are different
2513  // Note: for array variables, since we save the entire local Jacobian of all components,
2514  // even there are couplings among components of the same array variable, we still
2515  // do not set the flag to false.
2516  if (i != jvar.number())
2517  _block_diagonal_matrix = false;
2518  else if (iv != j)
2519  _component_block_diagonal[i] = false;
2520  }
2521  }
2522  }
2523  }
2524 
2525  auto & scalar_vars = _sys.getScalarVariables(_tid);
2526 
2527  for (auto & ivar : scalar_vars)
2528  {
2529  auto i = ivar->number();
2530  if (i >= _component_block_diagonal.size())
2531  _component_block_diagonal.resize(i + 1, true);
2532 
2533  for (const auto & j : ConstCouplingRow(i, *_cm))
2534  if (_sys.isScalarVariable(j))
2535  {
2536  auto & jvar = _sys.getScalarVariable(_tid, j);
2537  _cm_ss_entry.push_back(std::make_pair(ivar, &jvar));
2538  }
2539  else
2540  {
2541  auto & jvar = _sys.getVariable(_tid, j);
2542  _cm_sf_entry.push_back(std::make_pair(ivar, &jvar));
2543  }
2544  }
2545 
2546  if (_block_diagonal_matrix && scalar_vars.size() != 0)
2547  _block_diagonal_matrix = false;
2548 
2549  auto num_vector_tags = _residual_vector_tags.size();
2550 
2551  _sub_Re.resize(num_vector_tags);
2552  _sub_Rn.resize(num_vector_tags);
2553  _sub_Rl.resize(num_vector_tags);
2554  for (MooseIndex(_sub_Re) i = 0; i < _sub_Re.size(); i++)
2555  {
2556  _sub_Re[i].resize(n_vars);
2557  _sub_Rn[i].resize(n_vars);
2558  _sub_Rl[i].resize(n_vars);
2559  }
2560 
2561  _cached_residual_values.resize(num_vector_tags);
2562  _cached_residual_rows.resize(num_vector_tags);
2563 
2564  auto num_matrix_tags = _subproblem.numMatrixTags();
2565 
2566  _cached_jacobian_values.resize(num_matrix_tags);
2567  _cached_jacobian_rows.resize(num_matrix_tags);
2568  _cached_jacobian_cols.resize(num_matrix_tags);
2569 
2570  // Element matrices
2571  _sub_Kee.resize(num_matrix_tags);
2572  _sub_Keg.resize(num_matrix_tags);
2573  _sub_Ken.resize(num_matrix_tags);
2574  _sub_Kne.resize(num_matrix_tags);
2575  _sub_Knn.resize(num_matrix_tags);
2576  _sub_Kll.resize(num_matrix_tags);
2577  _sub_Kle.resize(num_matrix_tags);
2578  _sub_Kln.resize(num_matrix_tags);
2579  _sub_Kel.resize(num_matrix_tags);
2580  _sub_Knl.resize(num_matrix_tags);
2581 
2582  _jacobian_block_used.resize(num_matrix_tags);
2583  _jacobian_block_neighbor_used.resize(num_matrix_tags);
2584  _jacobian_block_lower_used.resize(num_matrix_tags);
2585  _jacobian_block_nonlocal_used.resize(num_matrix_tags);
2586 
2587  for (MooseIndex(num_matrix_tags) tag = 0; tag < num_matrix_tags; tag++)
2588  {
2589  _sub_Keg[tag].resize(n_vars);
2590  _sub_Ken[tag].resize(n_vars);
2591  _sub_Kne[tag].resize(n_vars);
2592  _sub_Knn[tag].resize(n_vars);
2593  _sub_Kee[tag].resize(n_vars);
2594  _sub_Kll[tag].resize(n_vars);
2595  _sub_Kle[tag].resize(n_vars);
2596  _sub_Kln[tag].resize(n_vars);
2597  _sub_Kel[tag].resize(n_vars);
2598  _sub_Knl[tag].resize(n_vars);
2599 
2600  _jacobian_block_used[tag].resize(n_vars);
2601  _jacobian_block_neighbor_used[tag].resize(n_vars);
2602  _jacobian_block_lower_used[tag].resize(n_vars);
2603  _jacobian_block_nonlocal_used[tag].resize(n_vars);
2604  for (MooseIndex(n_vars) i = 0; i < n_vars; ++i)
2605  {
2607  {
2608  _sub_Kee[tag][i].resize(n_vars);
2609  _sub_Keg[tag][i].resize(n_vars);
2610  _sub_Ken[tag][i].resize(n_vars);
2611  _sub_Kne[tag][i].resize(n_vars);
2612  _sub_Knn[tag][i].resize(n_vars);
2613  _sub_Kll[tag][i].resize(n_vars);
2614  _sub_Kle[tag][i].resize(n_vars);
2615  _sub_Kln[tag][i].resize(n_vars);
2616  _sub_Kel[tag][i].resize(n_vars);
2617  _sub_Knl[tag][i].resize(n_vars);
2618 
2619  _jacobian_block_used[tag][i].resize(n_vars);
2620  _jacobian_block_neighbor_used[tag][i].resize(n_vars);
2621  _jacobian_block_lower_used[tag][i].resize(n_vars);
2622  _jacobian_block_nonlocal_used[tag][i].resize(n_vars);
2623  }
2624  else
2625  {
2626  _sub_Kee[tag][i].resize(1);
2627  _sub_Keg[tag][i].resize(1);
2628  _sub_Ken[tag][i].resize(1);
2629  _sub_Kne[tag][i].resize(1);
2630  _sub_Knn[tag][i].resize(1);
2631  _sub_Kll[tag][i].resize(1);
2632  _sub_Kle[tag][i].resize(1);
2633  _sub_Kln[tag][i].resize(1);
2634  _sub_Kel[tag][i].resize(1);
2635  _sub_Knl[tag][i].resize(1);
2636 
2637  _jacobian_block_used[tag][i].resize(1);
2638  _jacobian_block_neighbor_used[tag][i].resize(1);
2639  _jacobian_block_lower_used[tag][i].resize(1);
2640  _jacobian_block_nonlocal_used[tag][i].resize(1);
2641  }
2642  }
2643  }
2644 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
Definition: Assembly.h:2761
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2768
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition: SystemBase.h:756
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kle
dlower/dsecondary (or dlower/delement)
Definition: Assembly.h:2651
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kel
dsecondary/dlower (or delement/dlower)
Definition: Assembly.h:2655
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kll
dlower/dlower
Definition: Assembly.h:2649
char ** vars
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kln
dlower/dprimary (or dlower/dneighbor)
Definition: Assembly.h:2653
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2621
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2302
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
Entries in the coupling matrix for scalar variables vs field variables.
Definition: Assembly.h:2295
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knn
jacobian contributions from the neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2647
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2766
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Ken
jacobian contributions from the element and neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2643
virtual unsigned int nVariables() const
Get the number of variables in this system.
Definition: SystemBase.C:883
std::vector< std::pair< MooseVariableScalar *, MooseVariableScalar * > > _cm_ss_entry
Entries in the coupling matrix for scalar variables.
Definition: Assembly.h:2297
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kne
jacobian contributions from the neighbor and element <Tag, ivar, jvar>
Definition: Assembly.h:2645
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition: Assembly.h:2623
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
Entries in the coupling matrix for field variables vs scalar variables.
Definition: Assembly.h:2293
unsigned int n_vars
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2620
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2301
SubProblem & _subproblem
Definition: Assembly.h:2273
const std::vector< VectorTag > & _residual_vector_tags
The residual vector tags that Assembly could possibly contribute to.
Definition: Assembly.h:2755
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
Definition: Assembly.h:2639
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2758
virtual unsigned int numMatrixTags() const
The total number of tags.
Definition: SubProblem.h:248
virtual MooseVariableScalar & getScalarVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a scalar variable with specified number.
Definition: SystemBase.C:145
const libMesh::CouplingMatrix * _cm
Coupling matrices.
Definition: Assembly.h:2278
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Keg
Definition: Assembly.h:2640
virtual bool isScalarVariable(unsigned int var_name) const
Definition: SystemBase.C:877
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_lower_used
Flag that indicates if the jacobian block for the lower dimensional element was used.
Definition: Assembly.h:2306
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:90
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_neighbor_used
Flag that indicates if the jacobian block for neighbor was used.
Definition: Assembly.h:2304
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2770
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knl
dprimary/dlower (or dneighbor/dlower)
Definition: Assembly.h:2657

◆ initNonlocalCoupling()

void Assembly::initNonlocalCoupling ( )

Create pair of variables requiring nonlocal jacobian contributions.

Definition at line 2647 of file Assembly.C.

Referenced by FEProblemBase::initialSetup().

2648 {
2649  _cm_nonlocal_entry.clear();
2650 
2651  auto & vars = _sys.getVariables(_tid);
2652 
2653  for (auto & ivar : vars)
2654  {
2655  auto i = ivar->number();
2656  auto ivar_start = _cm_nonlocal_entry.size();
2657  for (unsigned int k = 0; k < ivar->count(); ++k)
2658  {
2659  unsigned int iv = i + k;
2660  for (const auto & j : ConstCouplingRow(iv, _nonlocal_cm))
2661  if (!_sys.isScalarVariable(j))
2662  {
2663  auto & jvar = _sys.getVariable(_tid, j);
2664  auto pair = std::make_pair(ivar, &jvar);
2665  auto c = ivar_start;
2666  // check if the pair has been pushed or not
2667  bool has_pair = false;
2668  for (; c < _cm_nonlocal_entry.size(); ++c)
2669  if (_cm_nonlocal_entry[c] == pair)
2670  {
2671  has_pair = true;
2672  break;
2673  }
2674  if (!has_pair)
2675  _cm_nonlocal_entry.push_back(pair);
2676  }
2677  }
2678  }
2679 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition: Assembly.h:2299
const libMesh::CouplingMatrix & _nonlocal_cm
Definition: Assembly.h:2279
virtual bool isScalarVariable(unsigned int var_name) const
Definition: SystemBase.C:877
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:90

◆ jacobianBlock()

DenseMatrix<Number>& Assembly::jacobianBlock ( unsigned int  ivar,
unsigned int  jvar,
LocalDataKey  ,
TagID  tag 
)
inline

Get local Jacobian block for a pair of variables and a tag.

Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 1103 of file Assembly.h.

Referenced by TaggingInterface::accumulateTaggedLocalMatrix(), addJacobianCoupledVarPair(), cacheJacobianCoupledVarPair(), prepareBlock(), prepareJacobianBlock(), TaggingInterface::prepareMatrixTag(), prepareOffDiagScalar(), prepareScalar(), and prepareVariable().

1104  {
1105  jacobianBlockUsed(tag, ivar, jvar, true);
1106  return _sub_Kee[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
1107  }
void jacobianBlockUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not Jacobian coupling between ivar and jvar is used to the value used.
Definition: Assembly.h:2199
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
Definition: Assembly.h:2639
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ jacobianBlockLowerUsed() [1/2]

void Assembly::jacobianBlockLowerUsed ( TagID  tag,
unsigned int  ivar,
unsigned int  jvar,
bool  used 
)
inlineprivate

Sets whether or not lower Jacobian coupling between ivar and jvar is used to the value used.

Definition at line 2235 of file Assembly.h.

Referenced by addJacobianLowerD(), addJacobianNeighborLowerD(), cacheJacobianMortar(), jacobianBlockMortar(), and prepareLowerD().

2236  {
2237  _jacobian_block_lower_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2238  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_lower_used
Flag that indicates if the jacobian block for the lower dimensional element was used.
Definition: Assembly.h:2306
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ jacobianBlockLowerUsed() [2/2]

char Assembly::jacobianBlockLowerUsed ( TagID  tag,
unsigned int  ivar,
unsigned int  jvar 
) const
inlineprivate

Return a flag to indicate if a particular coupling lower Jacobian block between ivar and jvar is used.

Definition at line 2244 of file Assembly.h.

2245  {
2246  return _jacobian_block_lower_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2247  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_lower_used
Flag that indicates if the jacobian block for the lower dimensional element was used.
Definition: Assembly.h:2306
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ jacobianBlockMortar()

DenseMatrix< Number > & Assembly::jacobianBlockMortar ( Moose::ConstraintJacobianType  type,
unsigned int  ivar,
unsigned int  jvar,
LocalDataKey  ,
TagID  tag 
)

Returns the jacobian block for the given mortar Jacobian type.

This jacobian block can involve degrees of freedom from the secondary side interior parent, the primary side interior parent, or the lower-dimensional element (located on the secondary side). Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 3153 of file Assembly.C.

Referenced by addJacobianLowerD(), addJacobianNeighborLowerD(), cacheJacobianMortar(), prepareLowerD(), and TaggingInterface::prepareMatrixTagLower().

3158 {
3159  jacobianBlockLowerUsed(tag, ivar, jvar, true);
3161  {
3162  switch (type)
3163  {
3164  default:
3165  case Moose::LowerLower:
3166  return _sub_Kll[tag][ivar][0];
3167  case Moose::LowerSecondary:
3168  return _sub_Kle[tag][ivar][0];
3169  case Moose::LowerPrimary:
3170  return _sub_Kln[tag][ivar][0];
3171  case Moose::SecondaryLower:
3172  return _sub_Kel[tag][ivar][0];
3174  return _sub_Kee[tag][ivar][0];
3176  return _sub_Ken[tag][ivar][0];
3177  case Moose::PrimaryLower:
3178  return _sub_Knl[tag][ivar][0];
3180  return _sub_Kne[tag][ivar][0];
3181  case Moose::PrimaryPrimary:
3182  return _sub_Knn[tag][ivar][0];
3183  }
3184  }
3185  else
3186  {
3187  switch (type)
3188  {
3189  default:
3190  case Moose::LowerLower:
3191  return _sub_Kll[tag][ivar][jvar];
3192  case Moose::LowerSecondary:
3193  return _sub_Kle[tag][ivar][jvar];
3194  case Moose::LowerPrimary:
3195  return _sub_Kln[tag][ivar][jvar];
3196  case Moose::SecondaryLower:
3197  return _sub_Kel[tag][ivar][jvar];
3199  return _sub_Kee[tag][ivar][jvar];
3201  return _sub_Ken[tag][ivar][jvar];
3202  case Moose::PrimaryLower:
3203  return _sub_Knl[tag][ivar][jvar];
3205  return _sub_Kne[tag][ivar][jvar];
3206  case Moose::PrimaryPrimary:
3207  return _sub_Knn[tag][ivar][jvar];
3208  }
3209  }
3210 }
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kle
dlower/dsecondary (or dlower/delement)
Definition: Assembly.h:2651
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kel
dsecondary/dlower (or delement/dlower)
Definition: Assembly.h:2655
void jacobianBlockLowerUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not lower Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2235
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kll
dlower/dlower
Definition: Assembly.h:2649
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kln
dlower/dprimary (or dlower/dneighbor)
Definition: Assembly.h:2653
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knn
jacobian contributions from the neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2647
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Ken
jacobian contributions from the element and neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2643
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kne
jacobian contributions from the neighbor and element <Tag, ivar, jvar>
Definition: Assembly.h:2645
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
Definition: Assembly.h:2639
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knl
dprimary/dlower (or dneighbor/dlower)
Definition: Assembly.h:2657

◆ jacobianBlockNeighbor()

DenseMatrix< Number > & Assembly::jacobianBlockNeighbor ( Moose::DGJacobianType  type,
unsigned int  ivar,
unsigned int  jvar,
LocalDataKey  ,
TagID  tag 
)

Get local Jacobian block of a DG Jacobian type for a pair of variables and a tag.

Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 3112 of file Assembly.C.

Referenced by TaggingInterface::accumulateTaggedLocalMatrix(), addJacobianNeighbor(), addJacobianNeighborLowerD(), cacheJacobianNeighbor(), TaggingInterface::prepareMatrixTagNeighbor(), and prepareNeighbor().

3114 {
3115  if (type == Moose::ElementElement)
3116  jacobianBlockUsed(tag, ivar, jvar, true);
3117  else
3118  jacobianBlockNeighborUsed(tag, ivar, jvar, true);
3119 
3121  {
3122  switch (type)
3123  {
3124  default:
3125  case Moose::ElementElement:
3126  return _sub_Kee[tag][ivar][0];
3128  return _sub_Ken[tag][ivar][0];
3130  return _sub_Kne[tag][ivar][0];
3132  return _sub_Knn[tag][ivar][0];
3133  }
3134  }
3135  else
3136  {
3137  switch (type)
3138  {
3139  default:
3140  case Moose::ElementElement:
3141  return _sub_Kee[tag][ivar][jvar];
3143  return _sub_Ken[tag][ivar][jvar];
3145  return _sub_Kne[tag][ivar][jvar];
3147  return _sub_Knn[tag][ivar][jvar];
3148  }
3149  }
3150 }
void jacobianBlockUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not Jacobian coupling between ivar and jvar is used to the value used.
Definition: Assembly.h:2199
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knn
jacobian contributions from the neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2647
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Ken
jacobian contributions from the element and neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2643
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kne
jacobian contributions from the neighbor and element <Tag, ivar, jvar>
Definition: Assembly.h:2645
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
Definition: Assembly.h:2639
void jacobianBlockNeighborUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not neighbor Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2217
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ jacobianBlockNeighborUsed() [1/2]

void Assembly::jacobianBlockNeighborUsed ( TagID  tag,
unsigned int  ivar,
unsigned int  jvar,
bool  used 
)
inlineprivate

Sets whether or not neighbor Jacobian coupling between ivar and jvar is used to the value used.

Definition at line 2217 of file Assembly.h.

Referenced by addJacobianNeighbor(), addJacobianNeighborLowerD(), cacheJacobianNeighbor(), jacobianBlockNeighbor(), and prepareNeighbor().

2218  {
2219  _jacobian_block_neighbor_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2220  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_neighbor_used
Flag that indicates if the jacobian block for neighbor was used.
Definition: Assembly.h:2304
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ jacobianBlockNeighborUsed() [2/2]

char Assembly::jacobianBlockNeighborUsed ( TagID  tag,
unsigned int  ivar,
unsigned int  jvar 
) const
inlineprivate

Return a flag to indicate if a particular coupling neighbor Jacobian block between ivar and jvar is used.

Definition at line 2226 of file Assembly.h.

2227  {
2228  return _jacobian_block_neighbor_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2229  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_neighbor_used
Flag that indicates if the jacobian block for neighbor was used.
Definition: Assembly.h:2304
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ jacobianBlockNonlocal()

DenseMatrix<Number>& Assembly::jacobianBlockNonlocal ( unsigned int  ivar,
unsigned int  jvar,
LocalDataKey  ,
TagID  tag 
)
inline

Get local Jacobian block from non-local contribution for a pair of variables and a tag.

Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 1114 of file Assembly.h.

Referenced by addJacobianBlockNonlocal(), addJacobianNonlocal(), cacheJacobianNonlocal(), prepareBlockNonlocal(), TaggingInterface::prepareMatrixTagNonlocal(), prepareNonlocal(), and prepareVariableNonlocal().

1115  {
1116  jacobianBlockNonlocalUsed(tag, ivar, jvar, true);
1117  return _sub_Keg[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
1118  }
void jacobianBlockNonlocalUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not nonlocal Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2253
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Keg
Definition: Assembly.h:2640
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ jacobianBlockNonlocalUsed() [1/2]

void Assembly::jacobianBlockNonlocalUsed ( TagID  tag,
unsigned int  ivar,
unsigned int  jvar,
bool  used 
)
inlineprivate

Sets whether or not nonlocal Jacobian coupling between ivar and jvar is used to the value used.

Definition at line 2253 of file Assembly.h.

Referenced by addJacobianNonlocal(), cacheJacobianNonlocal(), jacobianBlockNonlocal(), prepareBlockNonlocal(), prepareNonlocal(), and prepareVariableNonlocal().

2254  {
2255  _jacobian_block_nonlocal_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2256  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2302
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ jacobianBlockNonlocalUsed() [2/2]

char Assembly::jacobianBlockNonlocalUsed ( TagID  tag,
unsigned int  ivar,
unsigned int  jvar 
) const
inlineprivate

Return a flag to indicate if a particular coupling nonlocal Jacobian block between ivar and jvar is used.

Definition at line 2262 of file Assembly.h.

2263  {
2264  return _jacobian_block_nonlocal_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2265  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2302
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ jacobianBlockUsed() [1/2]

void Assembly::jacobianBlockUsed ( TagID  tag,
unsigned int  ivar,
unsigned int  jvar,
bool  used 
)
inlineprivate

Sets whether or not Jacobian coupling between ivar and jvar is used to the value used.

Definition at line 2199 of file Assembly.h.

Referenced by addJacobianCoupledVarPair(), cacheJacobianCoupledVarPair(), jacobianBlock(), jacobianBlockNeighbor(), prepareBlock(), prepareJacobianBlock(), prepareOffDiagScalar(), prepareScalar(), and prepareVariable().

2200  {
2201  _jacobian_block_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2202  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2301
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ jacobianBlockUsed() [2/2]

char Assembly::jacobianBlockUsed ( TagID  tag,
unsigned int  ivar,
unsigned int  jvar 
) const
inlineprivate

Return a flag to indicate if a particular coupling Jacobian block between ivar and jvar is used.

Definition at line 2208 of file Assembly.h.

2209  {
2210  return _jacobian_block_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2211  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2301
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
Definition: Assembly.h:2775

◆ JxW()

const MooseArray<Real>& Assembly::JxW ( ) const
inline

Returns the reference to the transformed jacobian weights.

Returns
A reference. Make sure to store this as a reference!

Definition at line 248 of file Assembly.h.

Referenced by elementVolume(), reinitDual(), reinitLowerDElem(), and reinitNeighbor().

248 { return _current_JxW; }
MooseArray< Real > _current_JxW
The current list of transformed jacobian weights.
Definition: Assembly.h:2380

◆ JxWFace()

const MooseArray<Real>& Assembly::JxWFace ( ) const
inline

Returns the reference to the transformed jacobian weights on a current face.

Returns
A reference. Make sure to store this as a reference!

Definition at line 312 of file Assembly.h.

312 { return _current_JxW_face; }
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2488

◆ jxWMortar()

const std::vector<Real>& Assembly::jxWMortar ( ) const
inline

Returns a reference to JxW for mortar segment elements.

Definition at line 668 of file Assembly.h.

Referenced by Moose::Mortar::loopOverMortarSegments().

668 { return *_JxW_msm; }
const std::vector< Real > * _JxW_msm
A JxW for working on mortar segement elements.
Definition: Assembly.h:2539

◆ JxWNeighbor()

const MooseArray< Real > & Assembly::JxWNeighbor ( ) const

Returns the reference to the transformed jacobian weights on a current face.

Returns
A reference. Make sure to store this as a reference!

Definition at line 259 of file Assembly.C.

260 {
261  _need_JxW_neighbor = true;
262  return _current_JxW_neighbor;
263 }
MooseArray< Real > _current_JxW_neighbor
The current transformed jacobian weights on a neighbor&#39;s face.
Definition: Assembly.h:2529
bool _need_JxW_neighbor
Flag to indicate that JxW_neighbor is needed.
Definition: Assembly.h:2527

◆ lowerDElem()

const Elem* const& Assembly::lowerDElem ( ) const
inline

Return the lower dimensional element.

Returns
A reference. Make sure to store this as a reference!

Definition at line 437 of file Assembly.h.

Referenced by Moose::globalDofIndexToDerivative(), and MooseVariableFE< Real >::MooseVariableFE().

437 { return _current_lower_d_elem; }
const Elem * _current_lower_d_elem
The current lower dimensional element.
Definition: Assembly.h:2591

◆ lowerDElemVolume()

const Real & Assembly::lowerDElemVolume ( ) const
inline

Definition at line 3166 of file Assembly.h.

3167 {
3170 }
Real _current_lower_d_elem_volume
The current lower dimensional element volume.
Definition: Assembly.h:2597
bool _need_lower_d_elem_volume
Whether we need to compute the lower dimensional element volume.
Definition: Assembly.h:2595

◆ mappedNormals()

const std::vector<Eigen::Map<RealDIMValue> >& Assembly::mappedNormals ( ) const
inline

Definition at line 323 of file Assembly.h.

323 { return _mapped_normals; }
std::vector< Eigen::Map< RealDIMValue > > _mapped_normals
Mapped normals.
Definition: Assembly.h:2492

◆ modifyArbitraryWeights()

void Assembly::modifyArbitraryWeights ( const std::vector< Real > &  weights)

Modify the weights when using the arbitrary quadrature rule.

The intention is to use this when you wish to supply your own quadrature after calling reinit at physical points.

You should only use this if the arbitrary quadrature is the current quadrature rule!

Parameters
weightsThe weights to fill into _current_JxW

Definition at line 4580 of file Assembly.C.

4581 {
4582  mooseAssert(_current_qrule == _current_qrule_arbitrary, "Rule should be arbitrary");
4583  mooseAssert(weights.size() == _current_physical_points.size(), "Size mismatch");
4584 
4585  for (MooseIndex(weights.size()) i = 0; i < weights.size(); ++i)
4586  _current_JxW[i] = weights[i];
4587 }
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
Definition: Assembly.h:2374
MooseArray< Point > _current_physical_points
This will be filled up with the physical points passed into reinitAtPhysical() if it is called...
Definition: Assembly.h:2606
unsigned int size() const
The number of elements that can currently be stored in the array.
Definition: MooseArray.h:259
MooseArray< Real > _current_JxW
The current list of transformed jacobian weights.
Definition: Assembly.h:2380
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2370

◆ modifyFaceWeightsDueToXFEM()

void Assembly::modifyFaceWeightsDueToXFEM ( const Elem elem,
unsigned int  side = 0 
)
private

Update the face integration weights for XFEM partial elements.

This only affects the weights if XFEM is used and if the element is cut.

Parameters
elemThe element for which the weights are adjusted
sideThe side of element for which the weights are adjusted

Definition at line 4553 of file Assembly.C.

Referenced by reinitFEFace().

4554 {
4555  mooseAssert(_xfem != nullptr, "This function should not be called if xfem is inactive");
4556 
4558  return;
4559 
4560  MooseArray<Real> xfem_face_weight_multipliers;
4561  if (_xfem->getXFEMFaceWeights(
4562  xfem_face_weight_multipliers, elem, _current_qrule_face, _current_q_points_face, side))
4563  {
4564  mooseAssert(xfem_face_weight_multipliers.size() == _current_JxW_face.size(),
4565  "Size of weight multipliers in xfem doesn't match number of quadrature points");
4566  for (unsigned i = 0; i < xfem_face_weight_multipliers.size(); i++)
4567  _current_JxW_face[i] = _current_JxW_face[i] * xfem_face_weight_multipliers[i];
4568 
4569  xfem_face_weight_multipliers.release();
4570  }
4571 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
Definition: Assembly.h:2374
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition: Assembly.h:2339
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2488
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2482
unsigned int size() const
The number of elements that can currently be stored in the array.
Definition: MooseArray.h:259
void release()
Manually deallocates the data pointer.
Definition: MooseArray.h:66
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:407
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2486

◆ modifyWeightsDueToXFEM()

void Assembly::modifyWeightsDueToXFEM ( const Elem elem)
private

Update the integration weights for XFEM partial elements.

This only affects the weights if XFEM is used and if the element is cut.

Parameters
elemThe element for which the weights are adjusted

Definition at line 4533 of file Assembly.C.

Referenced by reinitFE().

4534 {
4535  mooseAssert(_xfem != nullptr, "This function should not be called if xfem is inactive");
4536 
4538  return;
4539 
4540  MooseArray<Real> xfem_weight_multipliers;
4541  if (_xfem->getXFEMWeights(xfem_weight_multipliers, elem, _current_qrule, _current_q_points))
4542  {
4543  mooseAssert(xfem_weight_multipliers.size() == _current_JxW.size(),
4544  "Size of weight multipliers in xfem doesn't match number of quadrature points");
4545  for (unsigned i = 0; i < xfem_weight_multipliers.size(); i++)
4546  _current_JxW[i] = _current_JxW[i] * xfem_weight_multipliers[i];
4547 
4548  xfem_weight_multipliers.release();
4549  }
4550 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
Definition: Assembly.h:2374
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition: Assembly.h:2339
unsigned int size() const
The number of elements that can currently be stored in the array.
Definition: MooseArray.h:259
MooseArray< Real > _current_JxW
The current list of transformed jacobian weights.
Definition: Assembly.h:2380
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2370
void release()
Manually deallocates the data pointer.
Definition: MooseArray.h:66
MooseArray< Point > _current_q_points
The current list of quadrature points.
Definition: Assembly.h:2378

◆ mortarCoordTransformation()

const MooseArray<Real>& Assembly::mortarCoordTransformation ( ) const
inline

Returns the reference to the coordinate transformation coefficients on the mortar segment mesh.

Returns
A reference. Make sure to store this as a reference!

Definition at line 266 of file Assembly.h.

266 { return _coord_msm; }
MooseArray< Real > _coord_msm
The coordinate transformation coefficients evaluated on the quadrature points of the mortar segment m...
Definition: Assembly.h:2534

◆ msmElem()

const Elem* const& Assembly::msmElem ( ) const
inline
Returns
The current mortar segment element

Definition at line 1916 of file Assembly.h.

1916 { return _msm_elem; }
const Elem * _msm_elem
Definition: Assembly.h:2843

◆ needDual()

bool Assembly::needDual ( ) const
inline

Indicates whether dual shape functions are used (computation is now repeated on each element so expense of computing dual shape functions is no longer trivial)

Definition at line 584 of file Assembly.h.

Referenced by Moose::Mortar::loopOverMortarSegments().

584 { return _need_dual; }
bool _need_dual
Whether dual shape functions need to be computed for mortar constraints.
Definition: Assembly.h:2603

◆ neighbor()

const Elem* const& Assembly::neighbor ( ) const
inline

◆ neighborLowerDElem()

const Elem* const& Assembly::neighborLowerDElem ( ) const
inline

Return the neighboring lower dimensional element.

Returns
A reference. Make sure to store this as a reference!

Definition at line 443 of file Assembly.h.

const Elem * _current_neighbor_lower_d_elem
The current neighboring lower dimensional element.
Definition: Assembly.h:2593

◆ neighborLowerDElemVolume()

const Real & Assembly::neighborLowerDElemVolume ( ) const
inline

Definition at line 3173 of file Assembly.h.

3174 {
3177 }
Real _current_neighbor_lower_d_elem_volume
The current neighboring lower dimensional element volume.
Definition: Assembly.h:2601
bool _need_neighbor_lower_d_elem_volume
Whether we need to compute the neighboring lower dimensional element volume.
Definition: Assembly.h:2599

◆ neighborSide()

const unsigned int& Assembly::neighborSide ( ) const
inline

Returns the current neighboring side.

Returns
A reference. Make sure to store this as a reference!

Definition at line 413 of file Assembly.h.

413 { return _current_neighbor_side; }
unsigned int _current_neighbor_side
The current side of the selected neighboring element (valid only when working with sides) ...
Definition: Assembly.h:2574

◆ neighborVolume()

const Real& Assembly::neighborVolume ( )
inline

Returns the reference to the current neighbor volume.

Returns
A reference. Make sure to store this as a reference!

Definition at line 469 of file Assembly.h.

Referenced by InterfaceKernelBase::getNeighborElemVolume(), InternalSideUserObject::getNeighborElemVolume(), and DGKernelBase::getNeighborElemVolume().

470  {
473  }
bool _need_neighbor_elem_volume
true is apps need to compute neighbor element volume
Definition: Assembly.h:2578
Real _current_neighbor_volume
Volume of the current neighbor.
Definition: Assembly.h:2580

◆ node()

const Node* const& Assembly::node ( ) const
inline

Returns the reference to the node.

Returns
A reference. Make sure to store this as a reference!

Definition at line 506 of file Assembly.h.

Referenced by computeFaceMap(), computeSinglePointMapAD(), and MooseVariableFE< Real >::MooseVariableFE().

506 { return _current_node; }
const Node * _current_node
The current node we are working with.
Definition: Assembly.h:2582

◆ nodeNeighbor()

const Node* const& Assembly::nodeNeighbor ( ) const
inline

Returns the reference to the neighboring node.

Returns
A reference. Make sure to store this as a reference!

Definition at line 512 of file Assembly.h.

Referenced by MooseVariableFE< Real >::MooseVariableFE().

512 { return _current_neighbor_node; }
const Node * _current_neighbor_node
The current neighboring node we are working with.
Definition: Assembly.h:2584

◆ nonlocalCouplingEntries()

std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *> >& Assembly::nonlocalCouplingEntries ( )
inline

Definition at line 1264 of file Assembly.h.

1265  {
1266  return _cm_nonlocal_entry;
1267  }
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition: Assembly.h:2299

◆ normals()

const MooseArray<Point>& Assembly::normals ( ) const
inline

Returns the array of normals for quadrature points on a current side.

Returns
A reference. Make sure to store this as a reference!

Definition at line 318 of file Assembly.h.

318 { return _current_normals; }
MooseArray< Point > _current_normals
The current Normal vectors at the quadrature points.
Definition: Assembly.h:2490

◆ numExtraElemIntegers()

unsigned int Assembly::numExtraElemIntegers ( ) const
inline

Number of extra element integers Assembly tracked.

Definition at line 334 of file Assembly.h.

Referenced by reinitFE(), reinitFEFace(), and reinitNeighbor().

334 { return _extra_elem_ids.size() - 1; }
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition: Assembly.h:2497

◆ phi() [1/6]

const VariablePhiValue& Assembly::phi ( ) const
inline

Definition at line 1280 of file Assembly.h.

Referenced by copyShapes().

1280 { return _phi; }
VariablePhiValue _phi
Definition: Assembly.h:2663

◆ phi() [2/6]

const VariablePhiValue& Assembly::phi ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1286 of file Assembly.h.

1286 { return _phi; }
VariablePhiValue _phi
Definition: Assembly.h:2663

◆ phi() [3/6]

const VectorVariablePhiValue& Assembly::phi ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1333 of file Assembly.h.

1334  {
1335  return _vector_phi;
1336  }
VectorVariablePhiValue _vector_phi
Definition: Assembly.h:2680

◆ phi() [4/6]

VariablePhiValue& Assembly::phi ( const MooseVariableField< Real > &  )
inline

Definition at line 1425 of file Assembly.h.

1425 { return _phi; }
VariablePhiValue _phi
Definition: Assembly.h:2663

◆ phi() [5/6]

VectorVariablePhiValue& Assembly::phi ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1457 of file Assembly.h.

1457 { return _vector_phi; }
VectorVariablePhiValue _vector_phi
Definition: Assembly.h:2680

◆ phi() [6/6]

VariablePhiValue& Assembly::phi ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1538 of file Assembly.h.

1538 { return _phi; }
VariablePhiValue _phi
Definition: Assembly.h:2663

◆ phiFace() [1/6]

const VariablePhiValue& Assembly::phiFace ( ) const
inline

Definition at line 1295 of file Assembly.h.

Referenced by copyFaceShapes().

1295 { return _phi_face; }
VariablePhiValue _phi_face
Definition: Assembly.h:2667

◆ phiFace() [2/6]

const VariablePhiValue& Assembly::phiFace ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1296 of file Assembly.h.

1296 { return _phi_face; }
VariablePhiValue _phi_face
Definition: Assembly.h:2667

◆ phiFace() [3/6]

const VectorVariablePhiValue& Assembly::phiFace ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1354 of file Assembly.h.

1355  {
1356  return _vector_phi_face;
1357  }
VectorVariablePhiValue _vector_phi_face
Definition: Assembly.h:2686

◆ phiFace() [4/6]

VariablePhiValue& Assembly::phiFace ( const MooseVariableField< Real > &  )
inline

Definition at line 1429 of file Assembly.h.

1429 { return _phi_face; }
VariablePhiValue _phi_face
Definition: Assembly.h:2667

◆ phiFace() [5/6]

VectorVariablePhiValue& Assembly::phiFace ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1475 of file Assembly.h.

1476  {
1477  return _vector_phi_face;
1478  }
VectorVariablePhiValue _vector_phi_face
Definition: Assembly.h:2686

◆ phiFace() [6/6]

VariablePhiValue& Assembly::phiFace ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1542 of file Assembly.h.

1542 { return _phi_face; }
VariablePhiValue _phi_face
Definition: Assembly.h:2667

◆ phiFaceNeighbor() [1/5]

const VariablePhiValue& Assembly::phiFaceNeighbor ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1320 of file Assembly.h.

Referenced by copyNeighborShapes().

1321  {
1322  return _phi_face_neighbor;
1323  }
VariablePhiValue _phi_face_neighbor
Definition: Assembly.h:2675

◆ phiFaceNeighbor() [2/5]

const VectorVariablePhiValue& Assembly::phiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1399 of file Assembly.h.

1400  {
1402  }
VectorVariablePhiValue _vector_phi_face_neighbor
Definition: Assembly.h:2698

◆ phiFaceNeighbor() [3/5]

VariablePhiValue& Assembly::phiFaceNeighbor ( const MooseVariableField< Real > &  )
inline

Definition at line 1443 of file Assembly.h.

1444  {
1445  return _phi_face_neighbor;
1446  }
VariablePhiValue _phi_face_neighbor
Definition: Assembly.h:2675

◆ phiFaceNeighbor() [4/5]

VectorVariablePhiValue& Assembly::phiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1516 of file Assembly.h.

1517  {
1519  }
VectorVariablePhiValue _vector_phi_face_neighbor
Definition: Assembly.h:2698

◆ phiFaceNeighbor() [5/5]

VariablePhiValue& Assembly::phiFaceNeighbor ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1565 of file Assembly.h.

1566  {
1567  return _phi_face_neighbor;
1568  }
VariablePhiValue _phi_face_neighbor
Definition: Assembly.h:2675

◆ phiNeighbor() [1/5]

const VariablePhiValue& Assembly::phiNeighbor ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1307 of file Assembly.h.

Referenced by copyNeighborShapes().

1308  {
1309  return _phi_neighbor;
1310  }
VariablePhiValue _phi_neighbor
Definition: Assembly.h:2671

◆ phiNeighbor() [2/5]

const VectorVariablePhiValue& Assembly::phiNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1375 of file Assembly.h.

1376  {
1377  return _vector_phi_neighbor;
1378  }
VectorVariablePhiValue _vector_phi_neighbor
Definition: Assembly.h:2692

◆ phiNeighbor() [3/5]

VariablePhiValue& Assembly::phiNeighbor ( const MooseVariableField< Real > &  )
inline

Definition at line 1433 of file Assembly.h.

1433 { return _phi_neighbor; }
VariablePhiValue _phi_neighbor
Definition: Assembly.h:2671

◆ phiNeighbor() [4/5]

VectorVariablePhiValue& Assembly::phiNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1496 of file Assembly.h.

1497  {
1498  return _vector_phi_neighbor;
1499  }
VectorVariablePhiValue _vector_phi_neighbor
Definition: Assembly.h:2692

◆ phiNeighbor() [5/5]

VariablePhiValue& Assembly::phiNeighbor ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1552 of file Assembly.h.

1553  {
1554  return _phi_neighbor;
1555  }
VariablePhiValue _phi_neighbor
Definition: Assembly.h:2671

◆ physicalPoints()

const MooseArray<Point>& Assembly::physicalPoints ( ) const
inline

The current points in physical space where we have reinited through reinitAtPhysical()

Returns
A reference. Make sure to store this as a reference!

Definition at line 242 of file Assembly.h.

242 { return _current_physical_points; }
MooseArray< Point > _current_physical_points
This will be filled up with the physical points passed into reinitAtPhysical() if it is called...
Definition: Assembly.h:2606

◆ prepare()

void Assembly::prepare ( )

Definition at line 2713 of file Assembly.C.

2714 {
2716  prepareResidual();
2717 }
void prepareJacobianBlock()
Sizes and zeroes the Jacobian blocks used for the current element.
Definition: Assembly.C:2682
void prepareResidual()
Sizes and zeroes the residual for the current element.
Definition: Assembly.C:2704

◆ prepareBlock()

void Assembly::prepareBlock ( unsigned int  ivar,
unsigned  jvar,
const std::vector< dof_id_type > &  dof_indices 
)

Definition at line 2894 of file Assembly.C.

2897 {
2898  const auto & iv = _sys.getVariable(_tid, ivar);
2899  const auto & jv = _sys.getVariable(_tid, jvar);
2900  const unsigned int ivn = iv.number();
2901  const unsigned int jvn = jv.number();
2902  const unsigned int icount = iv.count();
2903  unsigned int jcount = jv.count();
2904  if (ivn == jvn && _component_block_diagonal[ivn])
2905  jcount = 1;
2906 
2907  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2908  {
2909  jacobianBlock(ivn, jvn, LocalDataKey{}, tag)
2910  .resize(dof_indices.size() * icount, dof_indices.size() * jcount);
2911  jacobianBlockUsed(tag, ivn, jvn, false);
2912  }
2913 
2914  for (auto & tag_Re : _sub_Re)
2915  tag_Re[ivn].resize(dof_indices.size() * icount);
2916 }
SystemBase & _sys
Definition: Assembly.h:2272
unsigned int number() const
Get variable number coming from libMesh.
void jacobianBlockUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not Jacobian coupling between ivar and jvar is used to the value used.
Definition: Assembly.h:2199
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
DenseMatrix< Number > & jacobianBlock(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block for a pair of variables and a tag.
Definition: Assembly.h:1103
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2620
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2301
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:90

◆ prepareBlockNonlocal()

void Assembly::prepareBlockNonlocal ( unsigned int  ivar,
unsigned  jvar,
const std::vector< dof_id_type > &  idof_indices,
const std::vector< dof_id_type > &  jdof_indices 
)

Definition at line 2919 of file Assembly.C.

2923 {
2924  const auto & iv = _sys.getVariable(_tid, ivar);
2925  const auto & jv = _sys.getVariable(_tid, jvar);
2926  const unsigned int ivn = iv.number();
2927  const unsigned int jvn = jv.number();
2928  const unsigned int icount = iv.count();
2929  unsigned int jcount = jv.count();
2930  if (ivn == jvn && _component_block_diagonal[ivn])
2931  jcount = 1;
2932 
2933  for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
2934  tag < _jacobian_block_nonlocal_used.size();
2935  tag++)
2936  {
2937  jacobianBlockNonlocal(ivn, jvn, LocalDataKey{}, tag)
2938  .resize(idof_indices.size() * icount, jdof_indices.size() * jcount);
2939 
2940  jacobianBlockNonlocalUsed(tag, ivn, jvn, false);
2941  }
2942 }
SystemBase & _sys
Definition: Assembly.h:2272
DenseMatrix< Number > & jacobianBlockNonlocal(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block from non-local contribution for a pair of variables and a tag...
Definition: Assembly.h:1114
unsigned int number() const
Get variable number coming from libMesh.
void jacobianBlockNonlocalUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not nonlocal Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2253
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2302
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:90

◆ prepareJacobianBlock()

void Assembly::prepareJacobianBlock ( )

Sizes and zeroes the Jacobian blocks used for the current element.

Definition at line 2682 of file Assembly.C.

Referenced by prepare(), and reinitFVFace().

2683 {
2684  for (const auto & it : _cm_ff_entry)
2685  {
2686  MooseVariableFEBase & ivar = *(it.first);
2687  MooseVariableFEBase & jvar = *(it.second);
2688 
2689  unsigned int vi = ivar.number();
2690  unsigned int vj = jvar.number();
2691 
2692  unsigned int jcount = (vi == vj && _component_block_diagonal[vi]) ? 1 : jvar.count();
2693 
2694  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2695  {
2696  jacobianBlock(vi, vj, LocalDataKey{}, tag)
2697  .resize(ivar.dofIndices().size() * ivar.count(), jvar.dofIndices().size() * jcount);
2698  jacobianBlockUsed(tag, vi, vj, false);
2699  }
2700  }
2701 }
unsigned int number() const
Get variable number coming from libMesh.
void jacobianBlockUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not Jacobian coupling between ivar and jvar is used to the value used.
Definition: Assembly.h:2199
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one...
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
This class provides an interface for common operations on field variables of both FE and FV types wit...
DenseMatrix< Number > & jacobianBlock(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block for a pair of variables and a tag.
Definition: Assembly.h:1103
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2301
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.

◆ prepareLowerD()

void Assembly::prepareLowerD ( )

Prepare the Jacobians and residuals for a lower dimensional element.

This method may be called when performing mortar finite element simulations

Definition at line 2838 of file Assembly.C.

Referenced by SubProblem::reinitLowerDElem().

2839 {
2840  for (const auto & it : _cm_ff_entry)
2841  {
2842  MooseVariableFEBase & ivar = *(it.first);
2843  MooseVariableFEBase & jvar = *(it.second);
2844 
2845  unsigned int vi = ivar.number();
2846  unsigned int vj = jvar.number();
2847 
2848  unsigned int jcount = (vi == vj && _component_block_diagonal[vi]) ? 1 : jvar.count();
2849 
2850  for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
2851  tag++)
2852  {
2853  // To cover all possible cases we should have 9 combinations below for every 2-permutation
2854  // of Lower,Secondary,Primary. However, 4 cases will in general be covered by calls to
2855  // prepare() and prepareNeighbor(). These calls will cover SecondarySecondary
2856  // (ElementElement), SecondaryPrimary (ElementNeighbor), PrimarySecondary (NeighborElement),
2857  // and PrimaryPrimary (NeighborNeighbor). With these covered we only need to prepare the 5
2858  // remaining below
2859 
2860  // derivatives w.r.t. lower dimensional residuals
2861  jacobianBlockMortar(Moose::LowerLower, vi, vj, LocalDataKey{}, tag)
2862  .resize(ivar.dofIndicesLower().size() * ivar.count(),
2863  jvar.dofIndicesLower().size() * jcount);
2864 
2865  jacobianBlockMortar(Moose::LowerSecondary, vi, vj, LocalDataKey{}, tag)
2866  .resize(ivar.dofIndicesLower().size() * ivar.count(),
2867  jvar.dofIndices().size() * jvar.count());
2868 
2869  jacobianBlockMortar(Moose::LowerPrimary, vi, vj, LocalDataKey{}, tag)
2870  .resize(ivar.dofIndicesLower().size() * ivar.count(),
2871  jvar.dofIndicesNeighbor().size() * jvar.count());
2872 
2873  // derivatives w.r.t. interior secondary residuals
2874  jacobianBlockMortar(Moose::SecondaryLower, vi, vj, LocalDataKey{}, tag)
2875  .resize(ivar.dofIndices().size() * ivar.count(),
2876  jvar.dofIndicesLower().size() * jvar.count());
2877 
2878  // derivatives w.r.t. interior primary residuals
2879  jacobianBlockMortar(Moose::PrimaryLower, vi, vj, LocalDataKey{}, tag)
2880  .resize(ivar.dofIndicesNeighbor().size() * ivar.count(),
2881  jvar.dofIndicesLower().size() * jvar.count());
2882 
2883  jacobianBlockLowerUsed(tag, vi, vj, false);
2884  }
2885  }
2886 
2887  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2888  for (const auto & var : vars)
2889  for (auto & tag_Rl : _sub_Rl)
2890  tag_Rl[var->number()].resize(var->dofIndicesLower().size() * var->count());
2891 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
unsigned int number() const
Get variable number coming from libMesh.
void jacobianBlockLowerUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not lower Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2235
char ** vars
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one...
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
This class provides an interface for common operations on field variables of both FE and FV types wit...
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
DenseMatrix< Number > & jacobianBlockMortar(Moose::ConstraintJacobianType type, unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Returns the jacobian block for the given mortar Jacobian type.
Definition: Assembly.C:3153
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition: Assembly.h:2623
virtual const std::vector< dof_id_type > & dofIndicesNeighbor() const =0
Get neighbor DOF indices for currently selected element.
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
virtual const std::vector< dof_id_type > & dofIndicesLower() const =0
Get dof indices for the current lower dimensional element (this is meaningful when performing mortar ...
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_lower_used
Flag that indicates if the jacobian block for the lower dimensional element was used.
Definition: Assembly.h:2306

◆ prepareNeighbor()

void Assembly::prepareNeighbor ( )

Definition at line 2799 of file Assembly.C.

Referenced by reinitFVFace(), and SubProblem::reinitNeighborFaceRef().

2800 {
2801  for (const auto & it : _cm_ff_entry)
2802  {
2803  MooseVariableFEBase & ivar = *(it.first);
2804  MooseVariableFEBase & jvar = *(it.second);
2805 
2806  unsigned int vi = ivar.number();
2807  unsigned int vj = jvar.number();
2808 
2809  unsigned int jcount = (vi == vj && _component_block_diagonal[vi]) ? 1 : jvar.count();
2810 
2811  for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
2812  tag < _jacobian_block_neighbor_used.size();
2813  tag++)
2814  {
2815  jacobianBlockNeighbor(Moose::ElementNeighbor, vi, vj, LocalDataKey{}, tag)
2816  .resize(ivar.dofIndices().size() * ivar.count(),
2817  jvar.dofIndicesNeighbor().size() * jcount);
2818 
2819  jacobianBlockNeighbor(Moose::NeighborElement, vi, vj, LocalDataKey{}, tag)
2820  .resize(ivar.dofIndicesNeighbor().size() * ivar.count(),
2821  jvar.dofIndices().size() * jcount);
2822 
2823  jacobianBlockNeighbor(Moose::NeighborNeighbor, vi, vj, LocalDataKey{}, tag)
2824  .resize(ivar.dofIndicesNeighbor().size() * ivar.count(),
2825  jvar.dofIndicesNeighbor().size() * jcount);
2826 
2827  jacobianBlockNeighborUsed(tag, vi, vj, false);
2828  }
2829  }
2830 
2831  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2832  for (const auto & var : vars)
2833  for (auto & tag_Rn : _sub_Rn)
2834  tag_Rn[var->number()].resize(var->dofIndicesNeighbor().size() * var->count());
2835 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
unsigned int number() const
Get variable number coming from libMesh.
DenseMatrix< Number > & jacobianBlockNeighbor(Moose::DGJacobianType type, unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block of a DG Jacobian type for a pair of variables and a tag. ...
Definition: Assembly.C:3112
char ** vars
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2621
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one...
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
This class provides an interface for common operations on field variables of both FE and FV types wit...
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
virtual const std::vector< dof_id_type > & dofIndicesNeighbor() const =0
Get neighbor DOF indices for currently selected element.
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
void jacobianBlockNeighborUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not neighbor Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2217
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_neighbor_used
Flag that indicates if the jacobian block for neighbor was used.
Definition: Assembly.h:2304

◆ prepareNonlocal()

void Assembly::prepareNonlocal ( )

Definition at line 2720 of file Assembly.C.

2721 {
2722  for (const auto & it : _cm_nonlocal_entry)
2723  {
2724  MooseVariableFEBase & ivar = *(it.first);
2725  MooseVariableFEBase & jvar = *(it.second);
2726 
2727  unsigned int vi = ivar.number();
2728  unsigned int vj = jvar.number();
2729 
2730  unsigned int jcount = (vi == vj && _component_block_diagonal[vi]) ? 1 : jvar.count();
2731 
2732  for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
2733  tag < _jacobian_block_nonlocal_used.size();
2734  tag++)
2735  {
2736  jacobianBlockNonlocal(vi, vj, LocalDataKey{}, tag)
2737  .resize(ivar.dofIndices().size() * ivar.count(), jvar.allDofIndices().size() * jcount);
2738  jacobianBlockNonlocalUsed(tag, vi, vj, false);
2739  }
2740  }
2741 }
DenseMatrix< Number > & jacobianBlockNonlocal(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block from non-local contribution for a pair of variables and a tag...
Definition: Assembly.h:1114
unsigned int number() const
Get variable number coming from libMesh.
void jacobianBlockNonlocalUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not nonlocal Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2253
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one...
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2302
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
This class provides an interface for common operations on field variables of both FE and FV types wit...
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
const std::vector< dof_id_type > & allDofIndices() const
Get all global dofindices for the variable.
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition: Assembly.h:2299

◆ prepareOffDiagScalar()

void Assembly::prepareOffDiagScalar ( )

Definition at line 2969 of file Assembly.C.

Referenced by NodalScalarKernel::reinit().

2970 {
2971  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2972  const std::vector<MooseVariableScalar *> & scalar_vars = _sys.getScalarVariables(_tid);
2973 
2974  for (const auto & ivar : scalar_vars)
2975  {
2976  auto idofs = ivar->dofIndices().size();
2977 
2978  for (const auto & jvar : vars)
2979  {
2980  auto jdofs = jvar->dofIndices().size() * jvar->count();
2981  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2982  {
2983  jacobianBlock(ivar->number(), jvar->number(), LocalDataKey{}, tag).resize(idofs, jdofs);
2984  jacobianBlockUsed(tag, ivar->number(), jvar->number(), false);
2985 
2986  jacobianBlock(jvar->number(), ivar->number(), LocalDataKey{}, tag).resize(jdofs, idofs);
2987  jacobianBlockUsed(tag, jvar->number(), ivar->number(), false);
2988  }
2989  }
2990  }
2991 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition: SystemBase.h:756
void jacobianBlockUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not Jacobian coupling between ivar and jvar is used to the value used.
Definition: Assembly.h:2199
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
DenseMatrix< Number > & jacobianBlock(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block for a pair of variables and a tag.
Definition: Assembly.h:1103
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2301

◆ prepareResidual()

void Assembly::prepareResidual ( )

Sizes and zeroes the residual for the current element.

Definition at line 2704 of file Assembly.C.

Referenced by prepare(), and reinitFVFace().

2705 {
2706  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2707  for (const auto & var : vars)
2708  for (auto & tag_Re : _sub_Re)
2709  tag_Re[var->number()].resize(var->dofIndices().size() * var->count());
2710 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2620

◆ prepareScalar()

void Assembly::prepareScalar ( )

Definition at line 2945 of file Assembly.C.

Referenced by FEProblemBase::reinitScalars().

2946 {
2947  const std::vector<MooseVariableScalar *> & vars = _sys.getScalarVariables(_tid);
2948  for (const auto & ivar : vars)
2949  {
2950  auto idofs = ivar->dofIndices().size();
2951 
2952  for (auto & tag_Re : _sub_Re)
2953  tag_Re[ivar->number()].resize(idofs);
2954 
2955  for (const auto & jvar : vars)
2956  {
2957  auto jdofs = jvar->dofIndices().size();
2958 
2959  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2960  {
2961  jacobianBlock(ivar->number(), jvar->number(), LocalDataKey{}, tag).resize(idofs, jdofs);
2962  jacobianBlockUsed(tag, ivar->number(), jvar->number(), false);
2963  }
2964  }
2965  }
2966 }
SystemBase & _sys
Definition: Assembly.h:2272
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition: SystemBase.h:756
void jacobianBlockUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not Jacobian coupling between ivar and jvar is used to the value used.
Definition: Assembly.h:2199
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
DenseMatrix< Number > & jacobianBlock(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block for a pair of variables and a tag.
Definition: Assembly.h:1103
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2620
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2301

◆ prepareVariable()

void Assembly::prepareVariable ( MooseVariableFieldBase var)

Used for preparing the dense residual and jacobian blocks for one particular variable.

Parameters
varThe variable that needs to have its datastructures prepared

Definition at line 2744 of file Assembly.C.

Referenced by SystemBase::prepareFace().

2745 {
2746  for (const auto & it : _cm_ff_entry)
2747  {
2748  MooseVariableFEBase & ivar = *(it.first);
2749  MooseVariableFEBase & jvar = *(it.second);
2750 
2751  unsigned int vi = ivar.number();
2752  unsigned int vj = jvar.number();
2753 
2754  unsigned int jcount = (vi == vj && _component_block_diagonal[vi]) ? 1 : jvar.count();
2755 
2756  if (vi == var->number() || vj == var->number())
2757  {
2758  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2759  {
2760  jacobianBlock(vi, vj, LocalDataKey{}, tag)
2761  .resize(ivar.dofIndices().size() * ivar.count(), jvar.dofIndices().size() * jcount);
2762  jacobianBlockUsed(tag, vi, vj, false);
2763  }
2764  }
2765  }
2766 
2767  for (auto & tag_Re : _sub_Re)
2768  tag_Re[var->number()].resize(var->dofIndices().size() * var->count());
2769 }
unsigned int number() const
Get variable number coming from libMesh.
void jacobianBlockUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not Jacobian coupling between ivar and jvar is used to the value used.
Definition: Assembly.h:2199
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one...
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
This class provides an interface for common operations on field variables of both FE and FV types wit...
DenseMatrix< Number > & jacobianBlock(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block for a pair of variables and a tag.
Definition: Assembly.h:1103
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2291
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2620
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2301
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.

◆ prepareVariableNonlocal()

void Assembly::prepareVariableNonlocal ( MooseVariableFieldBase var)

Definition at line 2772 of file Assembly.C.

Referenced by SystemBase::prepareFace().

2773 {
2774  for (const auto & it : _cm_nonlocal_entry)
2775  {
2776  MooseVariableFEBase & ivar = *(it.first);
2777  MooseVariableFEBase & jvar = *(it.second);
2778 
2779  unsigned int vi = ivar.number();
2780  unsigned int vj = jvar.number();
2781 
2782  unsigned int jcount = (vi == vj && _component_block_diagonal[vi]) ? 1 : jvar.count();
2783 
2784  if (vi == var->number() || vj == var->number())
2785  {
2786  for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
2787  tag < _jacobian_block_nonlocal_used.size();
2788  tag++)
2789  {
2790  jacobianBlockNonlocal(vi, vj, LocalDataKey{}, tag)
2791  .resize(ivar.dofIndices().size() * ivar.count(), jvar.allDofIndices().size() * jcount);
2792  jacobianBlockNonlocalUsed(tag, vi, vj);
2793  }
2794  }
2795  }
2796 }
DenseMatrix< Number > & jacobianBlockNonlocal(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block from non-local contribution for a pair of variables and a tag...
Definition: Assembly.h:1114
unsigned int number() const
Get variable number coming from libMesh.
void jacobianBlockNonlocalUsed(TagID tag, unsigned int ivar, unsigned int jvar, bool used)
Sets whether or not nonlocal Jacobian coupling between ivar and jvar is used to the value used...
Definition: Assembly.h:2253
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one...
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2302
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778
This class provides an interface for common operations on field variables of both FE and FV types wit...
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
const std::vector< dof_id_type > & allDofIndices() const
Get all global dofindices for the variable.
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition: Assembly.h:2299

◆ processLocalResidual()

void Assembly::processLocalResidual ( DenseVector< Number > &  res_block,
std::vector< dof_id_type > &  dof_indices,
const std::vector< Real > &  scaling_factor,
bool  is_nodal 
)
private

Appling scaling, constraints to the local residual block and populate the full DoF indices for array variable.

Definition at line 3213 of file Assembly.C.

Referenced by addResidualBlock(), cacheResidualBlock(), and setResidualBlock().

3217 {
3218  // For an array variable, ndof is the number of dofs of the zero-th component and
3219  // ntdof is the number of dofs of all components.
3220  // For standard or vector variables, ndof will be the same as ntdof.
3221  auto ndof = dof_indices.size();
3222  auto ntdof = res_block.size();
3223  auto count = ntdof / ndof;
3224  mooseAssert(count == scaling_factor.size(), "Inconsistent of number of components");
3225  mooseAssert(count * ndof == ntdof, "Inconsistent of number of components");
3226  if (count > 1)
3227  {
3228  // expanding dof indices
3229  dof_indices.resize(ntdof);
3230  unsigned int p = 0;
3231  for (MooseIndex(count) j = 0; j < count; ++j)
3232  for (MooseIndex(ndof) i = 0; i < ndof; ++i)
3233  {
3234  dof_indices[p] = dof_indices[i] + (is_nodal ? j : j * ndof);
3235  res_block(p) *= scaling_factor[j];
3236  ++p;
3237  }
3238  }
3239  else
3240  {
3241  if (scaling_factor[0] != 1.0)
3242  res_block *= scaling_factor[0];
3243  }
3244 
3245  _dof_map.constrain_element_vector(res_block, dof_indices, false);
3246 }
void constrain_element_vector(DenseVector< Number > &rhs, std::vector< dof_id_type > &dofs, bool asymmetric_constraint_rows=true) const
virtual unsigned int size() const override final
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2308

◆ qPoints()

const MooseArray<Point>& Assembly::qPoints ( ) const
inline

Returns the reference to the quadrature points.

Returns
A reference. Make sure to store this as a reference!

Definition at line 230 of file Assembly.h.

230 { return _current_q_points; }
MooseArray< Point > _current_q_points
The current list of quadrature points.
Definition: Assembly.h:2378

◆ qPointsFace()

const MooseArray<Point>& Assembly::qPointsFace ( ) const
inline

Returns the reference to the current quadrature being used.

Returns
A reference. Make sure to store this as a reference!

Definition at line 306 of file Assembly.h.

Referenced by GeometricSearchData::generateQuadratureNodes(), and GeometricSearchData::updateQuadratureNodes().

306 { return _current_q_points_face; }
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2486

◆ qPointsFaceNeighbor()

const MooseArray<Point>& Assembly::qPointsFaceNeighbor ( ) const
inline

Returns the reference to the current quadrature points being used on the neighbor face.

Returns
A reference. Make sure to store this as a reference!

Definition at line 500 of file Assembly.h.

MooseArray< Point > _current_q_points_face_neighbor
The current quadrature points on the neighbor face.
Definition: Assembly.h:2525

◆ qPointsMortar()

const std::vector<Point>& Assembly::qPointsMortar ( ) const
inline

Returns the reference to the mortar segment element quadrature points.

Returns
A reference. Make sure to store this as a reference!

Definition at line 236 of file Assembly.h.

236 { return _fe_msm->get_xyz(); }
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
Definition: Assembly.h:2541

◆ qRule()

const libMesh::QBase* const& Assembly::qRule ( ) const
inline

Returns the reference to the current quadrature being used.

Returns
A reference to the pointer. Make sure to store this as a reference!

Definition at line 218 of file Assembly.h.

Referenced by MooseVariableFE< Real >::MooseVariableFE().

218 { return constify_ref(_current_qrule); }
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2370

◆ qruleArbitraryFace()

ArbitraryQuadrature * Assembly::qruleArbitraryFace ( const Elem elem,
unsigned int  side 
)
private

Definition at line 1921 of file Assembly.C.

Referenced by reinitElemFaceRef().

1922 {
1923  return qruleFaceHelper<ArbitraryQuadrature>(
1924  elem, side, [](QRules & q) { return q.arbitrary_face.get(); });
1925 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:407

◆ qRuleFace()

const libMesh::QBase* const& Assembly::qRuleFace ( ) const
inline

Returns the reference to the current quadrature being used on a current face.

Returns
A reference. Make sure to store this as a reference!

Definition at line 294 of file Assembly.h.

Referenced by MooseVariableFE< Real >::MooseVariableFE().

libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2482
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112

◆ qruleFace()

QBase * Assembly::qruleFace ( const Elem elem,
unsigned int  side 
)
private

This is an abstraction over the internal qrules function.

This is necessary for faces because (nodes of) faces can exists in more than one subdomain. When this is the case, we need to use the quadrature rule from the subdomain that has the highest specified quadrature order. So when you need to access a face quadrature rule, you should retrieve it via this function.

Definition at line 1915 of file Assembly.C.

Referenced by reinitElemFaceRef().

1916 {
1917  return qruleFaceHelper<QBase>(elem, side, [](QRules & q) { return q.face.get(); });
1918 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:407

◆ qruleFaceHelper()

template<typename T >
T* Assembly::qruleFaceHelper ( const Elem *  elem,
unsigned int  side,
std::function< T *(QRules &)>  rule_fn 
)
inlineprivate

Definition at line 2431 of file Assembly.h.

2432  {
2433  auto dim = elem->dim();
2434  auto neighbor = elem->neighbor_ptr(side);
2435  auto q = rule_fn(qrules(dim, elem->subdomain_id()));
2436  if (!neighbor)
2437  return q;
2438 
2439  // find the maximum face quadrature order for all blocks the face is in
2440  auto neighbor_block = neighbor->subdomain_id();
2441  if (neighbor_block == elem->subdomain_id())
2442  return q;
2443 
2444  auto q_neighbor = rule_fn(qrules(dim, neighbor_block));
2445  if (q->get_order() > q_neighbor->get_order())
2446  return q;
2447  return q_neighbor;
2448  }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2450
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:431
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:407

◆ qRuleMortar()

const libMesh::QBase* const& Assembly::qRuleMortar ( ) const
inline

Returns a reference to the quadrature rule for the mortar segments.

Definition at line 673 of file Assembly.h.

Referenced by Moose::Mortar::loopOverMortarSegments().

673 { return constify_ref(_qrule_msm); }
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition: Assembly.h:2546

◆ qRuleNeighbor()

const libMesh::QBase* const& Assembly::qRuleNeighbor ( ) const
inline

Returns the reference to the current quadrature being used on a current neighbor.

Returns
A reference. Make sure to store this as a reference!

Definition at line 479 of file Assembly.h.

Referenced by MooseVariableFE< Real >::MooseVariableFE().

480  {
482  }
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition: Assembly.h:2523
static const T *const & constify_ref(T *const &inref)
Workaround for C++ compilers thinking they can&#39;t just cast a const-reference-to-pointer to const-refe...
Definition: Assembly.h:112

◆ qrules() [1/2]

QRules& Assembly::qrules ( unsigned int  dim)
inlineprivate

Definition at line 2450 of file Assembly.h.

Referenced by attachQRuleElem(), attachQRuleFace(), qruleFaceHelper(), qrules(), reinitFVFace(), reinitLowerDElem(), reinitNeighbor(), and reinitNeighborFaceRef().

2450 { return qrules(dim, _current_subdomain_id); }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2450
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition: Assembly.h:2558

◆ qrules() [2/2]

QRules& Assembly::qrules ( unsigned int  dim,
SubdomainID  block 
)
inlineprivate

This is a helper function for accessing quadrature rules for a particular dimensionality of element.

All access to quadrature rules in Assembly should be done via this accessor function.

Definition at line 2455 of file Assembly.h.

2456  {
2457  if (_qrules.find(block) == _qrules.end())
2458  {
2459  mooseAssert(_qrules.find(Moose::ANY_BLOCK_ID) != _qrules.end(),
2460  "missing quadrature rules for specified block");
2461  mooseAssert(_qrules[Moose::ANY_BLOCK_ID].size() > dim,
2462  "quadrature rules not sized property for dimension");
2463  return _qrules[Moose::ANY_BLOCK_ID][dim];
2464  }
2465  mooseAssert(_qrules.find(block) != _qrules.end(),
2466  "missing quadrature rules for specified block");
2467  mooseAssert(_qrules[block].size() > dim, "quadrature rules not sized property for dimension");
2468  return _qrules[block][dim];
2469  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::unordered_map< SubdomainID, std::vector< QRules > > _qrules
Holds quadrature rules for each dimension.
Definition: Assembly.h:2419
const SubdomainID ANY_BLOCK_ID
Definition: MooseTypes.C:19

◆ reinit() [1/5]

void Assembly::reinit ( const Elem *  elem)

◆ reinit() [2/5]

void Assembly::reinit ( const Elem *  elem,
const std::vector< Point > &  reference_points 
)

Reinitialize the assembly data at specific points in the reference element.

◆ reinit() [3/5]

void Assembly::reinit ( const Elem *  elem,
unsigned int  side 
)

Reinitialize the assembly data on an side of an element.

◆ reinit() [4/5]

void Assembly::reinit ( const Elem *  elem,
unsigned int  side,
const std::vector< Point > &  reference_points 
)

Reinitialize the assembly data on the side of a element at the custom reference points.

◆ reinit() [5/5]

void Assembly::reinit ( const Node *  node)

Reinitialize assembly data for a node.

◆ reinitAtPhysical()

void Assembly::reinitAtPhysical ( const Elem elem,
const std::vector< Point > &  physical_points 
)

Reinitialize the assembly data at specific physical point in the given element.

Definition at line 1790 of file Assembly.C.

1791 {
1792  _current_elem = elem;
1793  _current_neighbor_elem = nullptr;
1795  "current subdomain has been set incorrectly");
1797 
1798  FEMap::inverse_map(elem->dim(), elem, physical_points, _temp_reference_points);
1799 
1801 
1802  // Save off the physical points
1803  _current_physical_points = physical_points;
1804 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
MooseArray< Point > _current_physical_points
This will be filled up with the physical points passed into reinitAtPhysical() if it is called...
Definition: Assembly.h:2606
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
Definition: Assembly.h:2586
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition: Assembly.h:2570
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2556
void reinit(const Elem *elem)
Reinitialize objects (JxW, q_points, ...) for an elements.
std::vector< Point > _temp_reference_points
Temporary work data for reinitAtPhysical()
Definition: Assembly.h:2784
subdomain_id_type subdomain_id() const
virtual unsigned short dim() const=0
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition: Assembly.h:2558

◆ reinitDual()

void Assembly::reinitDual ( const Elem elem,
const std::vector< Point > &  pts,
const std::vector< Real > &  JxW 
)

Reintialize dual basis coefficients based on a customized quadrature rule.

Definition at line 2270 of file Assembly.C.

Referenced by Moose::Mortar::loopOverMortarSegments().

2273 {
2274  const unsigned int elem_dim = elem->dim();
2275  mooseAssert(elem_dim == _mesh_dimension - 1,
2276  "Dual shape functions should only be computed on lower dimensional face elements");
2277 
2278  for (const auto & it : _fe_lower[elem_dim])
2279  {
2280  FEBase & fe_lower = *it.second;
2281  // We use customized quadrature rule for integration along the mortar segment elements
2282  fe_lower.set_calculate_default_dual_coeff(false);
2283  fe_lower.reinit_dual_shape_coeffs(elem, pts, JxW);
2284  }
2285 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
unsigned int _mesh_dimension
Definition: Assembly.h:2314
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2516
const MooseArray< Real > & JxW() const
Returns the reference to the transformed jacobian weights.
Definition: Assembly.h:248
void set_calculate_default_dual_coeff(const bool val)
virtual unsigned short dim() const=0
virtual void reinit_dual_shape_coeffs(const Elem *, const std::vector< Point > &, const std::vector< Real > &)

◆ reinitElemAndNeighbor()

void Assembly::reinitElemAndNeighbor ( const Elem elem,
unsigned int  side,
const Elem neighbor,
unsigned int  neighbor_side,
const std::vector< Point > *  neighbor_reference_points = nullptr 
)

Reinitialize an element and its neighbor along a particular side.

Parameters
elemElement being reinitialized
sideSide of the element
neighborNeighbor facing the element on the side 'side'
neighbor_sideThe side id on the neighboring element.
neighbor_reference_pointsOptional argument specifying the neighbor reference points. If not passed, then neighbor reference points will be determined by doing an inverse map based on the physical location of the elem quadrature points

Definition at line 1992 of file Assembly.C.

1997 {
1998  _current_neighbor_side = neighbor_side;
1999 
2000  reinit(elem, side);
2001 
2002  unsigned int neighbor_dim = neighbor->dim();
2003 
2004  if (neighbor_reference_points)
2005  _current_neighbor_ref_points = *neighbor_reference_points;
2006  else
2007  FEMap::inverse_map(
2009 
2011 
2014 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
std::vector< Point > _current_neighbor_ref_points
The current reference points on the neighbor element.
Definition: Assembly.h:2864
void reinitFEFaceNeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Definition: Assembly.C:1571
void reinit(const Elem *elem)
Reinitialize objects (JxW, q_points, ...) for an elements.
unsigned int _current_neighbor_side
The current side of the selected neighboring element (valid only when working with sides) ...
Definition: Assembly.h:2574
void reinitNeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Reinitializes the neighbor side using reference coordinates.
Definition: Assembly.C:1685
std::vector< T > stdVector() const
Extremely inefficient way to produce a std::vector from a MooseArray!
Definition: MooseArray.h:344
libMesh::ElemSideBuilder _current_neighbor_side_elem_builder
In place side element builder for _current_neighbor_side_elem.
Definition: Assembly.h:2839
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:431
const Elem * _current_neighbor_side_elem
The current side element of the ncurrent neighbor element.
Definition: Assembly.h:2576
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:407
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2486

◆ reinitElemFaceRef()

void Assembly::reinitElemFaceRef ( const Elem elem,
unsigned int  elem_side,
Real  tolerance,
const std::vector< Point > *const  pts = nullptr,
const std::vector< Real > *const  weights = nullptr 
)

Reinitialize FE data for the given element on the given side, optionally with a given set of reference points.

Definition at line 2017 of file Assembly.C.

Referenced by SubProblem::reinitElemFaceRef().

2022 {
2023  _current_elem = elem;
2024 
2025  unsigned int elem_dim = elem->dim();
2026 
2027  // Attach the quadrature rules
2028  if (pts)
2029  {
2030  auto face_rule = qruleArbitraryFace(elem, elem_side);
2031  face_rule->setPoints(*pts);
2032  setFaceQRule(face_rule, elem_dim);
2033  }
2034  else
2035  {
2036  auto rule = qruleFace(elem, elem_side);
2037  if (_current_qrule_face != rule)
2038  setFaceQRule(rule, elem_dim);
2039  }
2040 
2041  // reinit face
2042  for (const auto & it : _fe_face[elem_dim])
2043  {
2044  FEBase & fe_face = *it.second;
2045  FEType fe_type = it.first;
2046  FEShapeData & fesd = *_fe_shape_data_face[fe_type];
2047 
2048  fe_face.reinit(elem, elem_side, tolerance, pts, weights);
2049 
2050  _current_fe_face[fe_type] = &fe_face;
2051 
2052  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face.get_phi()));
2053  fesd._grad_phi.shallowCopy(
2054  const_cast<std::vector<std::vector<RealGradient>> &>(fe_face.get_dphi()));
2055  if (_need_second_derivative_neighbor.count(fe_type))
2056  fesd._second_phi.shallowCopy(
2057  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_d2phi()));
2058  }
2059  for (const auto & it : _vector_fe_face[elem_dim])
2060  {
2061  FEVectorBase & fe_face = *it.second;
2062  const FEType & fe_type = it.first;
2063 
2064  _current_vector_fe_face[fe_type] = &fe_face;
2065 
2066  VectorFEShapeData & fesd = *_vector_fe_shape_data_face[fe_type];
2067 
2068  fe_face.reinit(elem, elem_side, tolerance, pts, weights);
2069 
2070  fesd._phi.shallowCopy(
2071  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_phi()));
2072  fesd._grad_phi.shallowCopy(
2073  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_dphi()));
2074  if (_need_second_derivative.count(fe_type))
2075  fesd._second_phi.shallowCopy(
2076  const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe_face.get_d2phi()));
2077  if (_need_curl.count(fe_type))
2078  fesd._curl_phi.shallowCopy(
2079  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_curl_phi()));
2080  if (_need_face_div.count(fe_type))
2081  fesd._div_phi.shallowCopy(
2082  const_cast<std::vector<std::vector<Real>> &>(fe_face.get_div_phi()));
2083  }
2084  if (!_unique_fe_face_helper.empty())
2085  {
2086  mooseAssert(elem_dim < _unique_fe_face_helper.size(), "We should be in bounds here");
2087  _unique_fe_face_helper[elem_dim]->reinit(elem, elem_side, tolerance, pts, weights);
2088  }
2089 
2090  // During that last loop the helper objects will have been reinitialized
2092  const_cast<std::vector<Point> &>(_holder_fe_face_helper[elem_dim]->get_xyz()));
2094  const_cast<std::vector<Point> &>(_holder_fe_face_helper[elem_dim]->get_normals()));
2095  _current_tangents.shallowCopy(const_cast<std::vector<std::vector<Point>> &>(
2096  _holder_fe_face_helper[elem_dim]->get_tangents()));
2097  // Note that if the user did pass in points and not weights to this method, JxW will be garbage
2098  // and should not be used
2100  const_cast<std::vector<Real> &>(_holder_fe_face_helper[elem_dim]->get_JxW()));
2103  const_cast<std::vector<Real> &>(_holder_fe_face_helper[elem_dim]->get_curvatures()));
2104 
2105  computeADFace(*elem, elem_side);
2106 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2474
MooseArray< Real > _curvatures
Definition: Assembly.h:2809
virtual_for_inffe const std::vector< std::vector< OutputDivergence > > & get_div_phi() const
void setFaceQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for face integration.
Definition: Assembly.C:674
ArbitraryQuadrature * qruleArbitraryFace(const Elem *elem, unsigned int side)
Definition: Assembly.C:1921
std::map< FEType, FEBase * > _current_fe_face
The "face" fe object that matches the current elem.
Definition: Assembly.h:2344
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2488
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2556
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
Definition: Assembly.h:2330
std::map< FEType, FEVectorBase * > _current_vector_fe_face
The "face" vector fe object that matches the current elem.
Definition: Assembly.h:2353
void shallowCopy(const MooseArray &rhs)
Doesn&#39;t actually make a copy of the data.
Definition: MooseArray.h:296
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2482
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826
const std::vector< std::vector< OutputGradient > > & get_dphi() const
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2734
MooseArray< std::vector< Point > > _current_tangents
The current tangent vectors at the quadrature points.
Definition: Assembly.h:2494
bool _calculate_curvatures
Definition: Assembly.h:2819
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
std::set< FEType > _need_curl
Definition: Assembly.h:2827
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2476
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
libMesh::QBase * qruleFace(const Elem *elem, unsigned int side)
This is an abstraction over the internal qrules function.
Definition: Assembly.C:1915
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
MooseArray< Point > _current_normals
The current Normal vectors at the quadrature points.
Definition: Assembly.h:2490
virtual unsigned short dim() const=0
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2726
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2478
void computeADFace(const Elem &elem, const unsigned int side)
compute AD things on an element face
Definition: Assembly.C:2109
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2486
std::set< FEType > _need_face_div
Definition: Assembly.h:2829
virtual_for_inffe const std::vector< std::vector< OutputShape > > & get_curl_phi() const
const std::vector< std::vector< OutputShape > > & get_phi() const

◆ reinitFE()

void Assembly::reinitFE ( const Elem elem)
private

Just an internal helper function to reinit the volume FE objects.

Parameters
elemThe element we are using to reinit

Definition at line 760 of file Assembly.C.

761 {
762  unsigned int dim = elem->dim();
763 
764  for (const auto & it : _fe[dim])
765  {
766  FEBase & fe = *it.second;
767  const FEType & fe_type = it.first;
768 
769  _current_fe[fe_type] = &fe;
770 
771  FEShapeData & fesd = *_fe_shape_data[fe_type];
772 
773  fe.reinit(elem);
774 
775  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe.get_phi()));
776  fesd._grad_phi.shallowCopy(
777  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe.get_dphi()));
778  if (_need_second_derivative.count(fe_type))
779  fesd._second_phi.shallowCopy(
780  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe.get_d2phi()));
781  }
782  for (const auto & it : _vector_fe[dim])
783  {
784  FEVectorBase & fe = *it.second;
785  const FEType & fe_type = it.first;
786 
787  _current_vector_fe[fe_type] = &fe;
788 
789  VectorFEShapeData & fesd = *_vector_fe_shape_data[fe_type];
790 
791  fe.reinit(elem);
792 
793  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe.get_phi()));
794  fesd._grad_phi.shallowCopy(
795  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe.get_dphi()));
796  if (_need_second_derivative.count(fe_type))
797  fesd._second_phi.shallowCopy(
798  const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe.get_d2phi()));
799  if (_need_curl.count(fe_type))
800  fesd._curl_phi.shallowCopy(
801  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe.get_curl_phi()));
802  if (_need_div.count(fe_type))
803  fesd._div_phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe.get_div_phi()));
804  }
805  if (!_unique_fe_helper.empty())
806  {
807  mooseAssert(dim < _unique_fe_helper.size(), "We should be in bounds here");
808  _unique_fe_helper[dim]->reinit(elem);
809  }
810 
811  // During that last loop the helper objects will have been reinitialized as well
812  // We need to dig out the q_points and JxW from it.
814  const_cast<std::vector<Point> &>(_holder_fe_helper[dim]->get_xyz()));
815  _current_JxW.shallowCopy(const_cast<std::vector<Real> &>(_holder_fe_helper[dim]->get_JxW()));
816 
818  {
819  auto n_qp = _current_qrule->n_points();
821  if (_displaced)
822  {
823  const auto & qw = _current_qrule->get_weights();
824  for (unsigned int qp = 0; qp != n_qp; qp++)
826  }
827  else
828  {
829  for (unsigned qp = 0; qp < n_qp; ++qp)
830  _ad_JxW[qp] = _current_JxW[qp];
831  if (_calculate_xyz)
832  for (unsigned qp = 0; qp < n_qp; ++qp)
834  }
835 
836  for (const auto & it : _fe[dim])
837  {
838  FEBase & fe = *it.second;
839  auto fe_type = it.first;
840  auto num_shapes = FEInterface::n_shape_functions(fe_type, elem);
841  auto & grad_phi = _ad_grad_phi_data[fe_type];
842 
843  grad_phi.resize(num_shapes);
844  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
845  grad_phi[i].resize(n_qp);
846 
847  if (_displaced)
848  computeGradPhiAD(elem, n_qp, grad_phi, &fe);
849  else
850  {
851  const auto & regular_grad_phi = _fe_shape_data[fe_type]->_grad_phi;
852  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
853  for (unsigned qp = 0; qp < n_qp; ++qp)
854  grad_phi[i][qp] = regular_grad_phi[i][qp];
855  }
856  }
857  for (const auto & it : _vector_fe[dim])
858  {
859  FEVectorBase & fe = *it.second;
860  auto fe_type = it.first;
861  auto num_shapes = FEInterface::n_shape_functions(fe_type, elem);
862  auto & grad_phi = _ad_vector_grad_phi_data[fe_type];
863 
864  grad_phi.resize(num_shapes);
865  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
866  grad_phi[i].resize(n_qp);
867 
868  if (_displaced)
869  computeGradPhiAD(elem, n_qp, grad_phi, &fe);
870  else
871  {
872  const auto & regular_grad_phi = _vector_fe_shape_data[fe_type]->_grad_phi;
873  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
874  for (unsigned qp = 0; qp < n_qp; ++qp)
875  grad_phi[i][qp] = regular_grad_phi[i][qp];
876  }
877  }
878  }
879 
880  auto n = numExtraElemIntegers();
881  for (auto i : make_range(n))
884 
885  if (_xfem != nullptr)
887 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
std::map< FEType, FEBase * > _current_fe
The "volume" fe object that matches the current elem.
Definition: Assembly.h:2342
virtual_for_inffe const std::vector< std::vector< OutputDivergence > > & get_div_phi() const
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension&#39;s actual vector fe objects indexed on type.
Definition: Assembly.h:2364
virtual void haveADObjects(bool have_ad_objects)
Method for setting whether we have any ad objects.
Definition: SubProblem.h:767
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2725
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition: Assembly.h:2339
void modifyWeightsDueToXFEM(const Elem *elem)
Update the integration weights for XFEM partial elements.
Definition: Assembly.C:4533
const std::vector< Real > & get_weights() const
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2556
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
void resizeADMappingObjects(unsigned int n_qp, unsigned int dim)
resize any objects that contribute to automatic differentiation-related mapping calculations ...
Definition: Assembly.C:971
void shallowCopy(const MooseArray &rhs)
Doesn&#39;t actually make a copy of the data.
Definition: MooseArray.h:296
std::vector< std::unique_ptr< FEBase > > _unique_fe_helper
Containers for holding unique FE helper types if we are doing p-refinement.
Definition: Assembly.h:2329
unsigned int numExtraElemIntegers() const
Number of extra element integers Assembly tracked.
Definition: Assembly.h:334
std::map< FEType, FEVectorBase * > _current_vector_fe
The "volume" vector fe object that matches the current elem.
Definition: Assembly.h:2351
const std::vector< std::vector< OutputGradient > > & get_dphi() const
void computeGradPhiAD(const Elem *elem, unsigned int n_qp, ADTemplateVariablePhiGradient< OutputType > &grad_phi, libMesh::FEGenericBase< OutputType > *fe)
compute gradient of phi possibly with derivative information with respect to nonlinear displacement v...
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data
Definition: Assembly.h:2740
SubProblem & _subproblem
Definition: Assembly.h:2273
bool _calculate_xyz
Definition: Assembly.h:2817
MooseArray< Real > _current_JxW
The current list of transformed jacobian weights.
Definition: Assembly.h:2380
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
std::set< FEType > _need_curl
Definition: Assembly.h:2827
unsigned int n_points() const
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
Definition: Assembly.h:2741
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2370
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2362
std::set< FEType > _need_div
Definition: Assembly.h:2828
const bool _displaced
Definition: Assembly.h:2275
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2795
subdomain_id_type subdomain_id() const
virtual unsigned short dim() const=0
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data
Shape function values, gradients, second derivatives for each vector FE type.
Definition: Assembly.h:2733
IntRange< T > make_range(T beg, T end)
void computeSinglePointMapAD(const Elem *elem, const std::vector< Real > &qw, unsigned p, FEBase *fe)
compute the finite element reference-physical mapping quantities (such as JxW) with possible dependen...
Definition: Assembly.C:1001
std::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2366
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition: Assembly.h:2497
MooseArray< Point > _current_q_points
The current list of quadrature points.
Definition: Assembly.h:2378
dof_id_type get_extra_integer(const unsigned int index) const
virtual_for_inffe const std::vector< std::vector< OutputShape > > & get_curl_phi() const
const std::vector< std::vector< OutputShape > > & get_phi() const
MooseArray< ADReal > _ad_JxW
Definition: Assembly.h:2794

◆ reinitFEFace()

void Assembly::reinitFEFace ( const Elem elem,
unsigned int  side 
)
private

Just an internal helper function to reinit the face FE objects.

Parameters
elemThe element we are using to reinit
sideThe side of the element we are reiniting on

Definition at line 1267 of file Assembly.C.

1268 {
1269  unsigned int dim = elem->dim();
1270 
1271  for (const auto & it : _fe_face[dim])
1272  {
1273  FEBase & fe_face = *it.second;
1274  const FEType & fe_type = it.first;
1275  FEShapeData & fesd = *_fe_shape_data_face[fe_type];
1276  fe_face.reinit(elem, side);
1277  _current_fe_face[fe_type] = &fe_face;
1278 
1279  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face.get_phi()));
1280  fesd._grad_phi.shallowCopy(
1281  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_dphi()));
1282  if (_need_second_derivative.count(fe_type))
1283  fesd._second_phi.shallowCopy(
1284  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_d2phi()));
1285  }
1286  for (const auto & it : _vector_fe_face[dim])
1287  {
1288  FEVectorBase & fe_face = *it.second;
1289  const FEType & fe_type = it.first;
1290 
1291  _current_vector_fe_face[fe_type] = &fe_face;
1292 
1293  VectorFEShapeData & fesd = *_vector_fe_shape_data_face[fe_type];
1294 
1295  fe_face.reinit(elem, side);
1296 
1297  fesd._phi.shallowCopy(
1298  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_phi()));
1299  fesd._grad_phi.shallowCopy(
1300  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_dphi()));
1301  if (_need_second_derivative.count(fe_type))
1302  fesd._second_phi.shallowCopy(
1303  const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe_face.get_d2phi()));
1304  if (_need_curl.count(fe_type))
1305  fesd._curl_phi.shallowCopy(
1306  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_curl_phi()));
1307  if (_need_face_div.count(fe_type))
1308  fesd._div_phi.shallowCopy(
1309  const_cast<std::vector<std::vector<Real>> &>(fe_face.get_div_phi()));
1310  }
1311  if (!_unique_fe_face_helper.empty())
1312  {
1313  mooseAssert(dim < _unique_fe_face_helper.size(), "We should be in bounds here");
1314  _unique_fe_face_helper[dim]->reinit(elem, side);
1315  }
1316 
1317  // During that last loop the helper objects will have been reinitialized as well
1318  // We need to dig out the q_points and JxW from it.
1320  const_cast<std::vector<Point> &>(_holder_fe_face_helper[dim]->get_xyz()));
1322  const_cast<std::vector<Real> &>(_holder_fe_face_helper[dim]->get_JxW()));
1324  const_cast<std::vector<Point> &>(_holder_fe_face_helper[dim]->get_normals()));
1325 
1326  _mapped_normals.resize(_current_normals.size(), Eigen::Map<RealDIMValue>(nullptr));
1327  for (unsigned int i = 0; i < _current_normals.size(); i++)
1328  // Note: this does NOT do any allocation. It is "reconstructing" the object in place
1329  new (&_mapped_normals[i]) Eigen::Map<RealDIMValue>(const_cast<Real *>(&_current_normals[i](0)));
1330 
1333  const_cast<std::vector<Real> &>(_holder_fe_face_helper[dim]->get_curvatures()));
1334 
1335  computeADFace(*elem, side);
1336 
1337  if (_xfem != nullptr)
1339 
1340  auto n = numExtraElemIntegers();
1341  for (auto i : make_range(n))
1344 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2474
MooseArray< Real > _curvatures
Definition: Assembly.h:2809
virtual_for_inffe const std::vector< std::vector< OutputDivergence > > & get_div_phi() const
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition: Assembly.h:2339
std::map< FEType, FEBase * > _current_fe_face
The "face" fe object that matches the current elem.
Definition: Assembly.h:2344
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2488
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2556
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
Definition: Assembly.h:2330
std::map< FEType, FEVectorBase * > _current_vector_fe_face
The "face" vector fe object that matches the current elem.
Definition: Assembly.h:2353
void shallowCopy(const MooseArray &rhs)
Doesn&#39;t actually make a copy of the data.
Definition: MooseArray.h:296
unsigned int numExtraElemIntegers() const
Number of extra element integers Assembly tracked.
Definition: Assembly.h:334
void modifyFaceWeightsDueToXFEM(const Elem *elem, unsigned int side=0)
Update the face integration weights for XFEM partial elements.
Definition: Assembly.C:4553
std::vector< Eigen::Map< RealDIMValue > > _mapped_normals
Mapped normals.
Definition: Assembly.h:2492
const std::vector< std::vector< OutputGradient > > & get_dphi() const
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2734
unsigned int size() const
The number of elements that can currently be stored in the array.
Definition: MooseArray.h:259
bool _calculate_curvatures
Definition: Assembly.h:2819
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
std::set< FEType > _need_curl
Definition: Assembly.h:2827
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2476
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
MooseArray< Point > _current_normals
The current Normal vectors at the quadrature points.
Definition: Assembly.h:2490
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
subdomain_id_type subdomain_id() const
virtual unsigned short dim() const=0
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2726
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2478
IntRange< T > make_range(T beg, T end)
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition: Assembly.h:2497
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:407
void computeADFace(const Elem &elem, const unsigned int side)
compute AD things on an element face
Definition: Assembly.C:2109
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2486
std::set< FEType > _need_face_div
Definition: Assembly.h:2829
dof_id_type get_extra_integer(const unsigned int index) const
virtual_for_inffe const std::vector< std::vector< OutputShape > > & get_curl_phi() const
const std::vector< std::vector< OutputShape > > & get_phi() const

◆ reinitFEFaceNeighbor()

void Assembly::reinitFEFaceNeighbor ( const Elem neighbor,
const std::vector< Point > &  reference_points 
)
private

Definition at line 1571 of file Assembly.C.

Referenced by reinitElemAndNeighbor().

1572 {
1573  unsigned int neighbor_dim = neighbor->dim();
1574 
1575  // reinit neighbor face
1576  for (const auto & it : _fe_face_neighbor[neighbor_dim])
1577  {
1578  FEBase & fe_face_neighbor = *it.second;
1579  FEType fe_type = it.first;
1580  FEShapeData & fesd = *_fe_shape_data_face_neighbor[fe_type];
1581 
1582  fe_face_neighbor.reinit(neighbor, &reference_points);
1583 
1584  _current_fe_face_neighbor[fe_type] = &fe_face_neighbor;
1585 
1586  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_phi()));
1587  fesd._grad_phi.shallowCopy(
1588  const_cast<std::vector<std::vector<RealGradient>> &>(fe_face_neighbor.get_dphi()));
1589  if (_need_second_derivative_neighbor.count(fe_type))
1590  fesd._second_phi.shallowCopy(
1591  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_d2phi()));
1592  }
1593  for (const auto & it : _vector_fe_face_neighbor[neighbor_dim])
1594  {
1595  FEVectorBase & fe_face_neighbor = *it.second;
1596  const FEType & fe_type = it.first;
1597 
1598  _current_vector_fe_face_neighbor[fe_type] = &fe_face_neighbor;
1599 
1600  VectorFEShapeData & fesd = *_vector_fe_shape_data_face_neighbor[fe_type];
1601 
1602  fe_face_neighbor.reinit(neighbor, &reference_points);
1603 
1604  fesd._phi.shallowCopy(
1605  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face_neighbor.get_phi()));
1606  fesd._grad_phi.shallowCopy(
1607  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_dphi()));
1608  if (_need_second_derivative.count(fe_type))
1609  fesd._second_phi.shallowCopy(const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(
1610  fe_face_neighbor.get_d2phi()));
1611  if (_need_curl.count(fe_type))
1612  fesd._curl_phi.shallowCopy(const_cast<std::vector<std::vector<VectorValue<Real>>> &>(
1613  fe_face_neighbor.get_curl_phi()));
1614  if (_need_face_neighbor_div.count(fe_type))
1615  fesd._div_phi.shallowCopy(
1616  const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_div_phi()));
1617  }
1618  if (!_unique_fe_face_neighbor_helper.empty())
1619  {
1620  mooseAssert(neighbor_dim < _unique_fe_face_neighbor_helper.size(),
1621  "We should be in bounds here");
1622  _unique_fe_face_neighbor_helper[neighbor_dim]->reinit(neighbor, &reference_points);
1623  }
1624 
1626  const_cast<std::vector<Point> &>(_holder_fe_face_neighbor_helper[neighbor_dim]->get_xyz()));
1627 }
virtual_for_inffe const std::vector< std::vector< OutputDivergence > > & get_div_phi() const
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2728
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition: Assembly.h:2513
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2509
std::map< FEType, FEBase * > _current_fe_face_neighbor
The "neighbor face" fe object that matches the current elem.
Definition: Assembly.h:2348
void shallowCopy(const MooseArray &rhs)
Doesn&#39;t actually make a copy of the data.
Definition: MooseArray.h:296
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826
const std::vector< std::vector< OutputGradient > > & get_dphi() const
std::map< FEType, FEVectorBase * > _current_vector_fe_face_neighbor
The "neighbor face" vector fe object that matches the current elem.
Definition: Assembly.h:2357
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
std::set< FEType > _need_curl
Definition: Assembly.h:2827
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
std::set< FEType > _need_face_neighbor_div
Definition: Assembly.h:2831
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2736
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:431
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
Definition: Assembly.h:2331
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2507
MooseArray< Point > _current_q_points_face_neighbor
The current quadrature points on the neighbor face.
Definition: Assembly.h:2525
virtual_for_inffe const std::vector< std::vector< OutputShape > > & get_curl_phi() const
const std::vector< std::vector< OutputShape > > & get_phi() const

◆ reinitFENeighbor()

void Assembly::reinitFENeighbor ( const Elem neighbor,
const std::vector< Point > &  reference_points 
)
private

Definition at line 1630 of file Assembly.C.

1631 {
1632  unsigned int neighbor_dim = neighbor->dim();
1633 
1634  // reinit neighbor face
1635  for (const auto & it : _fe_neighbor[neighbor_dim])
1636  {
1637  FEBase & fe_neighbor = *it.second;
1638  FEType fe_type = it.first;
1639  FEShapeData & fesd = *_fe_shape_data_neighbor[fe_type];
1640 
1641  fe_neighbor.reinit(neighbor, &reference_points);
1642 
1643  _current_fe_neighbor[fe_type] = &fe_neighbor;
1644 
1645  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_neighbor.get_phi()));
1646  fesd._grad_phi.shallowCopy(
1647  const_cast<std::vector<std::vector<RealGradient>> &>(fe_neighbor.get_dphi()));
1648  if (_need_second_derivative_neighbor.count(fe_type))
1649  fesd._second_phi.shallowCopy(
1650  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_neighbor.get_d2phi()));
1651  }
1652  for (const auto & it : _vector_fe_neighbor[neighbor_dim])
1653  {
1654  FEVectorBase & fe_neighbor = *it.second;
1655  const FEType & fe_type = it.first;
1656 
1657  _current_vector_fe_neighbor[fe_type] = &fe_neighbor;
1658 
1659  VectorFEShapeData & fesd = *_vector_fe_shape_data_neighbor[fe_type];
1660 
1661  fe_neighbor.reinit(neighbor, &reference_points);
1662 
1663  fesd._phi.shallowCopy(
1664  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_neighbor.get_phi()));
1665  fesd._grad_phi.shallowCopy(
1666  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_neighbor.get_dphi()));
1667  if (_need_second_derivative.count(fe_type))
1668  fesd._second_phi.shallowCopy(
1669  const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe_neighbor.get_d2phi()));
1670  if (_need_curl.count(fe_type))
1671  fesd._curl_phi.shallowCopy(
1672  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_neighbor.get_curl_phi()));
1673  if (_need_neighbor_div.count(fe_type))
1674  fesd._div_phi.shallowCopy(
1675  const_cast<std::vector<std::vector<Real>> &>(fe_neighbor.get_div_phi()));
1676  }
1677  if (!_unique_fe_neighbor_helper.empty())
1678  {
1679  mooseAssert(neighbor_dim < _unique_fe_neighbor_helper.size(), "We should be in bounds here");
1680  _unique_fe_neighbor_helper[neighbor_dim]->reinit(neighbor, &reference_points);
1681  }
1682 }
virtual_for_inffe const std::vector< std::vector< OutputDivergence > > & get_div_phi() const
std::vector< std::unique_ptr< FEBase > > _unique_fe_neighbor_helper
Definition: Assembly.h:2332
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2727
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826
const std::vector< std::vector< OutputGradient > > & get_dphi() const
std::map< FEType, FEBase * > _current_fe_neighbor
The "neighbor" fe object that matches the current elem.
Definition: Assembly.h:2346
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2506
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
std::set< FEType > _need_neighbor_div
Definition: Assembly.h:2830
std::set< FEType > _need_curl
Definition: Assembly.h:2827
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:431
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition: Assembly.h:2508
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2735
std::map< FEType, FEVectorBase * > _current_vector_fe_neighbor
The "neighbor" vector fe object that matches the current elem.
Definition: Assembly.h:2355
virtual_for_inffe const std::vector< std::vector< OutputShape > > & get_curl_phi() const
const std::vector< std::vector< OutputShape > > & get_phi() const

◆ reinitFVFace()

void Assembly::reinitFVFace ( const FaceInfo fi)

Definition at line 1855 of file Assembly.C.

Referenced by SubProblem::reinitFVFace().

1856 {
1857  _current_elem = &fi.elem();
1859  _current_side = fi.elemSideID();
1862  "current subdomain has been set incorrectly");
1863 
1866 
1867  prepareResidual();
1868  prepareNeighbor();
1870 
1871  unsigned int dim = _current_elem->dim();
1872  if (_current_qrule_face != qrules(dim).fv_face.get())
1873  {
1874  setFaceQRule(qrules(dim).fv_face.get(), dim);
1875  // The order of the element that is used for initing here doesn't matter since this will just
1876  // be used for constant monomials (which only need a single integration point)
1877  if (dim == 3)
1878  _current_qrule_face->init(QUAD4, /* p_level = */ 0, /* simple_type_only = */ true);
1879  else
1880  _current_qrule_face->init(EDGE2, /* p_level = */ 0, /* simple_type_only = */ true);
1881  }
1882 
1884 
1885  mooseAssert(_current_qrule_face->n_points() == 1,
1886  "Our finite volume quadrature rule should always yield a single point");
1887 
1888  // We've initialized the reference points. Now we need to compute the physical location of the
1889  // quadrature points. We do not do any FE initialization so we cannot simply copy over FE
1890  // results like we do in reinitFEFace. Instead we handle the computation of the physical
1891  // locations manually
1893  const auto & ref_points = _current_qrule_face->get_points();
1894  const auto & ref_point = ref_points[0];
1895  auto physical_point = FEMap::map(_current_side_elem->dim(), _current_side_elem, ref_point);
1896  _current_q_points_face[0] = physical_point;
1897 
1899  {
1901  "current neighbor subdomain has been set incorrectly");
1902  // Now handle the neighbor qrule/qpoints
1903  ArbitraryQuadrature * const neighbor_rule =
1905  // Here we are setting a reference point that is correct for the neighbor *side* element. It
1906  // would be wrong if this reference point is used for a volumetric FE reinit with the neighbor
1907  neighbor_rule->setPoints(ref_points);
1908  setNeighborQRule(neighbor_rule, _current_neighbor_elem->dim());
1910  _current_q_points_face_neighbor[0] = std::move(physical_point);
1911  }
1912 }
void setFaceQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for face integration.
Definition: Assembly.C:674
void prepareJacobianBlock()
Sizes and zeroes the Jacobian blocks used for the current element.
Definition: Assembly.C:2682
const Elem & elem() const
Definition: FaceInfo.h:81
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
Definition: Assembly.h:2586
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition: Assembly.h:2570
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2556
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
void prepareNeighbor()
Definition: Assembly.C:2799
unsigned int elemSideID() const
Definition: FaceInfo.h:109
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2482
unsigned int neighborSideID() const
Definition: FaceInfo.h:110
unsigned int _current_neighbor_side
The current side of the selected neighboring element (valid only when working with sides) ...
Definition: Assembly.h:2574
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2450
Implements a fake quadrature rule where you can specify the locations (in the reference domain) of th...
const Elem * neighborPtr() const
Definition: FaceInfo.h:84
void prepareResidual()
Sizes and zeroes the residual for the current element.
Definition: Assembly.C:2704
SubdomainID _current_neighbor_subdomain_id
The current neighbor subdomain ID.
Definition: Assembly.h:2572
unsigned int n_points() const
subdomain_id_type subdomain_id() const
void setNeighborQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for neighbor integration.
Definition: Assembly.C:709
const std::vector< Point > & get_points() const
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:431
void resize(unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:216
virtual void init(const Elem &e, unsigned int p_level=invalid_uint)
unsigned int _current_side
The current side of the selected element (valid only when working with sides)
Definition: Assembly.h:2564
bool _current_side_volume_computed
Boolean to indicate whether current element side volumes has been computed.
Definition: Assembly.h:2588
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2486
const Elem * _current_side_elem
The current "element" making up the side we are currently on.
Definition: Assembly.h:2566
MooseArray< Point > _current_q_points_face_neighbor
The current quadrature points on the neighbor face.
Definition: Assembly.h:2525
libMesh::ElemSideBuilder _current_side_elem_builder
In place side element builder for _current_side_elem.
Definition: Assembly.h:2837
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition: Assembly.h:2558

◆ reinitLowerDElem()

void Assembly::reinitLowerDElem ( const Elem elem,
const std::vector< Point > *const  pts = nullptr,
const std::vector< Real > *const  weights = nullptr 
)

Reinitialize FE data for a lower dimenesional element with a given set of reference points.

Definition at line 2288 of file Assembly.C.

Referenced by SubProblem::reinitLowerDElem().

2291 {
2293 
2294  const unsigned int elem_dim = elem->dim();
2295  mooseAssert(elem_dim < _mesh_dimension,
2296  "The lower dimensional element should truly be a lower dimensional element");
2297 
2298  if (pts)
2299  {
2300  // Lower rule matches the face rule for the higher dimensional element
2301  ArbitraryQuadrature * lower_rule = qrules(elem_dim + 1).arbitrary_face.get();
2302 
2303  // This also sets the quadrature weights to unity
2304  lower_rule->setPoints(*pts);
2305 
2306  if (weights)
2307  lower_rule->setWeights(*weights);
2308 
2309  setLowerQRule(lower_rule, elem_dim);
2310  }
2311  else if (_current_qrule_lower != qrules(elem_dim + 1).face.get())
2312  setLowerQRule(qrules(elem_dim + 1).face.get(), elem_dim);
2313 
2314  for (const auto & it : _fe_lower[elem_dim])
2315  {
2316  FEBase & fe_lower = *it.second;
2317  FEType fe_type = it.first;
2318 
2319  fe_lower.reinit(elem);
2320 
2321  if (FEShapeData * fesd = _fe_shape_data_lower[fe_type].get())
2322  {
2323  fesd->_phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_lower.get_phi()));
2324  fesd->_grad_phi.shallowCopy(
2325  const_cast<std::vector<std::vector<RealGradient>> &>(fe_lower.get_dphi()));
2326  if (_need_second_derivative_neighbor.count(fe_type))
2327  fesd->_second_phi.shallowCopy(
2328  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_lower.get_d2phi()));
2329  }
2330 
2331  // Dual shape functions need to be computed after primal basis being initialized
2332  if (FEShapeData * fesd = _fe_shape_data_dual_lower[fe_type].get())
2333  {
2334  fesd->_phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_lower.get_dual_phi()));
2335  fesd->_grad_phi.shallowCopy(
2336  const_cast<std::vector<std::vector<RealGradient>> &>(fe_lower.get_dual_dphi()));
2337  if (_need_second_derivative_neighbor.count(fe_type))
2338  fesd->_second_phi.shallowCopy(
2339  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_lower.get_dual_d2phi()));
2340  }
2341  }
2342  if (!_unique_fe_lower_helper.empty())
2343  {
2344  mooseAssert(elem_dim < _unique_fe_lower_helper.size(), "We should be in bounds here");
2345  _unique_fe_lower_helper[elem_dim]->reinit(elem);
2346  }
2347 
2349  return;
2350 
2351  if (pts && !weights)
2352  {
2353  // We only have dummy weights so the JxWs computed during our FE reinits are meaningless and
2354  // we cannot use them
2355 
2357  // We are in a Cartesian coordinate system and we can just use the element volume method
2358  // which has fast computation for certain element types
2360  else
2361  // We manually compute the volume taking the curvilinear coordinate transformations into
2362  // account
2364  }
2365  else
2366  {
2367  // During that last loop the helper objects will have been reinitialized as well
2368  FEBase & helper_fe = *_holder_fe_lower_helper[elem_dim];
2369  const auto & physical_q_points = helper_fe.get_xyz();
2370  const auto & JxW = helper_fe.get_JxW();
2371  MooseArray<Real> coord;
2373  _current_qrule_lower, physical_q_points, coord, elem->subdomain_id());
2375  for (const auto qp : make_range(_current_qrule_lower->n_points()))
2376  _current_lower_d_elem_volume += JxW[qp] * coord[qp];
2377  }
2378 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
std::vector< std::unique_ptr< FEBase > > _unique_fe_lower_helper
Definition: Assembly.h:2333
const std::vector< std::vector< OutputShape > > & get_dual_phi() const
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
Definition: Assembly.C:1729
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826
void setWeights(const std::vector< libMesh::Real > &weights)
Set the quadrature weights.
std::unique_ptr< libMesh::QBase > face
area/face (meshdim-1) quadrature rule
Definition: Assembly.h:2404
unsigned int _mesh_dimension
Definition: Assembly.h:2314
const std::vector< std::vector< OutputGradient > > & get_dphi() const
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2450
Implements a fake quadrature rule where you can specify the locations (in the reference domain) of th...
void setPoints(const std::vector< libMesh::Point > &points)
Set the quadrature points.
Real elementVolume(const Elem *elem) const
On-demand computation of volume element accounting for RZ/RSpherical.
Definition: Assembly.C:3782
const std::vector< std::vector< OutputGradient > > & get_dual_dphi() const
libMesh::QBase * _current_qrule_lower
quadrature rule used on lower dimensional elements.
Definition: Assembly.h:2552
SubProblem & _subproblem
Definition: Assembly.h:2273
virtual_for_inffe const std::vector< Real > & get_JxW() const
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
unsigned int n_points() const
virtual_for_inffe const std::vector< Point > & get_xyz() const
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_lower
Definition: Assembly.h:2729
const Elem * _current_lower_d_elem
The current lower dimensional element.
Definition: Assembly.h:2591
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2516
Real _current_lower_d_elem_volume
The current lower dimensional element volume.
Definition: Assembly.h:2597
const MooseArray< Real > & JxW() const
Returns the reference to the transformed jacobian weights.
Definition: Assembly.h:248
subdomain_id_type subdomain_id() const
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
Definition: Assembly.h:2730
virtual unsigned short dim() const=0
bool _need_lower_d_elem_volume
Whether we need to compute the lower dimensional element volume.
Definition: Assembly.h:2595
virtual Real volume() const
IntRange< T > make_range(T beg, T end)
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
Definition: SubProblem.C:1278
std::unique_ptr< ArbitraryQuadrature > arbitrary_face
area/face (meshdim-1) custom points quadrature rule
Definition: Assembly.h:2410
void setLowerQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for lower dimensional integration.
Definition: Assembly.C:690
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
helper object for transforming coordinates for lower dimensional element quadrature points ...
Definition: Assembly.h:2520
const std::vector< std::vector< OutputShape > > & get_phi() const
const std::vector< std::vector< OutputTensor > > & get_dual_d2phi() const

◆ reinitMortarElem()

void Assembly::reinitMortarElem ( const Elem elem)

reinitialize a mortar segment mesh element in order to get a proper JxW

Definition at line 2402 of file Assembly.C.

Referenced by SubProblem::reinitMortarElem().

2403 {
2404  mooseAssert(elem->dim() == _mesh_dimension - 1,
2405  "You should be calling reinitMortarElem on a lower dimensional element");
2406 
2407  _fe_msm->reinit(elem);
2408  _msm_elem = elem;
2409 
2410  MooseArray<Point> array_q_points;
2411  array_q_points.shallowCopy(const_cast<std::vector<Point> &>(_fe_msm->get_xyz()));
2413 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
Definition: Assembly.h:2541
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
Definition: Assembly.C:1729
void shallowCopy(const MooseArray &rhs)
Doesn&#39;t actually make a copy of the data.
Definition: MooseArray.h:296
unsigned int _mesh_dimension
Definition: Assembly.h:2314
const Elem * _msm_elem
Definition: Assembly.h:2843
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition: Assembly.h:2546
subdomain_id_type subdomain_id() const
virtual unsigned short dim() const=0
MooseArray< Real > _coord_msm
The coordinate transformation coefficients evaluated on the quadrature points of the mortar segment m...
Definition: Assembly.h:2534

◆ reinitNeighbor()

void Assembly::reinitNeighbor ( const Elem neighbor,
const std::vector< Point > &  reference_points 
)

Reinitializes the neighbor side using reference coordinates.

Definition at line 1685 of file Assembly.C.

Referenced by reinitElemAndNeighbor().

1686 {
1687  unsigned int neighbor_dim = neighbor->dim();
1689  "Neighbor subdomain ID has not been correctly set");
1690 
1691  ArbitraryQuadrature * neighbor_rule =
1692  qrules(neighbor_dim, _current_neighbor_subdomain_id).neighbor.get();
1693  neighbor_rule->setPoints(reference_points);
1694  setNeighborQRule(neighbor_rule, neighbor_dim);
1695 
1698  "current neighbor subdomain has been set incorrectly");
1699 
1700  // Calculate the volume of the neighbor
1702  {
1703  unsigned int dim = neighbor->dim();
1705  QBase * qrule = qrules(dim).vol.get();
1706 
1707  fe.attach_quadrature_rule(qrule);
1708  fe.reinit(neighbor);
1709 
1710  const std::vector<Real> & JxW = fe.get_JxW();
1711  MooseArray<Point> q_points;
1712  q_points.shallowCopy(const_cast<std::vector<Point> &>(fe.get_xyz()));
1713 
1715 
1717  for (unsigned int qp = 0; qp < qrule->n_points(); qp++)
1719  }
1720 
1721  auto n = numExtraElemIntegers();
1722  for (auto i : make_range(n))
1725 }
bool _need_neighbor_elem_volume
true is apps need to compute neighbor element volume
Definition: Assembly.h:2578
MooseArray< Real > _coord_neighbor
The current coordinate transformation coefficients.
Definition: Assembly.h:2531
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2512
Real _current_neighbor_volume
Volume of the current neighbor.
Definition: Assembly.h:2580
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition: Assembly.h:2570
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
Definition: Assembly.C:1729
void shallowCopy(const MooseArray &rhs)
Doesn&#39;t actually make a copy of the data.
Definition: MooseArray.h:296
unsigned int numExtraElemIntegers() const
Number of extra element integers Assembly tracked.
Definition: Assembly.h:334
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2450
std::unique_ptr< libMesh::QBase > vol
volume/elem (meshdim) quadrature rule
Definition: Assembly.h:2402
Implements a fake quadrature rule where you can specify the locations (in the reference domain) of th...
SubdomainID _current_neighbor_subdomain_id
The current neighbor subdomain ID.
Definition: Assembly.h:2572
virtual_for_inffe const std::vector< Real > & get_JxW() const
std::vector< dof_id_type > _neighbor_extra_elem_ids
Extra element IDs of neighbor.
Definition: Assembly.h:2499
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
unsigned int n_points() const
virtual_for_inffe const std::vector< Point > & get_xyz() const
const MooseArray< Real > & JxW() const
Returns the reference to the transformed jacobian weights.
Definition: Assembly.h:248
subdomain_id_type subdomain_id() const
void setNeighborQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for neighbor integration.
Definition: Assembly.C:709
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:431
IntRange< T > make_range(T beg, T end)
std::unique_ptr< ArbitraryQuadrature > neighbor
area/face (meshdim-1) custom points quadrature rule for DG
Definition: Assembly.h:2412
virtual void attach_quadrature_rule(QBase *q)=0
dof_id_type get_extra_integer(const unsigned int index) const

◆ reinitNeighborAtPhysical() [1/2]

void Assembly::reinitNeighborAtPhysical ( const Elem *  neighbor,
unsigned int  neighbor_side,
const std::vector< Point > &  physical_points 
)

Reinitializes the neighbor at the physical coordinates on neighbor side given.

◆ reinitNeighborAtPhysical() [2/2]

void Assembly::reinitNeighborAtPhysical ( const Elem *  neighbor,
const std::vector< Point > &  physical_points 
)

Reinitializes the neighbor at the physical coordinates within element given.

◆ reinitNeighborFaceRef()

void Assembly::reinitNeighborFaceRef ( const Elem neighbor_elem,
unsigned int  neighbor_side,
Real  tolerance,
const std::vector< Point > *const  pts,
const std::vector< Real > *const  weights = nullptr 
)

Reinitialize FE data for the given neighbor_element on the given side with a given set of reference points.

Definition at line 2192 of file Assembly.C.

Referenced by SubProblem::reinitNeighborFaceRef().

2197 {
2199 
2200  unsigned int neighbor_dim = neighbor->dim();
2201 
2202  ArbitraryQuadrature * neighbor_rule =
2203  qrules(neighbor_dim, neighbor->subdomain_id()).neighbor.get();
2204  neighbor_rule->setPoints(*pts);
2205 
2206  // Attach this quadrature rule to all the _fe_face_neighbor FE objects. This
2207  // has to have garbage quadrature weights but that's ok because we never
2208  // actually use the JxW coming from these FE reinit'd objects, e.g. we use the
2209  // JxW coming from the element face reinit for DGKernels or we use the JxW
2210  // coming from reinit of the mortar segment element in the case of mortar
2211  setNeighborQRule(neighbor_rule, neighbor_dim);
2212 
2213  // reinit neighbor face
2214  for (const auto & it : _fe_face_neighbor[neighbor_dim])
2215  {
2216  FEBase & fe_face_neighbor = *it.second;
2217  FEType fe_type = it.first;
2218  FEShapeData & fesd = *_fe_shape_data_face_neighbor[fe_type];
2219 
2220  fe_face_neighbor.reinit(neighbor, neighbor_side, tolerance, pts, weights);
2221 
2222  _current_fe_face_neighbor[fe_type] = &fe_face_neighbor;
2223 
2224  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_phi()));
2225  fesd._grad_phi.shallowCopy(
2226  const_cast<std::vector<std::vector<RealGradient>> &>(fe_face_neighbor.get_dphi()));
2227  if (_need_second_derivative_neighbor.count(fe_type))
2228  fesd._second_phi.shallowCopy(
2229  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_d2phi()));
2230  }
2231  for (const auto & it : _vector_fe_face_neighbor[neighbor_dim])
2232  {
2233  FEVectorBase & fe_face_neighbor = *it.second;
2234  const FEType & fe_type = it.first;
2235 
2236  _current_vector_fe_face_neighbor[fe_type] = &fe_face_neighbor;
2237 
2238  VectorFEShapeData & fesd = *_vector_fe_shape_data_face_neighbor[fe_type];
2239 
2240  fe_face_neighbor.reinit(neighbor, neighbor_side, tolerance, pts, weights);
2241 
2242  fesd._phi.shallowCopy(
2243  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face_neighbor.get_phi()));
2244  fesd._grad_phi.shallowCopy(
2245  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_dphi()));
2246  if (_need_second_derivative.count(fe_type))
2247  fesd._second_phi.shallowCopy(const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(
2248  fe_face_neighbor.get_d2phi()));
2249  if (_need_curl.count(fe_type))
2250  fesd._curl_phi.shallowCopy(const_cast<std::vector<std::vector<VectorValue<Real>>> &>(
2251  fe_face_neighbor.get_curl_phi()));
2252  if (_need_face_neighbor_div.count(fe_type))
2253  fesd._div_phi.shallowCopy(
2254  const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_div_phi()));
2255  }
2256  if (!_unique_fe_face_neighbor_helper.empty())
2257  {
2258  mooseAssert(neighbor_dim < _unique_fe_face_neighbor_helper.size(),
2259  "We should be in bounds here");
2260  _unique_fe_face_neighbor_helper[neighbor_dim]->reinit(
2261  neighbor, neighbor_side, tolerance, pts, weights);
2262  }
2263  // During that last loop the helper objects will have been reinitialized as well
2264  // We need to dig out the q_points from it
2266  const_cast<std::vector<Point> &>(_holder_fe_face_neighbor_helper[neighbor_dim]->get_xyz()));
2267 }
virtual_for_inffe const std::vector< std::vector< OutputDivergence > > & get_div_phi() const
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2728
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition: Assembly.h:2570
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition: Assembly.h:2513
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2509
std::map< FEType, FEBase * > _current_fe_face_neighbor
The "neighbor face" fe object that matches the current elem.
Definition: Assembly.h:2348
void shallowCopy(const MooseArray &rhs)
Doesn&#39;t actually make a copy of the data.
Definition: MooseArray.h:296
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2826
const std::vector< std::vector< OutputGradient > > & get_dphi() const
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2450
Implements a fake quadrature rule where you can specify the locations (in the reference domain) of th...
void setPoints(const std::vector< libMesh::Point > &points)
Set the quadrature points.
std::map< FEType, FEVectorBase * > _current_vector_fe_face_neighbor
The "neighbor face" vector fe object that matches the current elem.
Definition: Assembly.h:2357
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
std::set< FEType > _need_curl
Definition: Assembly.h:2827
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2825
std::set< FEType > _need_face_neighbor_div
Definition: Assembly.h:2831
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2736
subdomain_id_type subdomain_id() const
void setNeighborQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for neighbor integration.
Definition: Assembly.C:709
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:431
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
Definition: Assembly.h:2331
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2507
MooseArray< Point > _current_q_points_face_neighbor
The current quadrature points on the neighbor face.
Definition: Assembly.h:2525
virtual_for_inffe const std::vector< std::vector< OutputShape > > & get_curl_phi() const
const std::vector< std::vector< OutputShape > > & get_phi() const

◆ reinitNeighborLowerDElem()

void Assembly::reinitNeighborLowerDElem ( const Elem elem)

reinitialize a neighboring lower dimensional element

Definition at line 2381 of file Assembly.C.

Referenced by SubProblem::reinitNeighborLowerDElem().

2382 {
2383  mooseAssert(elem->dim() < _mesh_dimension,
2384  "You should be calling reinitNeighborLowerDElem on a lower dimensional element");
2385 
2387 
2389  return;
2390 
2392  // We are in a Cartesian coordinate system and we can just use the element volume method which
2393  // has fast computation for certain element types
2395  else
2396  // We manually compute the volume taking the curvilinear coordinate transformations into
2397  // account
2399 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:375
unsigned int _mesh_dimension
Definition: Assembly.h:2314
const Elem * _current_neighbor_lower_d_elem
The current neighboring lower dimensional element.
Definition: Assembly.h:2593
Real elementVolume(const Elem *elem) const
On-demand computation of volume element accounting for RZ/RSpherical.
Definition: Assembly.C:3782
SubProblem & _subproblem
Definition: Assembly.h:2273
subdomain_id_type subdomain_id() const
virtual unsigned short dim() const=0
virtual Real volume() const
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
Definition: SubProblem.C:1278
Real _current_neighbor_lower_d_elem_volume
The current neighboring lower dimensional element volume.
Definition: Assembly.h:2601
bool _need_neighbor_lower_d_elem_volume
Whether we need to compute the neighboring lower dimensional element volume.
Definition: Assembly.h:2599

◆ residualBlock()

DenseVector<Number>& Assembly::residualBlock ( unsigned int  var_num,
LocalDataKey  ,
TagID  tag_id 
)
inline

Get local residual block for a variable and a tag.

Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 1076 of file Assembly.h.

Referenced by TaggingInterface::prepareVectorTagInternal().

1077  {
1078  return _sub_Re[tag_id][var_num];
1079  }
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2620

◆ residualBlockLower()

DenseVector<Number>& Assembly::residualBlockLower ( unsigned int  var_num,
LocalDataKey  ,
TagID  tag_id 
)
inline

Get residual block for lower.

Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 1094 of file Assembly.h.

Referenced by TaggingInterface::prepareVectorTagLower().

1095  {
1096  return _sub_Rl[tag_id][var_num];
1097  }
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition: Assembly.h:2623

◆ residualBlockNeighbor()

DenseVector<Number>& Assembly::residualBlockNeighbor ( unsigned int  var_num,
LocalDataKey  ,
TagID  tag_id 
)
inline

Get local neighbor residual block for a variable and a tag.

Only blessed framework classes may call this API by creating the requisiste LocalDataKey class

Definition at line 1085 of file Assembly.h.

Referenced by TaggingInterface::prepareVectorTagNeighbor().

1086  {
1087  return _sub_Rn[tag_id][var_num];
1088  }
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2621

◆ resizeADMappingObjects()

void Assembly::resizeADMappingObjects ( unsigned int  n_qp,
unsigned int  dim 
)
private

resize any objects that contribute to automatic differentiation-related mapping calculations

Definition at line 971 of file Assembly.C.

Referenced by computeADFace(), and reinitFE().

972 {
973  _ad_dxyzdxi_map.resize(n_qp);
974  _ad_dxidx_map.resize(n_qp);
975  _ad_dxidy_map.resize(n_qp); // 1D element may live in 2D ...
976  _ad_dxidz_map.resize(n_qp); // ... or 3D
977 
978  if (dim > 1)
979  {
980  _ad_dxyzdeta_map.resize(n_qp);
981  _ad_detadx_map.resize(n_qp);
982  _ad_detady_map.resize(n_qp);
983  _ad_detadz_map.resize(n_qp);
984 
985  if (dim > 2)
986  {
987  _ad_dxyzdzeta_map.resize(n_qp);
988  _ad_dzetadx_map.resize(n_qp);
989  _ad_dzetady_map.resize(n_qp);
990  _ad_dzetadz_map.resize(n_qp);
991  }
992  }
993 
994  _ad_jac.resize(n_qp);
995  _ad_JxW.resize(n_qp);
996  if (_calculate_xyz)
997  _ad_q_points.resize(n_qp);
998 }
std::vector< ADReal > _ad_detadz_map
Definition: Assembly.h:2801
std::vector< ADReal > _ad_detady_map
Definition: Assembly.h:2800
std::vector< ADReal > _ad_dzetadz_map
Definition: Assembly.h:2804
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::vector< VectorValue< ADReal > > _ad_dxyzdeta_map
Definition: Assembly.h:2788
std::vector< VectorValue< ADReal > > _ad_dxyzdzeta_map
Definition: Assembly.h:2789
std::vector< ADReal > _ad_dzetadx_map
Definition: Assembly.h:2802
std::vector< ADReal > _ad_dzetady_map
Definition: Assembly.h:2803
std::vector< ADReal > _ad_dxidz_map
Definition: Assembly.h:2798
std::vector< ADReal > _ad_detadx_map
Definition: Assembly.h:2799
bool _calculate_xyz
Definition: Assembly.h:2817
std::vector< VectorValue< ADReal > > _ad_dxyzdxi_map
AD quantities.
Definition: Assembly.h:2787
std::vector< ADReal > _ad_jac
Definition: Assembly.h:2793
std::vector< ADReal > _ad_dxidx_map
Definition: Assembly.h:2796
std::vector< ADReal > _ad_dxidy_map
Definition: Assembly.h:2797
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2795
void resize(unsigned int size)
Change the number of elements the array can store.
Definition: MooseArray.h:216
MooseArray< ADReal > _ad_JxW
Definition: Assembly.h:2794

◆ saveDiagLocalArrayJacobian()

void Assembly::saveDiagLocalArrayJacobian ( DenseMatrix< Number > &  ke,
unsigned int  i,
unsigned int  ntest,
unsigned int  j,
unsigned int  nphi,
unsigned int  ivar,
const RealEigenVector &  v 
) const
inline

Helper function for assembling diagonal Jacobian contriubutions on local quadrature points for an array kernel, bc, etc.

Parameters
keThe local Jacobian
iThe local test function index
ntestThe number of test functions
jThe local shape function index
nphiThe number of shape functions
vThe diagonal Jacobian contribution on the current qp

Definition at line 1796 of file Assembly.h.

Referenced by ArrayDGKernel::computeElemNeighJacobian(), ArrayKernel::computeJacobian(), ArrayIntegratedBC::computeJacobian(), ArrayLowerDIntegratedBC::computeLowerDJacobian(), and ArrayDGLowerDKernel::computeLowerDJacobian().

1803  {
1804  unsigned int pace = (_component_block_diagonal[ivar] ? 0 : nphi);
1805  for (unsigned int k = 0; k < v.size(); ++k, i += ntest, j += pace)
1806  ke(i, j) += v(k);
1807  }
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778

◆ saveFullLocalArrayJacobian()

void Assembly::saveFullLocalArrayJacobian ( DenseMatrix< Number > &  ke,
unsigned int  i,
unsigned int  ntest,
unsigned int  j,
unsigned int  nphi,
unsigned int  ivar,
unsigned int  jvar,
const RealEigenMatrix &  v 
) const
inline

Helper function for assembling full Jacobian contriubutions on local quadrature points for an array kernel, bc, etc.

Parameters
keThe local Jacobian
iThe local test function index
ntestThe number of test functions
jThe local shape function index
nphiThe number of shape functions
ivarThe array variable index
jvarThe contributing variable index
vThe full Jacobian contribution from a variable on the current qp

Definition at line 1821 of file Assembly.h.

Referenced by ArrayLowerDIntegratedBC::computeLowerDOffDiagJacobian(), ArrayDGKernel::computeOffDiagElemNeighJacobian(), ArrayKernel::computeOffDiagJacobian(), ArrayIntegratedBC::computeOffDiagJacobian(), ArrayKernel::computeOffDiagJacobianScalar(), ArrayIntegratedBC::computeOffDiagJacobianScalar(), and ArrayDGLowerDKernel::computeOffDiagLowerDJacobian().

1829  {
1830  if (ivar == jvar && _component_block_diagonal[ivar])
1831  {
1832  for (unsigned int k = 0; k < v.rows(); ++k, i += ntest)
1833  ke(i, j) += v(k, k);
1834  }
1835  else
1836  {
1837  const unsigned int saved_j = j;
1838  for (unsigned int k = 0; k < v.rows(); ++k, i += ntest)
1839  {
1840  j = saved_j;
1841  for (unsigned int l = 0; l < v.cols(); ++l, j += nphi)
1842  ke(i, j) += v(k, l);
1843  }
1844  }
1845  }
std::vector< bool > _component_block_diagonal
An flag array Indiced by variable index to show if there is no component-wise coupling for the variab...
Definition: Assembly.h:2778

◆ saveLocalArrayResidual()

void Assembly::saveLocalArrayResidual ( DenseVector< Number > &  re,
unsigned int  i,
unsigned int  ntest,
const RealEigenVector &  v 
) const
inline

Helper function for assembling residual contriubutions on local quadrature points for an array kernel, bc, etc.

Parameters
reThe local residual
iThe local test function index
ntestThe number of test functions
vThe residual contribution on the current qp

Definition at line 1777 of file Assembly.h.

Referenced by ArrayDGKernel::computeElemNeighResidual(), ArrayDGLowerDKernel::computeLowerDResidual(), ArrayKernel::computeResidual(), ArrayLowerDIntegratedBC::computeResidual(), and ArrayIntegratedBC::computeResidual().

1781  {
1782  for (unsigned int j = 0; j < v.size(); ++j, i += ntest)
1783  re(i) += v(j);
1784  }

◆ scalarFieldCouplingEntries()

const std::vector<std::pair<MooseVariableScalar *, MooseVariableFieldBase *> >& Assembly::scalarFieldCouplingEntries ( ) const
inline

Definition at line 1274 of file Assembly.h.

Referenced by MortarScalarBase::computeScalarOffDiagJacobian().

1275  {
1276  return _cm_sf_entry;
1277  }
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
Entries in the coupling matrix for scalar variables vs field variables.
Definition: Assembly.h:2295

◆ secondPhi() [1/6]

const VariablePhiSecond& Assembly::secondPhi ( ) const
inline

Definition at line 1289 of file Assembly.h.

Referenced by copyShapes().

1289 { return _second_phi; }
VariablePhiSecond _second_phi
Definition: Assembly.h:2665

◆ secondPhi() [2/6]

const VariablePhiSecond& Assembly::secondPhi ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1290 of file Assembly.h.

1291  {
1292  return _second_phi;
1293  }
VariablePhiSecond _second_phi
Definition: Assembly.h:2665

◆ secondPhi() [3/6]

const VectorVariablePhiSecond& Assembly::secondPhi ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1341 of file Assembly.h.

1342  {
1343  return _vector_second_phi;
1344  }
VectorVariablePhiSecond _vector_second_phi
Definition: Assembly.h:2682

◆ secondPhi() [4/6]

VariablePhiSecond& Assembly::secondPhi ( const MooseVariableField< Real > &  )
inline

Definition at line 1427 of file Assembly.h.

1427 { return _second_phi; }
VariablePhiSecond _second_phi
Definition: Assembly.h:2665

◆ secondPhi() [5/6]

VectorVariablePhiSecond& Assembly::secondPhi ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1462 of file Assembly.h.

1463  {
1464  return _vector_second_phi;
1465  }
VectorVariablePhiSecond _vector_second_phi
Definition: Assembly.h:2682

◆ secondPhi() [6/6]

VariablePhiSecond& Assembly::secondPhi ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1540 of file Assembly.h.

1540 { return _second_phi; }
VariablePhiSecond _second_phi
Definition: Assembly.h:2665

◆ secondPhiFace() [1/5]

const VariablePhiSecond& Assembly::secondPhiFace ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1302 of file Assembly.h.

Referenced by copyFaceShapes().

1303  {
1304  return _second_phi_face;
1305  }
VariablePhiSecond _second_phi_face
Definition: Assembly.h:2669

◆ secondPhiFace() [2/5]

const VectorVariablePhiSecond& Assembly::secondPhiFace ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1362 of file Assembly.h.

1363  {
1364  return _vector_second_phi_face;
1365  }
VectorVariablePhiSecond _vector_second_phi_face
Definition: Assembly.h:2688

◆ secondPhiFace() [3/5]

VariablePhiSecond& Assembly::secondPhiFace ( const MooseVariableField< Real > &  )
inline

Definition at line 1431 of file Assembly.h.

1431 { return _second_phi_face; }
VariablePhiSecond _second_phi_face
Definition: Assembly.h:2669

◆ secondPhiFace() [4/5]

VectorVariablePhiSecond& Assembly::secondPhiFace ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1483 of file Assembly.h.

1484  {
1485  return _vector_second_phi_face;
1486  }
VectorVariablePhiSecond _vector_second_phi_face
Definition: Assembly.h:2688

◆ secondPhiFace() [5/5]

VariablePhiSecond& Assembly::secondPhiFace ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1547 of file Assembly.h.

1548  {
1549  return _second_phi_face;
1550  }
VariablePhiSecond _second_phi_face
Definition: Assembly.h:2669

◆ secondPhiFaceNeighbor() [1/5]

const VariablePhiSecond& Assembly::secondPhiFaceNeighbor ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1328 of file Assembly.h.

Referenced by copyNeighborShapes().

1329  {
1331  }
VariablePhiSecond _second_phi_face_neighbor
Definition: Assembly.h:2677

◆ secondPhiFaceNeighbor() [2/5]

const VectorVariablePhiSecond& Assembly::secondPhiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1409 of file Assembly.h.

1410  {
1412  }
VectorVariablePhiSecond _vector_second_phi_face_neighbor
Definition: Assembly.h:2700

◆ secondPhiFaceNeighbor() [3/5]

VariablePhiSecond& Assembly::secondPhiFaceNeighbor ( const MooseVariableField< Real > &  )
inline

Definition at line 1451 of file Assembly.h.

1452  {
1454  }
VariablePhiSecond _second_phi_face_neighbor
Definition: Assembly.h:2677

◆ secondPhiFaceNeighbor() [4/5]

VectorVariablePhiSecond& Assembly::secondPhiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1524 of file Assembly.h.

1525  {
1527  }
VectorVariablePhiSecond _vector_second_phi_face_neighbor
Definition: Assembly.h:2700

◆ secondPhiFaceNeighbor() [5/5]

VariablePhiSecond& Assembly::secondPhiFaceNeighbor ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1573 of file Assembly.h.

1574  {
1576  }
VariablePhiSecond _second_phi_face_neighbor
Definition: Assembly.h:2677

◆ secondPhiNeighbor() [1/5]

const VariablePhiSecond& Assembly::secondPhiNeighbor ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1315 of file Assembly.h.

Referenced by copyNeighborShapes().

1316  {
1317  return _second_phi_neighbor;
1318  }
VariablePhiSecond _second_phi_neighbor
Definition: Assembly.h:2673

◆ secondPhiNeighbor() [2/5]

const VectorVariablePhiSecond& Assembly::secondPhiNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1385 of file Assembly.h.

1386  {
1388  }
VectorVariablePhiSecond _vector_second_phi_neighbor
Definition: Assembly.h:2694

◆ secondPhiNeighbor() [3/5]

VariablePhiSecond& Assembly::secondPhiNeighbor ( const MooseVariableField< Real > &  )
inline

Definition at line 1438 of file Assembly.h.

1439  {
1440  return _second_phi_neighbor;
1441  }
VariablePhiSecond _second_phi_neighbor
Definition: Assembly.h:2673

◆ secondPhiNeighbor() [4/5]

VectorVariablePhiSecond& Assembly::secondPhiNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1504 of file Assembly.h.

1505  {
1507  }
VectorVariablePhiSecond _vector_second_phi_neighbor
Definition: Assembly.h:2694

◆ secondPhiNeighbor() [5/5]

VariablePhiSecond& Assembly::secondPhiNeighbor ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1560 of file Assembly.h.

1561  {
1562  return _second_phi_neighbor;
1563  }
VariablePhiSecond _second_phi_neighbor
Definition: Assembly.h:2673

◆ setCachedJacobian()

void Assembly::setCachedJacobian ( GlobalDataKey  )

Sets previously-cached Jacobian values via SparseMatrix::set() calls.

Definition at line 4492 of file Assembly.C.

Referenced by NonlinearSystemBase::computeJacobianInternal(), and NonlinearSystemBase::computeNodalBCsResidualAndJacobian().

4493 {
4494  for (MooseIndex(_cached_jacobian_rows) tag = 0; tag < _cached_jacobian_rows.size(); tag++)
4495  if (_sys.hasMatrix(tag))
4496  {
4497  // First zero the rows (including the diagonals) to prepare for
4498  // setting the cached values.
4500 
4501  // TODO: Use SparseMatrix::set_values() for efficiency
4502  for (MooseIndex(_cached_jacobian_values) i = 0; i < _cached_jacobian_values[tag].size(); ++i)
4503  _sys.getMatrix(tag).set(_cached_jacobian_rows[tag][i],
4504  _cached_jacobian_cols[tag][i],
4505  _cached_jacobian_values[tag][i]);
4506  }
4507 
4509 }
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2768
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2766
virtual void set(const numeric_index_type i, const numeric_index_type j, const T value)=0
virtual void zero_rows(std::vector< numeric_index_type > &rows, T diag_value=0.0)
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1016
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2770
void clearCachedJacobian()
Clear any currently cached jacobians.
Definition: Assembly.C:4522

◆ setCoordinateTransformation()

template<typename Points , typename Coords >
void Assembly::setCoordinateTransformation ( const libMesh::QBase qrule,
const Points &  q_points,
Coords &  coord,
SubdomainID  sub_id 
)
private

Definition at line 1729 of file Assembly.C.

Referenced by computeCurrentElemVolume(), computeCurrentFaceVolume(), reinitLowerDElem(), reinitMortarElem(), and reinitNeighbor().

1733 {
1734 
1735  mooseAssert(qrule, "The quadrature rule is null in Assembly::setCoordinateTransformation");
1736  auto n_points = qrule->n_points();
1737  mooseAssert(n_points == q_points.size(),
1738  "The number of points in the quadrature rule doesn't match the number of passed-in "
1739  "points in Assembly::setCoordinateTransformation");
1740 
1741  // Make sure to honor the name of this method and set the _coord_type member because users may
1742  // make use of the const Moose::CoordinateSystem & coordTransformation() { return _coord_type; }
1743  // API. MaterialBase for example uses it
1745 
1746  coord.resize(n_points);
1747  for (unsigned int qp = 0; qp < n_points; qp++)
1748  coordTransformFactor(_subproblem, sub_id, q_points[qp], coord[qp]);
1749 }
void coordTransformFactor(const SubProblem &s, const SubdomainID sub_id, const P &point, C &factor, const SubdomainID neighbor_sub_id)
Computes a conversion multiplier for use when computing integraals for the current coordinate system ...
Definition: Assembly.C:41
SubProblem & _subproblem
Definition: Assembly.h:2273
unsigned int n_points() const
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
Definition: SubProblem.C:1278
Moose::CoordinateSystemType _coord_type
The coordinate system.
Definition: Assembly.h:2382

◆ setCurrentBoundaryID()

void Assembly::setCurrentBoundaryID ( BoundaryID  i)
inline

set the current boundary ID

Definition at line 395 of file Assembly.h.

Referenced by SubProblem::setCurrentBoundaryID().

395 { _current_boundary_id = i; }
BoundaryID _current_boundary_id
The current boundary ID.
Definition: Assembly.h:2560

◆ setCurrentLowerDElem()

void Assembly::setCurrentLowerDElem ( const Elem *const  lower_d_elem)
inline

Set the current lower dimensional element.

This may be null

Definition at line 3187 of file Assembly.h.

Referenced by SubProblem::setCurrentLowerDElem().

3188 {
3189  _current_lower_d_elem = lower_d_elem;
3190 }
const Elem * _current_lower_d_elem
The current lower dimensional element.
Definition: Assembly.h:2591

◆ setCurrentNeighborSubdomainID()

void Assembly::setCurrentNeighborSubdomainID ( SubdomainID  i)
inline

set the current subdomain ID

Definition at line 463 of file Assembly.h.

Referenced by DisplacedProblem::setNeighborSubdomainID().

SubdomainID _current_neighbor_subdomain_id
The current neighbor subdomain ID.
Definition: Assembly.h:2572

◆ setCurrentSubdomainID()

void Assembly::setCurrentSubdomainID ( SubdomainID  i)
inline

set the current subdomain ID

Definition at line 385 of file Assembly.h.

Referenced by MooseMesh::buildHRefinementAndCoarseningMaps(), MooseMesh::buildPRefinementAndCoarseningMaps(), MaxQpsThread::operator()(), and DisplacedProblem::setCurrentSubdomainID().

385 { _current_subdomain_id = i; }
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition: Assembly.h:2558

◆ setFaceQRule() [1/2]

void Assembly::setFaceQRule ( libMesh::QBase qrule,
unsigned int  dim 
)

Set the qrule to be used for face integration.

Note: This is normally set internally, only use if you know what you are doing!

Parameters
qruleThe qrule you want to set
dimThe spatial dimension of the qrule

Definition at line 674 of file Assembly.C.

Referenced by reinitElemFaceRef(), reinitFVFace(), and setLowerQRule().

675 {
676  _current_qrule_face = qrule;
677 
678  for (auto & it : _fe_face[dim])
679  it.second->attach_quadrature_rule(qrule);
680  for (auto & it : _vector_fe_face[dim])
681  it.second->attach_quadrature_rule(qrule);
682  if (!_unique_fe_face_helper.empty())
683  {
684  mooseAssert(dim < _unique_fe_face_helper.size(), "We should not be indexing out of bounds");
685  _unique_fe_face_helper[dim]->attach_quadrature_rule(qrule);
686  }
687 }
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2474
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
Definition: Assembly.h:2330
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2482
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2476

◆ setFaceQRule() [2/2]

void Assembly::setFaceQRule ( const Elem *const  elem,
const unsigned int  side 
)

Set the face quadrature rule based on the provided element and side.

◆ setLowerQRule()

void Assembly::setLowerQRule ( libMesh::QBase qrule,
unsigned int  dim 
)
private

Set the qrule to be used for lower dimensional integration.

Parameters
qruleThe qrule you want to set
dimThe spatial dimension of the qrule

Definition at line 690 of file Assembly.C.

Referenced by reinitLowerDElem().

691 {
692  // The lower-dimensional quadrature rule matches the face quadrature rule
693  setFaceQRule(qrule, dim);
694 
695  _current_qrule_lower = qrule;
696 
697  for (auto & it : _fe_lower[dim])
698  it.second->attach_quadrature_rule(qrule);
699  for (auto & it : _vector_fe_lower[dim])
700  it.second->attach_quadrature_rule(qrule);
701  if (!_unique_fe_lower_helper.empty())
702  {
703  mooseAssert(dim < _unique_fe_lower_helper.size(), "We should not be indexing out of bounds");
704  _unique_fe_lower_helper[dim]->attach_quadrature_rule(qrule);
705  }
706 }
std::vector< std::unique_ptr< FEBase > > _unique_fe_lower_helper
Definition: Assembly.h:2333
void setFaceQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for face integration.
Definition: Assembly.C:674
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
libMesh::QBase * _current_qrule_lower
quadrature rule used on lower dimensional elements.
Definition: Assembly.h:2552
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2516
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition: Assembly.h:2518

◆ setMortarQRule()

void Assembly::setMortarQRule ( Order  order)

Specifies a custom qrule for integration on mortar segment mesh.

Used to properly integrate QUAD face elements using quadrature on TRI mortar segment elements. For example, to exactly integrate a FIRST order QUAD element, SECOND order quadrature on TRI mortar segments is needed.

Definition at line 735 of file Assembly.C.

Referenced by MortarConstraintBase::MortarConstraintBase().

736 {
737  if (order != _qrule_msm->get_order())
738  {
739  // If custom mortar qrule has not yet been specified
741  {
742  _custom_mortar_qrule = true;
743  const unsigned int dim = _qrule_msm->get_dim();
744  const QuadratureType type = _qrule_msm->type();
745  delete _qrule_msm;
746 
747  _qrule_msm = QBase::build(type, dim, order).release();
748  _fe_msm->attach_quadrature_rule(_qrule_msm);
749  }
750  else
751  mooseError("Mortar quadrature_order: ",
752  order,
753  " does not match previously specified quadrature_order: ",
755  ". Quadrature_order (when specified) must match for all mortar constraints.");
756  }
757 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:333
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
Definition: Assembly.h:2541
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
QuadratureType
virtual QuadratureType type() const=0
Order get_order() const
unsigned int get_dim() const
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition: Assembly.h:2546
bool _custom_mortar_qrule
Flag specifying whether a custom quadrature rule has been specified for mortar segment mesh...
Definition: Assembly.h:2548

◆ setNeighborQRule()

void Assembly::setNeighborQRule ( libMesh::QBase qrule,
unsigned int  dim 
)

Set the qrule to be used for neighbor integration.

Note: This is normally set internally, only use if you know what you are doing!

Parameters
qruleThe qrule you want to set
dimThe spatial dimension of the qrule

Definition at line 709 of file Assembly.C.

Referenced by reinitFVFace(), reinitNeighbor(), and reinitNeighborFaceRef().

710 {
711  _current_qrule_neighbor = qrule;
712 
713  for (auto & it : _fe_face_neighbor[dim])
714  it.second->attach_quadrature_rule(qrule);
715  for (auto & it : _vector_fe_face_neighbor[dim])
716  it.second->attach_quadrature_rule(qrule);
717  if (!_unique_fe_face_neighbor_helper.empty())
718  {
719  mooseAssert(dim < _unique_fe_face_neighbor_helper.size(),
720  "We should not be indexing out of bounds");
721  _unique_fe_face_neighbor_helper[dim]->attach_quadrature_rule(qrule);
722  }
723 }
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition: Assembly.h:2523
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2509
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
Definition: Assembly.h:2331
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2507

◆ setResidual()

void Assembly::setResidual ( NumericVector< Number > &  residual,
GlobalDataKey  ,
const VectorTag vector_tag 
)

Sets local residuals of all field variables to the global residual vector for a tag.

Definition at line 3548 of file Assembly.C.

3549 {
3550  auto & tag_Re = _sub_Re[vector_tag._type_id];
3551  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3552  for (const auto & var : vars)
3553  setResidualBlock(residual,
3554  tag_Re[var->number()],
3555  var->dofIndices(),
3556  var->arrayScalingFactor(),
3557  var->isNodal());
3558 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
void setResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Set a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3289
char ** vars
TagTypeID _type_id
The index for this tag into a vector that contains tags of only its type ordered by ID...
Definition: VectorTag.h:47
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2620

◆ setResidualBlock()

void Assembly::setResidualBlock ( NumericVector< Number > &  residual,
DenseVector< Number > &  res_block,
const std::vector< dof_id_type > &  dof_indices,
const std::vector< Real > &  scaling_factor,
bool  is_nodal 
)
private

Set a local residual block to a global residual vector with proper scaling.

Definition at line 3289 of file Assembly.C.

Referenced by setResidual(), and setResidualNeighbor().

3294 {
3295  if (dof_indices.size() > 0)
3296  {
3297  std::vector<dof_id_type> di(dof_indices);
3298  _tmp_Re = res_block;
3299  processLocalResidual(_tmp_Re, di, scaling_factor, is_nodal);
3300  residual.insert(_tmp_Re, di);
3301  }
3302 }
virtual void insert(const T *v, const std::vector< numeric_index_type > &dof_indices)
void processLocalResidual(DenseVector< Number > &res_block, std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Appling scaling, constraints to the local residual block and populate the full DoF indices for array ...
Definition: Assembly.C:3213
DenseVector< Number > _tmp_Re
auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction) ...
Definition: Assembly.h:2626

◆ setResidualNeighbor()

void Assembly::setResidualNeighbor ( NumericVector< Number > &  residual,
GlobalDataKey  ,
const VectorTag vector_tag 
)

Sets local neighbor residuals of all field variables to the global residual vector for a tag.

Definition at line 3561 of file Assembly.C.

3564 {
3565  auto & tag_Rn = _sub_Rn[vector_tag._type_id];
3566  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3567  for (const auto & var : vars)
3568  setResidualBlock(residual,
3569  tag_Rn[var->number()],
3570  var->dofIndicesNeighbor(),
3571  var->arrayScalingFactor(),
3572  var->isNodal());
3573 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
SystemBase & _sys
Definition: Assembly.h:2272
void setResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor, bool is_nodal)
Set a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3289
char ** vars
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2621
TagTypeID _type_id
The index for this tag into a vector that contains tags of only its type ordered by ID...
Definition: VectorTag.h:47
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2310

◆ setVolumeQRule() [1/2]

void Assembly::setVolumeQRule ( libMesh::QBase qrule,
unsigned int  dim 
)

Set the qrule to be used for volume integration.

Note: This is normally set internally, only use if you know what you are doing!

Parameters
qruleThe qrule you want to set
dimThe spatial dimension of the qrule

Definition at line 655 of file Assembly.C.

656 {
657  _current_qrule = qrule;
658 
659  if (qrule) // Don't set a NULL qrule
660  {
661  for (auto & it : _fe[dim])
662  it.second->attach_quadrature_rule(qrule);
663  for (auto & it : _vector_fe[dim])
664  it.second->attach_quadrature_rule(qrule);
665  if (!_unique_fe_helper.empty())
666  {
667  mooseAssert(dim < _unique_fe_helper.size(), "We should not be indexing out of bounds");
668  _unique_fe_helper[dim]->attach_quadrature_rule(qrule);
669  }
670  }
671 }
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension&#39;s actual vector fe objects indexed on type.
Definition: Assembly.h:2364
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:159
std::vector< std::unique_ptr< FEBase > > _unique_fe_helper
Containers for holding unique FE helper types if we are doing p-refinement.
Definition: Assembly.h:2329
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2370
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2362

◆ setVolumeQRule() [2/2]

void Assembly::setVolumeQRule ( const Elem *  elem)

Set the volumetric quadrature rule based on the provided element.

◆ setXFEM()

void Assembly::setXFEM ( std::shared_ptr< XFEMInterface xfem)
inline

Set the pointer to the XFEM controller object.

Definition at line 1761 of file Assembly.h.

1761 { _xfem = xfem; }
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition: Assembly.h:2339

◆ side()

const unsigned int& Assembly::side ( ) const
inline

Returns the current side.

Returns
A reference. Make sure to store this as a reference!

Definition at line 407 of file Assembly.h.

Referenced by computeADFace(), computeFaceMap(), modifyFaceWeightsDueToXFEM(), qruleArbitraryFace(), qruleFace(), qruleFaceHelper(), reinitElemAndNeighbor(), and reinitFEFace().

407 { return _current_side; }
unsigned int _current_side
The current side of the selected element (valid only when working with sides)
Definition: Assembly.h:2564

◆ sideElem()

const Elem*& Assembly::sideElem ( )
inline

Returns the side element.

Returns
A reference. Make sure to store this as a reference!

Definition at line 419 of file Assembly.h.

419 { return _current_side_elem; }
const Elem * _current_side_elem
The current "element" making up the side we are currently on.
Definition: Assembly.h:2566

◆ sideElemVolume()

const Real& Assembly::sideElemVolume ( ) const
inline

Returns the reference to the volume of current side element.

Returns
A reference. Make sure to store this as a reference!

Definition at line 425 of file Assembly.h.

425 { return _current_side_volume; }
Real _current_side_volume
Volume of the current side element.
Definition: Assembly.h:2568

◆ tangents()

const MooseArray<std::vector<Point> >& Assembly::tangents ( ) const
inline

Returns the array of tangents for quadrature points on a current side.

Returns
A reference. Make sure to store this as a reference!

Definition at line 329 of file Assembly.h.

329 { return _current_tangents; }
MooseArray< std::vector< Point > > _current_tangents
The current tangent vectors at the quadrature points.
Definition: Assembly.h:2494

◆ writeableQRule()

libMesh::QBase* const& Assembly::writeableQRule ( )
inline

Returns the reference to the current quadrature being used.

Returns
A reference to the pointer. Make sure to store this as a reference!

Definition at line 224 of file Assembly.h.

Referenced by MooseMesh::buildHRefinementAndCoarseningMaps(), and MooseMesh::buildPRefinementAndCoarseningMaps().

224 { return _current_qrule; }
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2370

◆ writeableQRuleFace()

libMesh::QBase* const& Assembly::writeableQRuleFace ( )
inline

Returns the reference to the current quadrature being used on a current face.

Returns
A reference. Make sure to store this as a reference!

Definition at line 300 of file Assembly.h.

Referenced by MooseMesh::buildHRefinementAndCoarseningMaps(), and MooseMesh::buildPRefinementAndCoarseningMaps().

300 { return _current_qrule_face; }
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2482

◆ writeableQRuleNeighbor()

libMesh::QBase* const& Assembly::writeableQRuleNeighbor ( )
inline

Returns the reference to the current quadrature being used on a current neighbor.

Returns
A reference. Make sure to store this as a reference!

Definition at line 488 of file Assembly.h.

488 { return _current_qrule_neighbor; }
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition: Assembly.h:2523

◆ zeroCachedJacobian()

void Assembly::zeroCachedJacobian ( GlobalDataKey  )

Zero out previously-cached Jacobian rows.

Definition at line 4512 of file Assembly.C.

4513 {
4514  for (MooseIndex(_cached_jacobian_rows) tag = 0; tag < _cached_jacobian_rows.size(); tag++)
4515  if (_sys.hasMatrix(tag))
4517 
4519 }
SystemBase & _sys
Definition: Assembly.h:2272
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2768
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
virtual void zero_rows(std::vector< numeric_index_type > &rows, T diag_value=0.0)
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1016
void clearCachedJacobian()
Clear any currently cached jacobians.
Definition: Assembly.C:4522

Member Data Documentation

◆ _ad_coord

MooseArray<ADReal> Assembly::_ad_coord
private

The AD version of the current coordinate transformation coefficients.

Definition at line 2386 of file Assembly.h.

Referenced by adCoordTransformation(), computeCurrentElemVolume(), computeCurrentFaceVolume(), and ~Assembly().

◆ _ad_curvatures

MooseArray<ADReal> Assembly::_ad_curvatures
protected

Definition at line 2810 of file Assembly.h.

Referenced by adCurvatures(), computeADFace(), computeFaceMap(), and ~Assembly().

◆ _ad_d2xyzdeta2_map

std::vector<VectorValue<ADReal> > Assembly::_ad_d2xyzdeta2_map
protected

Definition at line 2792 of file Assembly.h.

Referenced by computeFaceMap().

◆ _ad_d2xyzdxi2_map

std::vector<VectorValue<ADReal> > Assembly::_ad_d2xyzdxi2_map
protected

Definition at line 2790 of file Assembly.h.

Referenced by computeFaceMap().

◆ _ad_d2xyzdxideta_map

std::vector<VectorValue<ADReal> > Assembly::_ad_d2xyzdxideta_map
protected

Definition at line 2791 of file Assembly.h.

Referenced by computeFaceMap().

◆ _ad_detadx_map

std::vector<ADReal> Assembly::_ad_detadx_map
protected

Definition at line 2799 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_detady_map

std::vector<ADReal> Assembly::_ad_detady_map
protected

Definition at line 2800 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_detadz_map

std::vector<ADReal> Assembly::_ad_detadz_map
protected

Definition at line 2801 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dxidx_map

std::vector<ADReal> Assembly::_ad_dxidx_map
protected

Definition at line 2796 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dxidy_map

std::vector<ADReal> Assembly::_ad_dxidy_map
protected

Definition at line 2797 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dxidz_map

std::vector<ADReal> Assembly::_ad_dxidz_map
protected

Definition at line 2798 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dxyzdeta_map

std::vector<VectorValue<ADReal> > Assembly::_ad_dxyzdeta_map
protected

Definition at line 2788 of file Assembly.h.

Referenced by computeFaceMap(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dxyzdxi_map

std::vector<VectorValue<ADReal> > Assembly::_ad_dxyzdxi_map
protected

AD quantities.

Definition at line 2787 of file Assembly.h.

Referenced by computeFaceMap(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dxyzdzeta_map

std::vector<VectorValue<ADReal> > Assembly::_ad_dxyzdzeta_map
protected

Definition at line 2789 of file Assembly.h.

Referenced by computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dzetadx_map

std::vector<ADReal> Assembly::_ad_dzetadx_map
protected

Definition at line 2802 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dzetady_map

std::vector<ADReal> Assembly::_ad_dzetady_map
protected

Definition at line 2803 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dzetadz_map

std::vector<ADReal> Assembly::_ad_dzetadz_map
protected

Definition at line 2804 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_grad_phi_data

std::map<FEType, ADTemplateVariablePhiGradient<Real> > Assembly::_ad_grad_phi_data
mutableprotected

Definition at line 2740 of file Assembly.h.

Referenced by adGradPhi(), feADGradPhi(), reinitFE(), and ~Assembly().

◆ _ad_grad_phi_data_face

std::map<FEType, ADTemplateVariablePhiGradient<Real> > Assembly::_ad_grad_phi_data_face
mutableprotected

Definition at line 2742 of file Assembly.h.

Referenced by computeADFace(), feADGradPhiFace(), and ~Assembly().

◆ _ad_jac

std::vector<ADReal> Assembly::_ad_jac
protected

Definition at line 2793 of file Assembly.h.

Referenced by computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_JxW

MooseArray<ADReal> Assembly::_ad_JxW
protected

◆ _ad_JxW_face

MooseArray<ADReal> Assembly::_ad_JxW_face
protected

Definition at line 2806 of file Assembly.h.

Referenced by adJxWFace(), computeADFace(), computeFaceMap(), and ~Assembly().

◆ _ad_normals

MooseArray<VectorValue<ADReal> > Assembly::_ad_normals
protected

Definition at line 2807 of file Assembly.h.

Referenced by adNormals(), computeADFace(), computeFaceMap(), and ~Assembly().

◆ _ad_q_points

MooseArray<VectorValue<ADReal> > Assembly::_ad_q_points
protected

◆ _ad_q_points_face

MooseArray<VectorValue<ADReal> > Assembly::_ad_q_points_face
protected

◆ _ad_vector_grad_phi_data

std::map<FEType, ADTemplateVariablePhiGradient<RealVectorValue> > Assembly::_ad_vector_grad_phi_data
mutableprotected

Definition at line 2741 of file Assembly.h.

Referenced by reinitFE(), and ~Assembly().

◆ _ad_vector_grad_phi_data_face

std::map<FEType, ADTemplateVariablePhiGradient<RealVectorValue> > Assembly::_ad_vector_grad_phi_data_face
mutableprotected

Definition at line 2744 of file Assembly.h.

Referenced by computeADFace(), and ~Assembly().

◆ _block_diagonal_matrix

bool Assembly::_block_diagonal_matrix
protected

Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take some shortcuts.

Definition at line 2775 of file Assembly.h.

Referenced by init(), jacobianBlock(), jacobianBlockLowerUsed(), jacobianBlockMortar(), jacobianBlockNeighbor(), jacobianBlockNeighborUsed(), jacobianBlockNonlocal(), jacobianBlockNonlocalUsed(), and jacobianBlockUsed().

◆ _building_helpers

bool Assembly::_building_helpers
private

Whether we are currently building the FE classes for the helpers.

Definition at line 2336 of file Assembly.h.

Referenced by Assembly(), buildFaceFE(), buildFaceNeighborFE(), buildFE(), buildLowerDFE(), and buildNeighborFE().

◆ _cached_jacobian_cols

std::vector<std::vector<dof_id_type> > Assembly::_cached_jacobian_cols
protected

Column where the corresponding cached value should go.

Definition at line 2770 of file Assembly.h.

Referenced by addCachedJacobian(), cacheJacobian(), cacheJacobianBlockNonzero(), clearCachedJacobian(), init(), and setCachedJacobian().

◆ _cached_jacobian_rows

std::vector<std::vector<dof_id_type> > Assembly::_cached_jacobian_rows
protected

Row where the corresponding cached value should go.

Definition at line 2768 of file Assembly.h.

Referenced by addCachedJacobian(), cacheJacobian(), cacheJacobianBlockNonzero(), clearCachedJacobian(), init(), setCachedJacobian(), and zeroCachedJacobian().

◆ _cached_jacobian_values

std::vector<std::vector<Real> > Assembly::_cached_jacobian_values
protected

◆ _cached_residual_rows

std::vector<std::vector<dof_id_type> > Assembly::_cached_residual_rows
protected

Where the cached values should go (the first vector is for TIME vs NONTIME)

Definition at line 2761 of file Assembly.h.

Referenced by addCachedResidualDirectly(), addCachedResiduals(), cacheResidual(), cacheResidualLower(), cacheResidualNeighbor(), cacheResidualNodes(), clearCachedResiduals(), and init().

◆ _cached_residual_values

std::vector<std::vector<Real> > Assembly::_cached_residual_values
protected

Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME)

Definition at line 2758 of file Assembly.h.

Referenced by addCachedResidualDirectly(), addCachedResiduals(), cacheResidual(), cacheResidualLower(), cacheResidualNeighbor(), cacheResidualNodes(), clearCachedResiduals(), and init().

◆ _calculate_ad_coord

bool Assembly::_calculate_ad_coord
mutableprotected

Whether to calculate coord with AD.

This will only be set to true if a consumer calls adCoordTransformation()

Definition at line 2823 of file Assembly.h.

Referenced by adCoordTransformation(), computeCurrentElemVolume(), and computeCurrentFaceVolume().

◆ _calculate_curvatures

bool Assembly::_calculate_curvatures
mutableprotected

◆ _calculate_face_xyz

bool Assembly::_calculate_face_xyz
mutableprotected

Definition at line 2818 of file Assembly.h.

Referenced by adCoordTransformation(), adQPointsFace(), computeADFace(), and computeFaceMap().

◆ _calculate_xyz

bool Assembly::_calculate_xyz
mutableprotected

◆ _cm

const libMesh::CouplingMatrix* Assembly::_cm
private

Coupling matrices.

Definition at line 2278 of file Assembly.h.

Referenced by addJacobianBlock(), addJacobianBlockNonlocal(), cacheJacobianBlockNonzero(), and init().

◆ _cm_ff_entry

std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *> > Assembly::_cm_ff_entry
private

◆ _cm_fs_entry

std::vector<std::pair<MooseVariableFieldBase *, MooseVariableScalar *> > Assembly::_cm_fs_entry
private

Entries in the coupling matrix for field variables vs scalar variables.

Definition at line 2293 of file Assembly.h.

Referenced by addJacobian(), cacheJacobian(), fieldScalarCouplingEntries(), and init().

◆ _cm_nonlocal_entry

std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *> > Assembly::_cm_nonlocal_entry
private

Entries in the coupling matrix for field variables for nonlocal calculations.

Definition at line 2299 of file Assembly.h.

Referenced by addJacobianNonlocal(), cacheJacobianNonlocal(), initNonlocalCoupling(), nonlocalCouplingEntries(), prepareNonlocal(), and prepareVariableNonlocal().

◆ _cm_sf_entry

std::vector<std::pair<MooseVariableScalar *, MooseVariableFieldBase *> > Assembly::_cm_sf_entry
private

Entries in the coupling matrix for scalar variables vs field variables.

Definition at line 2295 of file Assembly.h.

Referenced by addJacobian(), cacheJacobian(), init(), and scalarFieldCouplingEntries().

◆ _cm_ss_entry

std::vector<std::pair<MooseVariableScalar *, MooseVariableScalar *> > Assembly::_cm_ss_entry
private

Entries in the coupling matrix for scalar variables.

Definition at line 2297 of file Assembly.h.

Referenced by addJacobianScalar(), and init().

◆ _column_indices

std::vector<dof_id_type> Assembly::_column_indices
protected

Definition at line 2858 of file Assembly.h.

Referenced by cacheJacobian().

◆ _component_block_diagonal

std::vector<bool> Assembly::_component_block_diagonal
protected

◆ _compute_face_map_side_elem_builder

libMesh::ElemSideBuilder Assembly::_compute_face_map_side_elem_builder
protected

In place side element builder for computeFaceMap()

Definition at line 2841 of file Assembly.h.

Referenced by computeFaceMap().

◆ _computing_jacobian

const bool& Assembly::_computing_jacobian
private

Whether we are currently computing the Jacobian.

Definition at line 2285 of file Assembly.h.

Referenced by computingJacobian().

◆ _computing_residual

const bool& Assembly::_computing_residual
private

Whether we are currently computing the residual.

Definition at line 2282 of file Assembly.h.

Referenced by computingResidual().

◆ _computing_residual_and_jacobian

const bool& Assembly::_computing_residual_and_jacobian
private

Whether we are currently computing the residual and Jacobian.

Definition at line 2288 of file Assembly.h.

Referenced by computingResidualAndJacobian().

◆ _coord

MooseArray<Real> Assembly::_coord
private

The current coordinate transformation coefficients.

Definition at line 2384 of file Assembly.h.

Referenced by computeCurrentElemVolume(), computeCurrentFaceVolume(), coordTransformation(), and ~Assembly().

◆ _coord_msm

MooseArray<Real> Assembly::_coord_msm
private

The coordinate transformation coefficients evaluated on the quadrature points of the mortar segment mesh.

Definition at line 2534 of file Assembly.h.

Referenced by mortarCoordTransformation(), reinitMortarElem(), and ~Assembly().

◆ _coord_neighbor

MooseArray<Real> Assembly::_coord_neighbor
private

The current coordinate transformation coefficients.

Definition at line 2531 of file Assembly.h.

Referenced by reinitNeighbor(), and ~Assembly().

◆ _coord_type

Moose::CoordinateSystemType Assembly::_coord_type
private

The coordinate system.

Definition at line 2382 of file Assembly.h.

Referenced by coordSystem(), and setCoordinateTransformation().

◆ _current_boundary_id

BoundaryID Assembly::_current_boundary_id
protected

The current boundary ID.

Definition at line 2560 of file Assembly.h.

Referenced by currentBoundaryID(), and setCurrentBoundaryID().

◆ _current_elem

const Elem* Assembly::_current_elem
protected

The current "element" we are currently on.

Definition at line 2556 of file Assembly.h.

Referenced by computeCurrentElemVolume(), computeCurrentFaceVolume(), elem(), reinitAtPhysical(), reinitElemFaceRef(), reinitFE(), reinitFEFace(), and reinitFVFace().

◆ _current_elem_volume

Real Assembly::_current_elem_volume
protected

Volume of the current element.

Definition at line 2562 of file Assembly.h.

Referenced by computeCurrentElemVolume(), and elemVolume().

◆ _current_elem_volume_computed

bool Assembly::_current_elem_volume_computed
protected

Boolean to indicate whether current element volumes has been computed.

Definition at line 2586 of file Assembly.h.

Referenced by computeCurrentElemVolume(), reinitAtPhysical(), and reinitFVFace().

◆ _current_fe

std::map<FEType, FEBase *> Assembly::_current_fe
private

The "volume" fe object that matches the current elem.

Definition at line 2342 of file Assembly.h.

Referenced by reinitFE().

◆ _current_fe_face

std::map<FEType, FEBase *> Assembly::_current_fe_face
private

The "face" fe object that matches the current elem.

Definition at line 2344 of file Assembly.h.

Referenced by reinitElemFaceRef(), and reinitFEFace().

◆ _current_fe_face_helper

FEBase* Assembly::_current_fe_face_helper
private

helper object for transforming coordinates

Definition at line 2480 of file Assembly.h.

◆ _current_fe_face_neighbor

std::map<FEType, FEBase *> Assembly::_current_fe_face_neighbor
private

The "neighbor face" fe object that matches the current elem.

Definition at line 2348 of file Assembly.h.

Referenced by reinitFEFaceNeighbor(), and reinitNeighborFaceRef().

◆ _current_fe_helper

FEBase* Assembly::_current_fe_helper
private

The current helper object for transforming coordinates.

Definition at line 2368 of file Assembly.h.

◆ _current_fe_neighbor

std::map<FEType, FEBase *> Assembly::_current_fe_neighbor
private

The "neighbor" fe object that matches the current elem.

Definition at line 2346 of file Assembly.h.

Referenced by reinitFENeighbor().

◆ _current_JxW

MooseArray<Real> Assembly::_current_JxW
private

The current list of transformed jacobian weights.

Definition at line 2380 of file Assembly.h.

Referenced by computeCurrentElemVolume(), JxW(), modifyArbitraryWeights(), modifyWeightsDueToXFEM(), and reinitFE().

◆ _current_JxW_face

MooseArray<Real> Assembly::_current_JxW_face
private

The current transformed jacobian weights on a face.

Definition at line 2488 of file Assembly.h.

Referenced by computeADFace(), computeCurrentFaceVolume(), JxWFace(), modifyFaceWeightsDueToXFEM(), reinitElemFaceRef(), and reinitFEFace().

◆ _current_JxW_neighbor

MooseArray<Real> Assembly::_current_JxW_neighbor
private

The current transformed jacobian weights on a neighbor's face.

Definition at line 2529 of file Assembly.h.

Referenced by JxWNeighbor().

◆ _current_lower_d_elem

const Elem* Assembly::_current_lower_d_elem
protected

The current lower dimensional element.

Definition at line 2591 of file Assembly.h.

Referenced by lowerDElem(), reinitLowerDElem(), and setCurrentLowerDElem().

◆ _current_lower_d_elem_volume

Real Assembly::_current_lower_d_elem_volume
protected

The current lower dimensional element volume.

Definition at line 2597 of file Assembly.h.

Referenced by lowerDElemVolume(), and reinitLowerDElem().

◆ _current_neighbor_elem

const Elem* Assembly::_current_neighbor_elem
protected

The current neighbor "element".

Definition at line 2570 of file Assembly.h.

Referenced by neighbor(), reinitAtPhysical(), reinitFVFace(), reinitNeighbor(), and reinitNeighborFaceRef().

◆ _current_neighbor_lower_d_elem

const Elem* Assembly::_current_neighbor_lower_d_elem
protected

The current neighboring lower dimensional element.

Definition at line 2593 of file Assembly.h.

Referenced by neighborLowerDElem(), and reinitNeighborLowerDElem().

◆ _current_neighbor_lower_d_elem_volume

Real Assembly::_current_neighbor_lower_d_elem_volume
protected

The current neighboring lower dimensional element volume.

Definition at line 2601 of file Assembly.h.

Referenced by neighborLowerDElemVolume(), and reinitNeighborLowerDElem().

◆ _current_neighbor_node

const Node* Assembly::_current_neighbor_node
protected

The current neighboring node we are working with.

Definition at line 2584 of file Assembly.h.

Referenced by nodeNeighbor().

◆ _current_neighbor_ref_points

std::vector<Point> Assembly::_current_neighbor_ref_points
protected

The current reference points on the neighbor element.

Definition at line 2864 of file Assembly.h.

Referenced by reinitElemAndNeighbor().

◆ _current_neighbor_side

unsigned int Assembly::_current_neighbor_side
protected

The current side of the selected neighboring element (valid only when working with sides)

Definition at line 2574 of file Assembly.h.

Referenced by neighborSide(), reinitElemAndNeighbor(), and reinitFVFace().

◆ _current_neighbor_side_elem

const Elem* Assembly::_current_neighbor_side_elem
protected

The current side element of the ncurrent neighbor element.

Definition at line 2576 of file Assembly.h.

Referenced by reinitElemAndNeighbor().

◆ _current_neighbor_side_elem_builder

libMesh::ElemSideBuilder Assembly::_current_neighbor_side_elem_builder
protected

In place side element builder for _current_neighbor_side_elem.

Definition at line 2839 of file Assembly.h.

Referenced by reinitElemAndNeighbor().

◆ _current_neighbor_subdomain_id

SubdomainID Assembly::_current_neighbor_subdomain_id
protected

The current neighbor subdomain ID.

Definition at line 2572 of file Assembly.h.

Referenced by currentNeighborSubdomainID(), reinitFVFace(), reinitNeighbor(), and setCurrentNeighborSubdomainID().

◆ _current_neighbor_volume

Real Assembly::_current_neighbor_volume
protected

Volume of the current neighbor.

Definition at line 2580 of file Assembly.h.

Referenced by neighborVolume(), and reinitNeighbor().

◆ _current_node

const Node* Assembly::_current_node
protected

The current node we are working with.

Definition at line 2582 of file Assembly.h.

Referenced by node().

◆ _current_normals

MooseArray<Point> Assembly::_current_normals
private

The current Normal vectors at the quadrature points.

Definition at line 2490 of file Assembly.h.

Referenced by computeADFace(), normals(), reinitElemFaceRef(), and reinitFEFace().

◆ _current_physical_points

MooseArray<Point> Assembly::_current_physical_points
protected

This will be filled up with the physical points passed into reinitAtPhysical() if it is called. Invalid at all other times.

Definition at line 2606 of file Assembly.h.

Referenced by modifyArbitraryWeights(), physicalPoints(), reinitAtPhysical(), and ~Assembly().

◆ _current_q_points

MooseArray<Point> Assembly::_current_q_points
private

The current list of quadrature points.

Definition at line 2378 of file Assembly.h.

Referenced by computeCurrentElemVolume(), modifyWeightsDueToXFEM(), qPoints(), and reinitFE().

◆ _current_q_points_face

MooseArray<Point> Assembly::_current_q_points_face
private

◆ _current_q_points_face_neighbor

MooseArray<Point> Assembly::_current_q_points_face_neighbor
private

The current quadrature points on the neighbor face.

Definition at line 2525 of file Assembly.h.

Referenced by qPointsFaceNeighbor(), reinitFEFaceNeighbor(), reinitFVFace(), and reinitNeighborFaceRef().

◆ _current_qface_arbitrary

ArbitraryQuadrature* Assembly::_current_qface_arbitrary
private

The current arbitrary quadrature rule used on element faces.

Definition at line 2484 of file Assembly.h.

◆ _current_qrule

libMesh::QBase* Assembly::_current_qrule
private

The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac kernels)

Definition at line 2370 of file Assembly.h.

Referenced by clearCachedQRules(), computeCurrentElemVolume(), modifyArbitraryWeights(), modifyWeightsDueToXFEM(), qRule(), reinitFE(), setVolumeQRule(), and writeableQRule().

◆ _current_qrule_arbitrary

ArbitraryQuadrature* Assembly::_current_qrule_arbitrary
private

The current arbitrary quadrature rule used within the element interior.

Definition at line 2374 of file Assembly.h.

Referenced by modifyArbitraryWeights(), modifyFaceWeightsDueToXFEM(), and modifyWeightsDueToXFEM().

◆ _current_qrule_arbitrary_face

ArbitraryQuadrature* Assembly::_current_qrule_arbitrary_face
private

The current arbitrary quadrature rule used on the element face.

Definition at line 2376 of file Assembly.h.

◆ _current_qrule_face

libMesh::QBase* Assembly::_current_qrule_face
private

◆ _current_qrule_lower

libMesh::QBase* Assembly::_current_qrule_lower
private

quadrature rule used on lower dimensional elements.

This should always be the same as the face qrule

Definition at line 2552 of file Assembly.h.

Referenced by clearCachedQRules(), reinitLowerDElem(), and setLowerQRule().

◆ _current_qrule_neighbor

libMesh::QBase* Assembly::_current_qrule_neighbor
private

quadrature rule used on neighbors

Definition at line 2523 of file Assembly.h.

Referenced by clearCachedQRules(), qRuleNeighbor(), setNeighborQRule(), and writeableQRuleNeighbor().

◆ _current_qrule_volume

libMesh::QBase* Assembly::_current_qrule_volume
private

The current volumetric quadrature for the element.

Definition at line 2372 of file Assembly.h.

◆ _current_side

unsigned int Assembly::_current_side
protected

The current side of the selected element (valid only when working with sides)

Definition at line 2564 of file Assembly.h.

Referenced by reinitFVFace(), and side().

◆ _current_side_elem

const Elem* Assembly::_current_side_elem
protected

The current "element" making up the side we are currently on.

Definition at line 2566 of file Assembly.h.

Referenced by reinitFVFace(), and sideElem().

◆ _current_side_elem_builder

libMesh::ElemSideBuilder Assembly::_current_side_elem_builder
protected

In place side element builder for _current_side_elem.

Definition at line 2837 of file Assembly.h.

Referenced by reinitFVFace().

◆ _current_side_volume

Real Assembly::_current_side_volume
protected

Volume of the current side element.

Definition at line 2568 of file Assembly.h.

Referenced by computeCurrentFaceVolume(), and sideElemVolume().

◆ _current_side_volume_computed

bool Assembly::_current_side_volume_computed
protected

Boolean to indicate whether current element side volumes has been computed.

Definition at line 2588 of file Assembly.h.

Referenced by computeCurrentFaceVolume(), and reinitFVFace().

◆ _current_subdomain_id

SubdomainID Assembly::_current_subdomain_id
protected

The current subdomain ID.

Definition at line 2558 of file Assembly.h.

Referenced by currentSubdomainID(), qrules(), reinitAtPhysical(), reinitFVFace(), and setCurrentSubdomainID().

◆ _current_tangents

MooseArray<std::vector<Point> > Assembly::_current_tangents
private

The current tangent vectors at the quadrature points.

Definition at line 2494 of file Assembly.h.

Referenced by reinitElemFaceRef(), and tangents().

◆ _current_vector_fe

std::map<FEType, FEVectorBase *> Assembly::_current_vector_fe
private

The "volume" vector fe object that matches the current elem.

Definition at line 2351 of file Assembly.h.

Referenced by reinitFE().

◆ _current_vector_fe_face

std::map<FEType, FEVectorBase *> Assembly::_current_vector_fe_face
private

The "face" vector fe object that matches the current elem.

Definition at line 2353 of file Assembly.h.

Referenced by reinitElemFaceRef(), and reinitFEFace().

◆ _current_vector_fe_face_neighbor

std::map<FEType, FEVectorBase *> Assembly::_current_vector_fe_face_neighbor
private

The "neighbor face" vector fe object that matches the current elem.

Definition at line 2357 of file Assembly.h.

Referenced by reinitFEFaceNeighbor(), and reinitNeighborFaceRef().

◆ _current_vector_fe_neighbor

std::map<FEType, FEVectorBase *> Assembly::_current_vector_fe_neighbor
private

The "neighbor" vector fe object that matches the current elem.

Definition at line 2355 of file Assembly.h.

Referenced by reinitFENeighbor().

◆ _curvatures

MooseArray<Real> Assembly::_curvatures
protected

Definition at line 2809 of file Assembly.h.

Referenced by computeADFace(), reinitElemFaceRef(), reinitFEFace(), and ~Assembly().

◆ _custom_mortar_qrule

bool Assembly::_custom_mortar_qrule
private

Flag specifying whether a custom quadrature rule has been specified for mortar segment mesh.

Definition at line 2548 of file Assembly.h.

Referenced by createQRules(), and setMortarQRule().

◆ _disp_numbers_and_directions

std::vector<std::pair<unsigned int, unsigned short> > Assembly::_disp_numbers_and_directions
protected

Container of displacement numbers and directions.

Definition at line 2815 of file Assembly.h.

Referenced by assignDisplacements(), computeFaceMap(), and computeSinglePointMapAD().

◆ _displaced

const bool Assembly::_displaced
private

Definition at line 2275 of file Assembly.h.

Referenced by computeADFace(), and reinitFE().

◆ _dof_map

const libMesh::DofMap& Assembly::_dof_map
private

◆ _element_matrix

DenseMatrix<Number> Assembly::_element_matrix
protected

A working matrix to avoid repeated heap allocations when caching Jacobians that must have libMesh-level constraints (hanging nodes, periodic bcs) applied to them.

This stores local Jacobian values

Definition at line 2853 of file Assembly.h.

Referenced by cacheJacobian().

◆ _element_vector

DenseVector<Number> Assembly::_element_vector
protected

A working vector to avoid repeated heap allocations when caching residuals that must have libMesh-level constraints (hanging nodes, periodic bcs) applied to them.

This stores local residual values

Definition at line 2848 of file Assembly.h.

Referenced by cacheResiduals().

◆ _extra_elem_ids

std::vector<dof_id_type> Assembly::_extra_elem_ids
private

Extra element IDs.

Definition at line 2497 of file Assembly.h.

Referenced by Assembly(), extraElemID(), numExtraElemIntegers(), reinitFE(), and reinitFEFace().

◆ _fe

std::map<unsigned int, std::map<FEType, FEBase *> > Assembly::_fe
mutableprivate

Each dimension's actual fe objects indexed on type.

Definition at line 2362 of file Assembly.h.

Referenced by Assembly(), buildFE(), getFE(), havePRefinement(), reinitFE(), setVolumeQRule(), and ~Assembly().

◆ _fe_face

std::map<unsigned int, std::map<FEType, FEBase *> > Assembly::_fe_face
mutableprivate

types of finite elements

Definition at line 2474 of file Assembly.h.

Referenced by Assembly(), buildFaceFE(), computeADFace(), getFEFace(), havePRefinement(), reinitElemFaceRef(), reinitFEFace(), setFaceQRule(), and ~Assembly().

◆ _fe_face_neighbor

std::map<unsigned int, std::map<FEType, FEBase *> > Assembly::_fe_face_neighbor
mutableprivate

◆ _fe_lower

std::map<unsigned int, std::map<FEType, FEBase *> > Assembly::_fe_lower
mutableprivate

FE objects for lower dimensional elements.

Definition at line 2516 of file Assembly.h.

Referenced by Assembly(), buildLowerDDualFE(), buildLowerDFE(), havePRefinement(), reinitDual(), reinitLowerDElem(), setLowerQRule(), and ~Assembly().

◆ _fe_msm

std::unique_ptr<FEBase> Assembly::_fe_msm
private

A FE object for working on mortar segement elements.

Definition at line 2541 of file Assembly.h.

Referenced by Assembly(), createQRules(), qPointsMortar(), reinitMortarElem(), and setMortarQRule().

◆ _fe_neighbor

std::map<unsigned int, std::map<FEType, FEBase *> > Assembly::_fe_neighbor
mutableprivate

types of finite elements

Definition at line 2506 of file Assembly.h.

Referenced by Assembly(), buildNeighborFE(), getFENeighbor(), havePRefinement(), reinitFENeighbor(), and ~Assembly().

◆ _fe_shape_data

std::map<FEType, std::unique_ptr<FEShapeData> > Assembly::_fe_shape_data
mutableprotected

Shape function values, gradients, second derivatives for each FE type.

Definition at line 2725 of file Assembly.h.

Referenced by buildFE(), feCurlPhi(), feDivPhi(), feGradPhi(), fePhi(), feSecondPhi(), and reinitFE().

◆ _fe_shape_data_dual_lower

std::map<FEType, std::unique_ptr<FEShapeData> > Assembly::_fe_shape_data_dual_lower
mutableprotected

◆ _fe_shape_data_face

std::map<FEType, std::unique_ptr<FEShapeData> > Assembly::_fe_shape_data_face
mutableprotected

◆ _fe_shape_data_face_neighbor

std::map<FEType, std::unique_ptr<FEShapeData> > Assembly::_fe_shape_data_face_neighbor
mutableprotected

◆ _fe_shape_data_lower

std::map<FEType, std::unique_ptr<FEShapeData> > Assembly::_fe_shape_data_lower
mutableprotected

Definition at line 2729 of file Assembly.h.

Referenced by buildLowerDFE(), feGradPhiLower(), fePhiLower(), and reinitLowerDElem().

◆ _fe_shape_data_neighbor

std::map<FEType, std::unique_ptr<FEShapeData> > Assembly::_fe_shape_data_neighbor
mutableprotected

◆ _grad_phi

VariablePhiGradient Assembly::_grad_phi
protected

Definition at line 2664 of file Assembly.h.

Referenced by gradPhi().

◆ _grad_phi_face

VariablePhiGradient Assembly::_grad_phi_face
protected

Definition at line 2668 of file Assembly.h.

Referenced by gradPhiFace().

◆ _grad_phi_face_neighbor

VariablePhiGradient Assembly::_grad_phi_face_neighbor
protected

Definition at line 2676 of file Assembly.h.

Referenced by gradPhiFaceNeighbor().

◆ _grad_phi_neighbor

VariablePhiGradient Assembly::_grad_phi_neighbor
protected

Definition at line 2672 of file Assembly.h.

Referenced by gradPhiNeighbor().

◆ _have_p_refinement

bool Assembly::_have_p_refinement
protected

Whether we have ever conducted p-refinement.

Definition at line 2861 of file Assembly.h.

Referenced by havePRefinement().

◆ _helper_type

const FEType Assembly::_helper_type
private

The finite element type of the FE helper classes.

The helper class gives us data like JxW, the physical quadrature point locations, etc.

Definition at line 2318 of file Assembly.h.

Referenced by buildFaceFE(), buildFaceNeighborFE(), buildFE(), buildLowerDFE(), and buildNeighborFE().

◆ _holder_fe_face_helper

std::map<unsigned int, FEBase *> Assembly::_holder_fe_face_helper
private

Each dimension's helper objects.

Definition at line 2478 of file Assembly.h.

Referenced by Assembly(), computeADFace(), computeFaceMap(), havePRefinement(), helpersRequestData(), reinitElemFaceRef(), and reinitFEFace().

◆ _holder_fe_face_neighbor_helper

std::map<unsigned int, FEBase *> Assembly::_holder_fe_face_neighbor_helper
private

◆ _holder_fe_helper

std::map<unsigned int, FEBase *> Assembly::_holder_fe_helper
private

Each dimension's helper objects.

Definition at line 2366 of file Assembly.h.

Referenced by Assembly(), havePRefinement(), helpersRequestData(), and reinitFE().

◆ _holder_fe_lower_helper

std::map<unsigned int, FEBase *> Assembly::_holder_fe_lower_helper
private

helper object for transforming coordinates for lower dimensional element quadrature points

Definition at line 2520 of file Assembly.h.

Referenced by Assembly(), havePRefinement(), helpersRequestData(), and reinitLowerDElem().

◆ _holder_fe_neighbor_helper

std::map<unsigned int, FEBase *> Assembly::_holder_fe_neighbor_helper
private

Each dimension's helper objects.

Definition at line 2512 of file Assembly.h.

Referenced by Assembly(), havePRefinement(), helpersRequestData(), and reinitNeighbor().

◆ _holder_normals

std::map<unsigned int, const std::vector<Point> *> Assembly::_holder_normals
private

Holds pointers to the dimension's normal vectors.

Definition at line 2501 of file Assembly.h.

◆ _jacobian_block_lower_used

std::vector<std::vector<std::vector<unsigned char> > > Assembly::_jacobian_block_lower_used
private

Flag that indicates if the jacobian block for the lower dimensional element was used.

Definition at line 2306 of file Assembly.h.

Referenced by addJacobianLowerD(), addJacobianNeighborLowerD(), cacheJacobianMortar(), init(), jacobianBlockLowerUsed(), and prepareLowerD().

◆ _jacobian_block_neighbor_used

std::vector<std::vector<std::vector<unsigned char> > > Assembly::_jacobian_block_neighbor_used
private

Flag that indicates if the jacobian block for neighbor was used.

Definition at line 2304 of file Assembly.h.

Referenced by addJacobianNeighbor(), addJacobianNeighborLowerD(), cacheJacobianNeighbor(), init(), jacobianBlockNeighborUsed(), and prepareNeighbor().

◆ _jacobian_block_nonlocal_used

std::vector<std::vector<std::vector<unsigned char> > > Assembly::_jacobian_block_nonlocal_used
private

◆ _jacobian_block_used

std::vector<std::vector<std::vector<unsigned char> > > Assembly::_jacobian_block_used
private

◆ _JxW_msm

const std::vector<Real>* Assembly::_JxW_msm
private

A JxW for working on mortar segement elements.

Definition at line 2539 of file Assembly.h.

Referenced by Assembly(), and jxWMortar().

◆ _mapped_normals

std::vector<Eigen::Map<RealDIMValue> > Assembly::_mapped_normals
private

Mapped normals.

Definition at line 2492 of file Assembly.h.

Referenced by mappedNormals(), and reinitFEFace().

◆ _max_cached_jacobians

unsigned int Assembly::_max_cached_jacobians
protected

Definition at line 2772 of file Assembly.h.

Referenced by addCachedJacobian().

◆ _max_cached_residuals

unsigned int Assembly::_max_cached_residuals
protected

Definition at line 2763 of file Assembly.h.

Referenced by clearCachedResiduals().

◆ _mesh

MooseMesh& Assembly::_mesh
private

Definition at line 2312 of file Assembly.h.

Referenced by adCurvatures(), Assembly(), and havePRefinement().

◆ _mesh_dimension

unsigned int Assembly::_mesh_dimension
private

◆ _msm_elem

const Elem* Assembly::_msm_elem = nullptr
protected

Definition at line 2843 of file Assembly.h.

Referenced by msmElem(), and reinitMortarElem().

◆ _need_curl

std::set<FEType> Assembly::_need_curl
mutableprotected

◆ _need_div

std::set<FEType> Assembly::_need_div
mutableprotected

Definition at line 2828 of file Assembly.h.

Referenced by buildVectorFE(), and reinitFE().

◆ _need_dual

bool Assembly::_need_dual
protected

Whether dual shape functions need to be computed for mortar constraints.

Definition at line 2603 of file Assembly.h.

Referenced by activateDual(), and needDual().

◆ _need_face_div

std::set<FEType> Assembly::_need_face_div
mutableprotected

Definition at line 2829 of file Assembly.h.

Referenced by buildVectorFaceFE(), reinitElemFaceRef(), and reinitFEFace().

◆ _need_face_neighbor_div

std::set<FEType> Assembly::_need_face_neighbor_div
mutableprotected

◆ _need_JxW_neighbor

bool Assembly::_need_JxW_neighbor
mutableprivate

Flag to indicate that JxW_neighbor is needed.

Definition at line 2527 of file Assembly.h.

Referenced by JxWNeighbor().

◆ _need_lower_d_elem_volume

bool Assembly::_need_lower_d_elem_volume
mutableprotected

Whether we need to compute the lower dimensional element volume.

Definition at line 2595 of file Assembly.h.

Referenced by lowerDElemVolume(), and reinitLowerDElem().

◆ _need_neighbor_div

std::set<FEType> Assembly::_need_neighbor_div
mutableprotected

Definition at line 2830 of file Assembly.h.

Referenced by buildVectorNeighborFE(), and reinitFENeighbor().

◆ _need_neighbor_elem_volume

bool Assembly::_need_neighbor_elem_volume
mutableprotected

true is apps need to compute neighbor element volume

Definition at line 2578 of file Assembly.h.

Referenced by neighborVolume(), and reinitNeighbor().

◆ _need_neighbor_lower_d_elem_volume

bool Assembly::_need_neighbor_lower_d_elem_volume
mutableprotected

Whether we need to compute the neighboring lower dimensional element volume.

Definition at line 2599 of file Assembly.h.

Referenced by neighborLowerDElemVolume(), and reinitNeighborLowerDElem().

◆ _need_second_derivative

std::set<FEType> Assembly::_need_second_derivative
mutableprotected

◆ _need_second_derivative_neighbor

std::set<FEType> Assembly::_need_second_derivative_neighbor
mutableprotected

◆ _neighbor_extra_elem_ids

std::vector<dof_id_type> Assembly::_neighbor_extra_elem_ids
private

Extra element IDs of neighbor.

Definition at line 2499 of file Assembly.h.

Referenced by Assembly(), extraElemIDNeighbor(), and reinitNeighbor().

◆ _nonlocal_cm

const libMesh::CouplingMatrix& Assembly::_nonlocal_cm
private

Definition at line 2279 of file Assembly.h.

Referenced by initNonlocalCoupling().

◆ _phi

VariablePhiValue Assembly::_phi
protected

Definition at line 2663 of file Assembly.h.

Referenced by phi().

◆ _phi_face

VariablePhiValue Assembly::_phi_face
protected

Definition at line 2667 of file Assembly.h.

Referenced by phiFace().

◆ _phi_face_neighbor

VariablePhiValue Assembly::_phi_face_neighbor
protected

Definition at line 2675 of file Assembly.h.

Referenced by phiFaceNeighbor().

◆ _phi_neighbor

VariablePhiValue Assembly::_phi_neighbor
protected

Definition at line 2671 of file Assembly.h.

Referenced by phiNeighbor().

◆ _qrule_msm

libMesh::QBase* Assembly::_qrule_msm
private

A qrule object for working on mortar segement elements.

This needs to be a raw pointer because we need to be able to return a reference to it because we will be constructing other objects that need the qrule before the qrule is actually created

Definition at line 2546 of file Assembly.h.

Referenced by createQRules(), qRuleMortar(), reinitMortarElem(), setMortarQRule(), and ~Assembly().

◆ _qrules

std::unordered_map<SubdomainID, std::vector<QRules> > Assembly::_qrules
private

Holds quadrature rules for each dimension.

These are created up front at the start of the simulation and reused/referenced for the remainder of the sim. This data structure should generally be read/accessed via the qrules() function.

Definition at line 2419 of file Assembly.h.

Referenced by bumpAllQRuleOrder(), bumpVolumeQRuleOrder(), createQRules(), and qrules().

◆ _residual_vector_tags

const std::vector<VectorTag>& Assembly::_residual_vector_tags
protected

The residual vector tags that Assembly could possibly contribute to.

The following variables are all indexed with this vector (i.e., index 0 in the following vectors corresponds to the tag with TagID _residual_vector_tags[0]._id): _sub_Re, _sub_Rn, _sub_Rl, _cached_residual_rows, _cached_residual_values,

This index is also available in VectorTag::_type_id

Definition at line 2755 of file Assembly.h.

Referenced by clearCachedResiduals(), and init().

◆ _row_indices

std::vector<dof_id_type> Assembly::_row_indices
protected

Working vectors to avoid repeated heap allocations when caching residuals/Jacobians that must have libMesh-level constraints (hanging nodes, periodic bcs) applied to them.

These are for storing the dof indices

Definition at line 2858 of file Assembly.h.

Referenced by cacheJacobian(), and cacheResiduals().

◆ _scaling_vector

const NumericVector<Real>* Assembly::_scaling_vector = nullptr
protected

The map from global index to variable scaling factor.

Definition at line 2834 of file Assembly.h.

Referenced by hasScalingVector().

◆ _second_phi

VariablePhiSecond Assembly::_second_phi
protected

Definition at line 2665 of file Assembly.h.

Referenced by secondPhi().

◆ _second_phi_face

VariablePhiSecond Assembly::_second_phi_face
protected

Definition at line 2669 of file Assembly.h.

Referenced by secondPhiFace().

◆ _second_phi_face_neighbor

VariablePhiSecond Assembly::_second_phi_face_neighbor
protected

Definition at line 2677 of file Assembly.h.

Referenced by secondPhiFaceNeighbor().

◆ _second_phi_neighbor

VariablePhiSecond Assembly::_second_phi_neighbor
protected

Definition at line 2673 of file Assembly.h.

Referenced by secondPhiNeighbor().

◆ _sub_Kee

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Kee
protected

Definition at line 2639 of file Assembly.h.

Referenced by init(), jacobianBlock(), jacobianBlockMortar(), and jacobianBlockNeighbor().

◆ _sub_Keg

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Keg
protected

Definition at line 2640 of file Assembly.h.

Referenced by init(), and jacobianBlockNonlocal().

◆ _sub_Kel

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Kel
protected

dsecondary/dlower (or delement/dlower)

Definition at line 2655 of file Assembly.h.

Referenced by init(), and jacobianBlockMortar().

◆ _sub_Ken

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Ken
protected

jacobian contributions from the element and neighbor <Tag, ivar, jvar>

Definition at line 2643 of file Assembly.h.

Referenced by init(), jacobianBlockMortar(), and jacobianBlockNeighbor().

◆ _sub_Kle

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Kle
protected

dlower/dsecondary (or dlower/delement)

Definition at line 2651 of file Assembly.h.

Referenced by init(), and jacobianBlockMortar().

◆ _sub_Kll

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Kll
protected

dlower/dlower

Definition at line 2649 of file Assembly.h.

Referenced by init(), and jacobianBlockMortar().

◆ _sub_Kln

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Kln
protected

dlower/dprimary (or dlower/dneighbor)

Definition at line 2653 of file Assembly.h.

Referenced by init(), and jacobianBlockMortar().

◆ _sub_Kne

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Kne
protected

jacobian contributions from the neighbor and element <Tag, ivar, jvar>

Definition at line 2645 of file Assembly.h.

Referenced by init(), jacobianBlockMortar(), and jacobianBlockNeighbor().

◆ _sub_Knl

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Knl
protected

dprimary/dlower (or dneighbor/dlower)

Definition at line 2657 of file Assembly.h.

Referenced by init(), and jacobianBlockMortar().

◆ _sub_Knn

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Knn
protected

jacobian contributions from the neighbor <Tag, ivar, jvar>

Definition at line 2647 of file Assembly.h.

Referenced by init(), jacobianBlockMortar(), and jacobianBlockNeighbor().

◆ _sub_Re

std::vector<std::vector<DenseVector<Number> > > Assembly::_sub_Re
protected

◆ _sub_Rl

std::vector<std::vector<DenseVector<Number> > > Assembly::_sub_Rl
protected

residual contributions for each variable from the lower dimensional element

Definition at line 2623 of file Assembly.h.

Referenced by addResidualLower(), cacheResidualLower(), init(), prepareLowerD(), and residualBlockLower().

◆ _sub_Rn

std::vector<std::vector<DenseVector<Number> > > Assembly::_sub_Rn
protected

◆ _subproblem

SubProblem& Assembly::_subproblem
private

◆ _sys

SystemBase& Assembly::_sys
private

◆ _temp_dof_indices

std::vector<dof_id_type> Assembly::_temp_dof_indices
protected

Temporary work vector to keep from reallocating it.

Definition at line 2781 of file Assembly.h.

Referenced by addResidualBlock(), and cacheResidualBlock().

◆ _temp_reference_points

std::vector<Point> Assembly::_temp_reference_points
protected

Temporary work data for reinitAtPhysical()

Definition at line 2784 of file Assembly.h.

Referenced by reinitAtPhysical().

◆ _tid

THREAD_ID Assembly::_tid
private

◆ _tmp_Ke

DenseMatrix<Number> Assembly::_tmp_Ke
protected

auxiliary matrix for scaling jacobians (optimization to avoid expensive construction/destruction)

Definition at line 2660 of file Assembly.h.

◆ _tmp_Re

DenseVector<Number> Assembly::_tmp_Re
protected

auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction)

Definition at line 2626 of file Assembly.h.

Referenced by addResidualBlock(), cacheResidualBlock(), and setResidualBlock().

◆ _unique_fe_face_helper

std::vector<std::unique_ptr<FEBase> > Assembly::_unique_fe_face_helper
private

Definition at line 2330 of file Assembly.h.

Referenced by havePRefinement(), reinitElemFaceRef(), reinitFEFace(), and setFaceQRule().

◆ _unique_fe_face_neighbor_helper

std::vector<std::unique_ptr<FEBase> > Assembly::_unique_fe_face_neighbor_helper
private

◆ _unique_fe_helper

std::vector<std::unique_ptr<FEBase> > Assembly::_unique_fe_helper
private

Containers for holding unique FE helper types if we are doing p-refinement.

If we are not doing p-refinement then the helper data is owned by the _fe data members

Definition at line 2329 of file Assembly.h.

Referenced by havePRefinement(), reinitFE(), and setVolumeQRule().

◆ _unique_fe_lower_helper

std::vector<std::unique_ptr<FEBase> > Assembly::_unique_fe_lower_helper
private

Definition at line 2333 of file Assembly.h.

Referenced by havePRefinement(), reinitLowerDElem(), and setLowerQRule().

◆ _unique_fe_neighbor_helper

std::vector<std::unique_ptr<FEBase> > Assembly::_unique_fe_neighbor_helper
private

Definition at line 2332 of file Assembly.h.

Referenced by havePRefinement(), and reinitFENeighbor().

◆ _user_added_fe_face_neighbor_of_helper_type

bool Assembly::_user_added_fe_face_neighbor_of_helper_type
mutableprivate

Definition at line 2323 of file Assembly.h.

Referenced by buildFaceNeighborFE(), and havePRefinement().

◆ _user_added_fe_face_of_helper_type

bool Assembly::_user_added_fe_face_of_helper_type
mutableprivate

Definition at line 2322 of file Assembly.h.

Referenced by buildFaceFE(), and havePRefinement().

◆ _user_added_fe_lower_of_helper_type

bool Assembly::_user_added_fe_lower_of_helper_type
mutableprivate

Definition at line 2325 of file Assembly.h.

Referenced by buildLowerDFE(), and havePRefinement().

◆ _user_added_fe_neighbor_of_helper_type

bool Assembly::_user_added_fe_neighbor_of_helper_type
mutableprivate

Definition at line 2324 of file Assembly.h.

Referenced by buildNeighborFE(), and havePRefinement().

◆ _user_added_fe_of_helper_type

bool Assembly::_user_added_fe_of_helper_type
mutableprivate

Whether user code requested a FEType the same as our _helper_type.

Definition at line 2321 of file Assembly.h.

Referenced by buildFE(), and havePRefinement().

◆ _vector_curl_phi

VectorVariablePhiCurl Assembly::_vector_curl_phi
protected

Definition at line 2683 of file Assembly.h.

Referenced by curlPhi().

◆ _vector_curl_phi_face

VectorVariablePhiCurl Assembly::_vector_curl_phi_face
protected

Definition at line 2689 of file Assembly.h.

Referenced by copyFaceShapes(), and curlPhiFace().

◆ _vector_curl_phi_face_neighbor

VectorVariablePhiCurl Assembly::_vector_curl_phi_face_neighbor
protected

Definition at line 2701 of file Assembly.h.

Referenced by curlPhiFaceNeighbor().

◆ _vector_curl_phi_neighbor

VectorVariablePhiCurl Assembly::_vector_curl_phi_neighbor
protected

Definition at line 2695 of file Assembly.h.

Referenced by curlPhiNeighbor().

◆ _vector_div_phi

VectorVariablePhiDivergence Assembly::_vector_div_phi
protected

Definition at line 2684 of file Assembly.h.

Referenced by divPhi().

◆ _vector_div_phi_face

VectorVariablePhiDivergence Assembly::_vector_div_phi_face
protected

Definition at line 2690 of file Assembly.h.

Referenced by copyFaceShapes(), and divPhiFace().

◆ _vector_div_phi_face_neighbor

VectorVariablePhiDivergence Assembly::_vector_div_phi_face_neighbor
protected

Definition at line 2702 of file Assembly.h.

Referenced by divPhiFaceNeighbor().

◆ _vector_div_phi_neighbor

VectorVariablePhiDivergence Assembly::_vector_div_phi_neighbor
protected

Definition at line 2696 of file Assembly.h.

Referenced by divPhiNeighbor().

◆ _vector_fe

std::map<unsigned int, std::map<FEType, FEVectorBase *> > Assembly::_vector_fe
mutableprivate

Each dimension's actual vector fe objects indexed on type.

Definition at line 2364 of file Assembly.h.

Referenced by buildVectorFE(), getVectorFE(), havePRefinement(), reinitFE(), setVolumeQRule(), and ~Assembly().

◆ _vector_fe_face

std::map<unsigned int, std::map<FEType, FEVectorBase *> > Assembly::_vector_fe_face
mutableprivate

types of vector finite elements

Definition at line 2476 of file Assembly.h.

Referenced by buildVectorFaceFE(), computeADFace(), getVectorFEFace(), havePRefinement(), reinitElemFaceRef(), reinitFEFace(), setFaceQRule(), and ~Assembly().

◆ _vector_fe_face_neighbor

std::map<unsigned int, std::map<FEType, FEVectorBase *> > Assembly::_vector_fe_face_neighbor
mutableprivate

◆ _vector_fe_lower

std::map<unsigned int, std::map<FEType, FEVectorBase *> > Assembly::_vector_fe_lower
mutableprivate

Vector FE objects for lower dimensional elements.

Definition at line 2518 of file Assembly.h.

Referenced by buildVectorDualLowerDFE(), buildVectorLowerDFE(), havePRefinement(), setLowerQRule(), and ~Assembly().

◆ _vector_fe_neighbor

std::map<unsigned int, std::map<FEType, FEVectorBase *> > Assembly::_vector_fe_neighbor
mutableprivate

◆ _vector_fe_shape_data

std::map<FEType, std::unique_ptr<VectorFEShapeData> > Assembly::_vector_fe_shape_data
mutableprotected

Shape function values, gradients, second derivatives for each vector FE type.

Definition at line 2733 of file Assembly.h.

Referenced by buildVectorFE(), and reinitFE().

◆ _vector_fe_shape_data_dual_lower

std::map<FEType, std::unique_ptr<VectorFEShapeData> > Assembly::_vector_fe_shape_data_dual_lower
mutableprotected

Definition at line 2738 of file Assembly.h.

Referenced by buildVectorDualLowerDFE().

◆ _vector_fe_shape_data_face

std::map<FEType, std::unique_ptr<VectorFEShapeData> > Assembly::_vector_fe_shape_data_face
mutableprotected

Definition at line 2734 of file Assembly.h.

Referenced by buildVectorFaceFE(), computeADFace(), reinitElemFaceRef(), and reinitFEFace().

◆ _vector_fe_shape_data_face_neighbor

std::map<FEType, std::unique_ptr<VectorFEShapeData> > Assembly::_vector_fe_shape_data_face_neighbor
mutableprotected

◆ _vector_fe_shape_data_lower

std::map<FEType, std::unique_ptr<VectorFEShapeData> > Assembly::_vector_fe_shape_data_lower
mutableprotected

Definition at line 2737 of file Assembly.h.

Referenced by buildVectorLowerDFE().

◆ _vector_fe_shape_data_neighbor

std::map<FEType, std::unique_ptr<VectorFEShapeData> > Assembly::_vector_fe_shape_data_neighbor
mutableprotected

Definition at line 2735 of file Assembly.h.

Referenced by buildVectorNeighborFE(), and reinitFENeighbor().

◆ _vector_grad_phi

VectorVariablePhiGradient Assembly::_vector_grad_phi
protected

Definition at line 2681 of file Assembly.h.

Referenced by gradPhi().

◆ _vector_grad_phi_face

VectorVariablePhiGradient Assembly::_vector_grad_phi_face
protected

Definition at line 2687 of file Assembly.h.

Referenced by gradPhiFace().

◆ _vector_grad_phi_face_neighbor

VectorVariablePhiGradient Assembly::_vector_grad_phi_face_neighbor
protected

Definition at line 2699 of file Assembly.h.

Referenced by gradPhiFaceNeighbor().

◆ _vector_grad_phi_neighbor

VectorVariablePhiGradient Assembly::_vector_grad_phi_neighbor
protected

Definition at line 2693 of file Assembly.h.

Referenced by gradPhiNeighbor().

◆ _vector_phi

VectorVariablePhiValue Assembly::_vector_phi
protected

Definition at line 2680 of file Assembly.h.

Referenced by phi().

◆ _vector_phi_face

VectorVariablePhiValue Assembly::_vector_phi_face
protected

Definition at line 2686 of file Assembly.h.

Referenced by phiFace().

◆ _vector_phi_face_neighbor

VectorVariablePhiValue Assembly::_vector_phi_face_neighbor
protected

Definition at line 2698 of file Assembly.h.

Referenced by phiFaceNeighbor().

◆ _vector_phi_neighbor

VectorVariablePhiValue Assembly::_vector_phi_neighbor
protected

Definition at line 2692 of file Assembly.h.

Referenced by phiNeighbor().

◆ _vector_second_phi

VectorVariablePhiSecond Assembly::_vector_second_phi
protected

Definition at line 2682 of file Assembly.h.

Referenced by secondPhi().

◆ _vector_second_phi_face

VectorVariablePhiSecond Assembly::_vector_second_phi_face
protected

Definition at line 2688 of file Assembly.h.

Referenced by secondPhiFace().

◆ _vector_second_phi_face_neighbor

VectorVariablePhiSecond Assembly::_vector_second_phi_face_neighbor
protected

Definition at line 2700 of file Assembly.h.

Referenced by secondPhiFaceNeighbor().

◆ _vector_second_phi_neighbor

VectorVariablePhiSecond Assembly::_vector_second_phi_neighbor
protected

Definition at line 2694 of file Assembly.h.

Referenced by secondPhiNeighbor().

◆ _xfem

std::shared_ptr<XFEMInterface> Assembly::_xfem
private

The XFEM controller.

Definition at line 2339 of file Assembly.h.

Referenced by modifyFaceWeightsDueToXFEM(), modifyWeightsDueToXFEM(), reinitFE(), reinitFEFace(), and setXFEM().


The documentation for this class was generated from the following files: