https://mooseframework.inl.gov
Classes | Public Types | 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 Types

using InternalDataKey = Moose::PassKey< Moose::Kokkos::Assembly >
 Key structure for APIs manipulating internal shape and quadrature data. More...
 

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...
 
libMesh::QBasewriteableQRule (unsigned int dim, SubdomainID block, InternalDataKey)
 Returns the pointer to the quadrature of specified block and dimension. 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...
 
libMesh::QBasewriteableQRuleFace (unsigned int dim, SubdomainID block, InternalDataKey)
 Returns the pointer to the quadrature used on a face of specified block and dimension. 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 *const & sideElem () const
 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 (const DenseMatrix< Number > &jac_block, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &tags)
 Cache a local Jacobian block with the provided rows (idof_indices) and columns (jdof_indices) for eventual accumulation into the global matrices specified by tags. 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 saveLocalADArray (std::vector< ADReal > &re, unsigned int i, unsigned int ntest, const ADRealEigenVector &v) const
 
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 (const 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)
 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)
 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)
 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)
 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 (const 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 (const 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 109 of file Assembly.h.

Member Typedef Documentation

◆ InternalDataKey

Key structure for APIs manipulating internal shape and quadrature data.

Developers in blessed classes may create keys using simple curly braces {} or may be more explicit and use Assembly::InternalDataKey{}

Definition at line 228 of file Assembly.h.

Constructor & Destructor Documentation

◆ Assembly()

Assembly::Assembly ( SystemBase sys,
THREAD_ID  tid 
)

Definition at line 81 of file Assembly.C.

82  : _sys(sys),
84  _displaced(dynamic_cast<DisplacedSystem *>(&sys) ? true : false),
89  _dof_map(_sys.dofMap()),
90  _tid(tid),
91  _mesh(sys.mesh()),
99  _building_helpers(false),
100  _current_qrule(nullptr),
101  _current_qrule_volume(nullptr),
102  _current_qrule_arbitrary(nullptr),
104  _current_qrule_face(nullptr),
105  _current_qface_arbitrary(nullptr),
106  _current_qrule_neighbor(nullptr),
107  _need_JxW_neighbor(false),
108  _qrule_msm(nullptr),
109  _custom_mortar_qrule(false),
110  _current_qrule_lower(nullptr),
111 
112  _current_elem(nullptr),
114  _current_side(0),
115  _current_side_elem(nullptr),
117  _current_neighbor_elem(nullptr),
122  _current_node(nullptr),
123  _current_neighbor_node(nullptr),
126 
127  _current_lower_d_elem(nullptr),
131  _need_dual(false),
132 
134  _cached_residual_values(2), // The 2 is for TIME and NONTIME
135  _cached_residual_rows(2), // The 2 is for TIME and NONTIME
138 
139  _block_diagonal_matrix(false),
140  _calculate_xyz(false),
141  _calculate_face_xyz(false),
142  _calculate_curvatures(false),
143  _calculate_ad_coord(false),
144  _have_p_refinement(false)
145 {
146  const Order helper_order = _mesh.hasSecondOrderElements() ? SECOND : FIRST;
147  _building_helpers = true;
148  // Build fe's for the helpers
149  buildFE(FEType(helper_order, LAGRANGE));
150  buildFaceFE(FEType(helper_order, LAGRANGE));
151  buildNeighborFE(FEType(helper_order, LAGRANGE));
152  buildFaceNeighborFE(FEType(helper_order, LAGRANGE));
153  buildLowerDFE(FEType(helper_order, LAGRANGE));
154  _building_helpers = false;
155 
156  // Build an FE helper object for this type for each dimension up to the dimension of the current
157  // mesh
158  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
159  {
160  _holder_fe_helper[dim] = _fe[dim][FEType(helper_order, LAGRANGE)];
161  _holder_fe_face_helper[dim] = _fe_face[dim][FEType(helper_order, LAGRANGE)];
162  _holder_fe_face_neighbor_helper[dim] = _fe_face_neighbor[dim][FEType(helper_order, LAGRANGE)];
163  _holder_fe_neighbor_helper[dim] = _fe_neighbor[dim][FEType(helper_order, LAGRANGE)];
164  }
165 
166  for (unsigned int dim = 0; dim < _mesh_dimension; dim++)
167  _holder_fe_lower_helper[dim] = _fe_lower[dim][FEType(helper_order, LAGRANGE)];
168 
169  // request phi, dphi, xyz, JxW, etc. data
171 
172  // For 3D mortar, mortar segments are always TRI3 elements so we want FIRST LAGRANGE regardless
173  // of discretization
174  _fe_msm = (_mesh_dimension == 2)
175  ? FEGenericBase<Real>::build(_mesh_dimension - 1, FEType(helper_order, LAGRANGE))
176  : FEGenericBase<Real>::build(_mesh_dimension - 1, FEType(FIRST, LAGRANGE));
177  // This FE object should not take part in p-refinement
178  _fe_msm->add_p_level_in_reinit(false);
179  _JxW_msm = &_fe_msm->get_JxW();
180  // Prerequest xyz so that it is computed for _fe_msm so that it can be used for calculating
181  // _coord_msm
182  _fe_msm->get_xyz();
183 
186 }
LAGRANGE
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2515
bool _need_neighbor_elem_volume
true is apps need to compute neighbor element volume
Definition: Assembly.h:2619
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
Definition: Assembly.h:2415
MooseMesh & mesh()
Definition: SystemBase.h:100
SystemBase & _sys
Definition: Assembly.h:2313
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:2802
unsigned int _max_cached_residuals
Definition: Assembly.h:2804
bool _user_added_fe_lower_of_helper_type
Definition: Assembly.h:2366
Order
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:316
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:268
const bool & _computing_residual
Whether we are currently computing the residual.
Definition: Assembly.h:2323
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition: Assembly.h:2564
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2553
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
Definition: Assembly.h:2582
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
Definition: Assembly.h:2627
bool _user_added_fe_face_neighbor_of_helper_type
Definition: Assembly.h:2364
bool _have_p_refinement
Whether we have ever conducted p-refinement.
Definition: Assembly.h:2902
FIRST
Real _current_neighbor_volume
Volume of the current neighbor.
Definition: Assembly.h:2621
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition: Assembly.h:2611
MooseMesh & _mesh
Definition: Assembly.h:2353
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition: Assembly.h:2554
unsigned int n_elem_integers() const
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2597
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
Real _current_elem_volume
Volume of the current element.
Definition: Assembly.h:2603
const FEType _helper_type
The finite element type of the FE helper classes.
Definition: Assembly.h:2359
const bool & _computing_residual_and_jacobian
Whether we are currently computing the residual and Jacobian.
Definition: Assembly.h:2329
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2523
const bool & currentlyComputingResidualAndJacobian() const
Returns true if the problem is in the process of computing the residual and the Jacobian.
Definition: SubProblem.h:1505
SECOND
unsigned int _mesh_dimension
Definition: Assembly.h:2355
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:728
unsigned int _max_cached_jacobians
Definition: Assembly.h:2813
const Elem * _current_neighbor_lower_d_elem
The current neighboring lower dimensional element.
Definition: Assembly.h:2634
unsigned int _current_neighbor_side
The current side of the selected neighboring element (valid only when working with sides) ...
Definition: Assembly.h:2615
bool _user_added_fe_neighbor_of_helper_type
Definition: Assembly.h:2365
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:338
virtual libMesh::DofMap & dofMap()
Gets writeable reference to the dof map.
Definition: SystemBase.C:1164
const std::vector< Real > * _JxW_msm
A JxW for working on mortar segement elements.
Definition: Assembly.h:2580
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
Definition: MooseMesh.C:3548
virtual unsigned int dimension() const
Returns MeshBase::mesh_dimension(), (not MeshBase::spatial_dimension()!) of the underlying libMesh me...
Definition: MooseMesh.C:2985
SubProblem & subproblem()
Definition: SystemBase.h:102
libMesh::QBase * _current_qrule_lower
quadrature rule used on lower dimensional elements.
Definition: Assembly.h:2593
SubProblem & _subproblem
Definition: Assembly.h:2314
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:294
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2547
bool _calculate_xyz
Definition: Assembly.h:2858
bool _calculate_curvatures
Definition: Assembly.h:2860
const std::vector< VectorTag > & _residual_vector_tags
The residual vector tags that Assembly could possibly contribute to.
Definition: Assembly.h:2796
std::vector< dof_id_type > _neighbor_extra_elem_ids
Extra element IDs of neighbor.
Definition: Assembly.h:2540
std::vector< VectorTag > getVectorTags(const std::set< TagID > &tag_ids) const
Definition: SubProblem.C:173
ArbitraryQuadrature * _current_qface_arbitrary
The current arbitrary quadrature rule used on element faces.
Definition: Assembly.h:2525
libMesh::QBase * _current_qrule_volume
The current volumetric quadrature for the element.
Definition: Assembly.h:2413
unsigned int number() const
Gets the number of this system.
Definition: SystemBase.C:1158
bool _calculate_ad_coord
Whether to calculate coord with AD.
Definition: Assembly.h:2864
const Elem * _current_lower_d_elem
The current lower dimensional element.
Definition: Assembly.h:2632
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2557
bool hasSecondOrderElements()
check if the mesh has SECOND order elements
Definition: MooseMesh.C:3815
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition: Assembly.h:2587
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2411
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2403
Real _current_side_volume
Volume of the current side element.
Definition: Assembly.h:2609
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2799
const bool _displaced
Definition: Assembly.h:2316
const Node * _current_node
The current node we are working with.
Definition: Assembly.h:2623
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
Definition: Assembly.h:2377
bool _calculate_face_xyz
Definition: Assembly.h:2859
bool _need_lower_d_elem_volume
Whether we need to compute the lower dimensional element volume.
Definition: Assembly.h:2636
bool _user_added_fe_face_of_helper_type
Definition: Assembly.h:2363
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2519
const bool & _computing_jacobian
Whether we are currently computing the Jacobian.
Definition: Assembly.h:2326
void helpersRequestData()
request phi, dphi, xyz, JxW, etc.
Definition: Assembly.C:4811
void buildLowerDFE(FEType type) const
Build FEs for a lower dimensional element with a type.
Definition: Assembly.C:360
unsigned int _current_side
The current side of the selected element (valid only when working with sides)
Definition: Assembly.h:2605
std::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2407
const libMesh::CouplingMatrix & _nonlocal_cm
Definition: Assembly.h:2320
const Elem * _current_neighbor_side_elem
The current side element of the ncurrent neighbor element.
Definition: Assembly.h:2617
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition: Assembly.h:2538
bool _current_side_volume_computed
Boolean to indicate whether current element side volumes has been computed.
Definition: Assembly.h:2629
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2548
bool _custom_mortar_qrule
Flag specifying whether a custom quadrature rule has been specified for mortar segment mesh...
Definition: Assembly.h:2589
const bool & currentlyComputingJacobian() const
Returns true if the problem is in the process of computing the Jacobian.
Definition: SubProblem.h:692
bool _need_neighbor_lower_d_elem_volume
Whether we need to compute the neighboring lower dimensional element volume.
Definition: Assembly.h:2640
bool _user_added_fe_of_helper_type
Whether user code requested a FEType the same as our _helper_type.
Definition: Assembly.h:2362
Moose::CoordinateSystemType _coord_type
The coordinate system.
Definition: Assembly.h:2423
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
helper object for transforming coordinates for lower dimensional element quadrature points ...
Definition: Assembly.h:2561
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2349
const Elem * _current_side_elem
The current "element" making up the side we are currently on.
Definition: Assembly.h:2607
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:2816
bool _need_JxW_neighbor
Flag to indicate that JxW_neighbor is needed.
Definition: Assembly.h:2568
bool _need_dual
Whether dual shape functions need to be computed for mortar constraints.
Definition: Assembly.h:2644
const Node * _current_neighbor_node
The current neighboring node we are working with.
Definition: Assembly.h:2625

◆ ~Assembly()

Assembly::~Assembly ( )
virtual

Definition at line 188 of file Assembly.C.

189 {
190  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
191  for (auto & it : _fe[dim])
192  delete it.second;
193 
194  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
195  for (auto & it : _fe_face[dim])
196  delete it.second;
197 
198  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
199  for (auto & it : _fe_neighbor[dim])
200  delete it.second;
201 
202  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
203  for (auto & it : _fe_face_neighbor[dim])
204  delete it.second;
205 
206  for (unsigned int dim = 0; dim <= _mesh_dimension - 1; dim++)
207  for (auto & it : _fe_lower[dim])
208  delete it.second;
209 
210  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
211  for (auto & it : _vector_fe[dim])
212  delete it.second;
213 
214  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
215  for (auto & it : _vector_fe_face[dim])
216  delete it.second;
217 
218  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
219  for (auto & it : _vector_fe_neighbor[dim])
220  delete it.second;
221 
222  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
223  for (auto & it : _vector_fe_face_neighbor[dim])
224  delete it.second;
225 
226  for (unsigned int dim = 0; dim <= _mesh_dimension - 1; dim++)
227  for (auto & it : _vector_fe_lower[dim])
228  delete it.second;
229 
230  for (auto & it : _ad_grad_phi_data)
231  it.second.release();
232 
233  for (auto & it : _ad_vector_grad_phi_data)
234  it.second.release();
235 
236  for (auto & it : _ad_grad_phi_data_face)
237  it.second.release();
238 
239  for (auto & it : _ad_vector_grad_phi_data_face)
240  it.second.release();
241 
243 
244  _coord.release();
247 
248  _ad_JxW.release();
255  _ad_coord.release();
256 
257  delete _qrule_msm;
258 }
MooseArray< VectorValue< ADReal > > _ad_normals
Definition: Assembly.h:2848
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2515
MooseArray< Real > _curvatures
Definition: Assembly.h:2850
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data_face
Definition: Assembly.h:2783
MooseArray< Point > _current_physical_points
This will be filled up with the physical points passed into reinitAtPhysical() if it is called...
Definition: Assembly.h:2647
MooseArray< ADReal > _ad_coord
The AD version of the current coordinate transformation coefficients.
Definition: Assembly.h:2427
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension&#39;s actual vector fe objects indexed on type.
Definition: Assembly.h:2405
MooseArray< Real > _coord_neighbor
The current coordinate transformation coefficients.
Definition: Assembly.h:2572
MooseArray< Real > _coord
The current coordinate transformation coefficients.
Definition: Assembly.h:2425
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2550
unsigned int _mesh_dimension
Definition: Assembly.h:2355
MooseArray< ADReal > _ad_curvatures
Definition: Assembly.h:2851
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data
Definition: Assembly.h:2781
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2547
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
Definition: Assembly.h:2782
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2517
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2557
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition: Assembly.h:2587
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2403
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition: Assembly.h:2559
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2836
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition: Assembly.h:2849
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:2575
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition: Assembly.h:2549
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data_face
Definition: Assembly.h:2785
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2548
MooseArray< ADReal > _ad_JxW
Definition: Assembly.h:2835
MooseArray< ADReal > _ad_JxW_face
Definition: Assembly.h:2847

Member Function Documentation

◆ activateDual()

void Assembly::activateDual ( )
inline

Indicates that dual shape functions are used for mortar constraint.

Definition at line 617 of file Assembly.h.

Referenced by MortarConstraintBase::MortarConstraintBase().

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

◆ 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 300 of file Assembly.h.

301  {
302  // Coord values for non-cartesian coordinate systems are functions of the locations of the
303  // quadrature points in physical space. We also have no way of knowing whether this was called
304  // from a volumetric or face object so we should set both volumetric and face xyz to true
305  _calculate_xyz = true;
306  _calculate_face_xyz = true;
307 
308  _calculate_ad_coord = true;
309  return _ad_coord;
310  }
MooseArray< ADReal > _ad_coord
The AD version of the current coordinate transformation coefficients.
Definition: Assembly.h:2427
bool _calculate_xyz
Definition: Assembly.h:2858
bool _calculate_ad_coord
Whether to calculate coord with AD.
Definition: Assembly.h:2864
bool _calculate_face_xyz
Definition: Assembly.h:2859

◆ adCurvatures()

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

Definition at line 4798 of file Assembly.C.

4799 {
4800  _calculate_curvatures = true;
4801  const Order helper_order = _mesh.hasSecondOrderElements() ? SECOND : FIRST;
4802  const FEType helper_type(helper_order, LAGRANGE);
4803  // Must prerequest the second derivatives. Sadly because there is only one
4804  // _need_second_derivative map for both volumetric and face FE objects we must request both here
4805  feSecondPhi<Real>(helper_type);
4806  feSecondPhiFace<Real>(helper_type);
4807  return _ad_curvatures;
4808 }
Order
FIRST
MooseMesh & _mesh
Definition: Assembly.h:2353
SECOND
MooseArray< ADReal > _ad_curvatures
Definition: Assembly.h:2851
bool _calculate_curvatures
Definition: Assembly.h:2860
bool hasSecondOrderElements()
check if the mesh has SECOND order elements
Definition: MooseMesh.C:3815

◆ 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 3800 of file Assembly.C.

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

3801 {
3802 #ifndef NDEBUG
3804  {
3805  mooseAssert(_cached_jacobian_rows.size() == _cached_jacobian_cols.size(),
3806  "Error: Cached data sizes MUST be the same!");
3807  for (MooseIndex(_cached_jacobian_rows) i = 0; i < _cached_jacobian_rows.size(); i++)
3808  mooseAssert(_cached_jacobian_rows[i].size() == _cached_jacobian_cols[i].size(),
3809  "Error: Cached data sizes MUST be the same for a given tag!");
3810  }
3811 #endif
3812 
3813  for (MooseIndex(_cached_jacobian_rows) i = 0; i < _cached_jacobian_rows.size(); i++)
3814  if (_sys.hasMatrix(i))
3815  for (MooseIndex(_cached_jacobian_rows[i]) j = 0; j < _cached_jacobian_rows[i].size(); j++)
3817  _cached_jacobian_cols[i][j],
3818  _cached_jacobian_values[i][j]);
3819 
3820  for (MooseIndex(_cached_jacobian_rows) i = 0; i < _cached_jacobian_rows.size(); i++)
3821  {
3822  if (!_sys.hasMatrix(i))
3823  continue;
3824 
3827 
3828  // Try to be more efficient from now on
3829  // The 2 is just a fudge factor to keep us from having to grow the vector during assembly
3830  _cached_jacobian_values[i].clear();
3832 
3833  _cached_jacobian_rows[i].clear();
3835 
3836  _cached_jacobian_cols[i].clear();
3838  }
3839 }
SystemBase & _sys
Definition: Assembly.h:2313
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2809
virtual bool checkNonlocalCouplingRequirement() const =0
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2807
unsigned int _max_cached_jacobians
Definition: Assembly.h:2813
virtual void add(const numeric_index_type i, const numeric_index_type j, const T value)=0
SubProblem & _subproblem
Definition: Assembly.h:2314
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1025
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2811

◆ 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 3515 of file Assembly.C.

Referenced by addCachedResiduals().

3518 {
3519  const auto & values = _cached_residual_values[vector_tag._type_id];
3520  const auto & rows = _cached_residual_rows[vector_tag._type_id];
3521 
3522  mooseAssert(values.size() == rows.size(),
3523  "Number of cached residuals and number of rows must match!");
3524 
3525  if (!values.empty())
3526  {
3527  residual.add_vector(values, rows);
3528  clearCachedResiduals(vector_tag);
3529  }
3530 }
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:2802
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:2799
std::array< Real, 2 > values
Definition: MortarUtils.C:52
void clearCachedResiduals(GlobalDataKey)
Clears all of the residuals in _cached_residual_rows and _cached_residual_values. ...
Definition: Assembly.C:3485

◆ 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 3470 of file Assembly.C.

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

3471 {
3472  for (const auto & vector_tag : tags)
3473  {
3474  if (!_sys.hasVector(vector_tag._id))
3475  {
3476  _cached_residual_values[vector_tag._type_id].clear();
3477  _cached_residual_rows[vector_tag._type_id].clear();
3478  continue;
3479  }
3480  addCachedResidualDirectly(_sys.getVector(vector_tag._id), GlobalDataKey{}, vector_tag);
3481  }
3482 }
SystemBase & _sys
Definition: Assembly.h:2313
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:2802
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:925
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:3515
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2799
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:934

◆ addJacobian()

void Assembly::addJacobian ( GlobalDataKey  )

Adds all local Jacobian to the global Jacobian matrices.

Definition at line 3857 of file Assembly.C.

3858 {
3859  for (const auto & it : _cm_ff_entry)
3860  addJacobianCoupledVarPair(*it.first, *it.second);
3861 
3862  for (const auto & it : _cm_sf_entry)
3863  addJacobianCoupledVarPair(*it.first, *it.second);
3864 
3865  for (const auto & it : _cm_fs_entry)
3866  addJacobianCoupledVarPair(*it.first, *it.second);
3867 }
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
Entries in the coupling matrix for scalar variables vs field variables.
Definition: Assembly.h:2336
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332
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:3842
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
Entries in the coupling matrix for field variables vs scalar variables.
Definition: Assembly.h:2334

◆ 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 3555 of file Assembly.C.

3561 {
3562  if (idof_indices.size() == 0 || jdof_indices.size() == 0)
3563  return;
3564  if (jac_block.n() == 0 || jac_block.m() == 0)
3565  return;
3566 
3567  const auto & scaling_factors = ivar.arrayScalingFactor();
3568  const unsigned int iv = ivar.number();
3569  const unsigned int jv = jvar.number();
3570 
3571  for (unsigned int i = 0; i < ivar.count(); ++i)
3572  {
3573  for (const auto & jt : ConstCouplingRow(iv + i, *_cm))
3574  {
3575  if (jt < jv || jt >= jv + jvar.count())
3576  continue;
3577  unsigned int j = jt - jv;
3578 
3579  auto di = ivar.componentDofIndices(idof_indices, i);
3580  auto dj = jvar.componentDofIndices(jdof_indices, j);
3581  auto indof = di.size();
3582  auto jndof = dj.size();
3583 
3584  unsigned int jj = j;
3585  if (iv == jv && _component_block_diagonal[iv])
3586  // here i must be equal to j
3587  jj = 0;
3588 
3589  auto sub = jac_block.sub_matrix(i * indof, indof, jj * jndof, jndof);
3590  if (scaling_factors[i] != 1.0)
3591  sub *= scaling_factors[i];
3592 
3593  // If we're computing the jacobian for automatically scaling variables we do not want
3594  // to constrain the element matrix because it introduces 1s on the diagonal for the
3595  // constrained dofs
3597  _dof_map.constrain_element_matrix(sub, di, dj, false);
3598 
3599  jacobian.add_matrix(sub, di, dj);
3600  }
3601  }
3602 }
SystemBase & _sys
Definition: Assembly.h:2313
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:1554
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:2819
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:2319
unsigned int n() const
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2349
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 4283 of file Assembly.C.

Referenced by addJacobianBlockNonlocalTags().

4291 {
4292  if (idof_indices.size() == 0 || jdof_indices.size() == 0)
4293  return;
4294  if (jacobian.n() == 0 || jacobian.m() == 0)
4295  return;
4296  if (!(*_cm)(ivar, jvar))
4297  return;
4298 
4299  auto & iv = _sys.getVariable(_tid, ivar);
4300  auto & jv = _sys.getVariable(_tid, jvar);
4301  auto & scaling_factor = iv.arrayScalingFactor();
4302 
4303  const unsigned int ivn = iv.number();
4304  const unsigned int jvn = jv.number();
4305  auto & keg = jacobianBlockNonlocal(ivn, jvn, LocalDataKey{}, tag);
4306 
4307  // It is guaranteed by design iv.number <= ivar since iv is obtained
4308  // through SystemBase::getVariable with ivar.
4309  // Most of times ivar will just be equal to iv.number except for array variables,
4310  // where ivar could be a number for a component of an array variable but calling
4311  // getVariable will return the array variable that has the number of the 0th component.
4312  // It is the same for jvar.
4313  const unsigned int i = ivar - ivn;
4314  const unsigned int j = jvar - jvn;
4315 
4316  // DoF indices are independently given
4317  auto di = idof_indices;
4318  auto dj = jdof_indices;
4319 
4320  auto indof = di.size();
4321  auto jndof = dj.size();
4322 
4323  unsigned int jj = j;
4324  if (ivar == jvar && _component_block_diagonal[ivn])
4325  jj = 0;
4326 
4327  auto sub = keg.sub_matrix(i * indof, indof, jj * jndof, jndof);
4328  // If we're computing the jacobian for automatically scaling variables we do not want to
4329  // constrain the element matrix because it introduces 1s on the diagonal for the constrained
4330  // dofs
4332  dof_map.constrain_element_matrix(sub, di, dj, false);
4333 
4334  if (scaling_factor[i] != 1.0)
4335  sub *= scaling_factor[i];
4336 
4337  jacobian.add_matrix(sub, di, dj);
4338 }
SystemBase & _sys
Definition: Assembly.h:2313
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:1153
const std::vector< Real > & arrayScalingFactor() const
bool computingScalingJacobian() const
Whether we are computing an initial Jacobian for automatic variable scaling.
Definition: SystemBase.C:1554
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
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:2819
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:2319
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:91
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 4341 of file Assembly.C.

4349 {
4350  for (auto tag : tags)
4352  jacobian, ivar, jvar, dof_map, idof_indices, jdof_indices, GlobalDataKey{}, tag);
4353 }
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:4283

◆ 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 4215 of file Assembly.C.

4222 {
4223  for (auto tag : tags)
4224  addJacobianBlock(jacobian, ivar, jvar, dof_map, dof_indices, GlobalDataKey{}, tag);
4225 }
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 3842 of file Assembly.C.

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

3843 {
3844  auto i = ivar.number();
3845  auto j = jvar.number();
3846  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
3847  if (jacobianBlockUsed(tag, i, j) && _sys.hasMatrix(tag))
3849  jacobianBlock(i, j, LocalDataKey{}, tag),
3850  ivar,
3851  jvar,
3852  ivar.dofIndices(),
3853  jvar.dofIndices());
3854 }
SystemBase & _sys
Definition: Assembly.h:2313
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:2240
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
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:1142
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2342
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:1025

◆ 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 4008 of file Assembly.C.

4009 {
4010  for (const auto & it : _cm_ff_entry)
4011  {
4012  auto ivar = it.first;
4013  auto jvar = it.second;
4014  auto i = ivar->number();
4015  auto j = jvar->number();
4016  for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
4017  tag++)
4018  if (jacobianBlockLowerUsed(tag, i, j) && _sys.hasMatrix(tag))
4019  {
4021  jacobianBlockMortar(Moose::LowerLower, i, j, LocalDataKey{}, tag),
4022  *ivar,
4023  *jvar,
4024  ivar->dofIndicesLower(),
4025  jvar->dofIndicesLower());
4026 
4028  jacobianBlockMortar(Moose::LowerSecondary, i, j, LocalDataKey{}, tag),
4029  *ivar,
4030  *jvar,
4031  ivar->dofIndicesLower(),
4032  jvar->dofIndices());
4033 
4035  jacobianBlockMortar(Moose::SecondaryLower, i, j, LocalDataKey{}, tag),
4036  *ivar,
4037  *jvar,
4038  ivar->dofIndices(),
4039  jvar->dofIndicesLower());
4040  }
4041  }
4042 }
SystemBase & _sys
Definition: Assembly.h:2313
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:2276
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332
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:3161
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:1025
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:2347

◆ addJacobianNeighbor() [1/2]

void Assembly::addJacobianNeighbor ( GlobalDataKey  )

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

Definition at line 3892 of file Assembly.C.

Referenced by addJacobianNeighborTags().

3893 {
3894  for (const auto & it : _cm_ff_entry)
3895  {
3896  auto ivar = it.first;
3897  auto jvar = it.second;
3898  auto i = ivar->number();
3899  auto j = jvar->number();
3900  for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
3901  tag < _jacobian_block_neighbor_used.size();
3902  tag++)
3903  if (jacobianBlockNeighborUsed(tag, i, j) && _sys.hasMatrix(tag))
3904  {
3906  jacobianBlockNeighbor(Moose::ElementNeighbor, i, j, LocalDataKey{}, tag),
3907  *ivar,
3908  *jvar,
3909  ivar->dofIndices(),
3910  jvar->dofIndicesNeighbor());
3911 
3913  jacobianBlockNeighbor(Moose::NeighborElement, i, j, LocalDataKey{}, tag),
3914  *ivar,
3915  *jvar,
3916  ivar->dofIndicesNeighbor(),
3917  jvar->dofIndices());
3918 
3920  jacobianBlockNeighbor(Moose::NeighborNeighbor, i, j, LocalDataKey{}, tag),
3921  *ivar,
3922  *jvar,
3923  ivar->dofIndicesNeighbor(),
3924  jvar->dofIndicesNeighbor());
3925  }
3926  }
3927 }
SystemBase & _sys
Definition: Assembly.h:2313
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:3120
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332
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:1025
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:2258
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:2345

◆ 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 3930 of file Assembly.C.

3931 {
3932  for (const auto & it : _cm_ff_entry)
3933  {
3934  auto ivar = it.first;
3935  auto jvar = it.second;
3936  auto i = ivar->number();
3937  auto j = jvar->number();
3938  for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
3939  tag++)
3940  if (jacobianBlockLowerUsed(tag, i, j) && _sys.hasMatrix(tag))
3941  {
3943  jacobianBlockMortar(Moose::LowerLower, i, j, LocalDataKey{}, tag),
3944  *ivar,
3945  *jvar,
3946  ivar->dofIndicesLower(),
3947  jvar->dofIndicesLower());
3948 
3950  jacobianBlockMortar(Moose::LowerSecondary, i, j, LocalDataKey{}, tag),
3951  *ivar,
3952  *jvar,
3953  ivar->dofIndicesLower(),
3954  jvar->dofIndicesNeighbor());
3955 
3957  jacobianBlockMortar(Moose::LowerPrimary, i, j, LocalDataKey{}, tag),
3958  *ivar,
3959  *jvar,
3960  ivar->dofIndicesLower(),
3961  jvar->dofIndices());
3962 
3964  jacobianBlockMortar(Moose::SecondaryLower, i, j, LocalDataKey{}, tag),
3965  *ivar,
3966  *jvar,
3967  ivar->dofIndicesNeighbor(),
3968  jvar->dofIndicesLower());
3969 
3971  jacobianBlockMortar(Moose::PrimaryLower, i, j, LocalDataKey{}, tag),
3972  *ivar,
3973  *jvar,
3974  ivar->dofIndices(),
3975  jvar->dofIndicesLower());
3976  }
3977 
3978  for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
3979  tag < _jacobian_block_neighbor_used.size();
3980  tag++)
3981  if (jacobianBlockNeighborUsed(tag, i, j) && _sys.hasMatrix(tag))
3982  {
3984  jacobianBlockNeighbor(Moose::ElementNeighbor, i, j, LocalDataKey{}, tag),
3985  *ivar,
3986  *jvar,
3987  ivar->dofIndices(),
3988  jvar->dofIndicesNeighbor());
3989 
3991  jacobianBlockNeighbor(Moose::NeighborElement, i, j, LocalDataKey{}, tag),
3992  *ivar,
3993  *jvar,
3994  ivar->dofIndicesNeighbor(),
3995  jvar->dofIndices());
3996 
3998  jacobianBlockNeighbor(Moose::NeighborNeighbor, i, j, LocalDataKey{}, tag),
3999  *ivar,
4000  *jvar,
4001  ivar->dofIndicesNeighbor(),
4002  jvar->dofIndicesNeighbor());
4003  }
4004  }
4005 }
SystemBase & _sys
Definition: Assembly.h:2313
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:3120
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:2276
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332
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:3161
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:1025
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:2258
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:2347
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:2345

◆ 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 4425 of file Assembly.C.

4433 {
4434  for (const auto tag : tags)
4436  jacobian, ivar, jvar, dof_map, dof_indices, neighbor_dof_indices, GlobalDataKey{}, tag);
4437 }
void addJacobianNeighbor(GlobalDataKey)
Add ElementNeighbor, NeighborElement, and NeighborNeighbor portions of the Jacobian for compute objec...
Definition: Assembly.C:3892

◆ addJacobianNonlocal()

void Assembly::addJacobianNonlocal ( GlobalDataKey  )

Adds non-local Jacobian to the global Jacobian matrices.

Definition at line 3870 of file Assembly.C.

3871 {
3872  for (const auto & it : _cm_nonlocal_entry)
3873  {
3874  auto ivar = it.first;
3875  auto jvar = it.second;
3876  auto i = ivar->number();
3877  auto j = jvar->number();
3878  for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
3879  tag < _jacobian_block_nonlocal_used.size();
3880  tag++)
3881  if (jacobianBlockNonlocalUsed(tag, i, j) && _sys.hasMatrix(tag))
3883  jacobianBlockNonlocal(i, j, LocalDataKey{}, tag),
3884  *ivar,
3885  *jvar,
3886  ivar->dofIndices(),
3887  jvar->allDofIndices());
3888  }
3889 }
SystemBase & _sys
Definition: Assembly.h:2313
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:1153
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:2294
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2343
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
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:1025
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition: Assembly.h:2340

◆ 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 4447 of file Assembly.C.

4448 {
4449  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
4451  for (const auto & var_j : vars)
4452  addJacobianCoupledVarPair(var_i, *var_j);
4453 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
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:3842
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:146
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 4440 of file Assembly.C.

4441 {
4442  for (const auto & it : _cm_ss_entry)
4443  addJacobianCoupledVarPair(*it.first, *it.second);
4444 }
std::vector< std::pair< MooseVariableScalar *, MooseVariableScalar * > > _cm_ss_entry
Entries in the coupling matrix for scalar variables.
Definition: Assembly.h:2338
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:3842

◆ 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 3317 of file Assembly.C.

3318 {
3319  for (const auto & vector_tag : vector_tags)
3320  if (_sys.hasVector(vector_tag._id))
3321  addResidual(vector_tag);
3322 }
SystemBase & _sys
Definition: Assembly.h:2313
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:925
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:3317

◆ 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 3304 of file Assembly.C.

3305 {
3306  mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3307  "Non-residual tag in Assembly::addResidual");
3308 
3309  auto & tag_Re = _sub_Re[vector_tag._type_id];
3310  NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3311  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3312  for (const auto & var : vars)
3313  addResidualBlock(residual, tag_Re[var->number()], var->dofIndices(), var->arrayScalingFactor());
3314 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
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:2351
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2661
Moose::VectorTagType _type
The type of the vector tag.
Definition: VectorTag.h:53
void addResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor)
Add a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3251
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:934

◆ 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 
)
private

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

Definition at line 3251 of file Assembly.C.

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

3255 {
3256  if (dof_indices.size() > 0 && res_block.size())
3257  {
3258  _temp_dof_indices = dof_indices;
3259  _tmp_Re = res_block;
3262  }
3263 }
virtual void add_vector(const T *v, const std::vector< numeric_index_type > &dof_indices)
DenseVector< Number > _tmp_Re
auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction) ...
Definition: Assembly.h:2667
void processLocalResidual(DenseVector< Number > &res_block, std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor)
Appling scaling, constraints to the local residual block and populate the full DoF indices for array ...
Definition: Assembly.C:3221
std::vector< dof_id_type > _temp_dof_indices
Temporary work vector to keep from reallocating it.
Definition: Assembly.h:2822
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 3361 of file Assembly.C.

3362 {
3363  for (const auto & vector_tag : vector_tags)
3364  if (_sys.hasVector(vector_tag._id))
3365  addResidualLower(vector_tag);
3366 }
SystemBase & _sys
Definition: Assembly.h:2313
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:925
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:3361

◆ 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 3347 of file Assembly.C.

3348 {
3349  mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3350  "Non-residual tag in Assembly::addResidualLower");
3351 
3352  auto & tag_Rl = _sub_Rl[vector_tag._type_id];
3353  NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3354  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3355  for (const auto & var : vars)
3357  residual, tag_Rl[var->number()], var->dofIndicesLower(), var->arrayScalingFactor());
3358 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
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:2351
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition: Assembly.h:2664
Moose::VectorTagType _type
The type of the vector tag.
Definition: VectorTag.h:53
void addResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor)
Add a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3251
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:934

◆ 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 3339 of file Assembly.C.

3340 {
3341  for (const auto & vector_tag : vector_tags)
3342  if (_sys.hasVector(vector_tag._id))
3343  addResidualNeighbor(vector_tag);
3344 }
SystemBase & _sys
Definition: Assembly.h:2313
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:925
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:3339

◆ 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 3325 of file Assembly.C.

3326 {
3327  mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3328  "Non-residual tag in Assembly::addResidualNeighbor");
3329 
3330  auto & tag_Rn = _sub_Rn[vector_tag._type_id];
3331  NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3332  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3333  for (const auto & var : vars)
3335  residual, tag_Rn[var->number()], var->dofIndicesNeighbor(), var->arrayScalingFactor());
3336 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
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:2662
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:2351
Moose::VectorTagType _type
The type of the vector tag.
Definition: VectorTag.h:53
void addResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor)
Add a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3251
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:934

◆ 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 3384 of file Assembly.C.

3385 {
3386  for (const auto & vector_tag : vector_tags)
3387  if (_sys.hasVector(vector_tag._id))
3388  addResidualScalar(vector_tag);
3389 }
SystemBase & _sys
Definition: Assembly.h:2313
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:925
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:3384

◆ 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 3370 of file Assembly.C.

3371 {
3372  mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3373  "Non-residual tag in Assembly::addResidualScalar");
3374 
3375  // add the scalar variables residuals
3376  auto & tag_Re = _sub_Re[vector_tag._type_id];
3377  NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3378  const std::vector<MooseVariableScalar *> & vars = _sys.getScalarVariables(_tid);
3379  for (const auto & var : vars)
3380  addResidualBlock(residual, tag_Re[var->number()], var->dofIndices(), var->arrayScalingFactor());
3381 }
SystemBase & _sys
Definition: Assembly.h:2313
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition: SystemBase.h:759
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:2351
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2661
Moose::VectorTagType _type
The type of the vector tag.
Definition: VectorTag.h:53
void addResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor)
Add a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3251
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:934

◆ adGradPhi() [1/2]

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

Definition at line 1322 of file Assembly.h.

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

◆ adGradPhi() [2/2]

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

Definition at line 3052 of file Assembly.h.

3053 {
3054  return _ad_vector_grad_phi_data.at(v.feType());
3055 }
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:2782

◆ adJxW()

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

Definition at line 278 of file Assembly.h.

278 { return _ad_JxW; }
MooseArray< ADReal > _ad_JxW
Definition: Assembly.h:2835

◆ adJxWFace()

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

Definition at line 280 of file Assembly.h.

280 { return _ad_JxW_face; }
MooseArray< ADReal > _ad_JxW_face
Definition: Assembly.h:2847

◆ adNormals()

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

Definition at line 393 of file Assembly.h.

393 { return _ad_normals; }
MooseArray< VectorValue< ADReal > > _ad_normals
Definition: Assembly.h:2848

◆ adQPoints()

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

Definition at line 395 of file Assembly.h.

396  {
397  _calculate_xyz = true;
398  return _ad_q_points;
399  }
bool _calculate_xyz
Definition: Assembly.h:2858
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2836

◆ adQPointsFace()

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

Definition at line 401 of file Assembly.h.

402  {
403  _calculate_face_xyz = true;
404  return _ad_q_points_face;
405  }
bool _calculate_face_xyz
Definition: Assembly.h:2859
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition: Assembly.h:2849

◆ 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 3221 of file Assembly.h.

3223 {
3224  _disp_numbers_and_directions = std::move(disp_numbers_and_directions);
3225 }
std::vector< std::pair< unsigned int, unsigned short > > _disp_numbers_and_directions
Container of displacement numbers and directions.
Definition: Assembly.h:2856

◆ 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 1908 of file Assembly.h.

1909  {
1910  auto qrule = qrules(dim).vol.get();
1911  fe.attach_quadrature_rule(qrule);
1912  return qrule;
1913  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2491
std::unique_ptr< libMesh::QBase > vol
volume/elem (meshdim) quadrature rule
Definition: Assembly.h:2443
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 1920 of file Assembly.h.

1921  {
1922  auto qrule = qrules(dim).face.get();
1923  fe.attach_quadrature_rule(qrule);
1924  return qrule;
1925  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
std::unique_ptr< libMesh::QBase > face
area/face (meshdim-1) quadrature rule
Definition: Assembly.h:2445
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2491
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 294 of file Assembly.C.

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

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

◆ 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 338 of file Assembly.C.

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

339 {
340  if (!_building_helpers && type == _helper_type)
342 
343  if (!_fe_shape_data_face_neighbor[type])
344  _fe_shape_data_face_neighbor[type] = std::make_unique<FEShapeData>();
345 
346  // Build an FE object for this type for each dimension up to the dimension of the current mesh
347  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
348  {
349  if (!_fe_face_neighbor[dim][type])
350  _fe_face_neighbor[dim][type] = FEGenericBase<Real>::build(dim, type).release();
351 
352  _fe_face_neighbor[dim][type]->get_phi();
353  _fe_face_neighbor[dim][type]->get_dphi();
354  if (_need_second_derivative_neighbor.count(type))
355  _fe_face_neighbor[dim][type]->get_d2phi();
356  }
357 }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2769
bool _user_added_fe_face_neighbor_of_helper_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:165
const FEType _helper_type
The finite element type of the FE helper classes.
Definition: Assembly.h:2359
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2867
unsigned int _mesh_dimension
Definition: Assembly.h:2355
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
Definition: Assembly.h:2377
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2548

◆ buildFE()

void Assembly::buildFE ( FEType  type) const
private

Build FEs with a type.

Parameters
typeThe type of FE

Definition at line 268 of file Assembly.C.

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

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

◆ buildLowerDDualFE()

void Assembly::buildLowerDDualFE ( FEType  type) const
private

Definition at line 384 of file Assembly.C.

Referenced by feDualPhiLower(), and feGradDualPhiLower().

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

◆ 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 360 of file Assembly.C.

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

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

◆ buildNeighborFE()

void Assembly::buildNeighborFE ( FEType  type) const
private

Build FEs for a neighbor with a type.

Parameters
typeThe type of FE

Definition at line 316 of file Assembly.C.

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

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

◆ buildVectorDualLowerDFE()

void Assembly::buildVectorDualLowerDFE ( FEType  type) const
private

Definition at line 430 of file Assembly.C.

431 {
433  _vector_fe_shape_data_dual_lower[type] = std::make_unique<VectorFEShapeData>();
434 
435  // Build an FE object for this type for each dimension up to the dimension of
436  // the current mesh minus one (because this is for lower-dimensional
437  // elements!)
438  unsigned int dim = ((type.family == LAGRANGE_VEC) || (type.family == MONOMIAL_VEC)) ? 0 : 2;
439  const auto ending_dim = cast_int<unsigned int>(_mesh_dimension - 1);
440  if (ending_dim < dim)
441  return;
442  for (; dim <= ending_dim; dim++)
443  {
444  if (!_vector_fe_lower[dim][type])
445  _vector_fe_lower[dim][type] = FEVectorBase::build(dim, type).release();
446 
447  _vector_fe_lower[dim][type]->get_dual_phi();
448  _vector_fe_lower[dim][type]->get_dual_dphi();
449  if (_need_second_derivative.count(type))
450  _vector_fe_lower[dim][type]->get_dual_d2phi();
451  }
452 }
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:165
unsigned int _mesh_dimension
Definition: Assembly.h:2355
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_dual_lower
Definition: Assembly.h:2779
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition: Assembly.h:2559

◆ 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 486 of file Assembly.C.

Referenced by getVectorFEFace().

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

◆ 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 546 of file Assembly.C.

Referenced by getVectorFEFaceNeighbor().

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

◆ buildVectorFE()

void Assembly::buildVectorFE ( FEType  type) const
private

Build Vector FEs with a type.

Parameters
typeThe type of FE

Definition at line 455 of file Assembly.C.

Referenced by getVectorFE().

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

◆ 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 405 of file Assembly.C.

406 {
407  if (!_vector_fe_shape_data_lower[type])
408  _vector_fe_shape_data_lower[type] = std::make_unique<VectorFEShapeData>();
409 
410  // Build an FE object for this type for each dimension up to the dimension of
411  // the current mesh minus one (because this is for lower-dimensional
412  // elements!)
413  unsigned int dim = ((type.family == LAGRANGE_VEC) || (type.family == MONOMIAL_VEC)) ? 0 : 2;
414  const auto ending_dim = cast_int<unsigned int>(_mesh_dimension - 1);
415  if (ending_dim < dim)
416  return;
417  for (; dim <= ending_dim; dim++)
418  {
419  if (!_vector_fe_lower[dim][type])
420  _vector_fe_lower[dim][type] = FEVectorBase::build(dim, type).release();
421 
422  _vector_fe_lower[dim][type]->get_phi();
423  _vector_fe_lower[dim][type]->get_dphi();
424  if (_need_second_derivative.count(type))
425  _vector_fe_lower[dim][type]->get_d2phi();
426  }
427 }
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:165
unsigned int _mesh_dimension
Definition: Assembly.h:2355
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_lower
Definition: Assembly.h:2778
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition: Assembly.h:2559

◆ 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 516 of file Assembly.C.

Referenced by getVectorFENeighbor().

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

◆ 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 600 of file Assembly.C.

601 {
602  auto & qdefault = _qrules[Moose::ANY_BLOCK_ID];
603  mooseAssert(qdefault.size() > 0, "default quadrature must be initialized before order bumps");
604 
605  unsigned int ndims = _mesh_dimension + 1; // must account for 0-dimensional quadrature.
606  auto & qvec = _qrules[block];
607  if (qvec.size() != ndims || !qvec[0].vol)
608  createQRules(qdefault[0].vol->type(), order, order, order, block);
609  else if (qvec[0].vol->get_order() < order || qvec[0].face->get_order() < order)
610  createQRules(qvec[0].vol->type(),
611  std::max(order, qvec[0].arbitrary_vol->get_order()),
612  std::max(order, qvec[0].vol->get_order()),
613  std::max(order, qvec[0].face->get_order()),
614  block);
615  // otherwise do nothing - quadrature order is already as high as requested
616 }
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:619
unsigned int _mesh_dimension
Definition: Assembly.h:2355
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:2460
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 577 of file Assembly.C.

578 {
579  auto & qdefault = _qrules[Moose::ANY_BLOCK_ID];
580  mooseAssert(qdefault.size() > 0, "default quadrature must be initialized before order bumps");
581 
582  unsigned int ndims = _mesh_dimension + 1; // must account for 0-dimensional quadrature.
583  auto & qvec = _qrules[block];
584  if (qvec.size() != ndims || !qvec[0].vol)
585  createQRules(qdefault[0].vol->type(),
586  qdefault[0].arbitrary_vol->get_order(),
587  volume_order,
588  qdefault[0].face->get_order(),
589  block);
590  else if (qvec[0].vol->get_order() < volume_order)
591  createQRules(qvec[0].vol->type(),
592  qvec[0].arbitrary_vol->get_order(),
593  volume_order,
594  qvec[0].face->get_order(),
595  block);
596  // otherwise do nothing - quadrature order is already as high as requested
597 }
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:619
unsigned int _mesh_dimension
Definition: Assembly.h:2355
std::unordered_map< SubdomainID, std::vector< QRules > > _qrules
Holds quadrature rules for each dimension.
Definition: Assembly.h:2460
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 4045 of file Assembly.C.

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

4046 {
4047  for (const auto & it : _cm_ff_entry)
4048  cacheJacobianCoupledVarPair(*it.first, *it.second);
4049 
4050  for (const auto & it : _cm_fs_entry)
4051  cacheJacobianCoupledVarPair(*it.first, *it.second);
4052 
4053  for (const auto & it : _cm_sf_entry)
4054  cacheJacobianCoupledVarPair(*it.first, *it.second);
4055 }
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
Entries in the coupling matrix for scalar variables vs field variables.
Definition: Assembly.h:2336
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
Entries in the coupling matrix for field variables vs scalar variables.
Definition: Assembly.h:2334
void cacheJacobianCoupledVarPair(const MooseVariableBase &ivar, const MooseVariableBase &jvar)
Caches element matrix for ivar rows and jvar columns.
Definition: Assembly.C:4059

◆ 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 4456 of file Assembly.C.

4458 {
4459  _cached_jacobian_rows[tag].push_back(i);
4460  _cached_jacobian_cols[tag].push_back(j);
4461  _cached_jacobian_values[tag].push_back(value);
4462 }
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2809
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2807
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2811

◆ 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 4465 of file Assembly.C.

4470 {
4471  for (auto tag : tags)
4472  if (_sys.hasMatrix(tag))
4473  cacheJacobian(i, j, value, LocalDataKey{}, tag);
4474 }
SystemBase & _sys
Definition: Assembly.h:2313
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
void cacheJacobian(GlobalDataKey)
Takes the values that are currently in _sub_Kee and appends them to the cached values.
Definition: Assembly.C:4045

◆ 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 3117 of file Assembly.h.

3122 {
3123  if (!computingJacobian() || matrix_tags.empty())
3124  return;
3125 
3126  if (residuals.size() == 1)
3127  {
3128  // No constraining is required. (This is likely a finite volume computation if we only have a
3129  // single dof)
3131  residuals, input_row_indices, scaling_factor, LocalDataKey{}, matrix_tags);
3132  return;
3133  }
3134 
3135  const auto & compare_dofs = residuals[0].derivatives().nude_indices();
3136 #ifndef NDEBUG
3137  auto compare_dofs_set = std::set<dof_id_type>(compare_dofs.begin(), compare_dofs.end());
3138 
3139  for (const auto i : make_range(decltype(residuals.size())(1), residuals.size()))
3140  {
3141  const auto & residual = residuals[i];
3142  auto current_dofs_set = std::set<dof_id_type>(residual.derivatives().nude_indices().begin(),
3143  residual.derivatives().nude_indices().end());
3144  mooseAssert(compare_dofs_set == current_dofs_set,
3145  "We're going to see whether the dof sets are the same. IIRC the degree of freedom "
3146  "dependence (as indicated by the dof index set held by the ADReal) has to be the "
3147  "same for every residual passed to this method otherwise constrain_element_matrix "
3148  "will not work.");
3149  }
3150 #endif
3151  _column_indices.assign(compare_dofs.begin(), compare_dofs.end());
3152 
3153  // If there's no derivatives then there is nothing to do. Moreover, if we pass zero size column
3154  // indices to constrain_element_matrix then we will potentially get errors out of BLAS
3155  if (!_column_indices.size())
3156  return;
3157 
3158  // Need to make a copy because we might modify this in constrain_element_matrix
3159  _row_indices.assign(input_row_indices.begin(), input_row_indices.end());
3160 
3162  for (const auto i : index_range(_row_indices))
3163  {
3164  const auto & sparse_derivatives = residuals[i].derivatives();
3165 
3166  for (const auto j : index_range(_column_indices))
3167  _element_matrix(i, j) = sparse_derivatives[_column_indices[j]] * scaling_factor;
3168  }
3169 
3171 
3172  for (const auto i : index_range(_row_indices))
3173  for (const auto j : index_range(_column_indices))
3174  cacheJacobian(_row_indices[i], _column_indices[j], _element_matrix(i, j), {}, matrix_tags);
3175 }
void cacheJacobian(GlobalDataKey)
Takes the values that are currently in _sub_Kee and appends them to the cached values.
Definition: Assembly.C:4045
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:3179
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:2899
DenseMatrix< Number > _element_matrix
A working matrix to avoid repeated heap allocations when caching Jacobians that must have libMesh-lev...
Definition: Assembly.h:2894
std::vector< dof_id_type > _column_indices
Definition: Assembly.h:2899
bool computingJacobian() const
Definition: Assembly.h:1951
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2349
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 ( const DenseMatrix< Number > &  jac_block,
const std::vector< dof_id_type > &  idof_indices,
const std::vector< dof_id_type > &  jdof_indices,
Real  scaling_factor,
LocalDataKey  ,
const std::set< TagID > &  tags 
)

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

The scaling_factor will be applied before caching. The input block is left unchanged; any constraints and scaling are applied to Assembly's work matrix. Only blessed framework classes may call this API by creating the requisite LocalDataKey class.

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

◆ cacheJacobianBlock() [2/2]

void Assembly::cacheJacobianBlock ( const 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 ( const 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 3665 of file Assembly.C.

Referenced by cacheJacobianNonlocal().

3671 {
3672  if (idof_indices.size() == 0 || jdof_indices.size() == 0)
3673  return;
3674  if (jac_block.n() == 0 || jac_block.m() == 0)
3675  return;
3676  if (!_sys.hasMatrix(tag))
3677  return;
3678 
3679  auto & scaling_factor = ivar.arrayScalingFactor();
3680 
3681  for (unsigned int i = 0; i < ivar.count(); ++i)
3682  {
3683  unsigned int iv = ivar.number();
3684  for (const auto & jt : ConstCouplingRow(iv + i, *_cm))
3685  {
3686  unsigned int jv = jvar.number();
3687  if (jt < jv || jt >= jv + jvar.count())
3688  continue;
3689  unsigned int j = jt - jv;
3690 
3691  auto di = ivar.componentDofIndices(idof_indices, i);
3692  auto dj = jvar.componentDofIndices(jdof_indices, j);
3693  auto indof = di.size();
3694  auto jndof = dj.size();
3695 
3696  unsigned int jj = j;
3697  if (iv == jv && _component_block_diagonal[iv])
3698  // here i must be equal to j
3699  jj = 0;
3700 
3701  auto sub = jac_block.sub_matrix(i * indof, indof, jj * jndof, jndof);
3702  if (scaling_factor[i] != 1.0)
3703  sub *= scaling_factor[i];
3704 
3705  _dof_map.constrain_element_matrix(sub, di, dj, false);
3706 
3707  for (MooseIndex(di) i = 0; i < di.size(); i++)
3708  for (MooseIndex(dj) j = 0; j < dj.size(); j++)
3709  if (sub(i, j) != 0.0) // no storage allocated for unimplemented jacobian terms,
3710  // maintaining maximum sparsity possible
3711  {
3712  _cached_jacobian_values[tag].push_back(sub(i, j));
3713  _cached_jacobian_rows[tag].push_back(di[i]);
3714  _cached_jacobian_cols[tag].push_back(dj[j]);
3715  }
3716  }
3717  }
3718 }
SystemBase & _sys
Definition: Assembly.h:2313
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2809
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...
unsigned int m() const
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
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:2819
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2807
const libMesh::CouplingMatrix * _cm
Coupling matrices.
Definition: Assembly.h:2319
unsigned int n() const
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2349
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2811
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 4059 of file Assembly.C.

Referenced by cacheJacobian().

4061 {
4062  auto i = ivar.number();
4063  auto j = jvar.number();
4064  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
4065  if (jacobianBlockUsed(tag, i, j) && _sys.hasMatrix(tag))
4066  cacheJacobianBlock(jacobianBlock(i, j, LocalDataKey{}, tag),
4067  ivar,
4068  jvar,
4069  ivar.dofIndices(),
4070  jvar.dofIndices(),
4071  tag);
4072 }
SystemBase & _sys
Definition: Assembly.h:2313
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:2240
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
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:1142
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2342
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
void cacheJacobianBlock(const DenseMatrix< Number > &jac_block, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &tags)
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 4135 of file Assembly.C.

Referenced by ComputeMortarFunctor::operator()().

4136 {
4137  for (const auto & it : _cm_ff_entry)
4138  {
4139  auto ivar = it.first;
4140  auto jvar = it.second;
4141  auto i = ivar->number();
4142  auto j = jvar->number();
4143  for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
4144  tag++)
4145  if (jacobianBlockLowerUsed(tag, i, j) && _sys.hasMatrix(tag))
4146  {
4147  cacheJacobianBlock(jacobianBlockMortar(Moose::LowerLower, i, j, LocalDataKey{}, tag),
4148  *ivar,
4149  *jvar,
4150  ivar->dofIndicesLower(),
4151  jvar->dofIndicesLower(),
4152  tag);
4153 
4154  cacheJacobianBlock(jacobianBlockMortar(Moose::LowerSecondary, i, j, LocalDataKey{}, tag),
4155  *ivar,
4156  *jvar,
4157  ivar->dofIndicesLower(),
4158  jvar->dofIndices(),
4159  tag);
4160 
4161  cacheJacobianBlock(jacobianBlockMortar(Moose::LowerPrimary, i, j, LocalDataKey{}, tag),
4162  *ivar,
4163  *jvar,
4164  ivar->dofIndicesLower(),
4165  jvar->dofIndicesNeighbor(),
4166  tag);
4167 
4168  cacheJacobianBlock(jacobianBlockMortar(Moose::SecondaryLower, i, j, LocalDataKey{}, tag),
4169  *ivar,
4170  *jvar,
4171  ivar->dofIndices(),
4172  jvar->dofIndicesLower(),
4173  tag);
4174 
4176  jacobianBlockMortar(Moose::SecondarySecondary, i, j, LocalDataKey{}, tag),
4177  *ivar,
4178  *jvar,
4179  ivar->dofIndices(),
4180  jvar->dofIndices(),
4181  tag);
4182 
4184  *ivar,
4185  *jvar,
4186  ivar->dofIndices(),
4187  jvar->dofIndicesNeighbor(),
4188  tag);
4189 
4190  cacheJacobianBlock(jacobianBlockMortar(Moose::PrimaryLower, i, j, LocalDataKey{}, tag),
4191  *ivar,
4192  *jvar,
4193  ivar->dofIndicesNeighbor(),
4194  jvar->dofIndicesLower(),
4195  tag);
4196 
4198  *ivar,
4199  *jvar,
4200  ivar->dofIndicesNeighbor(),
4201  jvar->dofIndices(),
4202  tag);
4203 
4204  cacheJacobianBlock(jacobianBlockMortar(Moose::PrimaryPrimary, i, j, LocalDataKey{}, tag),
4205  *ivar,
4206  *jvar,
4207  ivar->dofIndicesNeighbor(),
4208  jvar->dofIndicesNeighbor(),
4209  tag);
4210  }
4211  }
4212 }
SystemBase & _sys
Definition: Assembly.h:2313
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:2276
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332
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:3161
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:2347
void cacheJacobianBlock(const DenseMatrix< Number > &jac_block, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &tags)
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 4097 of file Assembly.C.

Referenced by SubProblem::cacheJacobianNeighbor().

4098 {
4099  for (const auto & it : _cm_ff_entry)
4100  {
4101  auto ivar = it.first;
4102  auto jvar = it.second;
4103  auto i = ivar->number();
4104  auto j = jvar->number();
4105 
4106  for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
4107  tag < _jacobian_block_neighbor_used.size();
4108  tag++)
4109  if (jacobianBlockNeighborUsed(tag, i, j) && _sys.hasMatrix(tag))
4110  {
4112  *ivar,
4113  *jvar,
4114  ivar->dofIndices(),
4115  jvar->dofIndicesNeighbor(),
4116  tag);
4118  *ivar,
4119  *jvar,
4120  ivar->dofIndicesNeighbor(),
4121  jvar->dofIndices(),
4122  tag);
4124  jacobianBlockNeighbor(Moose::NeighborNeighbor, i, j, LocalDataKey{}, tag),
4125  *ivar,
4126  *jvar,
4127  ivar->dofIndicesNeighbor(),
4128  jvar->dofIndicesNeighbor(),
4129  tag);
4130  }
4131  }
4132 }
SystemBase & _sys
Definition: Assembly.h:2313
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:3120
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332
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:2258
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:2345
void cacheJacobianBlock(const DenseMatrix< Number > &jac_block, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &tags)
Cache a local Jacobian block with the provided rows (idof_indices) and columns (jdof_indices) for eve...

◆ cacheJacobianNonlocal()

void Assembly::cacheJacobianNonlocal ( GlobalDataKey  )

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

Definition at line 4075 of file Assembly.C.

Referenced by SubProblem::cacheJacobian().

4076 {
4077  for (const auto & it : _cm_nonlocal_entry)
4078  {
4079  auto ivar = it.first;
4080  auto jvar = it.second;
4081  auto i = ivar->number();
4082  auto j = jvar->number();
4083  for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
4084  tag < _jacobian_block_nonlocal_used.size();
4085  tag++)
4086  if (jacobianBlockNonlocalUsed(tag, i, j) && _sys.hasMatrix(tag))
4087  cacheJacobianBlockNonzero(jacobianBlockNonlocal(i, j, LocalDataKey{}, tag),
4088  *ivar,
4089  *jvar,
4090  ivar->dofIndices(),
4091  jvar->allDofIndices(),
4092  tag);
4093  }
4094 }
SystemBase & _sys
Definition: Assembly.h:2313
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:1153
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:2294
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2343
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
void cacheJacobianBlockNonzero(const 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:3665
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition: Assembly.h:2340

◆ 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 3179 of file Assembly.h.

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

3184 {
3185  mooseAssert(residuals.size() == row_indices.size(),
3186  "The number of residuals should match the number of dof indices");
3187  mooseAssert(residuals.size() >= 1, "Why you calling me with no residuals?");
3188 
3189  if (!computingJacobian() || matrix_tags.empty())
3190  return;
3191 
3192  for (const auto i : index_range(row_indices))
3193  {
3194  const auto row_index = row_indices[i];
3195 
3196  const auto & sparse_derivatives = residuals[i].derivatives();
3197  const auto & column_indices = sparse_derivatives.nude_indices();
3198  const auto & raw_derivatives = sparse_derivatives.nude_data();
3199 
3200  for (std::size_t j = 0; j < column_indices.size(); ++j)
3201  cacheJacobian(
3202  row_index, column_indices[j], raw_derivatives[j] * scaling_factor, {}, matrix_tags);
3203  }
3204 }
void cacheJacobian(GlobalDataKey)
Takes the values that are currently in _sub_Kee and appends them to the cached values.
Definition: Assembly.C:4045
bool computingJacobian() const
Definition: Assembly.h:1951
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 3392 of file Assembly.C.

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

3393 {
3394  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3395  for (const auto & var : vars)
3396  for (const auto & vector_tag : tags)
3397  if (_sys.hasVector(vector_tag._id))
3398  cacheResidualBlock(_cached_residual_values[vector_tag._type_id],
3399  _cached_residual_rows[vector_tag._type_id],
3400  _sub_Re[vector_tag._type_id][var->number()],
3401  var->dofIndices(),
3402  var->arrayScalingFactor());
3403 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
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:2802
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:925
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2661
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2799
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)
Push a local residual block with proper scaling into cache.
Definition: Assembly.C:3266

◆ 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 3407 of file Assembly.C.

3408 {
3409  const VectorTag & tag = _subproblem.getVectorTag(tag_id);
3410 
3411  _cached_residual_values[tag._type_id].push_back(value);
3412  _cached_residual_rows[tag._type_id].push_back(dof);
3413 }
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:2802
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:2314
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2799
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:162

◆ 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 3417 of file Assembly.C.

3418 {
3419  for (auto & tag : tags)
3420  cacheResidual(dof, value, tag);
3421 }
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:3392

◆ 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 
)
private

Push a local residual block with proper scaling into cache.

Definition at line 3266 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;
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
DenseVector< Number > _tmp_Re
auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction) ...
Definition: Assembly.h:2667
void processLocalResidual(DenseVector< Number > &res_block, std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor)
Appling scaling, constraints to the local residual block and populate the full DoF indices for array ...
Definition: Assembly.C:3221
std::vector< dof_id_type > _temp_dof_indices
Temporary work vector to keep from reallocating it.
Definition: Assembly.h:2822
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 3456 of file Assembly.C.

Referenced by ComputeMortarFunctor::operator()().

3457 {
3458  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3459  for (const auto & var : vars)
3460  for (const auto & vector_tag : tags)
3461  if (_sys.hasVector(vector_tag._id))
3462  cacheResidualBlock(_cached_residual_values[vector_tag._type_id],
3463  _cached_residual_rows[vector_tag._type_id],
3464  _sub_Rl[vector_tag._type_id][var->number()],
3465  var->dofIndicesLower(),
3466  var->arrayScalingFactor());
3467 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
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:2802
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:925
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition: Assembly.h:2664
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2799
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)
Push a local residual block with proper scaling into cache.
Definition: Assembly.C:3266

◆ 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 3442 of file Assembly.C.

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

3443 {
3444  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3445  for (const auto & var : vars)
3446  for (const auto & vector_tag : tags)
3447  if (_sys.hasVector(vector_tag._id))
3448  cacheResidualBlock(_cached_residual_values[vector_tag._type_id],
3449  _cached_residual_rows[vector_tag._type_id],
3450  _sub_Rn[vector_tag._type_id][var->number()],
3451  var->dofIndicesNeighbor(),
3452  var->arrayScalingFactor());
3453 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
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:2802
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:925
char ** vars
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2662
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2799
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)
Push a local residual block with proper scaling into cache.
Definition: Assembly.C:3266

◆ 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 3424 of file Assembly.C.

3428 {
3429  // Add the residual value and dof_index to cached_residual_values and cached_residual_rows
3430  // respectively.
3431  // This is used by NodalConstraint.C to cache the residual calculated for primary and secondary
3432  // node.
3433  const VectorTag & vector_tag = _subproblem.getVectorTag(tag);
3434  for (MooseIndex(dof_index) i = 0; i < dof_index.size(); ++i)
3435  {
3436  _cached_residual_values[vector_tag._type_id].push_back(res(i));
3437  _cached_residual_rows[vector_tag._type_id].push_back(dof_index[i]);
3438  }
3439 }
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:2802
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:2314
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2799
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:162

◆ 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 3059 of file Assembly.h.

Referenced by TaggingInterface::addResiduals().

3064 {
3065  mooseAssert(residuals.size() == input_row_indices.size(),
3066  "The number of residuals should match the number of dof indices");
3067  mooseAssert(residuals.size() >= 1, "Why you calling me with no residuals?");
3068 
3069  if (!computingResidual() || vector_tags.empty())
3070  return;
3071 
3072  if (residuals.size() == 1)
3073  {
3074  // No constraining is required. (This is likely a finite volume computation if we only have a
3075  // single dof)
3077  residuals, input_row_indices, scaling_factor, LocalDataKey{}, vector_tags);
3078  return;
3079  }
3080 
3081  // Need to make a copy because we might modify this in constrain_element_vector
3082  _row_indices.assign(input_row_indices.begin(), input_row_indices.end());
3083 
3085  for (const auto i : index_range(_row_indices))
3086  _element_vector(i) = MetaPhysicL::raw_value(residuals[i]) * scaling_factor;
3087 
3088  // At time of writing, this method doesn't do anything with the asymmetric_constraint_rows
3089  // argument, but we set it to false to be consistent with processLocalResidual
3091  _element_vector, _row_indices, /*asymmetric_constraint_rows=*/false);
3092 
3093  for (const auto i : index_range(_row_indices))
3094  cacheResidual(_row_indices[i], _element_vector(i), vector_tags);
3095 }
void resize(const unsigned int n)
auto raw_value(const Eigen::Map< T > &in)
Definition: EigenADReal.h:100
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:3392
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:1946
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:2899
const libMesh::DofMap & _dof_map
DOF map.
Definition: Assembly.h:2349
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:2889
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:3099

◆ 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 3099 of file Assembly.h.

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

3104 {
3105  mooseAssert(residuals.size() == row_indices.size(),
3106  "The number of residuals should match the number of dof indices");
3107  mooseAssert(residuals.size() >= 1, "Why you calling me with no residuals?");
3108 
3109  if (computingResidual() && !vector_tags.empty())
3110  for (const auto i : index_range(row_indices))
3111  cacheResidual(
3112  row_indices[i], MetaPhysicL::raw_value(residuals[i]) * scaling_factor, vector_tags);
3113 }
auto raw_value(const Eigen::Map< T > &in)
Definition: EigenADReal.h:100
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:3392
bool computingResidual() const
Definition: Assembly.h:1946
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 4507 of file Assembly.C.

Referenced by setCachedJacobian(), and zeroCachedJacobian().

4508 {
4509  for (MooseIndex(_cached_jacobian_rows) tag = 0; tag < _cached_jacobian_rows.size(); tag++)
4510  {
4511  _cached_jacobian_rows[tag].clear();
4512  _cached_jacobian_cols[tag].clear();
4513  _cached_jacobian_values[tag].clear();
4514  }
4515 }
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2809
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2807
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2811

◆ clearCachedQRules()

void Assembly::clearCachedQRules ( )

Set the cached quadrature rules to nullptr.

Definition at line 728 of file Assembly.C.

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

◆ 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 3485 of file Assembly.C.

Referenced by addCachedResidualDirectly().

3486 {
3487  for (const auto & vector_tag : _residual_vector_tags)
3488  clearCachedResiduals(vector_tag);
3489 }
const std::vector< VectorTag > & _residual_vector_tags
The residual vector tags that Assembly could possibly contribute to.
Definition: Assembly.h:2796
void clearCachedResiduals(GlobalDataKey)
Clears all of the residuals in _cached_residual_rows and _cached_residual_values. ...
Definition: Assembly.C:3485

◆ 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 3493 of file Assembly.C.

3494 {
3495  auto & values = _cached_residual_values[vector_tag._type_id];
3496  auto & rows = _cached_residual_rows[vector_tag._type_id];
3497 
3498  mooseAssert(values.size() == rows.size(),
3499  "Number of cached residuals and number of rows must match!");
3500 
3501  // Keep track of the largest size so we can use it to reserve and avoid
3502  // as much dynamic allocation as possible
3503  if (_max_cached_residuals < values.size())
3504  _max_cached_residuals = values.size();
3505 
3506  // Clear both vectors (keeps the capacity the same)
3507  values.clear();
3508  rows.clear();
3509  // And then reserve: use 2 as a fudge factor to *really* avoid dynamic allocation!
3510  values.reserve(_max_cached_residuals * 2);
3511  rows.reserve(_max_cached_residuals * 2);
3512 }
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:2802
unsigned int _max_cached_residuals
Definition: Assembly.h:2804
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:2799
std::array< Real, 2 > values
Definition: MortarUtils.C:52

◆ computeADFace()

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

compute AD things on an element face

Definition at line 2113 of file Assembly.C.

Referenced by reinitElemFaceRef(), and reinitFEFace().

2114 {
2115  const auto dim = elem.dim();
2116 
2117  if (_subproblem.haveADObjects())
2118  {
2119  auto n_qp = _current_qrule_face->n_points();
2120  resizeADMappingObjects(n_qp, dim);
2121  _ad_normals.resize(n_qp);
2122  _ad_JxW_face.resize(n_qp);
2123  if (_calculate_face_xyz)
2124  _ad_q_points_face.resize(n_qp);
2126  _ad_curvatures.resize(n_qp);
2127 
2128  if (_displaced)
2129  {
2130  const auto & qw = _current_qrule_face->get_weights();
2131  computeFaceMap(elem, side, qw);
2132  const std::vector<Real> dummy_qw(n_qp, 1.);
2133 
2134  for (unsigned int qp = 0; qp != n_qp; qp++)
2136  }
2137  else
2138  {
2139  for (unsigned qp = 0; qp < n_qp; ++qp)
2140  {
2141  _ad_JxW_face[qp] = _current_JxW_face[qp];
2142  _ad_normals[qp] = _current_normals[qp];
2143  }
2144  if (_calculate_face_xyz)
2145  for (unsigned qp = 0; qp < n_qp; ++qp)
2148  for (unsigned qp = 0; qp < n_qp; ++qp)
2149  _ad_curvatures[qp] = _curvatures[qp];
2150  }
2151 
2152  for (const auto & it : _fe_face[dim])
2153  {
2154  FEBase & fe = *it.second;
2155  auto fe_type = it.first;
2156  auto num_shapes = FEInterface::n_shape_functions(fe_type, &elem);
2157  auto & grad_phi = _ad_grad_phi_data_face[fe_type];
2158 
2159  grad_phi.resize(num_shapes);
2160  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2161  grad_phi[i].resize(n_qp);
2162 
2163  const auto & regular_grad_phi = _fe_shape_data_face[fe_type]->_grad_phi;
2164 
2165  if (_displaced)
2166  computeGradPhiAD(&elem, n_qp, grad_phi, &fe);
2167  else
2168  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2169  for (unsigned qp = 0; qp < n_qp; ++qp)
2170  grad_phi[i][qp] = regular_grad_phi[i][qp];
2171  }
2172  for (const auto & it : _vector_fe_face[dim])
2173  {
2174  FEVectorBase & fe = *it.second;
2175  auto fe_type = it.first;
2176  auto num_shapes = FEInterface::n_shape_functions(fe_type, &elem);
2177  auto & grad_phi = _ad_vector_grad_phi_data_face[fe_type];
2178 
2179  grad_phi.resize(num_shapes);
2180  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2181  grad_phi[i].resize(n_qp);
2182 
2183  const auto & regular_grad_phi = _vector_fe_shape_data_face[fe_type]->_grad_phi;
2184 
2185  if (_displaced)
2186  computeGradPhiAD(&elem, n_qp, grad_phi, &fe);
2187  else
2188  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2189  for (unsigned qp = 0; qp < n_qp; ++qp)
2190  grad_phi[i][qp] = regular_grad_phi[i][qp];
2191  }
2192  }
2193 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
MooseArray< VectorValue< ADReal > > _ad_normals
Definition: Assembly.h:2848
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2515
MooseArray< Real > _curvatures
Definition: Assembly.h:2850
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data_face
Definition: Assembly.h:2783
virtual void haveADObjects(bool have_ad_objects)
Method for setting whether we have any ad objects.
Definition: SubProblem.h:775
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2529
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:165
void resizeADMappingObjects(unsigned int n_qp, unsigned int dim)
resize any objects that contribute to automatic differentiation-related mapping calculations ...
Definition: Assembly.C:973
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2523
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2775
MooseArray< ADReal > _ad_curvatures
Definition: Assembly.h:2851
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:2314
bool _calculate_curvatures
Definition: Assembly.h:2860
unsigned int n_points() const
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2517
const bool _displaced
Definition: Assembly.h:2316
bool _calculate_face_xyz
Definition: Assembly.h:2859
MooseArray< Point > _current_normals
The current Normal vectors at the quadrature points.
Definition: Assembly.h:2531
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition: Assembly.h:2849
virtual unsigned short dim() const=0
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2767
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2519
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:1003
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data_face
Definition: Assembly.h:2785
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:446
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2527
MooseArray< ADReal > _ad_JxW_face
Definition: Assembly.h:2847
void computeFaceMap(const Elem &elem, const unsigned int side, const std::vector< Real > &qw)
Definition: Assembly.C:1350

◆ computeCurrentElemVolume()

void Assembly::computeCurrentElemVolume ( )
private

Definition at line 1756 of file Assembly.C.

1757 {
1759  return;
1760 
1763  if (_calculate_ad_coord)
1766 
1767  _current_elem_volume = 0.;
1768  for (unsigned int qp = 0; qp < _current_qrule->n_points(); qp++)
1770 
1772 }
MooseArray< ADReal > _ad_coord
The AD version of the current coordinate transformation coefficients.
Definition: Assembly.h:2427
MooseArray< Real > _coord
The current coordinate transformation coefficients.
Definition: Assembly.h:2425
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
Definition: Assembly.h:2627
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2597
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
Definition: Assembly.C:1733
Real _current_elem_volume
Volume of the current element.
Definition: Assembly.h:2603
MooseArray< Real > _current_JxW
The current list of transformed jacobian weights.
Definition: Assembly.h:2421
unsigned int n_points() const
bool _calculate_ad_coord
Whether to calculate coord with AD.
Definition: Assembly.h:2864
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2411
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2836
subdomain_id_type subdomain_id() const
MooseArray< Point > _current_q_points
The current list of quadrature points.
Definition: Assembly.h:2419

◆ computeCurrentFaceVolume()

void Assembly::computeCurrentFaceVolume ( )
private

Definition at line 1775 of file Assembly.C.

1776 {
1778  return;
1779 
1782  if (_calculate_ad_coord)
1785 
1786  _current_side_volume = 0.;
1787  for (unsigned int qp = 0; qp < _current_qrule_face->n_points(); qp++)
1789 
1791 }
MooseArray< ADReal > _ad_coord
The AD version of the current coordinate transformation coefficients.
Definition: Assembly.h:2427
MooseArray< Real > _coord
The current coordinate transformation coefficients.
Definition: Assembly.h:2425
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2529
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2597
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
Definition: Assembly.C:1733
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2523
unsigned int n_points() const
bool _calculate_ad_coord
Whether to calculate coord with AD.
Definition: Assembly.h:2864
Real _current_side_volume
Volume of the current side element.
Definition: Assembly.h:2609
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition: Assembly.h:2849
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:2629
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2527

◆ 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 1350 of file Assembly.C.

Referenced by computeADFace().

1351 {
1352  // Important quantities calculated by this method:
1353  // - _ad_JxW_face
1354  // - _ad_q_points_face
1355  // - _ad_normals
1356  // - _ad_curvatures
1357 
1358  const Elem & side_elem = _compute_face_map_side_elem_builder(elem, side);
1359  const auto dim = elem.dim();
1360  const auto n_qp = qw.size();
1361  const auto & dpsidxi_map = _holder_fe_face_helper[dim]->get_fe_map().get_dpsidxi();
1362  const auto & dpsideta_map = _holder_fe_face_helper[dim]->get_fe_map().get_dpsideta();
1363  const auto & psi_map = _holder_fe_face_helper[dim]->get_fe_map().get_psi();
1364  std::vector<std::vector<Real>> const * d2psidxi2_map = nullptr;
1365  std::vector<std::vector<Real>> const * d2psidxideta_map = nullptr;
1366  std::vector<std::vector<Real>> const * d2psideta2_map = nullptr;
1367  const auto sys_num = _sys.number();
1368  const bool do_derivatives = ADReal::do_derivatives && sys_num == _subproblem.currentNlSysNum();
1369 
1371  {
1372  d2psidxi2_map = &_holder_fe_face_helper[dim]->get_fe_map().get_d2psidxi2();
1373  d2psidxideta_map = &_holder_fe_face_helper[dim]->get_fe_map().get_d2psidxideta();
1374  d2psideta2_map = &_holder_fe_face_helper[dim]->get_fe_map().get_d2psideta2();
1375  }
1376 
1377  switch (dim)
1378  {
1379  case 1:
1380  {
1381  if (!n_qp)
1382  break;
1383 
1384  if (side_elem.node_id(0) == elem.node_id(0))
1385  _ad_normals[0] = Point(-1.);
1386  else
1387  _ad_normals[0] = Point(1.);
1388 
1389  VectorValue<ADReal> side_point;
1390  if (_calculate_face_xyz)
1391  {
1392  const Node & node = side_elem.node_ref(0);
1393  side_point = node;
1394 
1395  if (do_derivatives)
1396  for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1398  side_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1399  }
1400 
1401  for (const auto p : make_range(n_qp))
1402  {
1403  if (_calculate_face_xyz)
1404  {
1405  _ad_q_points_face[p].zero();
1406  _ad_q_points_face[p].add_scaled(side_point, psi_map[0][p]);
1407  }
1408 
1409  _ad_normals[p] = _ad_normals[0];
1410  _ad_JxW_face[p] = 1.0 * qw[p];
1411  }
1412 
1413  break;
1414  }
1415 
1416  case 2:
1417  {
1418  _ad_dxyzdxi_map.resize(n_qp);
1420  _ad_d2xyzdxi2_map.resize(n_qp);
1421 
1422  for (const auto p : make_range(n_qp))
1423  _ad_dxyzdxi_map[p].zero();
1424  if (_calculate_face_xyz)
1425  for (const auto p : make_range(n_qp))
1426  _ad_q_points_face[p].zero();
1428  for (const auto p : make_range(n_qp))
1429  _ad_d2xyzdxi2_map[p].zero();
1430 
1431  const auto n_mapping_shape_functions =
1432  FE<2, LAGRANGE>::n_dofs(&side_elem, side_elem.default_order());
1433 
1434  for (unsigned int i = 0; i < n_mapping_shape_functions; i++)
1435  {
1436  const Node & node = side_elem.node_ref(i);
1437  VectorValue<ADReal> side_point = node;
1438 
1439  if (do_derivatives)
1440  for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1442  side_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1443 
1444  for (const auto p : make_range(n_qp))
1445  _ad_dxyzdxi_map[p].add_scaled(side_point, dpsidxi_map[i][p]);
1446  if (_calculate_face_xyz)
1447  for (const auto p : make_range(n_qp))
1448  _ad_q_points_face[p].add_scaled(side_point, psi_map[i][p]);
1450  for (const auto p : make_range(n_qp))
1451  _ad_d2xyzdxi2_map[p].add_scaled(side_point, (*d2psidxi2_map)[i][p]);
1452  }
1453 
1454  for (const auto p : make_range(n_qp))
1455  {
1456  _ad_normals[p] =
1457  (VectorValue<ADReal>(_ad_dxyzdxi_map[p](1), -_ad_dxyzdxi_map[p](0), 0.)).unit();
1458  const auto the_jac = _ad_dxyzdxi_map[p].norm();
1459  _ad_JxW_face[p] = the_jac * qw[p];
1461  {
1462  const auto numerator = _ad_d2xyzdxi2_map[p] * _ad_normals[p];
1463  const auto denominator = _ad_dxyzdxi_map[p].norm_sq();
1464  libmesh_assert_not_equal_to(denominator, 0);
1465  _ad_curvatures[p] = numerator / denominator;
1466  }
1467  }
1468 
1469  break;
1470  }
1471 
1472  case 3:
1473  {
1474  _ad_dxyzdxi_map.resize(n_qp);
1475  _ad_dxyzdeta_map.resize(n_qp);
1477  {
1478  _ad_d2xyzdxi2_map.resize(n_qp);
1479  _ad_d2xyzdxideta_map.resize(n_qp);
1480  _ad_d2xyzdeta2_map.resize(n_qp);
1481  }
1482 
1483  for (const auto p : make_range(n_qp))
1484  {
1485  _ad_dxyzdxi_map[p].zero();
1486  _ad_dxyzdeta_map[p].zero();
1487  }
1488  if (_calculate_face_xyz)
1489  for (const auto p : make_range(n_qp))
1490  _ad_q_points_face[p].zero();
1492  for (const auto p : make_range(n_qp))
1493  {
1494  _ad_d2xyzdxi2_map[p].zero();
1495  _ad_d2xyzdxideta_map[p].zero();
1496  _ad_d2xyzdeta2_map[p].zero();
1497  }
1498 
1499  const unsigned int n_mapping_shape_functions =
1500  FE<3, LAGRANGE>::n_dofs(&side_elem, side_elem.default_order());
1501 
1502  for (unsigned int i = 0; i < n_mapping_shape_functions; i++)
1503  {
1504  const Node & node = side_elem.node_ref(i);
1505  VectorValue<ADReal> side_point = node;
1506 
1507  if (do_derivatives)
1508  for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1510  side_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1511 
1512  for (const auto p : make_range(n_qp))
1513  {
1514  _ad_dxyzdxi_map[p].add_scaled(side_point, dpsidxi_map[i][p]);
1515  _ad_dxyzdeta_map[p].add_scaled(side_point, dpsideta_map[i][p]);
1516  }
1517  if (_calculate_face_xyz)
1518  for (const auto p : make_range(n_qp))
1519  _ad_q_points_face[p].add_scaled(side_point, psi_map[i][p]);
1521  for (const auto p : make_range(n_qp))
1522  {
1523  _ad_d2xyzdxi2_map[p].add_scaled(side_point, (*d2psidxi2_map)[i][p]);
1524  _ad_d2xyzdxideta_map[p].add_scaled(side_point, (*d2psidxideta_map)[i][p]);
1525  _ad_d2xyzdeta2_map[p].add_scaled(side_point, (*d2psideta2_map)[i][p]);
1526  }
1527  }
1528 
1529  for (const auto p : make_range(n_qp))
1530  {
1531  _ad_normals[p] = _ad_dxyzdxi_map[p].cross(_ad_dxyzdeta_map[p]).unit();
1532 
1533  const auto &dxdxi = _ad_dxyzdxi_map[p](0), &dxdeta = _ad_dxyzdeta_map[p](0),
1534  &dydxi = _ad_dxyzdxi_map[p](1), &dydeta = _ad_dxyzdeta_map[p](1),
1535  &dzdxi = _ad_dxyzdxi_map[p](2), &dzdeta = _ad_dxyzdeta_map[p](2);
1536 
1537  const auto g11 = (dxdxi * dxdxi + dydxi * dydxi + dzdxi * dzdxi);
1538 
1539  const auto g12 = (dxdxi * dxdeta + dydxi * dydeta + dzdxi * dzdeta);
1540 
1541  const auto & g21 = g12;
1542 
1543  const auto g22 = (dxdeta * dxdeta + dydeta * dydeta + dzdeta * dzdeta);
1544 
1545  using std::sqrt;
1546  const auto the_jac = sqrt(g11 * g22 - g12 * g21);
1547 
1548  _ad_JxW_face[p] = the_jac * qw[p];
1549 
1551  {
1552  const auto L = -_ad_d2xyzdxi2_map[p] * _ad_normals[p];
1553  const auto M = -_ad_d2xyzdxideta_map[p] * _ad_normals[p];
1554  const auto N = -_ad_d2xyzdeta2_map[p] * _ad_normals[p];
1555  const auto E = _ad_dxyzdxi_map[p].norm_sq();
1556  const auto F = _ad_dxyzdxi_map[p] * _ad_dxyzdeta_map[p];
1557  const auto G = _ad_dxyzdeta_map[p].norm_sq();
1558 
1559  const auto numerator = E * N - 2. * F * M + G * L;
1560  const auto denominator = E * G - F * F;
1561  libmesh_assert_not_equal_to(denominator, 0.);
1562  _ad_curvatures[p] = 0.5 * numerator / denominator;
1563  }
1564  }
1565 
1566  break;
1567  }
1568 
1569  default:
1570  mooseError("Invalid dimension dim = ", dim);
1571  }
1572 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
MooseArray< VectorValue< ADReal > > _ad_normals
Definition: Assembly.h:2848
libMesh::ElemSideBuilder _compute_face_map_side_elem_builder
In place side element builder for computeFaceMap()
Definition: Assembly.h:2882
SystemBase & _sys
Definition: Assembly.h:2313
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:311
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:165
std::vector< VectorValue< ADReal > > _ad_dxyzdeta_map
Definition: Assembly.h:2829
MooseArray< ADReal > _ad_curvatures
Definition: Assembly.h:2851
const Node & node_ref(const unsigned int i) const
SubProblem & _subproblem
Definition: Assembly.h:2314
bool _calculate_curvatures
Definition: Assembly.h:2860
std::vector< VectorValue< ADReal > > _ad_dxyzdxi_map
AD quantities.
Definition: Assembly.h:2828
std::vector< std::pair< unsigned int, unsigned short > > _disp_numbers_and_directions
Container of displacement numbers and directions.
Definition: Assembly.h:2856
std::vector< VectorValue< ADReal > > _ad_d2xyzdxi2_map
Definition: Assembly.h:2831
unsigned int number() const
Gets the number of this system.
Definition: SystemBase.C:1158
bool _calculate_face_xyz
Definition: Assembly.h:2859
std::vector< VectorValue< ADReal > > _ad_d2xyzdxideta_map
Definition: Assembly.h:2832
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition: Assembly.h:2849
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:2519
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:446
const Node *const & node() const
Returns the reference to the node.
Definition: Assembly.h:545
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:2833
MooseArray< ADReal > _ad_JxW_face
Definition: Assembly.h:2847

◆ 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 893 of file Assembly.C.

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

Referenced by computeADFace(), and reinitFE().

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

◆ computingJacobian()

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

Definition at line 1951 of file Assembly.h.

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

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

◆ computingResidual()

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

Definition at line 1946 of file Assembly.h.

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

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

◆ computingResidualAndJacobian()

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

Definition at line 1956 of file Assembly.h.

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

◆ 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 120 of file Assembly.h.

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

121  {
122  const T * const * ptr = &inref;
123  return *ptr;
124  }

◆ coordSystem()

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

Get the coordinate system type.

Returns
A reference to the coordinate system type

Definition at line 316 of file Assembly.h.

316 { return _coord_type; }
Moose::CoordinateSystemType _coord_type
The coordinate system.
Definition: Assembly.h:2423

◆ 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 288 of file Assembly.h.

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

◆ copyFaceShapes() [1/2]

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

Definition at line 3040 of file Assembly.C.

Referenced by copyFaceShapes().

3041 {
3042  phiFace(v).shallowCopy(v.phiFace());
3043  gradPhiFace(v).shallowCopy(v.gradPhiFace());
3044  if (v.computingSecond())
3045  secondPhiFace(v).shallowCopy(v.secondPhiFace());
3046 }
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:1342
virtual bool computingSecond() const =0
Whether or not this variable is computing any second derivatives.
const VariablePhiValue & phiFace() const
Definition: Assembly.h:1335
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:1337

◆ copyFaceShapes() [2/2]

void Assembly::copyFaceShapes ( unsigned int  var)

Definition at line 3049 of file Assembly.C.

3050 {
3051  auto & v = _sys.getVariable(_tid, var);
3052  if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_STANDARD)
3053  {
3054  auto & v = _sys.getActualFieldVariable<Real>(_tid, var);
3055  copyFaceShapes(v);
3056  }
3057  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY)
3058  {
3059  auto & v = _sys.getActualFieldVariable<RealEigenVector>(_tid, var);
3060  copyFaceShapes(v);
3061  }
3062  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3063  {
3064  auto & v = _sys.getActualFieldVariable<RealVectorValue>(_tid, var);
3065  copyFaceShapes(v);
3066  if (v.computingCurl())
3067  _vector_curl_phi_face.shallowCopy(v.curlPhi());
3068  if (v.computingDiv())
3069  _vector_div_phi_face.shallowCopy(v.divPhi());
3070  }
3071  else
3072  mooseError("Unsupported variable field type!");
3073 }
SystemBase & _sys
Definition: Assembly.h:2313
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:311
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
VectorVariablePhiDivergence _vector_div_phi_face
Definition: Assembly.h:2731
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void copyFaceShapes(MooseVariableField< T > &v)
Definition: Assembly.C:3040
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
Definition: MooseTypes.h:147
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:91
VectorVariablePhiCurl _vector_curl_phi_face
Definition: Assembly.h:2730
MooseVariableField< T > & getActualFieldVariable(THREAD_ID tid, const std::string &var_name)
Returns a field variable pointer - this includes finite volume variables.
Definition: SystemBase.C:119

◆ copyNeighborShapes() [1/2]

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

Definition at line 3077 of file Assembly.C.

Referenced by copyNeighborShapes().

3078 {
3079  if (v.usesPhiNeighbor())
3080  {
3081  phiFaceNeighbor(v).shallowCopy(v.phiFaceNeighbor());
3082  phiNeighbor(v).shallowCopy(v.phiNeighbor());
3083  }
3084  if (v.usesGradPhiNeighbor())
3085  {
3086  gradPhiFaceNeighbor(v).shallowCopy(v.gradPhiFaceNeighbor());
3087  gradPhiNeighbor(v).shallowCopy(v.gradPhiNeighbor());
3088  }
3089  if (v.usesSecondPhiNeighbor())
3090  {
3091  secondPhiFaceNeighbor(v).shallowCopy(v.secondPhiFaceNeighbor());
3092  secondPhiNeighbor(v).shallowCopy(v.secondPhiNeighbor());
3093  }
3094 }
const VariablePhiGradient & gradPhiFaceNeighbor(const MooseVariableField< Real > &) const
Definition: Assembly.h:1364
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:1355
const VariablePhiValue & phiFaceNeighbor(const MooseVariableField< Real > &) const
Definition: Assembly.h:1360
const VariablePhiValue & phiNeighbor(const MooseVariableField< Real > &) const
Definition: Assembly.h:1347
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:1351
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:1368

◆ copyNeighborShapes() [2/2]

void Assembly::copyNeighborShapes ( unsigned int  var)

Definition at line 3097 of file Assembly.C.

3098 {
3099  auto & v = _sys.getVariable(_tid, var);
3100  if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_STANDARD)
3101  {
3102  auto & v = _sys.getActualFieldVariable<Real>(_tid, var);
3103  copyNeighborShapes(v);
3104  }
3105  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY)
3106  {
3107  auto & v = _sys.getActualFieldVariable<RealEigenVector>(_tid, var);
3108  copyNeighborShapes(v);
3109  }
3110  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3111  {
3112  auto & v = _sys.getActualFieldVariable<RealVectorValue>(_tid, var);
3113  copyNeighborShapes(v);
3114  }
3115  else
3116  mooseError("Unsupported variable field type!");
3117 }
SystemBase & _sys
Definition: Assembly.h:2313
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:311
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
Definition: MooseTypes.h:147
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:91
void copyNeighborShapes(MooseVariableField< T > &v)
Definition: Assembly.C:3077
MooseVariableField< T > & getActualFieldVariable(THREAD_ID tid, const std::string &var_name)
Returns a field variable pointer - this includes finite volume variables.
Definition: SystemBase.C:119

◆ copyShapes() [1/2]

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

Definition at line 3003 of file Assembly.C.

Referenced by copyShapes().

3004 {
3005  phi(v).shallowCopy(v.phi());
3006  gradPhi(v).shallowCopy(v.gradPhi());
3007  if (v.computingSecond())
3008  secondPhi(v).shallowCopy(v.secondPhi());
3009 }
virtual const FieldVariablePhiValue & phi() const =0
Return the variable&#39;s elemental shape functions.
const VariablePhiSecond & secondPhi() const
Definition: Assembly.h:1329
const VariablePhiValue & phi() const
Definition: Assembly.h:1320
const VariablePhiGradient & gradPhi() const
Definition: Assembly.h:1327
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 3012 of file Assembly.C.

3013 {
3014  auto & v = _sys.getVariable(_tid, var);
3015  if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_STANDARD)
3016  {
3017  auto & v = _sys.getActualFieldVariable<Real>(_tid, var);
3018  copyShapes(v);
3019  }
3020  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY)
3021  {
3022  auto & v = _sys.getActualFieldVariable<RealEigenVector>(_tid, var);
3023  copyShapes(v);
3024  }
3025  else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3026  {
3027  auto & v = _sys.getActualFieldVariable<RealVectorValue>(_tid, var);
3028  copyShapes(v);
3029  if (v.computingCurl())
3030  curlPhi(v).shallowCopy(v.curlPhi());
3031  if (v.computingDiv())
3032  divPhi(v).shallowCopy(v.divPhi());
3033  }
3034  else
3035  mooseError("Unsupported variable field type!");
3036 }
void copyShapes(MooseVariableField< T > &v)
Definition: Assembly.C:3003
SystemBase & _sys
Definition: Assembly.h:2313
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:311
const VectorVariablePhiDivergence & divPhi(const MooseVariableField< RealVectorValue > &) const
Definition: Assembly.h:1389
const VectorVariablePhiCurl & curlPhi(const MooseVariableField< RealVectorValue > &) const
Definition: Assembly.h:1385
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
Definition: MooseTypes.h:147
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:91
MooseVariableField< T > & getActualFieldVariable(THREAD_ID tid, const std::string &var_name)
Returns a field variable pointer - this includes finite volume variables.
Definition: SystemBase.C:119

◆ couplingEntries() [1/2]

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

Definition at line 1294 of file Assembly.h.

Referenced by MortarConstraint::computeJacobian().

1295  {
1296  return _cm_ff_entry;
1297  }
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332

◆ couplingEntries() [2/2]

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

Definition at line 1299 of file Assembly.h.

1300  {
1301  return _cm_ff_entry;
1302  }
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332

◆ 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 619 of file Assembly.C.

Referenced by bumpAllQRuleOrder(), and bumpVolumeQRuleOrder().

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

◆ curlPhi() [1/2]

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

Definition at line 1385 of file Assembly.h.

Referenced by copyShapes().

1386  {
1387  return _vector_curl_phi;
1388  }
VectorVariablePhiCurl _vector_curl_phi
Definition: Assembly.h:2724

◆ curlPhi() [2/2]

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

Definition at line 1506 of file Assembly.h.

1507  {
1508  return _vector_curl_phi;
1509  }
VectorVariablePhiCurl _vector_curl_phi
Definition: Assembly.h:2724

◆ curlPhiFace() [1/2]

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

Definition at line 1406 of file Assembly.h.

1407  {
1408  return _vector_curl_phi_face;
1409  }
VectorVariablePhiCurl _vector_curl_phi_face
Definition: Assembly.h:2730

◆ curlPhiFace() [2/2]

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

Definition at line 1527 of file Assembly.h.

1528  {
1529  return _vector_curl_phi_face;
1530  }
VectorVariablePhiCurl _vector_curl_phi_face
Definition: Assembly.h:2730

◆ curlPhiFaceNeighbor() [1/2]

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

Definition at line 1454 of file Assembly.h.

1455  {
1457  }
VectorVariablePhiCurl _vector_curl_phi_face_neighbor
Definition: Assembly.h:2742

◆ curlPhiFaceNeighbor() [2/2]

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

Definition at line 1568 of file Assembly.h.

1569  {
1571  }
VectorVariablePhiCurl _vector_curl_phi_face_neighbor
Definition: Assembly.h:2742

◆ curlPhiNeighbor() [1/2]

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

Definition at line 1429 of file Assembly.h.

1430  {
1432  }
VectorVariablePhiCurl _vector_curl_phi_neighbor
Definition: Assembly.h:2736

◆ curlPhiNeighbor() [2/2]

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

Definition at line 1548 of file Assembly.h.

1549  {
1551  }
VectorVariablePhiCurl _vector_curl_phi_neighbor
Definition: Assembly.h:2736

◆ currentBoundaryID()

const BoundaryID& Assembly::currentBoundaryID ( ) const
inline

Return the current boundary ID.

Definition at line 429 of file Assembly.h.

429 { return _current_boundary_id; }
BoundaryID _current_boundary_id
The current boundary ID.
Definition: Assembly.h:2601

◆ currentNeighborSubdomainID()

const SubdomainID& Assembly::currentNeighborSubdomainID ( ) const
inline

Return the current subdomain ID.

Definition at line 497 of file Assembly.h.

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

◆ currentSubdomainID()

const SubdomainID& Assembly::currentSubdomainID ( ) const
inline

Return the current subdomain ID.

Definition at line 419 of file Assembly.h.

419 { return _current_subdomain_id; }
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition: Assembly.h:2599

◆ divPhi() [1/2]

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

Definition at line 1389 of file Assembly.h.

Referenced by copyShapes().

1390  {
1391  return _vector_div_phi;
1392  }
VectorVariablePhiDivergence _vector_div_phi
Definition: Assembly.h:2725

◆ divPhi() [2/2]

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

Definition at line 1510 of file Assembly.h.

1511  {
1512  return _vector_div_phi;
1513  }
VectorVariablePhiDivergence _vector_div_phi
Definition: Assembly.h:2725

◆ divPhiFace() [1/2]

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

Definition at line 1410 of file Assembly.h.

1411  {
1412  return _vector_div_phi_face;
1413  }
VectorVariablePhiDivergence _vector_div_phi_face
Definition: Assembly.h:2731

◆ divPhiFace() [2/2]

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

Definition at line 1531 of file Assembly.h.

1532  {
1533  return _vector_div_phi_face;
1534  }
VectorVariablePhiDivergence _vector_div_phi_face
Definition: Assembly.h:2731

◆ divPhiFaceNeighbor() [1/2]

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

Definition at line 1459 of file Assembly.h.

1460  {
1462  }
VectorVariablePhiDivergence _vector_div_phi_face_neighbor
Definition: Assembly.h:2743

◆ divPhiFaceNeighbor() [2/2]

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

Definition at line 1572 of file Assembly.h.

1573  {
1575  }
VectorVariablePhiDivergence _vector_div_phi_face_neighbor
Definition: Assembly.h:2743

◆ divPhiNeighbor() [1/2]

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

Definition at line 1434 of file Assembly.h.

1435  {
1436  return _vector_div_phi_neighbor;
1437  }
VectorVariablePhiDivergence _vector_div_phi_neighbor
Definition: Assembly.h:2737

◆ divPhiNeighbor() [2/2]

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

Definition at line 1552 of file Assembly.h.

1553  {
1554  return _vector_div_phi_neighbor;
1555  }
VectorVariablePhiDivergence _vector_div_phi_neighbor
Definition: Assembly.h:2737

◆ 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 3757 of file Assembly.C.

Referenced by reinitLowerDElem(), and reinitNeighborLowerDElem().

3758 {
3759  FEType fe_type(elem->default_order(), LAGRANGE);
3760  std::unique_ptr<FEBase> fe(FEBase::build(elem->dim(), fe_type));
3761 
3762  // references to the quadrature points and weights
3763  const std::vector<Real> & JxW = fe->get_JxW();
3764  const std::vector<Point> & q_points = fe->get_xyz();
3765 
3766  // The default quadrature rule should integrate the mass matrix,
3767  // thus it should be plenty to compute the volume
3768  QGauss qrule(elem->dim(), fe_type.default_quadrature_order());
3769  fe->attach_quadrature_rule(&qrule);
3770  fe->reinit(elem);
3771 
3772  // perform a sanity check to ensure that size of quad rule and size of q_points is
3773  // identical
3774  mooseAssert(qrule.n_points() == q_points.size(),
3775  "The number of points in the quadrature rule doesn't match the number of passed-in "
3776  "points in Assembly::setCoordinateTransformation");
3777 
3778  // compute the coordinate transformation
3779  Real vol = 0;
3780  for (unsigned int qp = 0; qp < qrule.n_points(); ++qp)
3781  {
3782  Real coord;
3783  coordTransformFactor(_subproblem, elem->subdomain_id(), q_points[qp], coord);
3784  vol += JxW[qp] * coord;
3785  }
3786  return vol;
3787 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
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:43
SubProblem & _subproblem
Definition: Assembly.h:2314
const MooseArray< Real > & JxW() const
Returns the reference to the transformed jacobian weights.
Definition: Assembly.h:276
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 440 of file Assembly.h.

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

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

◆ 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 378 of file Assembly.h.

379  {
380  mooseAssert(id < _extra_elem_ids.size(), "An invalid extra element integer id");
381  return _extra_elem_ids[id];
382  }
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition: Assembly.h:2538

◆ 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 387 of file Assembly.h.

388  {
389  mooseAssert(id < _neighbor_extra_elem_ids.size(), "An invalid extra element integer id");
390  return _neighbor_extra_elem_ids[id];
391  }
std::vector< dof_id_type > _neighbor_extra_elem_ids
Extra element IDs of neighbor.
Definition: Assembly.h:2540

◆ feADGradPhi() [1/2]

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

Definition at line 1633 of file Assembly.h.

1634  {
1635  return _ad_grad_phi_data[type];
1636  }
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data
Definition: Assembly.h:2781

◆ feADGradPhi() [2/2]

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

Definition at line 2942 of file Assembly.h.

2943 {
2944  return _ad_vector_grad_phi_data[type];
2945 }
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
Definition: Assembly.h:2782

◆ feADGradPhiFace() [1/2]

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

Definition at line 1674 of file Assembly.h.

1675  {
1676  return _ad_grad_phi_data_face[type];
1677  }
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data_face
Definition: Assembly.h:2783

◆ feADGradPhiFace() [2/2]

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

Definition at line 2949 of file Assembly.h.

2950 {
2951  return _ad_vector_grad_phi_data_face[type];
2952 }
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data_face
Definition: Assembly.h:2785

◆ feCurlPhi() [1/3]

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

Definition at line 1734 of file Assembly.h.

1735  {
1736  _need_curl.insert(type);
1737  buildFE(type);
1738  return _fe_shape_data[type]->_curl_phi;
1739  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:268
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2766
std::set< FEType > _need_curl
Definition: Assembly.h:2868

◆ 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 4714 of file Assembly.C.

4715 {
4716  _need_curl.insert(type);
4717  buildVectorFE(type);
4718  return _vector_fe_shape_data[type]->_curl_phi;
4719 }
std::set< FEType > _need_curl
Definition: Assembly.h:2868
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:455
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:2774

◆ feCurlPhiFace() [1/3]

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

Definition at line 1742 of file Assembly.h.

1743  {
1744  _need_curl.insert(type);
1745  buildFaceFE(type);
1746  return _fe_shape_data_face[type]->_curl_phi;
1747  }
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:294
std::set< FEType > _need_curl
Definition: Assembly.h:2868
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2767

◆ 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 4723 of file Assembly.C.

4724 {
4725  _need_curl.insert(type);
4726  buildVectorFaceFE(type);
4727 
4728  // If we're building for a face we probably need to build for a
4729  // neighbor while _need_curl is set;
4730  // onInterface/reinitNeighbor/etc don't distinguish
4732 
4733  return _vector_fe_shape_data_face[type]->_curl_phi;
4734 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2775
std::set< FEType > _need_curl
Definition: Assembly.h:2868
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:486
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:546

◆ feCurlPhiFaceNeighbor() [1/3]

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

Definition at line 1758 of file Assembly.h.

1759  {
1760  _need_curl.insert(type);
1761  buildFaceNeighborFE(type);
1762  return _fe_shape_data_face_neighbor[type]->_curl_phi;
1763  }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2769
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:338
std::set< FEType > _need_curl
Definition: Assembly.h:2868

◆ 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 4747 of file Assembly.C.

4748 {
4749  _need_curl.insert(type);
4751 
4752  return _vector_fe_shape_data_face_neighbor[type]->_curl_phi;
4753 }
std::set< FEType > _need_curl
Definition: Assembly.h:2868
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2777
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:546

◆ feCurlPhiNeighbor() [1/3]

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

Definition at line 1750 of file Assembly.h.

1751  {
1752  _need_curl.insert(type);
1753  buildNeighborFE(type);
1754  return _fe_shape_data_neighbor[type]->_curl_phi;
1755  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:316
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2768
std::set< FEType > _need_curl
Definition: Assembly.h:2868

◆ 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 4738 of file Assembly.C.

4739 {
4740  _need_curl.insert(type);
4741  buildVectorNeighborFE(type);
4742  return _vector_fe_shape_data_neighbor[type]->_curl_phi;
4743 }
std::set< FEType > _need_curl
Definition: Assembly.h:2868
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:516
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2776

◆ feDivPhi() [1/3]

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

Definition at line 1766 of file Assembly.h.

1767  {
1768  buildFE(type);
1769  return _fe_shape_data[type]->_div_phi;
1770  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:268
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2766

◆ 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 4757 of file Assembly.C.

4758 {
4759  _need_div.insert(type);
4760  buildVectorFE(type);
4761  return _vector_fe_shape_data[type]->_div_phi;
4762 }
std::set< FEType > _need_div
Definition: Assembly.h:2869
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:455
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:2774

◆ feDivPhiFace() [1/3]

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

Definition at line 1773 of file Assembly.h.

1774  {
1775  buildFaceFE(type);
1776  return _fe_shape_data_face[type]->_div_phi;
1777  }
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:294
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2767

◆ 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 4766 of file Assembly.C.

4767 {
4768  _need_face_div.insert(type);
4769  buildVectorFaceFE(type);
4770 
4771  // If we're building for a face we probably need to build for a
4772  // neighbor while _need_face_div is set;
4773  // onInterface/reinitNeighbor/etc don't distinguish
4775 
4776  return _vector_fe_shape_data_face[type]->_div_phi;
4777 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2775
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:486
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:546
std::set< FEType > _need_face_div
Definition: Assembly.h:2870

◆ feDivPhiFaceNeighbor() [1/3]

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

Definition at line 1789 of file Assembly.h.

1790  {
1791  buildFaceNeighborFE(type);
1792  return _fe_shape_data_face_neighbor[type]->_div_phi;
1793  }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2769
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:338

◆ 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 4790 of file Assembly.C.

4791 {
4792  _need_face_neighbor_div.insert(type);
4794  return _vector_fe_shape_data_face_neighbor[type]->_div_phi;
4795 }
std::set< FEType > _need_face_neighbor_div
Definition: Assembly.h:2872
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2777
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:546

◆ feDivPhiNeighbor() [1/3]

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

Definition at line 1781 of file Assembly.h.

1782  {
1783  buildNeighborFE(type);
1784  return _fe_shape_data_neighbor[type]->_div_phi;
1785  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:316
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2768

◆ 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 4781 of file Assembly.C.

4782 {
4783  _need_neighbor_div.insert(type);
4784  buildVectorNeighborFE(type);
4785  return _vector_fe_shape_data_neighbor[type]->_div_phi;
4786 }
std::set< FEType > _need_neighbor_div
Definition: Assembly.h:2871
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:516
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2776

◆ feDualPhiLower() [1/3]

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

Definition at line 2918 of file Assembly.h.

2919 {
2920  buildLowerDDualFE(type);
2921  return _fe_shape_data_dual_lower[type]->_phi;
2922 }
void buildLowerDDualFE(FEType type) const
Definition: Assembly.C:384
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
Definition: Assembly.h:2771

◆ 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 4609 of file Assembly.C.

4610 {
4612  return _vector_fe_shape_data_dual_lower[type]->_phi;
4613 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_dual_lower
Definition: Assembly.h:2779
void buildVectorDualLowerDFE(FEType type) const
Definition: Assembly.C:430

◆ feGradDualPhiLower() [1/3]

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

Definition at line 2934 of file Assembly.h.

2935 {
2936  buildLowerDDualFE(type);
2937  return _fe_shape_data_dual_lower[type]->_grad_phi;
2938 }
void buildLowerDDualFE(FEType type) const
Definition: Assembly.C:384
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
Definition: Assembly.h:2771

◆ 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 4625 of file Assembly.C.

4626 {
4628  return _vector_fe_shape_data_dual_lower[type]->_grad_phi;
4629 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_dual_lower
Definition: Assembly.h:2779
void buildVectorDualLowerDFE(FEType type) const
Definition: Assembly.C:430

◆ feGradPhi() [1/3]

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

Definition at line 1626 of file Assembly.h.

1627  {
1628  buildFE(type);
1629  return _fe_shape_data[type]->_grad_phi;
1630  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:268
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2766

◆ 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 4584 of file Assembly.C.

4585 {
4586  buildVectorFE(type);
4587  return _vector_fe_shape_data[type]->_grad_phi;
4588 }
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:455
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:2774

◆ feGradPhiFace() [1/3]

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

Definition at line 1667 of file Assembly.h.

1668  {
1669  buildFaceFE(type);
1670  return _fe_shape_data_face[type]->_grad_phi;
1671  }
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:294
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2767

◆ 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 4641 of file Assembly.C.

4642 {
4643  buildVectorFaceFE(type);
4644  return _vector_fe_shape_data_face[type]->_grad_phi;
4645 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2775
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:486

◆ feGradPhiFaceNeighbor() [1/3]

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

Definition at line 1718 of file Assembly.h.

1719  {
1720  buildFaceNeighborFE(type);
1721  return _fe_shape_data_face_neighbor[type]->_grad_phi;
1722  }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2769
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:338

◆ 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 4697 of file Assembly.C.

4698 {
4700  return _vector_fe_shape_data_face_neighbor[type]->_grad_phi;
4701 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2777
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:546

◆ feGradPhiLower() [1/3]

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

Definition at line 2926 of file Assembly.h.

2927 {
2928  buildLowerDFE(type);
2929  return _fe_shape_data_lower[type]->_grad_phi;
2930 }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_lower
Definition: Assembly.h:2770
void buildLowerDFE(FEType type) const
Build FEs for a lower dimensional element with a type.
Definition: Assembly.C:360

◆ 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 4617 of file Assembly.C.

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

◆ feGradPhiNeighbor() [1/3]

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

Definition at line 1695 of file Assembly.h.

1696  {
1697  buildNeighborFE(type);
1698  return _fe_shape_data_neighbor[type]->_grad_phi;
1699  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:316
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2768

◆ 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 4672 of file Assembly.C.

4673 {
4674  buildVectorNeighborFE(type);
4675  return _vector_fe_shape_data_neighbor[type]->_grad_phi;
4676 }
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:516
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2776

◆ fePhi() [1/3]

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

Definition at line 1619 of file Assembly.h.

1620  {
1621  buildFE(type);
1622  return _fe_shape_data[type]->_phi;
1623  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:268
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2766

◆ 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 4576 of file Assembly.C.

4577 {
4578  buildVectorFE(type);
4579  return _vector_fe_shape_data[type]->_phi;
4580 }
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:455
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:2774

◆ fePhiFace() [1/3]

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

Definition at line 1660 of file Assembly.h.

1661  {
1662  buildFaceFE(type);
1663  return _fe_shape_data_face[type]->_phi;
1664  }
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:294
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2767

◆ 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 4633 of file Assembly.C.

4634 {
4635  buildVectorFaceFE(type);
4636  return _vector_fe_shape_data_face[type]->_phi;
4637 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2775
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:486

◆ fePhiFaceNeighbor() [1/3]

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

Definition at line 1710 of file Assembly.h.

1711  {
1712  buildFaceNeighborFE(type);
1713  return _fe_shape_data_face_neighbor[type]->_phi;
1714  }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2769
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:338

◆ 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 4689 of file Assembly.C.

4690 {
4692  return _vector_fe_shape_data_face_neighbor[type]->_phi;
4693 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2777
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:546

◆ fePhiLower() [1/3]

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

Definition at line 2910 of file Assembly.h.

2911 {
2912  buildLowerDFE(type);
2913  return _fe_shape_data_lower[type]->_phi;
2914 }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_lower
Definition: Assembly.h:2770
void buildLowerDFE(FEType type) const
Build FEs for a lower dimensional element with a type.
Definition: Assembly.C:360

◆ 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 4601 of file Assembly.C.

4602 {
4603  buildVectorLowerDFE(type);
4604  return _vector_fe_shape_data_lower[type]->_phi;
4605 }
void buildVectorLowerDFE(FEType type) const
Build Vector FEs for a lower dimensional element with a type.
Definition: Assembly.C:405
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_lower
Definition: Assembly.h:2778

◆ fePhiNeighbor() [1/3]

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

Definition at line 1688 of file Assembly.h.

1689  {
1690  buildNeighborFE(type);
1691  return _fe_shape_data_neighbor[type]->_phi;
1692  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:316
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2768

◆ 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 4664 of file Assembly.C.

4665 {
4666  buildVectorNeighborFE(type);
4667  return _vector_fe_shape_data_neighbor[type]->_phi;
4668 }
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:516
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2776

◆ feSecondPhi() [1/3]

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

Definition at line 1639 of file Assembly.h.

1640  {
1641  _need_second_derivative.insert(type);
1642  buildFE(type);
1643  return _fe_shape_data[type]->_second_phi;
1644  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:268
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2766
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866

◆ 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 4592 of file Assembly.C.

4593 {
4594  _need_second_derivative.insert(type);
4595  buildVectorFE(type);
4596  return _vector_fe_shape_data[type]->_second_phi;
4597 }
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:455
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:2774

◆ feSecondPhiFace() [1/3]

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

Definition at line 1680 of file Assembly.h.

1681  {
1682  _need_second_derivative.insert(type);
1683  buildFaceFE(type);
1684  return _fe_shape_data_face[type]->_second_phi;
1685  }
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:294
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2767

◆ 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 4649 of file Assembly.C.

4650 {
4651  _need_second_derivative.insert(type);
4652  buildVectorFaceFE(type);
4653 
4654  // If we're building for a face we probably need to build for a
4655  // neighbor while _need_second_derivative is set;
4656  // onInterface/reinitNeighbor/etc don't distinguish
4658 
4659  return _vector_fe_shape_data_face[type]->_second_phi;
4660 }
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2775
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:486
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:546

◆ feSecondPhiFaceNeighbor() [1/3]

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

Definition at line 1726 of file Assembly.h.

1727  {
1728  _need_second_derivative_neighbor.insert(type);
1729  buildFaceNeighborFE(type);
1730  return _fe_shape_data_face_neighbor[type]->_second_phi;
1731  }
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition: Assembly.h:2769
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2867
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:338

◆ 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 4705 of file Assembly.C.

4706 {
4707  _need_second_derivative_neighbor.insert(type);
4709  return _vector_fe_shape_data_face_neighbor[type]->_second_phi;
4710 }
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2867
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2777
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:546

◆ feSecondPhiNeighbor() [1/3]

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

Definition at line 1702 of file Assembly.h.

1703  {
1704  _need_second_derivative_neighbor.insert(type);
1705  buildNeighborFE(type);
1706  return _fe_shape_data_neighbor[type]->_second_phi;
1707  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:316
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2768
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2867

◆ 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 4680 of file Assembly.C.

4681 {
4682  _need_second_derivative_neighbor.insert(type);
4683  buildVectorNeighborFE(type);
4684  return _vector_fe_shape_data_neighbor[type]->_second_phi;
4685 }
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2867
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:516
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2776

◆ fieldScalarCouplingEntries()

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

Definition at line 1309 of file Assembly.h.

1310  {
1311  return _cm_fs_entry;
1312  }
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
Entries in the coupling matrix for field variables vs scalar variables.
Definition: Assembly.h:2334

◆ 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 4957 of file Assembly.C.

4958 {
4959  return qPoints();
4960 }
const MooseArray< Point > & qPoints() const
Returns the reference to the quadrature points.
Definition: Assembly.h:258

◆ genericQPoints() [3/3]

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

Definition at line 4964 of file Assembly.C.

4965 {
4966  return adQPoints();
4967 }
const MooseArray< ADPoint > & adQPoints() const
Definition: Assembly.h:395

◆ 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 132 of file Assembly.h.

Referenced by PointVariableSamplerBase::initialize().

133  {
134  buildFE(type);
135  return constify_ref(_fe[dim][type]);
136  }
void buildFE(FEType type) const
Build FEs with a type.
Definition: Assembly.C:268
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
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:120
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2403

◆ 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 156 of file Assembly.h.

157  {
158  buildFaceFE(type);
159  return constify_ref(_fe_face[dim][type]);
160  }
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2515
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
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:120
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition: Assembly.C:294

◆ 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 168 of file Assembly.h.

169  {
170  buildFaceNeighborFE(type);
171  return constify_ref(_fe_face_neighbor[dim][type]);
172  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
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:120
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition: Assembly.C:338
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2548

◆ 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 144 of file Assembly.h.

145  {
146  buildNeighborFE(type);
147  return constify_ref(_fe_neighbor[dim][type]);
148  }
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition: Assembly.C:316
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
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:120
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2547

◆ getJacobianDiagonal()

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

Definition at line 1892 of file Assembly.h.

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

1893  {
1894  unsigned int rows = ke.m();
1895  unsigned int cols = ke.n();
1896  DenseVector<Real> diag(rows);
1897  for (unsigned int i = 0; i < rows; i++)
1898  // % operation is needed to account for cases of no component coupling of array variables
1899  diag(i) = ke(i, i % cols);
1900  return diag;
1901  }
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 180 of file Assembly.h.

181  {
182  buildVectorFE(type);
183  return constify_ref(_vector_fe[dim][type]);
184  }
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension&#39;s actual vector fe objects indexed on type.
Definition: Assembly.h:2405
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
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:120
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition: Assembly.C:455

◆ 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 204 of file Assembly.h.

205  {
206  buildVectorFaceFE(type);
207  return constify_ref(_vector_fe_face[dim][type]);
208  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
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:120
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2517
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition: Assembly.C:486

◆ 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 216 of file Assembly.h.

217  {
220  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2550
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:120
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition: Assembly.C:546

◆ 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 192 of file Assembly.h.

193  {
194  buildVectorNeighborFE(type);
195  return constify_ref(_vector_fe_neighbor[dim][type]);
196  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
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:120
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition: Assembly.C:516
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition: Assembly.h:2549

◆ gradPhi() [1/6]

const VariablePhiGradient& Assembly::gradPhi ( ) const
inline

Definition at line 1327 of file Assembly.h.

Referenced by copyShapes().

1327 { return _grad_phi; }
VariablePhiGradient _grad_phi
Definition: Assembly.h:2705

◆ gradPhi() [2/6]

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

Definition at line 1328 of file Assembly.h.

1328 { return _grad_phi; }
VariablePhiGradient _grad_phi
Definition: Assembly.h:2705

◆ gradPhi() [3/6]

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

Definition at line 1377 of file Assembly.h.

1378  {
1379  return _vector_grad_phi;
1380  }
VectorVariablePhiGradient _vector_grad_phi
Definition: Assembly.h:2722

◆ gradPhi() [4/6]

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

Definition at line 1466 of file Assembly.h.

1466 { return _grad_phi; }
VariablePhiGradient _grad_phi
Definition: Assembly.h:2705

◆ gradPhi() [5/6]

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

Definition at line 1498 of file Assembly.h.

1499  {
1500  return _vector_grad_phi;
1501  }
VectorVariablePhiGradient _vector_grad_phi
Definition: Assembly.h:2722

◆ gradPhi() [6/6]

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

Definition at line 1579 of file Assembly.h.

1579 { return _grad_phi; }
VariablePhiGradient _grad_phi
Definition: Assembly.h:2705

◆ gradPhiFace() [1/6]

const VariablePhiGradient& Assembly::gradPhiFace ( ) const
inline

Definition at line 1337 of file Assembly.h.

Referenced by copyFaceShapes().

1337 { return _grad_phi_face; }
VariablePhiGradient _grad_phi_face
Definition: Assembly.h:2709

◆ gradPhiFace() [2/6]

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

Definition at line 1338 of file Assembly.h.

1339  {
1340  return _grad_phi_face;
1341  }
VariablePhiGradient _grad_phi_face
Definition: Assembly.h:2709

◆ gradPhiFace() [3/6]

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

Definition at line 1398 of file Assembly.h.

1399  {
1400  return _vector_grad_phi_face;
1401  }
VectorVariablePhiGradient _vector_grad_phi_face
Definition: Assembly.h:2728

◆ gradPhiFace() [4/6]

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

Definition at line 1470 of file Assembly.h.

1470 { return _grad_phi_face; }
VariablePhiGradient _grad_phi_face
Definition: Assembly.h:2709

◆ gradPhiFace() [5/6]

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

Definition at line 1519 of file Assembly.h.

1520  {
1521  return _vector_grad_phi_face;
1522  }
VectorVariablePhiGradient _vector_grad_phi_face
Definition: Assembly.h:2728

◆ gradPhiFace() [6/6]

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

Definition at line 1583 of file Assembly.h.

1584  {
1585  return _grad_phi_face;
1586  }
VariablePhiGradient _grad_phi_face
Definition: Assembly.h:2709

◆ gradPhiFaceNeighbor() [1/5]

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

Definition at line 1364 of file Assembly.h.

Referenced by copyNeighborShapes().

1365  {
1366  return _grad_phi_face_neighbor;
1367  }
VariablePhiGradient _grad_phi_face_neighbor
Definition: Assembly.h:2717

◆ gradPhiFaceNeighbor() [2/5]

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

Definition at line 1444 of file Assembly.h.

1445  {
1447  }
VectorVariablePhiGradient _vector_grad_phi_face_neighbor
Definition: Assembly.h:2740

◆ gradPhiFaceNeighbor() [3/5]

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

Definition at line 1487 of file Assembly.h.

1488  {
1489  return _grad_phi_face_neighbor;
1490  }
VariablePhiGradient _grad_phi_face_neighbor
Definition: Assembly.h:2717

◆ gradPhiFaceNeighbor() [4/5]

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

Definition at line 1560 of file Assembly.h.

1561  {
1563  }
VectorVariablePhiGradient _vector_grad_phi_face_neighbor
Definition: Assembly.h:2740

◆ gradPhiFaceNeighbor() [5/5]

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

Definition at line 1609 of file Assembly.h.

1610  {
1611  return _grad_phi_face_neighbor;
1612  }
VariablePhiGradient _grad_phi_face_neighbor
Definition: Assembly.h:2717

◆ gradPhiNeighbor() [1/5]

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

Definition at line 1351 of file Assembly.h.

Referenced by copyNeighborShapes().

1352  {
1353  return _grad_phi_neighbor;
1354  }
VariablePhiGradient _grad_phi_neighbor
Definition: Assembly.h:2713

◆ gradPhiNeighbor() [2/5]

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

Definition at line 1420 of file Assembly.h.

1421  {
1423  }
VectorVariablePhiGradient _vector_grad_phi_neighbor
Definition: Assembly.h:2734

◆ gradPhiNeighbor() [3/5]

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

Definition at line 1474 of file Assembly.h.

1475  {
1476  return _grad_phi_neighbor;
1477  }
VariablePhiGradient _grad_phi_neighbor
Definition: Assembly.h:2713

◆ gradPhiNeighbor() [4/5]

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

Definition at line 1540 of file Assembly.h.

1541  {
1543  }
VectorVariablePhiGradient _vector_grad_phi_neighbor
Definition: Assembly.h:2734

◆ gradPhiNeighbor() [5/5]

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

Definition at line 1596 of file Assembly.h.

1597  {
1598  return _grad_phi_neighbor;
1599  }
VariablePhiGradient _grad_phi_neighbor
Definition: Assembly.h:2713

◆ 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 4559 of file Assembly.C.

Referenced by SubProblem::hasScalingVector().

4560 {
4561  _scaling_vector = &_sys.getVector("scaling_factors");
4562 }
SystemBase & _sys
Definition: Assembly.h:2313
const NumericVector< Real > * _scaling_vector
The map from global index to variable scaling factor.
Definition: Assembly.h:2875
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:934

◆ 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 4844 of file Assembly.C.

Referenced by SubProblem::preparePRefinement().

4845 {
4846  if (_have_p_refinement)
4847  // Already performed tasks for p-refinement
4848  return;
4849 
4850  const Order helper_order = _mesh.hasSecondOrderElements() ? SECOND : FIRST;
4851  const FEType helper_type(helper_order, LAGRANGE);
4852  auto process_fe =
4853  [&disable_families](const unsigned int num_dimensionalities, auto & fe_container)
4854  {
4855  if (!disable_families.empty())
4856  for (const auto dim : make_range(num_dimensionalities))
4857  {
4858  auto fe_container_it = fe_container.find(dim);
4859  if (fe_container_it != fe_container.end())
4860  for (auto & [fe_type, fe_ptr] : fe_container_it->second)
4861  if (disable_families.count(fe_type.family))
4862  fe_ptr->add_p_level_in_reinit(false);
4863  }
4864  };
4865  auto process_fe_and_helpers = [process_fe, &helper_type](auto & unique_helper_container,
4866  auto & helper_container,
4867  const unsigned int num_dimensionalities,
4868  const bool user_added_helper_type,
4869  auto & fe_container)
4870  {
4871  unique_helper_container.resize(num_dimensionalities);
4872  for (const auto dim : make_range(num_dimensionalities))
4873  {
4874  auto & unique_helper = unique_helper_container[dim];
4875  unique_helper = FEGenericBase<Real>::build(dim, helper_type);
4876  // don't participate in p-refinement
4877  unique_helper->add_p_level_in_reinit(false);
4878  helper_container[dim] = unique_helper.get();
4879 
4880  // If the user did not request the helper type then we should erase it from our FE container
4881  // so that they're not penalized (in the "we should be able to do p-refinement sense") for
4882  // our perhaps silly helpers
4883  if (!user_added_helper_type)
4884  {
4885  auto & fe_container_dim = libmesh_map_find(fe_container, dim);
4886  auto fe_it = fe_container_dim.find(helper_type);
4887  mooseAssert(fe_it != fe_container_dim.end(), "We should have the helper type");
4888  delete fe_it->second;
4889  fe_container_dim.erase(fe_it);
4890  }
4891  }
4892 
4893  process_fe(num_dimensionalities, fe_container);
4894  };
4895 
4896  // Handle scalar field families
4897  process_fe_and_helpers(_unique_fe_helper,
4899  _mesh_dimension + 1,
4901  _fe);
4902  process_fe_and_helpers(_unique_fe_face_helper,
4904  _mesh_dimension + 1,
4906  _fe_face);
4907  process_fe_and_helpers(_unique_fe_face_neighbor_helper,
4909  _mesh_dimension + 1,
4912  process_fe_and_helpers(_unique_fe_neighbor_helper,
4914  _mesh_dimension + 1,
4916  _fe_neighbor);
4917  process_fe_and_helpers(_unique_fe_lower_helper,
4921  _fe_lower);
4922  // Handle vector field families
4923  process_fe(_mesh_dimension + 1, _vector_fe);
4924  process_fe(_mesh_dimension + 1, _vector_fe_face);
4925  process_fe(_mesh_dimension + 1, _vector_fe_neighbor);
4926  process_fe(_mesh_dimension + 1, _vector_fe_face_neighbor);
4927  process_fe(_mesh_dimension, _vector_fe_lower);
4928 
4930 
4931  _have_p_refinement = true;
4932 }
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2515
bool _user_added_fe_lower_of_helper_type
Definition: Assembly.h:2366
std::vector< std::unique_ptr< FEBase > > _unique_fe_lower_helper
Definition: Assembly.h:2374
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:2405
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2553
std::vector< std::unique_ptr< FEBase > > _unique_fe_neighbor_helper
Definition: Assembly.h:2373
bool _user_added_fe_face_neighbor_of_helper_type
Definition: Assembly.h:2364
bool _have_p_refinement
Whether we have ever conducted p-refinement.
Definition: Assembly.h:2902
FIRST
MooseMesh & _mesh
Definition: Assembly.h:2353
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition: Assembly.h:2554
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
Definition: Assembly.h:2371
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2550
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:2370
SECOND
unsigned int _mesh_dimension
Definition: Assembly.h:2355
bool _user_added_fe_neighbor_of_helper_type
Definition: Assembly.h:2365
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2547
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2517
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2557
bool hasSecondOrderElements()
check if the mesh has SECOND order elements
Definition: MooseMesh.C:3815
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2403
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition: Assembly.h:2559
bool _user_added_fe_face_of_helper_type
Definition: Assembly.h:2363
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2519
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition: Assembly.h:2549
IntRange< T > make_range(T beg, T end)
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
Definition: Assembly.h:2372
void helpersRequestData()
request phi, dphi, xyz, JxW, etc.
Definition: Assembly.C:4811
std::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2407
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2548
bool _user_added_fe_of_helper_type
Whether user code requested a FEType the same as our _helper_type.
Definition: Assembly.h:2362
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
helper object for transforming coordinates for lower dimensional element quadrature points ...
Definition: Assembly.h:2561

◆ helpersRequestData()

void Assembly::helpersRequestData ( )
private

request phi, dphi, xyz, JxW, etc.

data through the FE helper functions

Definition at line 4811 of file Assembly.C.

Referenced by Assembly(), and havePRefinement().

4812 {
4813  for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
4814  {
4815  _holder_fe_helper[dim]->get_phi();
4816  _holder_fe_helper[dim]->get_dphi();
4817  _holder_fe_helper[dim]->get_xyz();
4818  _holder_fe_helper[dim]->get_JxW();
4819 
4820  _holder_fe_face_helper[dim]->get_phi();
4821  _holder_fe_face_helper[dim]->get_dphi();
4822  _holder_fe_face_helper[dim]->get_xyz();
4823  _holder_fe_face_helper[dim]->get_JxW();
4824  _holder_fe_face_helper[dim]->get_normals();
4825 
4828  _holder_fe_face_neighbor_helper[dim]->get_normals();
4829 
4830  _holder_fe_neighbor_helper[dim]->get_xyz();
4831  _holder_fe_neighbor_helper[dim]->get_JxW();
4832  }
4833 
4834  for (unsigned int dim = 0; dim < _mesh_dimension; dim++)
4835  {
4836  // We need these computations in order to compute correct lower-d element volumes in
4837  // curvilinear coordinates
4838  _holder_fe_lower_helper[dim]->get_xyz();
4839  _holder_fe_lower_helper[dim]->get_JxW();
4840  }
4841 }
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2553
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition: Assembly.h:2554
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
unsigned int _mesh_dimension
Definition: Assembly.h:2355
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2519
std::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2407
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
helper object for transforming coordinates for lower dimensional element quadrature points ...
Definition: Assembly.h:2561

◆ init()

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

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

Definition at line 2469 of file Assembly.C.

2470 {
2471  _cm = cm;
2472 
2473  unsigned int n_vars = _sys.nVariables();
2474 
2475  _cm_ss_entry.clear();
2476  _cm_sf_entry.clear();
2477  _cm_fs_entry.clear();
2478  _cm_ff_entry.clear();
2479 
2480  auto & vars = _sys.getVariables(_tid);
2481 
2482  _block_diagonal_matrix = true;
2483  for (auto & ivar : vars)
2484  {
2485  auto i = ivar->number();
2486  if (i >= _component_block_diagonal.size())
2487  _component_block_diagonal.resize(i + 1, true);
2488 
2489  auto ivar_start = _cm_ff_entry.size();
2490  for (unsigned int k = 0; k < ivar->count(); ++k)
2491  {
2492  unsigned int iv = i + k;
2493  for (const auto & j : ConstCouplingRow(iv, *_cm))
2494  {
2495  if (_sys.isScalarVariable(j))
2496  {
2497  auto & jvar = _sys.getScalarVariable(_tid, j);
2498  _cm_fs_entry.push_back(std::make_pair(ivar, &jvar));
2499  _block_diagonal_matrix = false;
2500  }
2501  else
2502  {
2503  auto & jvar = _sys.getVariable(_tid, j);
2504  auto pair = std::make_pair(ivar, &jvar);
2505  auto c = ivar_start;
2506  // check if the pair has been pushed or not
2507  bool has_pair = false;
2508  for (; c < _cm_ff_entry.size(); ++c)
2509  if (_cm_ff_entry[c] == pair)
2510  {
2511  has_pair = true;
2512  break;
2513  }
2514  if (!has_pair)
2515  _cm_ff_entry.push_back(pair);
2516  // only set having diagonal matrix to false when ivar and jvar numbers are different
2517  // Note: for array variables, since we save the entire local Jacobian of all components,
2518  // even there are couplings among components of the same array variable, we still
2519  // do not set the flag to false.
2520  if (i != jvar.number())
2521  _block_diagonal_matrix = false;
2522  else if (iv != j)
2523  _component_block_diagonal[i] = false;
2524  }
2525  }
2526  }
2527  }
2528 
2529  auto & scalar_vars = _sys.getScalarVariables(_tid);
2530 
2531  for (auto & ivar : scalar_vars)
2532  {
2533  auto i = ivar->number();
2534  if (i >= _component_block_diagonal.size())
2535  _component_block_diagonal.resize(i + 1, true);
2536 
2537  for (const auto & j : ConstCouplingRow(i, *_cm))
2538  if (_sys.isScalarVariable(j))
2539  {
2540  auto & jvar = _sys.getScalarVariable(_tid, j);
2541  _cm_ss_entry.push_back(std::make_pair(ivar, &jvar));
2542  }
2543  else
2544  {
2545  auto & jvar = _sys.getVariable(_tid, j);
2546  _cm_sf_entry.push_back(std::make_pair(ivar, &jvar));
2547  }
2548  }
2549 
2550  if (_block_diagonal_matrix && scalar_vars.size() != 0)
2551  _block_diagonal_matrix = false;
2552 
2553  auto num_vector_tags = _residual_vector_tags.size();
2554 
2555  _sub_Re.resize(num_vector_tags);
2556  _sub_Rn.resize(num_vector_tags);
2557  _sub_Rl.resize(num_vector_tags);
2558  for (MooseIndex(_sub_Re) i = 0; i < _sub_Re.size(); i++)
2559  {
2560  _sub_Re[i].resize(n_vars);
2561  _sub_Rn[i].resize(n_vars);
2562  _sub_Rl[i].resize(n_vars);
2563  }
2564 
2565  _cached_residual_values.resize(num_vector_tags);
2566  _cached_residual_rows.resize(num_vector_tags);
2567 
2568  auto num_matrix_tags = _subproblem.numMatrixTags();
2569 
2570  _cached_jacobian_values.resize(num_matrix_tags);
2571  _cached_jacobian_rows.resize(num_matrix_tags);
2572  _cached_jacobian_cols.resize(num_matrix_tags);
2573 
2574  // Element matrices
2575  _sub_Kee.resize(num_matrix_tags);
2576  _sub_Keg.resize(num_matrix_tags);
2577  _sub_Ken.resize(num_matrix_tags);
2578  _sub_Kne.resize(num_matrix_tags);
2579  _sub_Knn.resize(num_matrix_tags);
2580  _sub_Kll.resize(num_matrix_tags);
2581  _sub_Kle.resize(num_matrix_tags);
2582  _sub_Kln.resize(num_matrix_tags);
2583  _sub_Kel.resize(num_matrix_tags);
2584  _sub_Knl.resize(num_matrix_tags);
2585 
2586  _jacobian_block_used.resize(num_matrix_tags);
2587  _jacobian_block_neighbor_used.resize(num_matrix_tags);
2588  _jacobian_block_lower_used.resize(num_matrix_tags);
2589  _jacobian_block_nonlocal_used.resize(num_matrix_tags);
2590 
2591  for (MooseIndex(num_matrix_tags) tag = 0; tag < num_matrix_tags; tag++)
2592  {
2593  _sub_Keg[tag].resize(n_vars);
2594  _sub_Ken[tag].resize(n_vars);
2595  _sub_Kne[tag].resize(n_vars);
2596  _sub_Knn[tag].resize(n_vars);
2597  _sub_Kee[tag].resize(n_vars);
2598  _sub_Kll[tag].resize(n_vars);
2599  _sub_Kle[tag].resize(n_vars);
2600  _sub_Kln[tag].resize(n_vars);
2601  _sub_Kel[tag].resize(n_vars);
2602  _sub_Knl[tag].resize(n_vars);
2603 
2604  _jacobian_block_used[tag].resize(n_vars);
2605  _jacobian_block_neighbor_used[tag].resize(n_vars);
2606  _jacobian_block_lower_used[tag].resize(n_vars);
2607  _jacobian_block_nonlocal_used[tag].resize(n_vars);
2608  for (MooseIndex(n_vars) i = 0; i < n_vars; ++i)
2609  {
2611  {
2612  _sub_Kee[tag][i].resize(n_vars);
2613  _sub_Keg[tag][i].resize(n_vars);
2614  _sub_Ken[tag][i].resize(n_vars);
2615  _sub_Kne[tag][i].resize(n_vars);
2616  _sub_Knn[tag][i].resize(n_vars);
2617  _sub_Kll[tag][i].resize(n_vars);
2618  _sub_Kle[tag][i].resize(n_vars);
2619  _sub_Kln[tag][i].resize(n_vars);
2620  _sub_Kel[tag][i].resize(n_vars);
2621  _sub_Knl[tag][i].resize(n_vars);
2622 
2623  _jacobian_block_used[tag][i].resize(n_vars);
2624  _jacobian_block_neighbor_used[tag][i].resize(n_vars);
2625  _jacobian_block_lower_used[tag][i].resize(n_vars);
2626  _jacobian_block_nonlocal_used[tag][i].resize(n_vars);
2627  }
2628  else
2629  {
2630  _sub_Kee[tag][i].resize(1);
2631  _sub_Keg[tag][i].resize(1);
2632  _sub_Ken[tag][i].resize(1);
2633  _sub_Kne[tag][i].resize(1);
2634  _sub_Knn[tag][i].resize(1);
2635  _sub_Kll[tag][i].resize(1);
2636  _sub_Kle[tag][i].resize(1);
2637  _sub_Kln[tag][i].resize(1);
2638  _sub_Kel[tag][i].resize(1);
2639  _sub_Knl[tag][i].resize(1);
2640 
2641  _jacobian_block_used[tag][i].resize(1);
2642  _jacobian_block_neighbor_used[tag][i].resize(1);
2643  _jacobian_block_lower_used[tag][i].resize(1);
2644  _jacobian_block_nonlocal_used[tag][i].resize(1);
2645  }
2646  }
2647  }
2648 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
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:2802
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2809
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition: SystemBase.h:759
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kle
dlower/dsecondary (or dlower/delement)
Definition: Assembly.h:2692
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kel
dsecondary/dlower (or delement/dlower)
Definition: Assembly.h:2696
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kll
dlower/dlower
Definition: Assembly.h:2690
char ** vars
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kln
dlower/dprimary (or dlower/dneighbor)
Definition: Assembly.h:2694
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2662
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2343
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
Entries in the coupling matrix for scalar variables vs field variables.
Definition: Assembly.h:2336
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:2819
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knn
jacobian contributions from the neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2688
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2807
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Ken
jacobian contributions from the element and neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2684
virtual unsigned int nVariables() const
Get the number of variables in this system.
Definition: SystemBase.C:892
std::vector< std::pair< MooseVariableScalar *, MooseVariableScalar * > > _cm_ss_entry
Entries in the coupling matrix for scalar variables.
Definition: Assembly.h:2338
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kne
jacobian contributions from the neighbor and element <Tag, ivar, jvar>
Definition: Assembly.h:2686
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition: Assembly.h:2664
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
Entries in the coupling matrix for field variables vs scalar variables.
Definition: Assembly.h:2334
unsigned int n_vars
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2661
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2342
SubProblem & _subproblem
Definition: Assembly.h:2314
const std::vector< VectorTag > & _residual_vector_tags
The residual vector tags that Assembly could possibly contribute to.
Definition: Assembly.h:2796
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
Definition: Assembly.h:2680
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME) ...
Definition: Assembly.h:2799
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:146
const libMesh::CouplingMatrix * _cm
Coupling matrices.
Definition: Assembly.h:2319
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Keg
Definition: Assembly.h:2681
virtual bool isScalarVariable(unsigned int var_name) const
Definition: SystemBase.C:886
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:2347
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:91
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:2345
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2811
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:2816
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knl
dprimary/dlower (or dneighbor/dlower)
Definition: Assembly.h:2698

◆ initNonlocalCoupling()

void Assembly::initNonlocalCoupling ( )

Create pair of variables requiring nonlocal jacobian contributions.

Definition at line 2651 of file Assembly.C.

Referenced by FEProblemBase::initialSetup().

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

◆ 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 1142 of file Assembly.h.

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

1143  {
1144  jacobianBlockUsed(tag, ivar, jvar, true);
1145  return _sub_Kee[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
1146  }
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:2240
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
Definition: Assembly.h:2680
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:2816

◆ 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 2276 of file Assembly.h.

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

2277  {
2278  _jacobian_block_lower_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2279  }
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:2347
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:2816

◆ 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 2285 of file Assembly.h.

2286  {
2287  return _jacobian_block_lower_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2288  }
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:2347
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:2816

◆ 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 3161 of file Assembly.C.

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

3166 {
3167  jacobianBlockLowerUsed(tag, ivar, jvar, true);
3169  {
3170  switch (type)
3171  {
3172  default:
3173  case Moose::LowerLower:
3174  return _sub_Kll[tag][ivar][0];
3175  case Moose::LowerSecondary:
3176  return _sub_Kle[tag][ivar][0];
3177  case Moose::LowerPrimary:
3178  return _sub_Kln[tag][ivar][0];
3179  case Moose::SecondaryLower:
3180  return _sub_Kel[tag][ivar][0];
3182  return _sub_Kee[tag][ivar][0];
3184  return _sub_Ken[tag][ivar][0];
3185  case Moose::PrimaryLower:
3186  return _sub_Knl[tag][ivar][0];
3188  return _sub_Kne[tag][ivar][0];
3189  case Moose::PrimaryPrimary:
3190  return _sub_Knn[tag][ivar][0];
3191  }
3192  }
3193  else
3194  {
3195  switch (type)
3196  {
3197  default:
3198  case Moose::LowerLower:
3199  return _sub_Kll[tag][ivar][jvar];
3200  case Moose::LowerSecondary:
3201  return _sub_Kle[tag][ivar][jvar];
3202  case Moose::LowerPrimary:
3203  return _sub_Kln[tag][ivar][jvar];
3204  case Moose::SecondaryLower:
3205  return _sub_Kel[tag][ivar][jvar];
3207  return _sub_Kee[tag][ivar][jvar];
3209  return _sub_Ken[tag][ivar][jvar];
3210  case Moose::PrimaryLower:
3211  return _sub_Knl[tag][ivar][jvar];
3213  return _sub_Kne[tag][ivar][jvar];
3214  case Moose::PrimaryPrimary:
3215  return _sub_Knn[tag][ivar][jvar];
3216  }
3217  }
3218 }
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kle
dlower/dsecondary (or dlower/delement)
Definition: Assembly.h:2692
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kel
dsecondary/dlower (or delement/dlower)
Definition: Assembly.h:2696
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:2276
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kll
dlower/dlower
Definition: Assembly.h:2690
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kln
dlower/dprimary (or dlower/dneighbor)
Definition: Assembly.h:2694
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knn
jacobian contributions from the neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2688
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Ken
jacobian contributions from the element and neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2684
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kne
jacobian contributions from the neighbor and element <Tag, ivar, jvar>
Definition: Assembly.h:2686
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
Definition: Assembly.h:2680
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:2816
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knl
dprimary/dlower (or dneighbor/dlower)
Definition: Assembly.h:2698

◆ 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 3120 of file Assembly.C.

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

3122 {
3123  if (type == Moose::ElementElement)
3124  jacobianBlockUsed(tag, ivar, jvar, true);
3125  else
3126  jacobianBlockNeighborUsed(tag, ivar, jvar, true);
3127 
3129  {
3130  switch (type)
3131  {
3132  default:
3133  case Moose::ElementElement:
3134  return _sub_Kee[tag][ivar][0];
3136  return _sub_Ken[tag][ivar][0];
3138  return _sub_Kne[tag][ivar][0];
3140  return _sub_Knn[tag][ivar][0];
3141  }
3142  }
3143  else
3144  {
3145  switch (type)
3146  {
3147  default:
3148  case Moose::ElementElement:
3149  return _sub_Kee[tag][ivar][jvar];
3151  return _sub_Ken[tag][ivar][jvar];
3153  return _sub_Kne[tag][ivar][jvar];
3155  return _sub_Knn[tag][ivar][jvar];
3156  }
3157  }
3158 }
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:2240
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knn
jacobian contributions from the neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2688
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Ken
jacobian contributions from the element and neighbor <Tag, ivar, jvar>
Definition: Assembly.h:2684
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kne
jacobian contributions from the neighbor and element <Tag, ivar, jvar>
Definition: Assembly.h:2686
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
Definition: Assembly.h:2680
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:2258
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:2816

◆ 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 2258 of file Assembly.h.

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

2259  {
2260  _jacobian_block_neighbor_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2261  }
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:2345
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:2816

◆ 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 2267 of file Assembly.h.

2268  {
2269  return _jacobian_block_neighbor_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2270  }
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:2345
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:2816

◆ 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 1153 of file Assembly.h.

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

1154  {
1155  jacobianBlockNonlocalUsed(tag, ivar, jvar, true);
1156  return _sub_Keg[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
1157  }
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:2294
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Keg
Definition: Assembly.h:2681
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:2816

◆ 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 2294 of file Assembly.h.

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

2295  {
2296  _jacobian_block_nonlocal_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2297  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2343
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:2816

◆ 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 2303 of file Assembly.h.

2304  {
2305  return _jacobian_block_nonlocal_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2306  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2343
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:2816

◆ 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 2240 of file Assembly.h.

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

2241  {
2242  _jacobian_block_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2243  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2342
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:2816

◆ 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 2249 of file Assembly.h.

2250  {
2251  return _jacobian_block_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2252  }
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2342
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:2816

◆ 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 276 of file Assembly.h.

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

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

◆ 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 351 of file Assembly.h.

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

◆ jxWMortar()

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

Returns a reference to JxW for mortar segment elements.

Definition at line 707 of file Assembly.h.

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

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

◆ 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 261 of file Assembly.C.

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

◆ 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 476 of file Assembly.h.

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

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

◆ lowerDElemVolume()

const Real & Assembly::lowerDElemVolume ( ) const
inline

Definition at line 3207 of file Assembly.h.

3208 {
3211 }
Real _current_lower_d_elem_volume
The current lower dimensional element volume.
Definition: Assembly.h:2638
bool _need_lower_d_elem_volume
Whether we need to compute the lower dimensional element volume.
Definition: Assembly.h:2636

◆ mappedNormals()

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

Definition at line 362 of file Assembly.h.

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

◆ 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 4565 of file Assembly.C.

4566 {
4567  mooseAssert(_current_qrule == _current_qrule_arbitrary, "Rule should be arbitrary");
4568  mooseAssert(weights.size() == _current_physical_points.size(), "Size mismatch");
4569 
4570  for (MooseIndex(weights.size()) i = 0; i < weights.size(); ++i)
4571  _current_JxW[i] = weights[i];
4572 }
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
Definition: Assembly.h:2415
MooseArray< Point > _current_physical_points
This will be filled up with the physical points passed into reinitAtPhysical() if it is called...
Definition: Assembly.h:2647
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:2421
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2411

◆ 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 4538 of file Assembly.C.

Referenced by reinitFEFace().

4539 {
4540  mooseAssert(_xfem != nullptr, "This function should not be called if xfem is inactive");
4541 
4543  return;
4544 
4545  MooseArray<Real> xfem_face_weight_multipliers;
4546  if (_xfem->getXFEMFaceWeights(
4547  xfem_face_weight_multipliers, elem, _current_qrule_face, _current_q_points_face, side))
4548  {
4549  mooseAssert(xfem_face_weight_multipliers.size() == _current_JxW_face.size(),
4550  "Size of weight multipliers in xfem doesn't match number of quadrature points");
4551  for (unsigned i = 0; i < xfem_face_weight_multipliers.size(); i++)
4552  _current_JxW_face[i] = _current_JxW_face[i] * xfem_face_weight_multipliers[i];
4553 
4554  xfem_face_weight_multipliers.release();
4555  }
4556 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
Definition: Assembly.h:2415
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition: Assembly.h:2380
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2529
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2523
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:446
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2527

◆ 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 4518 of file Assembly.C.

Referenced by reinitFE().

4519 {
4520  mooseAssert(_xfem != nullptr, "This function should not be called if xfem is inactive");
4521 
4523  return;
4524 
4525  MooseArray<Real> xfem_weight_multipliers;
4526  if (_xfem->getXFEMWeights(xfem_weight_multipliers, elem, _current_qrule, _current_q_points))
4527  {
4528  mooseAssert(xfem_weight_multipliers.size() == _current_JxW.size(),
4529  "Size of weight multipliers in xfem doesn't match number of quadrature points");
4530  for (unsigned i = 0; i < xfem_weight_multipliers.size(); i++)
4531  _current_JxW[i] = _current_JxW[i] * xfem_weight_multipliers[i];
4532 
4533  xfem_weight_multipliers.release();
4534  }
4535 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
Definition: Assembly.h:2415
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition: Assembly.h:2380
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:2421
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2411
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:2419

◆ 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 294 of file Assembly.h.

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

◆ msmElem()

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

Definition at line 1961 of file Assembly.h.

1961 { return _msm_elem; }
const Elem * _msm_elem
Definition: Assembly.h:2884

◆ 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 623 of file Assembly.h.

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

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

◆ 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 482 of file Assembly.h.

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

◆ neighborLowerDElemVolume()

const Real & Assembly::neighborLowerDElemVolume ( ) const
inline

Definition at line 3214 of file Assembly.h.

3215 {
3218 }
Real _current_neighbor_lower_d_elem_volume
The current neighboring lower dimensional element volume.
Definition: Assembly.h:2642
bool _need_neighbor_lower_d_elem_volume
Whether we need to compute the neighboring lower dimensional element volume.
Definition: Assembly.h:2640

◆ 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 452 of file Assembly.h.

452 { 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:2615

◆ 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 508 of file Assembly.h.

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

509  {
512  }
bool _need_neighbor_elem_volume
true is apps need to compute neighbor element volume
Definition: Assembly.h:2619
Real _current_neighbor_volume
Volume of the current neighbor.
Definition: Assembly.h:2621

◆ 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 545 of file Assembly.h.

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

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

◆ 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 551 of file Assembly.h.

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

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

◆ nonlocalCouplingEntries()

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

Definition at line 1304 of file Assembly.h.

1305  {
1306  return _cm_nonlocal_entry;
1307  }
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition: Assembly.h:2340

◆ 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 357 of file Assembly.h.

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

◆ numExtraElemIntegers()

unsigned int Assembly::numExtraElemIntegers ( ) const
inline

Number of extra element integers Assembly tracked.

Definition at line 373 of file Assembly.h.

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

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

◆ phi() [1/6]

const VariablePhiValue& Assembly::phi ( ) const
inline

Definition at line 1320 of file Assembly.h.

Referenced by copyShapes().

1320 { return _phi; }
VariablePhiValue _phi
Definition: Assembly.h:2704

◆ phi() [2/6]

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

Definition at line 1326 of file Assembly.h.

1326 { return _phi; }
VariablePhiValue _phi
Definition: Assembly.h:2704

◆ phi() [3/6]

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

Definition at line 1373 of file Assembly.h.

1374  {
1375  return _vector_phi;
1376  }
VectorVariablePhiValue _vector_phi
Definition: Assembly.h:2721

◆ phi() [4/6]

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

Definition at line 1465 of file Assembly.h.

1465 { return _phi; }
VariablePhiValue _phi
Definition: Assembly.h:2704

◆ phi() [5/6]

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

Definition at line 1497 of file Assembly.h.

1497 { return _vector_phi; }
VectorVariablePhiValue _vector_phi
Definition: Assembly.h:2721

◆ phi() [6/6]

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

Definition at line 1578 of file Assembly.h.

1578 { return _phi; }
VariablePhiValue _phi
Definition: Assembly.h:2704

◆ phiFace() [1/6]

const VariablePhiValue& Assembly::phiFace ( ) const
inline

Definition at line 1335 of file Assembly.h.

Referenced by copyFaceShapes().

1335 { return _phi_face; }
VariablePhiValue _phi_face
Definition: Assembly.h:2708

◆ phiFace() [2/6]

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

Definition at line 1336 of file Assembly.h.

1336 { return _phi_face; }
VariablePhiValue _phi_face
Definition: Assembly.h:2708

◆ phiFace() [3/6]

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

Definition at line 1394 of file Assembly.h.

1395  {
1396  return _vector_phi_face;
1397  }
VectorVariablePhiValue _vector_phi_face
Definition: Assembly.h:2727

◆ phiFace() [4/6]

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

Definition at line 1469 of file Assembly.h.

1469 { return _phi_face; }
VariablePhiValue _phi_face
Definition: Assembly.h:2708

◆ phiFace() [5/6]

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

Definition at line 1515 of file Assembly.h.

1516  {
1517  return _vector_phi_face;
1518  }
VectorVariablePhiValue _vector_phi_face
Definition: Assembly.h:2727

◆ phiFace() [6/6]

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

Definition at line 1582 of file Assembly.h.

1582 { return _phi_face; }
VariablePhiValue _phi_face
Definition: Assembly.h:2708

◆ phiFaceNeighbor() [1/5]

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

Definition at line 1360 of file Assembly.h.

Referenced by copyNeighborShapes().

1361  {
1362  return _phi_face_neighbor;
1363  }
VariablePhiValue _phi_face_neighbor
Definition: Assembly.h:2716

◆ phiFaceNeighbor() [2/5]

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

Definition at line 1439 of file Assembly.h.

1440  {
1442  }
VectorVariablePhiValue _vector_phi_face_neighbor
Definition: Assembly.h:2739

◆ phiFaceNeighbor() [3/5]

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

Definition at line 1483 of file Assembly.h.

1484  {
1485  return _phi_face_neighbor;
1486  }
VariablePhiValue _phi_face_neighbor
Definition: Assembly.h:2716

◆ phiFaceNeighbor() [4/5]

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

Definition at line 1556 of file Assembly.h.

1557  {
1559  }
VectorVariablePhiValue _vector_phi_face_neighbor
Definition: Assembly.h:2739

◆ phiFaceNeighbor() [5/5]

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

Definition at line 1605 of file Assembly.h.

1606  {
1607  return _phi_face_neighbor;
1608  }
VariablePhiValue _phi_face_neighbor
Definition: Assembly.h:2716

◆ phiNeighbor() [1/5]

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

Definition at line 1347 of file Assembly.h.

Referenced by copyNeighborShapes().

1348  {
1349  return _phi_neighbor;
1350  }
VariablePhiValue _phi_neighbor
Definition: Assembly.h:2712

◆ phiNeighbor() [2/5]

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

Definition at line 1415 of file Assembly.h.

1416  {
1417  return _vector_phi_neighbor;
1418  }
VectorVariablePhiValue _vector_phi_neighbor
Definition: Assembly.h:2733

◆ phiNeighbor() [3/5]

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

Definition at line 1473 of file Assembly.h.

1473 { return _phi_neighbor; }
VariablePhiValue _phi_neighbor
Definition: Assembly.h:2712

◆ phiNeighbor() [4/5]

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

Definition at line 1536 of file Assembly.h.

1537  {
1538  return _vector_phi_neighbor;
1539  }
VectorVariablePhiValue _vector_phi_neighbor
Definition: Assembly.h:2733

◆ phiNeighbor() [5/5]

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

Definition at line 1592 of file Assembly.h.

1593  {
1594  return _phi_neighbor;
1595  }
VariablePhiValue _phi_neighbor
Definition: Assembly.h:2712

◆ 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 270 of file Assembly.h.

270 { 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:2647

◆ prepare()

void Assembly::prepare ( )

Definition at line 2719 of file Assembly.C.

2720 {
2722  prepareResidual();
2723 }
void prepareJacobianBlock()
Sizes and zeroes the Jacobian blocks used for the current element.
Definition: Assembly.C:2686
void prepareResidual()
Sizes and zeroes the residual for the current element.
Definition: Assembly.C:2710

◆ prepareBlock()

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

Definition at line 2902 of file Assembly.C.

2905 {
2906  const auto & iv = _sys.getVariable(_tid, ivar);
2907  const auto & jv = _sys.getVariable(_tid, jvar);
2908  const unsigned int ivn = iv.number();
2909  const unsigned int jvn = jv.number();
2910  const unsigned int icount = iv.count();
2911  unsigned int jcount = jv.count();
2912  if (ivn == jvn && _component_block_diagonal[ivn])
2913  jcount = 1;
2914 
2915  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2916  {
2917  jacobianBlock(ivn, jvn, LocalDataKey{}, tag)
2918  .resize(dof_indices.size() * icount, dof_indices.size() * jcount);
2919  jacobianBlockUsed(tag, ivn, jvn, false);
2920  }
2921 
2922  for (auto & tag_Re : _sub_Re)
2923  tag_Re[ivn].resize(dof_indices.size() * icount);
2924 }
SystemBase & _sys
Definition: Assembly.h:2313
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:2240
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
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:2819
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:1142
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2661
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2342
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:91

◆ 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 2927 of file Assembly.C.

2931 {
2932  const auto & iv = _sys.getVariable(_tid, ivar);
2933  const auto & jv = _sys.getVariable(_tid, jvar);
2934  const unsigned int ivn = iv.number();
2935  const unsigned int jvn = jv.number();
2936  const unsigned int icount = iv.count();
2937  unsigned int jcount = jv.count();
2938  if (ivn == jvn && _component_block_diagonal[ivn])
2939  jcount = 1;
2940 
2941  for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
2942  tag < _jacobian_block_nonlocal_used.size();
2943  tag++)
2944  {
2945  jacobianBlockNonlocal(ivn, jvn, LocalDataKey{}, tag)
2946  .resize(idof_indices.size() * icount, jdof_indices.size() * jcount);
2947 
2948  jacobianBlockNonlocalUsed(tag, ivn, jvn, false);
2949  }
2950 }
SystemBase & _sys
Definition: Assembly.h:2313
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:1153
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:2294
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition: Assembly.h:2343
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:2819
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:91

◆ prepareJacobianBlock()

void Assembly::prepareJacobianBlock ( )

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

Definition at line 2686 of file Assembly.C.

Referenced by prepare(), and reinitFVFace().

2687 {
2688  for (const auto & it : _cm_ff_entry)
2689  {
2690  MooseVariableFEBase & ivar = *(it.first);
2691  MooseVariableFEBase & jvar = *(it.second);
2692 
2693  unsigned int vi = ivar.number();
2694  unsigned int vj = jvar.number();
2695 
2696  const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2697  auto num_cols = jvar.dofIndices().size();
2698  if (array_block_diagonal_purely_diagonal)
2699  num_cols /= jvar.count();
2700 
2701  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2702  {
2703  jacobianBlock(vi, vj, LocalDataKey{}, tag).resize(ivar.dofIndices().size(), num_cols);
2704  jacobianBlockUsed(tag, vi, vj, false);
2705  }
2706  }
2707 }
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:2240
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:2819
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:1142
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2342
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 2850 of file Assembly.C.

Referenced by SubProblem::reinitLowerDElem().

2851 {
2852  for (const auto & it : _cm_ff_entry)
2853  {
2854  MooseVariableFEBase & ivar = *(it.first);
2855  MooseVariableFEBase & jvar = *(it.second);
2856 
2857  unsigned int vi = ivar.number();
2858  unsigned int vj = jvar.number();
2859 
2860  const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2861  const auto dofs_divisor = array_block_diagonal_purely_diagonal ? jvar.count() : 1;
2862 
2863  for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
2864  tag++)
2865  {
2866  // To cover all possible cases we should have 9 combinations below for every 2-permutation
2867  // of Lower,Secondary,Primary. However, 4 cases will in general be covered by calls to
2868  // prepare() and prepareNeighbor(). These calls will cover SecondarySecondary
2869  // (ElementElement), SecondaryPrimary (ElementNeighbor), PrimarySecondary (NeighborElement),
2870  // and PrimaryPrimary (NeighborNeighbor). With these covered we only need to prepare the 5
2871  // remaining below
2872 
2873  // derivatives w.r.t. lower dimensional residuals
2874  jacobianBlockMortar(Moose::LowerLower, vi, vj, LocalDataKey{}, tag)
2875  .resize(ivar.dofIndicesLower().size(), jvar.dofIndicesLower().size() / dofs_divisor);
2876 
2877  jacobianBlockMortar(Moose::LowerSecondary, vi, vj, LocalDataKey{}, tag)
2878  .resize(ivar.dofIndicesLower().size(), jvar.dofIndices().size() / dofs_divisor);
2879 
2880  jacobianBlockMortar(Moose::LowerPrimary, vi, vj, LocalDataKey{}, tag)
2881  .resize(ivar.dofIndicesLower().size(), jvar.dofIndicesNeighbor().size() / dofs_divisor);
2882 
2883  // derivatives w.r.t. interior secondary residuals
2884  jacobianBlockMortar(Moose::SecondaryLower, vi, vj, LocalDataKey{}, tag)
2885  .resize(ivar.dofIndices().size(), jvar.dofIndicesLower().size() / dofs_divisor);
2886 
2887  // derivatives w.r.t. interior primary residuals
2888  jacobianBlockMortar(Moose::PrimaryLower, vi, vj, LocalDataKey{}, tag)
2889  .resize(ivar.dofIndicesNeighbor().size(), jvar.dofIndicesLower().size() / dofs_divisor);
2890 
2891  jacobianBlockLowerUsed(tag, vi, vj, false);
2892  }
2893  }
2894 
2895  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2896  for (const auto & var : vars)
2897  for (auto & tag_Rl : _sub_Rl)
2898  tag_Rl[var->number()].resize(var->dofIndicesLower().size());
2899 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
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:2276
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:2351
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:2819
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:2332
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:3161
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition: Assembly.h:2664
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:2347

◆ prepareNeighbor()

void Assembly::prepareNeighbor ( )

Definition at line 2812 of file Assembly.C.

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

2813 {
2814  for (const auto & it : _cm_ff_entry)
2815  {
2816  MooseVariableFEBase & ivar = *(it.first);
2817  MooseVariableFEBase & jvar = *(it.second);
2818 
2819  unsigned int vi = ivar.number();
2820  unsigned int vj = jvar.number();
2821 
2822  const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2823  const auto dofs_divisor = array_block_diagonal_purely_diagonal ? jvar.count() : 1;
2824 
2825  for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
2826  tag < _jacobian_block_neighbor_used.size();
2827  tag++)
2828  {
2829  jacobianBlockNeighbor(Moose::ElementNeighbor, vi, vj, LocalDataKey{}, tag)
2830  .resize(ivar.dofIndices().size(), jvar.dofIndicesNeighbor().size() / dofs_divisor);
2831 
2832  jacobianBlockNeighbor(Moose::NeighborElement, vi, vj, LocalDataKey{}, tag)
2833  .resize(ivar.dofIndicesNeighbor().size(), jvar.dofIndices().size() / dofs_divisor);
2834 
2835  jacobianBlockNeighbor(Moose::NeighborNeighbor, vi, vj, LocalDataKey{}, tag)
2836  .resize(ivar.dofIndicesNeighbor().size(),
2837  jvar.dofIndicesNeighbor().size() / dofs_divisor);
2838 
2839  jacobianBlockNeighborUsed(tag, vi, vj, false);
2840  }
2841  }
2842 
2843  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2844  for (const auto & var : vars)
2845  for (auto & tag_Rn : _sub_Rn)
2846  tag_Rn[var->number()].resize(var->dofIndicesNeighbor().size());
2847 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
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:3120
char ** vars
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2662
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:2351
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:2819
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:2332
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:2258
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:2345

◆ prepareNonlocal()

void Assembly::prepareNonlocal ( )

Definition at line 2726 of file Assembly.C.

2727 {
2728  for (const auto & it : _cm_nonlocal_entry)
2729  {
2730  MooseVariableFEBase & ivar = *(it.first);
2731  MooseVariableFEBase & jvar = *(it.second);
2732 
2733  unsigned int vi = ivar.number();
2734  unsigned int vj = jvar.number();
2735 
2736  const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2737  auto num_cols = jvar.allDofIndices().size();
2738  if (array_block_diagonal_purely_diagonal)
2739  num_cols /= jvar.count();
2740 
2741  for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
2742  tag < _jacobian_block_nonlocal_used.size();
2743  tag++)
2744  {
2745  jacobianBlockNonlocal(vi, vj, LocalDataKey{}, tag).resize(ivar.dofIndices().size(), num_cols);
2746  jacobianBlockNonlocalUsed(tag, vi, vj, false);
2747  }
2748  }
2749 }
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:1153
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:2294
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:2343
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:2819
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:2340

◆ prepareOffDiagScalar()

void Assembly::prepareOffDiagScalar ( )

Definition at line 2977 of file Assembly.C.

Referenced by NodalScalarKernel::reinit().

2978 {
2979  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2980  const std::vector<MooseVariableScalar *> & scalar_vars = _sys.getScalarVariables(_tid);
2981 
2982  for (const auto & ivar : scalar_vars)
2983  {
2984  auto idofs = ivar->dofIndices().size();
2985 
2986  for (const auto & jvar : vars)
2987  {
2988  auto jdofs = jvar->dofIndices().size() * jvar->count();
2989  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2990  {
2991  jacobianBlock(ivar->number(), jvar->number(), LocalDataKey{}, tag).resize(idofs, jdofs);
2992  jacobianBlockUsed(tag, ivar->number(), jvar->number(), false);
2993 
2994  jacobianBlock(jvar->number(), ivar->number(), LocalDataKey{}, tag).resize(jdofs, idofs);
2995  jacobianBlockUsed(tag, jvar->number(), ivar->number(), false);
2996  }
2997  }
2998  }
2999 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition: SystemBase.h:759
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:2240
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
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:1142
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2342

◆ prepareResidual()

void Assembly::prepareResidual ( )

Sizes and zeroes the residual for the current element.

Definition at line 2710 of file Assembly.C.

Referenced by prepare(), and reinitFVFace().

2711 {
2712  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2713  for (const auto & var : vars)
2714  for (auto & tag_Re : _sub_Re)
2715  tag_Re[var->number()].resize(var->dofIndices().size());
2716 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2661

◆ prepareScalar()

void Assembly::prepareScalar ( )

Definition at line 2953 of file Assembly.C.

Referenced by FEProblemBase::reinitScalars().

2954 {
2955  const std::vector<MooseVariableScalar *> & vars = _sys.getScalarVariables(_tid);
2956  for (const auto & ivar : vars)
2957  {
2958  auto idofs = ivar->dofIndices().size();
2959 
2960  for (auto & tag_Re : _sub_Re)
2961  tag_Re[ivar->number()].resize(idofs);
2962 
2963  for (const auto & jvar : vars)
2964  {
2965  auto jdofs = jvar->dofIndices().size();
2966 
2967  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2968  {
2969  jacobianBlock(ivar->number(), jvar->number(), LocalDataKey{}, tag).resize(idofs, jdofs);
2970  jacobianBlockUsed(tag, ivar->number(), jvar->number(), false);
2971  }
2972  }
2973  }
2974 }
SystemBase & _sys
Definition: Assembly.h:2313
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition: SystemBase.h:759
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:2240
char ** vars
THREAD_ID _tid
Thread number (id)
Definition: Assembly.h:2351
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:1142
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2661
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2342

◆ 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 2752 of file Assembly.C.

Referenced by SystemBase::prepareFace().

2753 {
2754  for (const auto & it : _cm_ff_entry)
2755  {
2756  MooseVariableFEBase & ivar = *(it.first);
2757  MooseVariableFEBase & jvar = *(it.second);
2758 
2759  unsigned int vi = ivar.number();
2760  unsigned int vj = jvar.number();
2761 
2762  const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2763  auto num_cols = jvar.dofIndices().size();
2764  if (array_block_diagonal_purely_diagonal)
2765  num_cols /= jvar.count();
2766 
2767  if (vi == var->number() || vj == var->number())
2768  {
2769  for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2770  {
2771  jacobianBlock(vi, vj, LocalDataKey{}, tag).resize(ivar.dofIndices().size(), num_cols);
2772  jacobianBlockUsed(tag, vi, vj, false);
2773  }
2774  }
2775  }
2776 
2777  for (auto & tag_Re : _sub_Re)
2778  tag_Re[var->number()].resize(var->dofIndices().size());
2779 }
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:2240
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:2819
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:1142
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition: Assembly.h:2332
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2661
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition: Assembly.h:2342
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.

◆ prepareVariableNonlocal()

void Assembly::prepareVariableNonlocal ( MooseVariableFieldBase var)

Definition at line 2782 of file Assembly.C.

Referenced by SystemBase::prepareFace().

2783 {
2784  for (const auto & it : _cm_nonlocal_entry)
2785  {
2786  MooseVariableFEBase & ivar = *(it.first);
2787  MooseVariableFEBase & jvar = *(it.second);
2788 
2789  unsigned int vi = ivar.number();
2790  unsigned int vj = jvar.number();
2791 
2792  const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2793  auto num_cols = jvar.dofIndices().size();
2794  if (array_block_diagonal_purely_diagonal)
2795  num_cols /= jvar.count();
2796 
2797  if (vi == var->number() || vj == var->number())
2798  {
2799  for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
2800  tag < _jacobian_block_nonlocal_used.size();
2801  tag++)
2802  {
2803  jacobianBlockNonlocal(vi, vj, LocalDataKey{}, tag)
2804  .resize(ivar.dofIndices().size(), num_cols);
2805  jacobianBlockNonlocalUsed(tag, vi, vj);
2806  }
2807  }
2808  }
2809 }
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:1153
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:2294
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:2343
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:2819
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.
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition: Assembly.h:2340

◆ processLocalResidual()

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

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

Definition at line 3221 of file Assembly.C.

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

3224 {
3225  mooseAssert(res_block.size() == dof_indices.size(),
3226  "The size of residual and degree of freedom container must be the same");
3227 
3228  // For an array variable, ndof is the number of dofs of the zero-th component and
3229  // ntdof is the number of dofs of all components.
3230  // For standard or vector variables, ndof will be the same as ntdof.
3231  const auto ntdof = res_block.size();
3232  const auto count = scaling_factor.size();
3233  const auto ndof = ntdof / count;
3234  if (count > 1)
3235  {
3236  unsigned int p = 0;
3237  for (MooseIndex(count) j = 0; j < count; ++j)
3238  for (MooseIndex(ndof) i = 0; i < ndof; ++i)
3239  res_block(p++) *= scaling_factor[j];
3240  }
3241  else
3242  {
3243  if (scaling_factor[0] != 1.0)
3244  res_block *= scaling_factor[0];
3245  }
3246 
3247  _dof_map.constrain_element_vector(res_block, dof_indices, false);
3248 }
unsigned int count
Definition: MortarUtils.C:53
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:2349

◆ 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 258 of file Assembly.h.

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

◆ 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 345 of file Assembly.h.

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

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

◆ 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 539 of file Assembly.h.

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

◆ 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 264 of file Assembly.h.

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

◆ 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 235 of file Assembly.h.

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

235 { 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:120
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2411

◆ qruleArbitraryFace()

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

Definition at line 1925 of file Assembly.C.

Referenced by reinitElemFaceRef().

1926 {
1927  return qruleFaceHelper<ArbitraryQuadrature>(
1928  elem, side, [](QRules & q) { return q.arbitrary_face.get(); });
1929 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:446

◆ 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 322 of file Assembly.h.

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

libMesh::QBase * _current_qrule_face
quadrature rule used on faces
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:120

◆ 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 1919 of file Assembly.C.

Referenced by reinitElemFaceRef().

1920 {
1921  return qruleFaceHelper<QBase>(elem, side, [](QRules & q) { return q.face.get(); });
1922 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:446

◆ qruleFaceHelper()

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

Definition at line 2472 of file Assembly.h.

2473  {
2474  auto dim = elem->dim();
2475  auto neighbor = elem->neighbor_ptr(side);
2476  auto q = rule_fn(qrules(dim, elem->subdomain_id()));
2477  if (!neighbor)
2478  return q;
2479 
2480  // find the maximum face quadrature order for all blocks the face is in
2481  auto neighbor_block = neighbor->subdomain_id();
2482  if (neighbor_block == elem->subdomain_id())
2483  return q;
2484 
2485  auto q_neighbor = rule_fn(qrules(dim, neighbor_block));
2486  if (q->get_order() > q_neighbor->get_order())
2487  return q;
2488  return q_neighbor;
2489  }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2491
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:470
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:446

◆ qRuleMortar()

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

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

Definition at line 712 of file Assembly.h.

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

712 { 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:120
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition: Assembly.h:2587

◆ 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 518 of file Assembly.h.

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

519  {
521  }
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition: Assembly.h:2564
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:120

◆ qrules() [1/2]

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

Definition at line 2491 of file Assembly.h.

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

2491 { 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:165
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2491
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition: Assembly.h:2599

◆ 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 2496 of file Assembly.h.

2497  {
2498  if (_qrules.find(block) == _qrules.end())
2499  {
2500  mooseAssert(_qrules.find(Moose::ANY_BLOCK_ID) != _qrules.end(),
2501  "missing quadrature rules for specified block");
2502  mooseAssert(_qrules[Moose::ANY_BLOCK_ID].size() > dim,
2503  "quadrature rules not sized property for dimension");
2504  return _qrules[Moose::ANY_BLOCK_ID][dim];
2505  }
2506  mooseAssert(_qrules.find(block) != _qrules.end(),
2507  "missing quadrature rules for specified block");
2508  mooseAssert(_qrules[block].size() > dim, "quadrature rules not sized property for dimension");
2509  return _qrules[block][dim];
2510  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
std::unordered_map< SubdomainID, std::vector< QRules > > _qrules
Holds quadrature rules for each dimension.
Definition: Assembly.h:2460
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 1794 of file Assembly.C.

1795 {
1796  _current_elem = elem;
1797  _current_neighbor_elem = nullptr;
1799  "current subdomain has been set incorrectly");
1801 
1802  FEMap::inverse_map(elem->dim(), elem, physical_points, _temp_reference_points);
1803 
1805 
1806  // Save off the physical points
1807  _current_physical_points = physical_points;
1808 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
MooseArray< Point > _current_physical_points
This will be filled up with the physical points passed into reinitAtPhysical() if it is called...
Definition: Assembly.h:2647
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
Definition: Assembly.h:2627
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition: Assembly.h:2611
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2597
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:2825
subdomain_id_type subdomain_id() const
virtual unsigned short dim() const=0
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition: Assembly.h:2599

◆ 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 2274 of file Assembly.C.

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

2277 {
2278  const unsigned int elem_dim = elem->dim();
2279  mooseAssert(elem_dim == _mesh_dimension - 1,
2280  "Dual shape functions should only be computed on lower dimensional face elements");
2281 
2282  for (const auto & it : _fe_lower[elem_dim])
2283  {
2284  FEBase & fe_lower = *it.second;
2285  // We use customized quadrature rule for integration along the mortar segment elements
2286  fe_lower.set_calculate_default_dual_coeff(false);
2287  fe_lower.reinit_dual_shape_coeffs(elem, pts, JxW);
2288  }
2289 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
unsigned int _mesh_dimension
Definition: Assembly.h:2355
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2557
const MooseArray< Real > & JxW() const
Returns the reference to the transformed jacobian weights.
Definition: Assembly.h:276
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 1996 of file Assembly.C.

2001 {
2002  _current_neighbor_side = neighbor_side;
2003 
2004  reinit(elem, side);
2005 
2006  unsigned int neighbor_dim = neighbor->dim();
2007 
2008  if (neighbor_reference_points)
2009  _current_neighbor_ref_points = *neighbor_reference_points;
2010  else
2011  FEMap::inverse_map(
2013 
2015 
2018 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
std::vector< Point > _current_neighbor_ref_points
The current reference points on the neighbor element.
Definition: Assembly.h:2905
void reinitFEFaceNeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Definition: Assembly.C:1575
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:2615
void reinitNeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Reinitializes the neighbor side using reference coordinates.
Definition: Assembly.C:1689
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:2880
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:470
const Elem * _current_neighbor_side_elem
The current side element of the ncurrent neighbor element.
Definition: Assembly.h:2617
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:446
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2527

◆ 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 2021 of file Assembly.C.

Referenced by SubProblem::reinitElemFaceRef().

2026 {
2027  _current_elem = elem;
2028 
2029  unsigned int elem_dim = elem->dim();
2030 
2031  // Attach the quadrature rules
2032  if (pts)
2033  {
2034  auto face_rule = qruleArbitraryFace(elem, elem_side);
2035  face_rule->setPoints(*pts);
2036  setFaceQRule(face_rule, elem_dim);
2037  }
2038  else
2039  {
2040  auto rule = qruleFace(elem, elem_side);
2041  if (_current_qrule_face != rule)
2042  setFaceQRule(rule, elem_dim);
2043  }
2044 
2045  // reinit face
2046  for (const auto & it : _fe_face[elem_dim])
2047  {
2048  FEBase & fe_face = *it.second;
2049  FEType fe_type = it.first;
2050  FEShapeData & fesd = *_fe_shape_data_face[fe_type];
2051 
2052  fe_face.reinit(elem, elem_side, tolerance, pts, weights);
2053 
2054  _current_fe_face[fe_type] = &fe_face;
2055 
2056  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face.get_phi()));
2057  fesd._grad_phi.shallowCopy(
2058  const_cast<std::vector<std::vector<RealGradient>> &>(fe_face.get_dphi()));
2059  if (_need_second_derivative_neighbor.count(fe_type))
2060  fesd._second_phi.shallowCopy(
2061  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_d2phi()));
2062  }
2063  for (const auto & it : _vector_fe_face[elem_dim])
2064  {
2065  FEVectorBase & fe_face = *it.second;
2066  const FEType & fe_type = it.first;
2067 
2068  _current_vector_fe_face[fe_type] = &fe_face;
2069 
2070  VectorFEShapeData & fesd = *_vector_fe_shape_data_face[fe_type];
2071 
2072  fe_face.reinit(elem, elem_side, tolerance, pts, weights);
2073 
2074  fesd._phi.shallowCopy(
2075  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_phi()));
2076  fesd._grad_phi.shallowCopy(
2077  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_dphi()));
2078  if (_need_second_derivative.count(fe_type))
2079  fesd._second_phi.shallowCopy(
2080  const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe_face.get_d2phi()));
2081  if (_need_curl.count(fe_type))
2082  fesd._curl_phi.shallowCopy(
2083  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_curl_phi()));
2084  if (_need_face_div.count(fe_type))
2085  fesd._div_phi.shallowCopy(
2086  const_cast<std::vector<std::vector<Real>> &>(fe_face.get_div_phi()));
2087  }
2088  if (!_unique_fe_face_helper.empty())
2089  {
2090  mooseAssert(elem_dim < _unique_fe_face_helper.size(), "We should be in bounds here");
2091  _unique_fe_face_helper[elem_dim]->reinit(elem, elem_side, tolerance, pts, weights);
2092  }
2093 
2094  // During that last loop the helper objects will have been reinitialized
2096  const_cast<std::vector<Point> &>(_holder_fe_face_helper[elem_dim]->get_xyz()));
2098  const_cast<std::vector<Point> &>(_holder_fe_face_helper[elem_dim]->get_normals()));
2099  _current_tangents.shallowCopy(const_cast<std::vector<std::vector<Point>> &>(
2100  _holder_fe_face_helper[elem_dim]->get_tangents()));
2101  // Note that if the user did pass in points and not weights to this method, JxW will be garbage
2102  // and should not be used
2104  const_cast<std::vector<Real> &>(_holder_fe_face_helper[elem_dim]->get_JxW()));
2107  const_cast<std::vector<Real> &>(_holder_fe_face_helper[elem_dim]->get_curvatures()));
2108 
2109  computeADFace(*elem, elem_side);
2110 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2515
MooseArray< Real > _curvatures
Definition: Assembly.h:2850
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:676
ArbitraryQuadrature * qruleArbitraryFace(const Elem *elem, unsigned int side)
Definition: Assembly.C:1925
std::map< FEType, FEBase * > _current_fe_face
The "face" fe object that matches the current elem.
Definition: Assembly.h:2385
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2529
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2597
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
Definition: Assembly.h:2371
std::map< FEType, FEVectorBase * > _current_vector_fe_face
The "face" vector fe object that matches the current elem.
Definition: Assembly.h:2394
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:2523
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2867
const std::vector< std::vector< OutputGradient > > & get_dphi() const
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2775
MooseArray< std::vector< Point > > _current_tangents
The current tangent vectors at the quadrature points.
Definition: Assembly.h:2535
bool _calculate_curvatures
Definition: Assembly.h:2860
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:2868
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2517
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:1919
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
MooseArray< Point > _current_normals
The current Normal vectors at the quadrature points.
Definition: Assembly.h:2531
virtual unsigned short dim() const=0
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition: Assembly.h:2767
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2519
void computeADFace(const Elem &elem, const unsigned int side)
compute AD things on an element face
Definition: Assembly.C:2113
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2527
std::set< FEType > _need_face_div
Definition: Assembly.h:2870
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 762 of file Assembly.C.

763 {
764  unsigned int dim = elem->dim();
765 
766  for (const auto & it : _fe[dim])
767  {
768  FEBase & fe = *it.second;
769  const FEType & fe_type = it.first;
770 
771  _current_fe[fe_type] = &fe;
772 
773  FEShapeData & fesd = *_fe_shape_data[fe_type];
774 
775  fe.reinit(elem);
776 
777  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe.get_phi()));
778  fesd._grad_phi.shallowCopy(
779  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe.get_dphi()));
780  if (_need_second_derivative.count(fe_type))
781  fesd._second_phi.shallowCopy(
782  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe.get_d2phi()));
783  }
784  for (const auto & it : _vector_fe[dim])
785  {
786  FEVectorBase & fe = *it.second;
787  const FEType & fe_type = it.first;
788 
789  _current_vector_fe[fe_type] = &fe;
790 
791  VectorFEShapeData & fesd = *_vector_fe_shape_data[fe_type];
792 
793  fe.reinit(elem);
794 
795  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe.get_phi()));
796  fesd._grad_phi.shallowCopy(
797  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe.get_dphi()));
798  if (_need_second_derivative.count(fe_type))
799  fesd._second_phi.shallowCopy(
800  const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe.get_d2phi()));
801  if (_need_curl.count(fe_type))
802  fesd._curl_phi.shallowCopy(
803  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe.get_curl_phi()));
804  if (_need_div.count(fe_type))
805  fesd._div_phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe.get_div_phi()));
806  }
807  if (!_unique_fe_helper.empty())
808  {
809  mooseAssert(dim < _unique_fe_helper.size(), "We should be in bounds here");
810  _unique_fe_helper[dim]->reinit(elem);
811  }
812 
813  // During that last loop the helper objects will have been reinitialized as well
814  // We need to dig out the q_points and JxW from it.
816  const_cast<std::vector<Point> &>(_holder_fe_helper[dim]->get_xyz()));
817  _current_JxW.shallowCopy(const_cast<std::vector<Real> &>(_holder_fe_helper[dim]->get_JxW()));
818 
820  {
821  auto n_qp = _current_qrule->n_points();
823  if (_displaced)
824  {
825  const auto & qw = _current_qrule->get_weights();
826  for (unsigned int qp = 0; qp != n_qp; qp++)
828  }
829  else
830  {
831  for (unsigned qp = 0; qp < n_qp; ++qp)
832  _ad_JxW[qp] = _current_JxW[qp];
833  if (_calculate_xyz)
834  for (unsigned qp = 0; qp < n_qp; ++qp)
836  }
837 
838  for (const auto & it : _fe[dim])
839  {
840  FEBase & fe = *it.second;
841  auto fe_type = it.first;
842  auto num_shapes = FEInterface::n_shape_functions(fe_type, elem);
843  auto & grad_phi = _ad_grad_phi_data[fe_type];
844 
845  grad_phi.resize(num_shapes);
846  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
847  grad_phi[i].resize(n_qp);
848 
849  if (_displaced)
850  computeGradPhiAD(elem, n_qp, grad_phi, &fe);
851  else
852  {
853  const auto & regular_grad_phi = _fe_shape_data[fe_type]->_grad_phi;
854  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
855  for (unsigned qp = 0; qp < n_qp; ++qp)
856  grad_phi[i][qp] = regular_grad_phi[i][qp];
857  }
858  }
859  for (const auto & it : _vector_fe[dim])
860  {
861  FEVectorBase & fe = *it.second;
862  auto fe_type = it.first;
863  auto num_shapes = FEInterface::n_shape_functions(fe_type, elem);
864  auto & grad_phi = _ad_vector_grad_phi_data[fe_type];
865 
866  grad_phi.resize(num_shapes);
867  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
868  grad_phi[i].resize(n_qp);
869 
870  if (_displaced)
871  computeGradPhiAD(elem, n_qp, grad_phi, &fe);
872  else
873  {
874  const auto & regular_grad_phi = _vector_fe_shape_data[fe_type]->_grad_phi;
875  for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
876  for (unsigned qp = 0; qp < n_qp; ++qp)
877  grad_phi[i][qp] = regular_grad_phi[i][qp];
878  }
879  }
880  }
881 
882  auto n = numExtraElemIntegers();
883  for (auto i : make_range(n))
886 
887  if (_xfem != nullptr)
889 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
std::map< FEType, FEBase * > _current_fe
The "volume" fe object that matches the current elem.
Definition: Assembly.h:2383
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:2405
virtual void haveADObjects(bool have_ad_objects)
Method for setting whether we have any ad objects.
Definition: SubProblem.h:775
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition: Assembly.h:2766
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition: Assembly.h:2380
void modifyWeightsDueToXFEM(const Elem *elem)
Update the integration weights for XFEM partial elements.
Definition: Assembly.C:4518
const std::vector< Real > & get_weights() const
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2597
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
void resizeADMappingObjects(unsigned int n_qp, unsigned int dim)
resize any objects that contribute to automatic differentiation-related mapping calculations ...
Definition: Assembly.C:973
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:2370
unsigned int numExtraElemIntegers() const
Number of extra element integers Assembly tracked.
Definition: Assembly.h:373
std::map< FEType, FEVectorBase * > _current_vector_fe
The "volume" vector fe object that matches the current elem.
Definition: Assembly.h:2392
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:2781
SubProblem & _subproblem
Definition: Assembly.h:2314
bool _calculate_xyz
Definition: Assembly.h:2858
MooseArray< Real > _current_JxW
The current list of transformed jacobian weights.
Definition: Assembly.h:2421
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:2868
unsigned int n_points() const
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
Definition: Assembly.h:2782
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2411
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2403
std::set< FEType > _need_div
Definition: Assembly.h:2869
const bool _displaced
Definition: Assembly.h:2316
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2836
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:2774
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:1003
std::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2407
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition: Assembly.h:2538
MooseArray< Point > _current_q_points
The current list of quadrature points.
Definition: Assembly.h:2419
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:2835

◆ 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 1270 of file Assembly.C.

1271 {
1272  unsigned int dim = elem->dim();
1273 
1274  for (const auto & it : _fe_face[dim])
1275  {
1276  FEBase & fe_face = *it.second;
1277  const FEType & fe_type = it.first;
1278  FEShapeData & fesd = *_fe_shape_data_face[fe_type];
1279  fe_face.reinit(elem, side);
1280  _current_fe_face[fe_type] = &fe_face;
1281 
1282  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face.get_phi()));
1283  fesd._grad_phi.shallowCopy(
1284  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_dphi()));
1285  if (_need_second_derivative.count(fe_type))
1286  fesd._second_phi.shallowCopy(
1287  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_d2phi()));
1288  }
1289  for (const auto & it : _vector_fe_face[dim])
1290  {
1291  FEVectorBase & fe_face = *it.second;
1292  const FEType & fe_type = it.first;
1293 
1294  _current_vector_fe_face[fe_type] = &fe_face;
1295 
1296  VectorFEShapeData & fesd = *_vector_fe_shape_data_face[fe_type];
1297 
1298  fe_face.reinit(elem, side);
1299 
1300  fesd._phi.shallowCopy(
1301  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_phi()));
1302  fesd._grad_phi.shallowCopy(
1303  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_dphi()));
1304  if (_need_second_derivative.count(fe_type))
1305  fesd._second_phi.shallowCopy(
1306  const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe_face.get_d2phi()));
1307  if (_need_curl.count(fe_type))
1308  fesd._curl_phi.shallowCopy(
1309  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_curl_phi()));
1310  if (_need_face_div.count(fe_type))
1311  fesd._div_phi.shallowCopy(
1312  const_cast<std::vector<std::vector<Real>> &>(fe_face.get_div_phi()));
1313  }
1314  if (!_unique_fe_face_helper.empty())
1315  {
1316  mooseAssert(dim < _unique_fe_face_helper.size(), "We should be in bounds here");
1317  _unique_fe_face_helper[dim]->reinit(elem, side);
1318  }
1319 
1320  // During that last loop the helper objects will have been reinitialized as well
1321  // We need to dig out the q_points and JxW from it.
1323  const_cast<std::vector<Point> &>(_holder_fe_face_helper[dim]->get_xyz()));
1325  const_cast<std::vector<Real> &>(_holder_fe_face_helper[dim]->get_JxW()));
1327  const_cast<std::vector<Point> &>(_holder_fe_face_helper[dim]->get_normals()));
1328 
1329  _mapped_normals.resize(_current_normals.size(), Eigen::Map<RealDIMValue>(nullptr));
1330  for (unsigned int i = 0; i < _current_normals.size(); i++)
1331  // Note: this does NOT do any allocation. It is "reconstructing" the object in place
1332  new (&_mapped_normals[i]) Eigen::Map<RealDIMValue>(const_cast<Real *>(&_current_normals[i](0)));
1333 
1336  const_cast<std::vector<Real> &>(_holder_fe_face_helper[dim]->get_curvatures()));
1337 
1338  computeADFace(*elem, side);
1339 
1340  if (_xfem != nullptr)
1342 
1343  auto n = numExtraElemIntegers();
1344  for (auto i : make_range(n))
1347 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2515
MooseArray< Real > _curvatures
Definition: Assembly.h:2850
virtual_for_inffe const std::vector< std::vector< OutputDivergence > > & get_div_phi() const
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition: Assembly.h:2380
std::map< FEType, FEBase * > _current_fe_face
The "face" fe object that matches the current elem.
Definition: Assembly.h:2385
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition: Assembly.h:2529
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2597
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
Definition: Assembly.h:2371
std::map< FEType, FEVectorBase * > _current_vector_fe_face
The "face" vector fe object that matches the current elem.
Definition: Assembly.h:2394
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:373
void modifyFaceWeightsDueToXFEM(const Elem *elem, unsigned int side=0)
Update the face integration weights for XFEM partial elements.
Definition: Assembly.C:4538
std::vector< Eigen::Map< RealDIMValue > > _mapped_normals
Mapped normals.
Definition: Assembly.h:2533
const std::vector< std::vector< OutputGradient > > & get_dphi() const
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition: Assembly.h:2775
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:2860
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:2868
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2517
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
MooseArray< Point > _current_normals
The current Normal vectors at the quadrature points.
Definition: Assembly.h:2531
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:2767
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2519
IntRange< T > make_range(T beg, T end)
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition: Assembly.h:2538
const unsigned int & side() const
Returns the current side.
Definition: Assembly.h:446
void computeADFace(const Elem &elem, const unsigned int side)
compute AD things on an element face
Definition: Assembly.C:2113
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2527
std::set< FEType > _need_face_div
Definition: Assembly.h:2870
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 1575 of file Assembly.C.

Referenced by reinitElemAndNeighbor().

1576 {
1577  unsigned int neighbor_dim = neighbor->dim();
1578 
1579  // reinit neighbor face
1580  for (const auto & it : _fe_face_neighbor[neighbor_dim])
1581  {
1582  FEBase & fe_face_neighbor = *it.second;
1583  FEType fe_type = it.first;
1584  FEShapeData & fesd = *_fe_shape_data_face_neighbor[fe_type];
1585 
1586  fe_face_neighbor.reinit(neighbor, &reference_points);
1587 
1588  _current_fe_face_neighbor[fe_type] = &fe_face_neighbor;
1589 
1590  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_phi()));
1591  fesd._grad_phi.shallowCopy(
1592  const_cast<std::vector<std::vector<RealGradient>> &>(fe_face_neighbor.get_dphi()));
1593  if (_need_second_derivative_neighbor.count(fe_type))
1594  fesd._second_phi.shallowCopy(
1595  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_d2phi()));
1596  }
1597  for (const auto & it : _vector_fe_face_neighbor[neighbor_dim])
1598  {
1599  FEVectorBase & fe_face_neighbor = *it.second;
1600  const FEType & fe_type = it.first;
1601 
1602  _current_vector_fe_face_neighbor[fe_type] = &fe_face_neighbor;
1603 
1604  VectorFEShapeData & fesd = *_vector_fe_shape_data_face_neighbor[fe_type];
1605 
1606  fe_face_neighbor.reinit(neighbor, &reference_points);
1607 
1608  fesd._phi.shallowCopy(
1609  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face_neighbor.get_phi()));
1610  fesd._grad_phi.shallowCopy(
1611  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_dphi()));
1612  if (_need_second_derivative.count(fe_type))
1613  fesd._second_phi.shallowCopy(const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(
1614  fe_face_neighbor.get_d2phi()));
1615  if (_need_curl.count(fe_type))
1616  fesd._curl_phi.shallowCopy(const_cast<std::vector<std::vector<VectorValue<Real>>> &>(
1617  fe_face_neighbor.get_curl_phi()));
1618  if (_need_face_neighbor_div.count(fe_type))
1619  fesd._div_phi.shallowCopy(
1620  const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_div_phi()));
1621  }
1622  if (!_unique_fe_face_neighbor_helper.empty())
1623  {
1624  mooseAssert(neighbor_dim < _unique_fe_face_neighbor_helper.size(),
1625  "We should be in bounds here");
1626  _unique_fe_face_neighbor_helper[neighbor_dim]->reinit(neighbor, &reference_points);
1627  }
1628 
1630  const_cast<std::vector<Point> &>(_holder_fe_face_neighbor_helper[neighbor_dim]->get_xyz()));
1631 }
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:2769
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition: Assembly.h:2554
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2550
std::map< FEType, FEBase * > _current_fe_face_neighbor
The "neighbor face" fe object that matches the current elem.
Definition: Assembly.h:2389
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:2867
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:2398
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:2868
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
std::set< FEType > _need_face_neighbor_div
Definition: Assembly.h:2872
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2777
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:470
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
Definition: Assembly.h:2372
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2548
MooseArray< Point > _current_q_points_face_neighbor
The current quadrature points on the neighbor face.
Definition: Assembly.h:2566
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 1634 of file Assembly.C.

1635 {
1636  unsigned int neighbor_dim = neighbor->dim();
1637 
1638  // reinit neighbor face
1639  for (const auto & it : _fe_neighbor[neighbor_dim])
1640  {
1641  FEBase & fe_neighbor = *it.second;
1642  FEType fe_type = it.first;
1643  FEShapeData & fesd = *_fe_shape_data_neighbor[fe_type];
1644 
1645  fe_neighbor.reinit(neighbor, &reference_points);
1646 
1647  _current_fe_neighbor[fe_type] = &fe_neighbor;
1648 
1649  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_neighbor.get_phi()));
1650  fesd._grad_phi.shallowCopy(
1651  const_cast<std::vector<std::vector<RealGradient>> &>(fe_neighbor.get_dphi()));
1652  if (_need_second_derivative_neighbor.count(fe_type))
1653  fesd._second_phi.shallowCopy(
1654  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_neighbor.get_d2phi()));
1655  }
1656  for (const auto & it : _vector_fe_neighbor[neighbor_dim])
1657  {
1658  FEVectorBase & fe_neighbor = *it.second;
1659  const FEType & fe_type = it.first;
1660 
1661  _current_vector_fe_neighbor[fe_type] = &fe_neighbor;
1662 
1663  VectorFEShapeData & fesd = *_vector_fe_shape_data_neighbor[fe_type];
1664 
1665  fe_neighbor.reinit(neighbor, &reference_points);
1666 
1667  fesd._phi.shallowCopy(
1668  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_neighbor.get_phi()));
1669  fesd._grad_phi.shallowCopy(
1670  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_neighbor.get_dphi()));
1671  if (_need_second_derivative.count(fe_type))
1672  fesd._second_phi.shallowCopy(
1673  const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe_neighbor.get_d2phi()));
1674  if (_need_curl.count(fe_type))
1675  fesd._curl_phi.shallowCopy(
1676  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_neighbor.get_curl_phi()));
1677  if (_need_neighbor_div.count(fe_type))
1678  fesd._div_phi.shallowCopy(
1679  const_cast<std::vector<std::vector<Real>> &>(fe_neighbor.get_div_phi()));
1680  }
1681  if (!_unique_fe_neighbor_helper.empty())
1682  {
1683  mooseAssert(neighbor_dim < _unique_fe_neighbor_helper.size(), "We should be in bounds here");
1684  _unique_fe_neighbor_helper[neighbor_dim]->reinit(neighbor, &reference_points);
1685  }
1686 }
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:2373
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition: Assembly.h:2768
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2867
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:2387
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition: Assembly.h:2547
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:2871
std::set< FEType > _need_curl
Definition: Assembly.h:2868
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:470
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition: Assembly.h:2549
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition: Assembly.h:2776
std::map< FEType, FEVectorBase * > _current_vector_fe_neighbor
The "neighbor" vector fe object that matches the current elem.
Definition: Assembly.h:2396
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 1859 of file Assembly.C.

Referenced by SubProblem::reinitFVFace().

1860 {
1861  _current_elem = &fi.elem();
1863  _current_side = fi.elemSideID();
1866  "current subdomain has been set incorrectly");
1867 
1870 
1871  prepareResidual();
1872  prepareNeighbor();
1874 
1875  unsigned int dim = _current_elem->dim();
1876  if (_current_qrule_face != qrules(dim).fv_face.get())
1877  {
1878  setFaceQRule(qrules(dim).fv_face.get(), dim);
1879  // The order of the element that is used for initing here doesn't matter since this will just
1880  // be used for constant monomials (which only need a single integration point)
1881  if (dim == 3)
1882  _current_qrule_face->init(QUAD4, /* p_level = */ 0, /* simple_type_only = */ true);
1883  else
1884  _current_qrule_face->init(EDGE2, /* p_level = */ 0, /* simple_type_only = */ true);
1885  }
1886 
1888 
1889  mooseAssert(_current_qrule_face->n_points() == 1,
1890  "Our finite volume quadrature rule should always yield a single point");
1891 
1892  // We've initialized the reference points. Now we need to compute the physical location of the
1893  // quadrature points. We do not do any FE initialization so we cannot simply copy over FE
1894  // results like we do in reinitFEFace. Instead we handle the computation of the physical
1895  // locations manually
1897  const auto & ref_points = _current_qrule_face->get_points();
1898  const auto & ref_point = ref_points[0];
1899  auto physical_point = FEMap::map(_current_side_elem->dim(), _current_side_elem, ref_point);
1900  _current_q_points_face[0] = physical_point;
1901 
1903  {
1905  "current neighbor subdomain has been set incorrectly");
1906  // Now handle the neighbor qrule/qpoints
1907  ArbitraryQuadrature * const neighbor_rule =
1909  // Here we are setting a reference point that is correct for the neighbor *side* element. It
1910  // would be wrong if this reference point is used for a volumetric FE reinit with the neighbor
1911  neighbor_rule->setPoints(ref_points);
1912  setNeighborQRule(neighbor_rule, _current_neighbor_elem->dim());
1914  _current_q_points_face_neighbor[0] = std::move(physical_point);
1915  }
1916 }
void setFaceQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for face integration.
Definition: Assembly.C:676
void prepareJacobianBlock()
Sizes and zeroes the Jacobian blocks used for the current element.
Definition: Assembly.C:2686
const Elem & elem() const
Definition: FaceInfo.h:85
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
Definition: Assembly.h:2627
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition: Assembly.h:2611
const Elem * _current_elem
The current "element" we are currently on.
Definition: Assembly.h:2597
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
void prepareNeighbor()
Definition: Assembly.C:2812
unsigned int elemSideID() const
Definition: FaceInfo.h:113
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2523
unsigned int neighborSideID() const
Definition: FaceInfo.h:114
unsigned int _current_neighbor_side
The current side of the selected neighboring element (valid only when working with sides) ...
Definition: Assembly.h:2615
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2491
Implements a fake quadrature rule where you can specify the locations (in the reference domain) of th...
const Elem * neighborPtr() const
Definition: FaceInfo.h:88
void prepareResidual()
Sizes and zeroes the residual for the current element.
Definition: Assembly.C:2710
SubdomainID _current_neighbor_subdomain_id
The current neighbor subdomain ID.
Definition: Assembly.h:2613
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:711
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:470
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:2605
bool _current_side_volume_computed
Boolean to indicate whether current element side volumes has been computed.
Definition: Assembly.h:2629
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition: Assembly.h:2527
const Elem * _current_side_elem
The current "element" making up the side we are currently on.
Definition: Assembly.h:2607
MooseArray< Point > _current_q_points_face_neighbor
The current quadrature points on the neighbor face.
Definition: Assembly.h:2566
libMesh::ElemSideBuilder _current_side_elem_builder
In place side element builder for _current_side_elem.
Definition: Assembly.h:2878
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition: Assembly.h:2599

◆ 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 2292 of file Assembly.C.

Referenced by SubProblem::reinitLowerDElem().

2295 {
2297 
2298  const unsigned int elem_dim = elem->dim();
2299  mooseAssert(elem_dim < _mesh_dimension,
2300  "The lower dimensional element should truly be a lower dimensional element");
2301 
2302  if (pts)
2303  {
2304  // Lower rule matches the face rule for the higher dimensional element
2305  ArbitraryQuadrature * lower_rule = qrules(elem_dim + 1).arbitrary_face.get();
2306 
2307  // This also sets the quadrature weights to unity
2308  lower_rule->setPoints(*pts);
2309 
2310  if (weights)
2311  lower_rule->setWeights(*weights);
2312 
2313  setLowerQRule(lower_rule, elem_dim);
2314  }
2315  else if (_current_qrule_lower != qrules(elem_dim + 1).face.get())
2316  setLowerQRule(qrules(elem_dim + 1).face.get(), elem_dim);
2317 
2318  for (const auto & it : _fe_lower[elem_dim])
2319  {
2320  FEBase & fe_lower = *it.second;
2321  FEType fe_type = it.first;
2322 
2323  fe_lower.reinit(elem);
2324 
2325  if (FEShapeData * fesd = _fe_shape_data_lower[fe_type].get())
2326  {
2327  fesd->_phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_lower.get_phi()));
2328  fesd->_grad_phi.shallowCopy(
2329  const_cast<std::vector<std::vector<RealGradient>> &>(fe_lower.get_dphi()));
2330  if (_need_second_derivative_neighbor.count(fe_type))
2331  fesd->_second_phi.shallowCopy(
2332  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_lower.get_d2phi()));
2333  }
2334 
2335  // Dual shape functions need to be computed after primal basis being initialized
2336  if (FEShapeData * fesd = _fe_shape_data_dual_lower[fe_type].get())
2337  {
2338  fesd->_phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_lower.get_dual_phi()));
2339  fesd->_grad_phi.shallowCopy(
2340  const_cast<std::vector<std::vector<RealGradient>> &>(fe_lower.get_dual_dphi()));
2341  if (_need_second_derivative_neighbor.count(fe_type))
2342  fesd->_second_phi.shallowCopy(
2343  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_lower.get_dual_d2phi()));
2344  }
2345  }
2346  if (!_unique_fe_lower_helper.empty())
2347  {
2348  mooseAssert(elem_dim < _unique_fe_lower_helper.size(), "We should be in bounds here");
2349  _unique_fe_lower_helper[elem_dim]->reinit(elem);
2350  }
2351 
2353  return;
2354 
2355  if (pts && !weights)
2356  {
2357  // We only have dummy weights so the JxWs computed during our FE reinits are meaningless and
2358  // we cannot use them
2359 
2361  // We are in a Cartesian coordinate system and we can just use the element volume method
2362  // which has fast computation for certain element types
2364  else
2365  // We manually compute the volume taking the curvilinear coordinate transformations into
2366  // account
2368  }
2369  else
2370  {
2371  // During that last loop the helper objects will have been reinitialized as well
2372  FEBase & helper_fe = *_holder_fe_lower_helper[elem_dim];
2373  const auto & physical_q_points = helper_fe.get_xyz();
2374  const auto & JxW = helper_fe.get_JxW();
2375  MooseArray<Real> coord;
2377  _current_qrule_lower, physical_q_points, coord, elem->subdomain_id());
2379  for (const auto qp : make_range(_current_qrule_lower->n_points()))
2380  _current_lower_d_elem_volume += JxW[qp] * coord[qp];
2381  }
2382 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
std::vector< std::unique_ptr< FEBase > > _unique_fe_lower_helper
Definition: Assembly.h:2374
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:1733
std::set< FEType > _need_second_derivative_neighbor
Definition: Assembly.h:2867
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:2445
unsigned int _mesh_dimension
Definition: Assembly.h:2355
const std::vector< std::vector< OutputGradient > > & get_dphi() const
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2491
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:3757
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:2593
SubProblem & _subproblem
Definition: Assembly.h:2314
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:2770
const Elem * _current_lower_d_elem
The current lower dimensional element.
Definition: Assembly.h:2632
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2557
Real _current_lower_d_elem_volume
The current lower dimensional element volume.
Definition: Assembly.h:2638
const MooseArray< Real > & JxW() const
Returns the reference to the transformed jacobian weights.
Definition: Assembly.h:276
subdomain_id_type subdomain_id() const
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
Definition: Assembly.h:2771
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:2636
virtual Real volume() const
IntRange< T > make_range(T beg, T end)
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
Definition: SubProblem.C:1283
std::unique_ptr< ArbitraryQuadrature > arbitrary_face
area/face (meshdim-1) custom points quadrature rule
Definition: Assembly.h:2451
void setLowerQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for lower dimensional integration.
Definition: Assembly.C:692
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
helper object for transforming coordinates for lower dimensional element quadrature points ...
Definition: Assembly.h:2561
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 2406 of file Assembly.C.

Referenced by SubProblem::reinitMortarElem().

2407 {
2408  mooseAssert(elem->dim() == _mesh_dimension - 1,
2409  "You should be calling reinitMortarElem on a lower dimensional element");
2410 
2411  _fe_msm->reinit(elem);
2412  _msm_elem = elem;
2413 
2414  MooseArray<Point> array_q_points;
2415  array_q_points.shallowCopy(const_cast<std::vector<Point> &>(_fe_msm->get_xyz()));
2417 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
Definition: Assembly.h:2582
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
Definition: Assembly.C:1733
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:2355
const Elem * _msm_elem
Definition: Assembly.h:2884
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition: Assembly.h:2587
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:2575

◆ reinitNeighbor()

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

Reinitializes the neighbor side using reference coordinates.

Definition at line 1689 of file Assembly.C.

Referenced by reinitElemAndNeighbor().

1690 {
1691  unsigned int neighbor_dim = neighbor->dim();
1693  "Neighbor subdomain ID has not been correctly set");
1694 
1695  ArbitraryQuadrature * neighbor_rule =
1696  qrules(neighbor_dim, _current_neighbor_subdomain_id).neighbor.get();
1697  neighbor_rule->setPoints(reference_points);
1698  setNeighborQRule(neighbor_rule, neighbor_dim);
1699 
1702  "current neighbor subdomain has been set incorrectly");
1703 
1704  // Calculate the volume of the neighbor
1706  {
1707  unsigned int dim = neighbor->dim();
1709  QBase * qrule = qrules(dim).vol.get();
1710 
1711  fe.attach_quadrature_rule(qrule);
1712  fe.reinit(neighbor);
1713 
1714  const std::vector<Real> & JxW = fe.get_JxW();
1715  MooseArray<Point> q_points;
1716  q_points.shallowCopy(const_cast<std::vector<Point> &>(fe.get_xyz()));
1717 
1719 
1721  for (unsigned int qp = 0; qp < qrule->n_points(); qp++)
1723  }
1724 
1725  auto n = numExtraElemIntegers();
1726  for (auto i : make_range(n))
1729 }
bool _need_neighbor_elem_volume
true is apps need to compute neighbor element volume
Definition: Assembly.h:2619
MooseArray< Real > _coord_neighbor
The current coordinate transformation coefficients.
Definition: Assembly.h:2572
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension&#39;s helper objects.
Definition: Assembly.h:2553
Real _current_neighbor_volume
Volume of the current neighbor.
Definition: Assembly.h:2621
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition: Assembly.h:2611
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
Definition: Assembly.C:1733
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:373
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2491
std::unique_ptr< libMesh::QBase > vol
volume/elem (meshdim) quadrature rule
Definition: Assembly.h:2443
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:2613
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:2540
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:276
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:711
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:470
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:2453
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 2196 of file Assembly.C.

Referenced by SubProblem::reinitNeighborFaceRef().

2201 {
2203 
2204  unsigned int neighbor_dim = neighbor->dim();
2205 
2206  ArbitraryQuadrature * neighbor_rule =
2207  qrules(neighbor_dim, neighbor->subdomain_id()).neighbor.get();
2208  neighbor_rule->setPoints(*pts);
2209 
2210  // Attach this quadrature rule to all the _fe_face_neighbor FE objects. This
2211  // has to have garbage quadrature weights but that's ok because we never
2212  // actually use the JxW coming from these FE reinit'd objects, e.g. we use the
2213  // JxW coming from the element face reinit for DGKernels or we use the JxW
2214  // coming from reinit of the mortar segment element in the case of mortar
2215  setNeighborQRule(neighbor_rule, neighbor_dim);
2216 
2217  // reinit neighbor face
2218  for (const auto & it : _fe_face_neighbor[neighbor_dim])
2219  {
2220  FEBase & fe_face_neighbor = *it.second;
2221  FEType fe_type = it.first;
2222  FEShapeData & fesd = *_fe_shape_data_face_neighbor[fe_type];
2223 
2224  fe_face_neighbor.reinit(neighbor, neighbor_side, tolerance, pts, weights);
2225 
2226  _current_fe_face_neighbor[fe_type] = &fe_face_neighbor;
2227 
2228  fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_phi()));
2229  fesd._grad_phi.shallowCopy(
2230  const_cast<std::vector<std::vector<RealGradient>> &>(fe_face_neighbor.get_dphi()));
2231  if (_need_second_derivative_neighbor.count(fe_type))
2232  fesd._second_phi.shallowCopy(
2233  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_d2phi()));
2234  }
2235  for (const auto & it : _vector_fe_face_neighbor[neighbor_dim])
2236  {
2237  FEVectorBase & fe_face_neighbor = *it.second;
2238  const FEType & fe_type = it.first;
2239 
2240  _current_vector_fe_face_neighbor[fe_type] = &fe_face_neighbor;
2241 
2242  VectorFEShapeData & fesd = *_vector_fe_shape_data_face_neighbor[fe_type];
2243 
2244  fe_face_neighbor.reinit(neighbor, neighbor_side, tolerance, pts, weights);
2245 
2246  fesd._phi.shallowCopy(
2247  const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face_neighbor.get_phi()));
2248  fesd._grad_phi.shallowCopy(
2249  const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_dphi()));
2250  if (_need_second_derivative.count(fe_type))
2251  fesd._second_phi.shallowCopy(const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(
2252  fe_face_neighbor.get_d2phi()));
2253  if (_need_curl.count(fe_type))
2254  fesd._curl_phi.shallowCopy(const_cast<std::vector<std::vector<VectorValue<Real>>> &>(
2255  fe_face_neighbor.get_curl_phi()));
2256  if (_need_face_neighbor_div.count(fe_type))
2257  fesd._div_phi.shallowCopy(
2258  const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_div_phi()));
2259  }
2260  if (!_unique_fe_face_neighbor_helper.empty())
2261  {
2262  mooseAssert(neighbor_dim < _unique_fe_face_neighbor_helper.size(),
2263  "We should be in bounds here");
2264  _unique_fe_face_neighbor_helper[neighbor_dim]->reinit(
2265  neighbor, neighbor_side, tolerance, pts, weights);
2266  }
2267  // During that last loop the helper objects will have been reinitialized as well
2268  // We need to dig out the q_points from it
2270  const_cast<std::vector<Point> &>(_holder_fe_face_neighbor_helper[neighbor_dim]->get_xyz()));
2271 }
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:2769
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition: Assembly.h:2611
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition: Assembly.h:2554
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2550
std::map< FEType, FEBase * > _current_fe_face_neighbor
The "neighbor face" fe object that matches the current elem.
Definition: Assembly.h:2389
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:2867
const std::vector< std::vector< OutputGradient > > & get_dphi() const
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2491
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:2398
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:2868
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
std::set< FEType > _need_second_derivative
Definition: Assembly.h:2866
std::set< FEType > _need_face_neighbor_div
Definition: Assembly.h:2872
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition: Assembly.h:2777
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:711
virtual unsigned short dim() const=0
const Elem *const & neighbor() const
Return the neighbor element.
Definition: Assembly.h:470
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
Definition: Assembly.h:2372
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2548
MooseArray< Point > _current_q_points_face_neighbor
The current quadrature points on the neighbor face.
Definition: Assembly.h:2566
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 2385 of file Assembly.C.

Referenced by SubProblem::reinitNeighborLowerDElem().

2386 {
2387  mooseAssert(elem->dim() < _mesh_dimension,
2388  "You should be calling reinitNeighborLowerDElem on a lower dimensional element");
2389 
2391 
2393  return;
2394 
2396  // We are in a Cartesian coordinate system and we can just use the element volume method which
2397  // has fast computation for certain element types
2399  else
2400  // We manually compute the volume taking the curvilinear coordinate transformations into
2401  // account
2403 }
const Elem *const & elem() const
Return the current element.
Definition: Assembly.h:414
unsigned int _mesh_dimension
Definition: Assembly.h:2355
const Elem * _current_neighbor_lower_d_elem
The current neighboring lower dimensional element.
Definition: Assembly.h:2634
Real elementVolume(const Elem *elem) const
On-demand computation of volume element accounting for RZ/RSpherical.
Definition: Assembly.C:3757
SubProblem & _subproblem
Definition: Assembly.h:2314
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:1283
Real _current_neighbor_lower_d_elem_volume
The current neighboring lower dimensional element volume.
Definition: Assembly.h:2642
bool _need_neighbor_lower_d_elem_volume
Whether we need to compute the neighboring lower dimensional element volume.
Definition: Assembly.h:2640

◆ 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 1115 of file Assembly.h.

Referenced by TaggingInterface::prepareVectorTagInternal().

1116  {
1117  return _sub_Re[tag_id][var_num];
1118  }
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2661

◆ 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 1133 of file Assembly.h.

Referenced by TaggingInterface::prepareVectorTagLower().

1134  {
1135  return _sub_Rl[tag_id][var_num];
1136  }
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition: Assembly.h:2664

◆ 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 1124 of file Assembly.h.

Referenced by TaggingInterface::prepareVectorTagNeighbor().

1125  {
1126  return _sub_Rn[tag_id][var_num];
1127  }
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2662

◆ 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 973 of file Assembly.C.

Referenced by computeADFace(), and reinitFE().

974 {
975  _ad_dxyzdxi_map.resize(n_qp);
976  _ad_dxidx_map.resize(n_qp);
977  _ad_dxidy_map.resize(n_qp); // 1D element may live in 2D ...
978  _ad_dxidz_map.resize(n_qp); // ... or 3D
979 
980  if (dim > 1)
981  {
982  _ad_dxyzdeta_map.resize(n_qp);
983  _ad_detadx_map.resize(n_qp);
984  _ad_detady_map.resize(n_qp);
985  _ad_detadz_map.resize(n_qp);
986 
987  if (dim > 2)
988  {
989  _ad_dxyzdzeta_map.resize(n_qp);
990  _ad_dzetadx_map.resize(n_qp);
991  _ad_dzetady_map.resize(n_qp);
992  _ad_dzetadz_map.resize(n_qp);
993  }
994  }
995 
996  _ad_jac.resize(n_qp);
997  _ad_JxW.resize(n_qp);
998  if (_calculate_xyz)
999  _ad_q_points.resize(n_qp);
1000 }
std::vector< ADReal > _ad_detadz_map
Definition: Assembly.h:2842
std::vector< ADReal > _ad_detady_map
Definition: Assembly.h:2841
std::vector< ADReal > _ad_dzetadz_map
Definition: Assembly.h:2845
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
std::vector< VectorValue< ADReal > > _ad_dxyzdeta_map
Definition: Assembly.h:2829
std::vector< VectorValue< ADReal > > _ad_dxyzdzeta_map
Definition: Assembly.h:2830
std::vector< ADReal > _ad_dzetadx_map
Definition: Assembly.h:2843
std::vector< ADReal > _ad_dzetady_map
Definition: Assembly.h:2844
std::vector< ADReal > _ad_dxidz_map
Definition: Assembly.h:2839
std::vector< ADReal > _ad_detadx_map
Definition: Assembly.h:2840
bool _calculate_xyz
Definition: Assembly.h:2858
std::vector< VectorValue< ADReal > > _ad_dxyzdxi_map
AD quantities.
Definition: Assembly.h:2828
std::vector< ADReal > _ad_jac
Definition: Assembly.h:2834
std::vector< ADReal > _ad_dxidx_map
Definition: Assembly.h:2837
std::vector< ADReal > _ad_dxidy_map
Definition: Assembly.h:2838
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition: Assembly.h:2836
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:2835

◆ 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 1841 of file Assembly.h.

Referenced by ArrayDGKernel::computeElemNeighJacobian(), ArrayKernel::computeJacobian(), ArrayIntegratedBC::computeJacobian(), ArrayLowerDIntegratedBC::computeLowerDJacobian(), and ArrayDGLowerDKernel::computeLowerDJacobian().

1848  {
1849  unsigned int pace = (_component_block_diagonal[ivar] ? 0 : nphi);
1850  for (unsigned int k = 0; k < v.size(); ++k, i += ntest, j += pace)
1851  ke(i, j) += v(k);
1852  }
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:2819

◆ 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 1866 of file Assembly.h.

Referenced by ArrayLowerDIntegratedBC::computeLowerDOffDiagJacobian(), ArrayDGKernel::computeOffDiagElemNeighJacobian(), ArrayKernel::computeOffDiagJacobian(), ArrayIntegratedBC::computeOffDiagJacobian(), ArrayKernel::computeOffDiagJacobianScalar(), ArrayIntegratedBC::computeOffDiagJacobianScalar(), and ArrayDGLowerDKernel::computeOffDiagLowerDJacobian().

1874  {
1875  if (ivar == jvar && _component_block_diagonal[ivar])
1876  {
1877  for (unsigned int k = 0; k < v.rows(); ++k, i += ntest)
1878  ke(i, j) += v(k, k);
1879  }
1880  else
1881  {
1882  const unsigned int saved_j = j;
1883  for (unsigned int k = 0; k < v.rows(); ++k, i += ntest)
1884  {
1885  j = saved_j;
1886  for (unsigned int l = 0; l < v.cols(); ++l, j += nphi)
1887  ke(i, j) += v(k, l);
1888  }
1889  }
1890  }
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:2819

◆ saveLocalADArray()

void Assembly::saveLocalADArray ( std::vector< ADReal > &  re,
unsigned int  i,
unsigned int  ntest,
const ADRealEigenVector v 
) const

Definition at line 3790 of file Assembly.C.

Referenced by ADArrayKernel::computeJacobian().

3794 {
3795  for (unsigned int j = 0; j < v.size(); ++j, i += ntest)
3796  re[i] += v(j);
3797 }

◆ 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 1817 of file Assembly.h.

Referenced by ArrayDGKernel::computeElemNeighResidual(), ArrayDGLowerDKernel::computeLowerDResidual(), ArrayKernel::computeResidual(), ArrayLowerDIntegratedBC::computeResidual(), ADArrayKernel::computeResidual(), and ArrayIntegratedBC::computeResidual().

1821  {
1822  for (unsigned int j = 0; j < v.size(); ++j, i += ntest)
1823  re(i) += v(j);
1824  }

◆ scalarFieldCouplingEntries()

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

Definition at line 1314 of file Assembly.h.

Referenced by MortarScalarBase::computeScalarOffDiagJacobian().

1315  {
1316  return _cm_sf_entry;
1317  }
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
Entries in the coupling matrix for scalar variables vs field variables.
Definition: Assembly.h:2336

◆ secondPhi() [1/6]

const VariablePhiSecond& Assembly::secondPhi ( ) const
inline

Definition at line 1329 of file Assembly.h.

Referenced by copyShapes().

1329 { return _second_phi; }
VariablePhiSecond _second_phi
Definition: Assembly.h:2706

◆ secondPhi() [2/6]

const VariablePhiSecond& Assembly::secondPhi ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1330 of file Assembly.h.

1331  {
1332  return _second_phi;
1333  }
VariablePhiSecond _second_phi
Definition: Assembly.h:2706

◆ secondPhi() [3/6]

const VectorVariablePhiSecond& Assembly::secondPhi ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1381 of file Assembly.h.

1382  {
1383  return _vector_second_phi;
1384  }
VectorVariablePhiSecond _vector_second_phi
Definition: Assembly.h:2723

◆ secondPhi() [4/6]

VariablePhiSecond& Assembly::secondPhi ( const MooseVariableField< Real > &  )
inline

Definition at line 1467 of file Assembly.h.

1467 { return _second_phi; }
VariablePhiSecond _second_phi
Definition: Assembly.h:2706

◆ secondPhi() [5/6]

VectorVariablePhiSecond& Assembly::secondPhi ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1502 of file Assembly.h.

1503  {
1504  return _vector_second_phi;
1505  }
VectorVariablePhiSecond _vector_second_phi
Definition: Assembly.h:2723

◆ secondPhi() [6/6]

VariablePhiSecond& Assembly::secondPhi ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1580 of file Assembly.h.

1580 { return _second_phi; }
VariablePhiSecond _second_phi
Definition: Assembly.h:2706

◆ secondPhiFace() [1/5]

const VariablePhiSecond& Assembly::secondPhiFace ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1342 of file Assembly.h.

Referenced by copyFaceShapes().

1343  {
1344  return _second_phi_face;
1345  }
VariablePhiSecond _second_phi_face
Definition: Assembly.h:2710

◆ secondPhiFace() [2/5]

const VectorVariablePhiSecond& Assembly::secondPhiFace ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1402 of file Assembly.h.

1403  {
1404  return _vector_second_phi_face;
1405  }
VectorVariablePhiSecond _vector_second_phi_face
Definition: Assembly.h:2729

◆ secondPhiFace() [3/5]

VariablePhiSecond& Assembly::secondPhiFace ( const MooseVariableField< Real > &  )
inline

Definition at line 1471 of file Assembly.h.

1471 { return _second_phi_face; }
VariablePhiSecond _second_phi_face
Definition: Assembly.h:2710

◆ secondPhiFace() [4/5]

VectorVariablePhiSecond& Assembly::secondPhiFace ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1523 of file Assembly.h.

1524  {
1525  return _vector_second_phi_face;
1526  }
VectorVariablePhiSecond _vector_second_phi_face
Definition: Assembly.h:2729

◆ secondPhiFace() [5/5]

VariablePhiSecond& Assembly::secondPhiFace ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1587 of file Assembly.h.

1588  {
1589  return _second_phi_face;
1590  }
VariablePhiSecond _second_phi_face
Definition: Assembly.h:2710

◆ secondPhiFaceNeighbor() [1/5]

const VariablePhiSecond& Assembly::secondPhiFaceNeighbor ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1368 of file Assembly.h.

Referenced by copyNeighborShapes().

1369  {
1371  }
VariablePhiSecond _second_phi_face_neighbor
Definition: Assembly.h:2718

◆ secondPhiFaceNeighbor() [2/5]

const VectorVariablePhiSecond& Assembly::secondPhiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1449 of file Assembly.h.

1450  {
1452  }
VectorVariablePhiSecond _vector_second_phi_face_neighbor
Definition: Assembly.h:2741

◆ secondPhiFaceNeighbor() [3/5]

VariablePhiSecond& Assembly::secondPhiFaceNeighbor ( const MooseVariableField< Real > &  )
inline

Definition at line 1491 of file Assembly.h.

1492  {
1494  }
VariablePhiSecond _second_phi_face_neighbor
Definition: Assembly.h:2718

◆ secondPhiFaceNeighbor() [4/5]

VectorVariablePhiSecond& Assembly::secondPhiFaceNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1564 of file Assembly.h.

1565  {
1567  }
VectorVariablePhiSecond _vector_second_phi_face_neighbor
Definition: Assembly.h:2741

◆ secondPhiFaceNeighbor() [5/5]

VariablePhiSecond& Assembly::secondPhiFaceNeighbor ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1613 of file Assembly.h.

1614  {
1616  }
VariablePhiSecond _second_phi_face_neighbor
Definition: Assembly.h:2718

◆ secondPhiNeighbor() [1/5]

const VariablePhiSecond& Assembly::secondPhiNeighbor ( const MooseVariableField< Real > &  ) const
inline

Definition at line 1355 of file Assembly.h.

Referenced by copyNeighborShapes().

1356  {
1357  return _second_phi_neighbor;
1358  }
VariablePhiSecond _second_phi_neighbor
Definition: Assembly.h:2714

◆ secondPhiNeighbor() [2/5]

const VectorVariablePhiSecond& Assembly::secondPhiNeighbor ( const MooseVariableField< RealVectorValue > &  ) const
inline

Definition at line 1425 of file Assembly.h.

1426  {
1428  }
VectorVariablePhiSecond _vector_second_phi_neighbor
Definition: Assembly.h:2735

◆ secondPhiNeighbor() [3/5]

VariablePhiSecond& Assembly::secondPhiNeighbor ( const MooseVariableField< Real > &  )
inline

Definition at line 1478 of file Assembly.h.

1479  {
1480  return _second_phi_neighbor;
1481  }
VariablePhiSecond _second_phi_neighbor
Definition: Assembly.h:2714

◆ secondPhiNeighbor() [4/5]

VectorVariablePhiSecond& Assembly::secondPhiNeighbor ( const MooseVariableField< RealVectorValue > &  )
inline

Definition at line 1544 of file Assembly.h.

1545  {
1547  }
VectorVariablePhiSecond _vector_second_phi_neighbor
Definition: Assembly.h:2735

◆ secondPhiNeighbor() [5/5]

VariablePhiSecond& Assembly::secondPhiNeighbor ( const MooseVariableField< RealEigenVector > &  )
inline

Definition at line 1600 of file Assembly.h.

1601  {
1602  return _second_phi_neighbor;
1603  }
VariablePhiSecond _second_phi_neighbor
Definition: Assembly.h:2714

◆ setCachedJacobian()

void Assembly::setCachedJacobian ( GlobalDataKey  )

Sets previously-cached Jacobian values via SparseMatrix::set() calls.

Definition at line 4477 of file Assembly.C.

Referenced by NonlinearSystemBase::computeNodalBCsJacobian(), and NonlinearSystemBase::computeNodalBCsResidualAndJacobian().

4478 {
4479  for (MooseIndex(_cached_jacobian_rows) tag = 0; tag < _cached_jacobian_rows.size(); tag++)
4480  if (_sys.hasMatrix(tag))
4481  {
4482  // First zero the rows (including the diagonals) to prepare for
4483  // setting the cached values.
4485 
4486  // TODO: Use SparseMatrix::set_values() for efficiency
4487  for (MooseIndex(_cached_jacobian_values) i = 0; i < _cached_jacobian_values[tag].size(); ++i)
4488  _sys.getMatrix(tag).set(_cached_jacobian_rows[tag][i],
4489  _cached_jacobian_cols[tag][i],
4490  _cached_jacobian_values[tag][i]);
4491  }
4492 
4494 }
SystemBase & _sys
Definition: Assembly.h:2313
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2809
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition: Assembly.h:2807
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:1025
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition: Assembly.h:2811
void clearCachedJacobian()
Clear any currently cached jacobians.
Definition: Assembly.C:4507

◆ 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 1733 of file Assembly.C.

Referenced by computeCurrentElemVolume(), computeCurrentFaceVolume(), reinitLowerDElem(), reinitMortarElem(), and reinitNeighbor().

1737 {
1738 
1739  mooseAssert(qrule, "The quadrature rule is null in Assembly::setCoordinateTransformation");
1740  auto n_points = qrule->n_points();
1741  mooseAssert(n_points == q_points.size(),
1742  "The number of points in the quadrature rule doesn't match the number of passed-in "
1743  "points in Assembly::setCoordinateTransformation");
1744 
1745  // Make sure to honor the name of this method and set the _coord_type member because users may
1746  // make use of the const Moose::CoordinateSystem & coordTransformation() { return _coord_type; }
1747  // API. MaterialBase for example uses it
1749 
1750  coord.resize(n_points);
1751  for (unsigned int qp = 0; qp < n_points; qp++)
1752  coordTransformFactor(_subproblem, sub_id, q_points[qp], coord[qp]);
1753 }
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:43
SubProblem & _subproblem
Definition: Assembly.h:2314
unsigned int n_points() const
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
Definition: SubProblem.C:1283
Moose::CoordinateSystemType _coord_type
The coordinate system.
Definition: Assembly.h:2423

◆ setCurrentBoundaryID()

void Assembly::setCurrentBoundaryID ( BoundaryID  i)
inline

set the current boundary ID

Definition at line 434 of file Assembly.h.

Referenced by SubProblem::setCurrentBoundaryID().

434 { _current_boundary_id = i; }
BoundaryID _current_boundary_id
The current boundary ID.
Definition: Assembly.h:2601

◆ setCurrentLowerDElem()

void Assembly::setCurrentLowerDElem ( const Elem *const  lower_d_elem)
inline

Set the current lower dimensional element.

This may be null

Definition at line 3228 of file Assembly.h.

Referenced by SubProblem::setCurrentLowerDElem().

3229 {
3230  _current_lower_d_elem = lower_d_elem;
3231 }
const Elem * _current_lower_d_elem
The current lower dimensional element.
Definition: Assembly.h:2632

◆ setCurrentNeighborSubdomainID()

void Assembly::setCurrentNeighborSubdomainID ( SubdomainID  i)
inline

set the current subdomain ID

Definition at line 502 of file Assembly.h.

Referenced by DisplacedProblem::setNeighborSubdomainID().

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

◆ setCurrentSubdomainID()

void Assembly::setCurrentSubdomainID ( SubdomainID  i)
inline

set the current subdomain ID

Definition at line 424 of file Assembly.h.

Referenced by MooseMesh::buildHRefinementAndCoarseningMaps(), MooseMesh::buildPRefinementAndCoarseningMaps(), MaxQpsThread::operator()(), and DisplacedProblem::setCurrentSubdomainID().

424 { _current_subdomain_id = i; }
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition: Assembly.h:2599

◆ 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 676 of file Assembly.C.

Referenced by reinitElemFaceRef(), reinitFVFace(), and setLowerQRule().

677 {
678  _current_qrule_face = qrule;
679 
680  for (auto & it : _fe_face[dim])
681  it.second->attach_quadrature_rule(qrule);
682  for (auto & it : _vector_fe_face[dim])
683  it.second->attach_quadrature_rule(qrule);
684  if (!_unique_fe_face_helper.empty())
685  {
686  mooseAssert(dim < _unique_fe_face_helper.size(), "We should not be indexing out of bounds");
687  _unique_fe_face_helper[dim]->attach_quadrature_rule(qrule);
688  }
689 }
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition: Assembly.h:2515
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
Definition: Assembly.h:2371
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2523
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition: Assembly.h:2517

◆ 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 692 of file Assembly.C.

Referenced by reinitLowerDElem().

693 {
694  // The lower-dimensional quadrature rule matches the face quadrature rule
695  setFaceQRule(qrule, dim);
696 
697  _current_qrule_lower = qrule;
698 
699  for (auto & it : _fe_lower[dim])
700  it.second->attach_quadrature_rule(qrule);
701  for (auto & it : _vector_fe_lower[dim])
702  it.second->attach_quadrature_rule(qrule);
703  if (!_unique_fe_lower_helper.empty())
704  {
705  mooseAssert(dim < _unique_fe_lower_helper.size(), "We should not be indexing out of bounds");
706  _unique_fe_lower_helper[dim]->attach_quadrature_rule(qrule);
707  }
708 }
std::vector< std::unique_ptr< FEBase > > _unique_fe_lower_helper
Definition: Assembly.h:2374
void setFaceQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for face integration.
Definition: Assembly.C:676
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
libMesh::QBase * _current_qrule_lower
quadrature rule used on lower dimensional elements.
Definition: Assembly.h:2593
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition: Assembly.h:2557
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition: Assembly.h:2559

◆ 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 737 of file Assembly.C.

Referenced by MortarConstraintBase::MortarConstraintBase().

738 {
739  if (order != _qrule_msm->get_order())
740  {
741  // If custom mortar qrule has not yet been specified
743  {
744  _custom_mortar_qrule = true;
745  const unsigned int dim = _qrule_msm->get_dim();
746  const QuadratureType type = _qrule_msm->type();
747  delete _qrule_msm;
748 
749  _qrule_msm = QBase::build(type, dim, order).release();
750  _fe_msm->attach_quadrature_rule(_qrule_msm);
751  }
752  else
753  mooseError("Mortar quadrature_order: ",
754  order,
755  " does not match previously specified quadrature_order: ",
757  ". Quadrature_order (when specified) must match for all mortar constraints.");
758  }
759 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:311
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
Definition: Assembly.h:2582
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
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:2587
bool _custom_mortar_qrule
Flag specifying whether a custom quadrature rule has been specified for mortar segment mesh...
Definition: Assembly.h:2589

◆ 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 711 of file Assembly.C.

Referenced by reinitFVFace(), reinitNeighbor(), and reinitNeighborFaceRef().

712 {
713  _current_qrule_neighbor = qrule;
714 
715  for (auto & it : _fe_face_neighbor[dim])
716  it.second->attach_quadrature_rule(qrule);
717  for (auto & it : _vector_fe_face_neighbor[dim])
718  it.second->attach_quadrature_rule(qrule);
719  if (!_unique_fe_face_neighbor_helper.empty())
720  {
721  mooseAssert(dim < _unique_fe_face_neighbor_helper.size(),
722  "We should not be indexing out of bounds");
723  _unique_fe_face_neighbor_helper[dim]->attach_quadrature_rule(qrule);
724  }
725 }
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition: Assembly.h:2564
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition: Assembly.h:2550
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
Definition: Assembly.h:2372
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition: Assembly.h:2548

◆ 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 3533 of file Assembly.C.

3534 {
3535  auto & tag_Re = _sub_Re[vector_tag._type_id];
3536  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3537  for (const auto & var : vars)
3538  setResidualBlock(residual, tag_Re[var->number()], var->dofIndices(), var->arrayScalingFactor());
3539 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
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:2351
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition: Assembly.h:2661
void setResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor)
Set a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3289

◆ 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 
)
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().

3293 {
3294  if (dof_indices.size() > 0)
3295  {
3296  std::vector<dof_id_type> di(dof_indices);
3297  _tmp_Re = res_block;
3298  processLocalResidual(_tmp_Re, di, scaling_factor);
3299  residual.insert(_tmp_Re, di);
3300  }
3301 }
virtual void insert(const T *v, const std::vector< numeric_index_type > &dof_indices)
DenseVector< Number > _tmp_Re
auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction) ...
Definition: Assembly.h:2667
void processLocalResidual(DenseVector< Number > &res_block, std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor)
Appling scaling, constraints to the local residual block and populate the full DoF indices for array ...
Definition: Assembly.C:3221

◆ 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 3542 of file Assembly.C.

3545 {
3546  auto & tag_Rn = _sub_Rn[vector_tag._type_id];
3547  const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3548  for (const auto & var : vars)
3550  residual, tag_Rn[var->number()], var->dofIndicesNeighbor(), var->arrayScalingFactor());
3551 }
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
SystemBase & _sys
Definition: Assembly.h:2313
char ** vars
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition: Assembly.h:2662
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:2351
void setResidualBlock(NumericVector< Number > &residual, DenseVector< Number > &res_block, const std::vector< dof_id_type > &dof_indices, const std::vector< Real > &scaling_factor)
Set a local residual block to a global residual vector with proper scaling.
Definition: Assembly.C:3289

◆ 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 657 of file Assembly.C.

658 {
659  _current_qrule = qrule;
660 
661  if (qrule) // Don't set a NULL qrule
662  {
663  for (auto & it : _fe[dim])
664  it.second->attach_quadrature_rule(qrule);
665  for (auto & it : _vector_fe[dim])
666  it.second->attach_quadrature_rule(qrule);
667  if (!_unique_fe_helper.empty())
668  {
669  mooseAssert(dim < _unique_fe_helper.size(), "We should not be indexing out of bounds");
670  _unique_fe_helper[dim]->attach_quadrature_rule(qrule);
671  }
672  }
673 }
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension&#39;s actual vector fe objects indexed on type.
Definition: Assembly.h:2405
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
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:2370
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition: Assembly.h:2411
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension&#39;s actual fe objects indexed on type.
Definition: Assembly.h:2403

◆ 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 1801 of file Assembly.h.

1801 { _xfem = xfem; }
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition: Assembly.h:2380

◆ 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 446 of file Assembly.h.

Referenced by computeADFace(), computeFaceMap(), modifyFaceWeightsDueToXFEM(), qruleArbitraryFace(), qruleFace(), qruleFaceHelper(), reinitElemAndNeighbor(), and reinitFEFace().

446 { return _current_side; }
unsigned int _current_side
The current side of the selected element (valid only when working with sides)
Definition: Assembly.h:2605

◆ sideElem()

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

Returns the side element.

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

Definition at line 458 of file Assembly.h.

458 { return _current_side_elem; }
const Elem * _current_side_elem
The current "element" making up the side we are currently on.
Definition: Assembly.h:2607

◆ 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 464 of file Assembly.h.

464 { return _current_side_volume; }
Real _current_side_volume
Volume of the current side element.
Definition: Assembly.h:2609

◆ 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 368 of file Assembly.h.

368 { return _current_tangents; }
MooseArray< std::vector< Point > > _current_tangents
The current tangent vectors at the quadrature points.
Definition: Assembly.h:2535

◆ writeableQRule() [1/2]

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 241 of file Assembly.h.

Referenced by MooseMesh::buildHRefinementAndCoarseningMaps(), and MooseMesh::buildPRefinementAndCoarseningMaps().

241 { 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:2411

◆ writeableQRule() [2/2]

libMesh::QBase* Assembly::writeableQRule ( unsigned int  dim,
SubdomainID  block,
InternalDataKey   
)
inline

Returns the pointer to the quadrature of specified block and dimension.

Returns
A pointer.

Definition at line 248 of file Assembly.h.

249  {
250  return qrules(dim, block).vol.get();
251  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2491
std::unique_ptr< libMesh::QBase > vol
volume/elem (meshdim) quadrature rule
Definition: Assembly.h:2443

◆ writeableQRuleFace() [1/2]

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 328 of file Assembly.h.

Referenced by MooseMesh::buildHRefinementAndCoarseningMaps(), and MooseMesh::buildPRefinementAndCoarseningMaps().

328 { return _current_qrule_face; }
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition: Assembly.h:2523

◆ writeableQRuleFace() [2/2]

libMesh::QBase* Assembly::writeableQRuleFace ( unsigned int  dim,
SubdomainID  block,
InternalDataKey   
)
inline

Returns the pointer to the quadrature used on a face of specified block and dimension.

Returns
A pointer.

Definition at line 335 of file Assembly.h.

336  {
337  return qrules(dim, block).face.get();
338  }
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:165
std::unique_ptr< libMesh::QBase > face
area/face (meshdim-1) quadrature rule
Definition: Assembly.h:2445
QRules & qrules(unsigned int dim)
Definition: Assembly.h:2491

◆ 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 527 of file Assembly.h.

527 { return _current_qrule_neighbor; }
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition: Assembly.h:2564

◆ zeroCachedJacobian()

void Assembly::zeroCachedJacobian ( GlobalDataKey  )

Zero out previously-cached Jacobian rows.

Definition at line 4497 of file Assembly.C.

4498 {
4499  for (MooseIndex(_cached_jacobian_rows) tag = 0; tag < _cached_jacobian_rows.size(); tag++)
4500  if (_sys.hasMatrix(tag))
4502 
4504 }
SystemBase & _sys
Definition: Assembly.h:2313
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition: Assembly.h:2809
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:361
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:1025
void clearCachedJacobian()
Clear any currently cached jacobians.
Definition: Assembly.C:4507

Member Data Documentation

◆ _ad_coord

MooseArray<ADReal> Assembly::_ad_coord
private

The AD version of the current coordinate transformation coefficients.

Definition at line 2427 of file Assembly.h.

Referenced by adCoordTransformation(), computeCurrentElemVolume(), computeCurrentFaceVolume(), and ~Assembly().

◆ _ad_curvatures

MooseArray<ADReal> Assembly::_ad_curvatures
protected

Definition at line 2851 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 2833 of file Assembly.h.

Referenced by computeFaceMap().

◆ _ad_d2xyzdxi2_map

std::vector<VectorValue<ADReal> > Assembly::_ad_d2xyzdxi2_map
protected

Definition at line 2831 of file Assembly.h.

Referenced by computeFaceMap().

◆ _ad_d2xyzdxideta_map

std::vector<VectorValue<ADReal> > Assembly::_ad_d2xyzdxideta_map
protected

Definition at line 2832 of file Assembly.h.

Referenced by computeFaceMap().

◆ _ad_detadx_map

std::vector<ADReal> Assembly::_ad_detadx_map
protected

Definition at line 2840 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_detady_map

std::vector<ADReal> Assembly::_ad_detady_map
protected

Definition at line 2841 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_detadz_map

std::vector<ADReal> Assembly::_ad_detadz_map
protected

Definition at line 2842 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dxidx_map

std::vector<ADReal> Assembly::_ad_dxidx_map
protected

Definition at line 2837 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dxidy_map

std::vector<ADReal> Assembly::_ad_dxidy_map
protected

Definition at line 2838 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dxidz_map

std::vector<ADReal> Assembly::_ad_dxidz_map
protected

Definition at line 2839 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 2829 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 2828 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 2830 of file Assembly.h.

Referenced by computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dzetadx_map

std::vector<ADReal> Assembly::_ad_dzetadx_map
protected

Definition at line 2843 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dzetady_map

std::vector<ADReal> Assembly::_ad_dzetady_map
protected

Definition at line 2844 of file Assembly.h.

Referenced by computeGradPhiAD(), computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dzetadz_map

std::vector<ADReal> Assembly::_ad_dzetadz_map
protected

Definition at line 2845 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 2781 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 2783 of file Assembly.h.

Referenced by computeADFace(), feADGradPhiFace(), and ~Assembly().

◆ _ad_jac

std::vector<ADReal> Assembly::_ad_jac
protected

Definition at line 2834 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 2847 of file Assembly.h.

Referenced by adJxWFace(), computeADFace(), computeFaceMap(), and ~Assembly().

◆ _ad_normals

MooseArray<VectorValue<ADReal> > Assembly::_ad_normals
protected

Definition at line 2848 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 2782 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 2785 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 2816 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 2377 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 2811 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 2809 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 2802 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 2799 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 2864 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 2859 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 2319 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 2334 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 2340 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 2336 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 2338 of file Assembly.h.

Referenced by addJacobianScalar(), and init().

◆ _column_indices

std::vector<dof_id_type> Assembly::_column_indices
protected

Definition at line 2899 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 2882 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 2326 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 2323 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 2329 of file Assembly.h.

Referenced by computingResidualAndJacobian().

◆ _coord

MooseArray<Real> Assembly::_coord
private

The current coordinate transformation coefficients.

Definition at line 2425 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 2575 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 2572 of file Assembly.h.

Referenced by reinitNeighbor(), and ~Assembly().

◆ _coord_type

Moose::CoordinateSystemType Assembly::_coord_type
private

The coordinate system.

Definition at line 2423 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 2601 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 2597 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 2603 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 2627 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 2383 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 2385 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 2521 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 2389 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 2409 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 2387 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 2421 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 2529 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 2570 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 2632 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 2638 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 2611 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 2634 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 2642 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 2625 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 2905 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 2615 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 2617 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 2880 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 2613 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 2621 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 2623 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 2531 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 2647 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 2419 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 2566 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 2525 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 2411 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 2415 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 2417 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 2593 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 2564 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 2413 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 2605 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 2607 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 2878 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 2609 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 2629 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 2599 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 2535 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 2392 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 2394 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 2398 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 2396 of file Assembly.h.

Referenced by reinitFENeighbor().

◆ _curvatures

MooseArray<Real> Assembly::_curvatures
protected

Definition at line 2850 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 2589 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 2856 of file Assembly.h.

Referenced by assignDisplacements(), computeFaceMap(), and computeSinglePointMapAD().

◆ _displaced

const bool Assembly::_displaced
private

Definition at line 2316 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 2894 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 2889 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 2538 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 2403 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 2515 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 2557 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 2582 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 2547 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 2766 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 2770 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 2705 of file Assembly.h.

Referenced by gradPhi().

◆ _grad_phi_face

VariablePhiGradient Assembly::_grad_phi_face
protected

Definition at line 2709 of file Assembly.h.

Referenced by gradPhiFace().

◆ _grad_phi_face_neighbor

VariablePhiGradient Assembly::_grad_phi_face_neighbor
protected

Definition at line 2717 of file Assembly.h.

Referenced by gradPhiFaceNeighbor().

◆ _grad_phi_neighbor

VariablePhiGradient Assembly::_grad_phi_neighbor
protected

Definition at line 2713 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 2902 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 2359 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 2519 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 2407 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 2561 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 2553 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 2542 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 2347 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 2345 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 2580 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 2533 of file Assembly.h.

Referenced by mappedNormals(), and reinitFEFace().

◆ _max_cached_jacobians

unsigned int Assembly::_max_cached_jacobians
protected

Definition at line 2813 of file Assembly.h.

Referenced by addCachedJacobian().

◆ _max_cached_residuals

unsigned int Assembly::_max_cached_residuals
protected

Definition at line 2804 of file Assembly.h.

Referenced by clearCachedResiduals().

◆ _mesh

MooseMesh& Assembly::_mesh
private

Definition at line 2353 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 2884 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 2869 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 2644 of file Assembly.h.

Referenced by activateDual(), and needDual().

◆ _need_face_div

std::set<FEType> Assembly::_need_face_div
mutableprotected

Definition at line 2870 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 2568 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 2636 of file Assembly.h.

Referenced by lowerDElemVolume(), and reinitLowerDElem().

◆ _need_neighbor_div

std::set<FEType> Assembly::_need_neighbor_div
mutableprotected

Definition at line 2871 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 2619 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 2640 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 2540 of file Assembly.h.

Referenced by Assembly(), extraElemIDNeighbor(), and reinitNeighbor().

◆ _nonlocal_cm

const libMesh::CouplingMatrix& Assembly::_nonlocal_cm
private

Definition at line 2320 of file Assembly.h.

Referenced by initNonlocalCoupling().

◆ _phi

VariablePhiValue Assembly::_phi
protected

Definition at line 2704 of file Assembly.h.

Referenced by phi().

◆ _phi_face

VariablePhiValue Assembly::_phi_face
protected

Definition at line 2708 of file Assembly.h.

Referenced by phiFace().

◆ _phi_face_neighbor

VariablePhiValue Assembly::_phi_face_neighbor
protected

Definition at line 2716 of file Assembly.h.

Referenced by phiFaceNeighbor().

◆ _phi_neighbor

VariablePhiValue Assembly::_phi_neighbor
protected

Definition at line 2712 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 2587 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 2460 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 2796 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 2899 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 2875 of file Assembly.h.

Referenced by hasScalingVector().

◆ _second_phi

VariablePhiSecond Assembly::_second_phi
protected

Definition at line 2706 of file Assembly.h.

Referenced by secondPhi().

◆ _second_phi_face

VariablePhiSecond Assembly::_second_phi_face
protected

Definition at line 2710 of file Assembly.h.

Referenced by secondPhiFace().

◆ _second_phi_face_neighbor

VariablePhiSecond Assembly::_second_phi_face_neighbor
protected

Definition at line 2718 of file Assembly.h.

Referenced by secondPhiFaceNeighbor().

◆ _second_phi_neighbor

VariablePhiSecond Assembly::_second_phi_neighbor
protected

Definition at line 2714 of file Assembly.h.

Referenced by secondPhiNeighbor().

◆ _sub_Kee

std::vector<std::vector<std::vector<DenseMatrix<Number> > > > Assembly::_sub_Kee
protected

Definition at line 2680 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 2681 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 2696 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 2684 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 2692 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 2690 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 2694 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 2686 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 2698 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 2688 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 2664 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 2822 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 2825 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 2701 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 2667 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 2371 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 2370 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 2374 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 2373 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 2364 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 2363 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 2366 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 2365 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 2362 of file Assembly.h.

Referenced by buildFE(), and havePRefinement().

◆ _vector_curl_phi

VectorVariablePhiCurl Assembly::_vector_curl_phi
protected

Definition at line 2724 of file Assembly.h.

Referenced by curlPhi().

◆ _vector_curl_phi_face

VectorVariablePhiCurl Assembly::_vector_curl_phi_face
protected

Definition at line 2730 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 2742 of file Assembly.h.

Referenced by curlPhiFaceNeighbor().

◆ _vector_curl_phi_neighbor

VectorVariablePhiCurl Assembly::_vector_curl_phi_neighbor
protected

Definition at line 2736 of file Assembly.h.

Referenced by curlPhiNeighbor().

◆ _vector_div_phi

VectorVariablePhiDivergence Assembly::_vector_div_phi
protected

Definition at line 2725 of file Assembly.h.

Referenced by divPhi().

◆ _vector_div_phi_face

VectorVariablePhiDivergence Assembly::_vector_div_phi_face
protected

Definition at line 2731 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 2743 of file Assembly.h.

Referenced by divPhiFaceNeighbor().

◆ _vector_div_phi_neighbor

VectorVariablePhiDivergence Assembly::_vector_div_phi_neighbor
protected

Definition at line 2737 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 2405 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 2517 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 2559 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 2774 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 2779 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 2775 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 2778 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 2776 of file Assembly.h.

Referenced by buildVectorNeighborFE(), and reinitFENeighbor().

◆ _vector_grad_phi

VectorVariablePhiGradient Assembly::_vector_grad_phi
protected

Definition at line 2722 of file Assembly.h.

Referenced by gradPhi().

◆ _vector_grad_phi_face

VectorVariablePhiGradient Assembly::_vector_grad_phi_face
protected

Definition at line 2728 of file Assembly.h.

Referenced by gradPhiFace().

◆ _vector_grad_phi_face_neighbor

VectorVariablePhiGradient Assembly::_vector_grad_phi_face_neighbor
protected

Definition at line 2740 of file Assembly.h.

Referenced by gradPhiFaceNeighbor().

◆ _vector_grad_phi_neighbor

VectorVariablePhiGradient Assembly::_vector_grad_phi_neighbor
protected

Definition at line 2734 of file Assembly.h.

Referenced by gradPhiNeighbor().

◆ _vector_phi

VectorVariablePhiValue Assembly::_vector_phi
protected

Definition at line 2721 of file Assembly.h.

Referenced by phi().

◆ _vector_phi_face

VectorVariablePhiValue Assembly::_vector_phi_face
protected

Definition at line 2727 of file Assembly.h.

Referenced by phiFace().

◆ _vector_phi_face_neighbor

VectorVariablePhiValue Assembly::_vector_phi_face_neighbor
protected

Definition at line 2739 of file Assembly.h.

Referenced by phiFaceNeighbor().

◆ _vector_phi_neighbor

VectorVariablePhiValue Assembly::_vector_phi_neighbor
protected

Definition at line 2733 of file Assembly.h.

Referenced by phiNeighbor().

◆ _vector_second_phi

VectorVariablePhiSecond Assembly::_vector_second_phi
protected

Definition at line 2723 of file Assembly.h.

Referenced by secondPhi().

◆ _vector_second_phi_face

VectorVariablePhiSecond Assembly::_vector_second_phi_face
protected

Definition at line 2729 of file Assembly.h.

Referenced by secondPhiFace().

◆ _vector_second_phi_face_neighbor

VectorVariablePhiSecond Assembly::_vector_second_phi_face_neighbor
protected

Definition at line 2741 of file Assembly.h.

Referenced by secondPhiFaceNeighbor().

◆ _vector_second_phi_neighbor

VectorVariablePhiSecond Assembly::_vector_second_phi_neighbor
protected

Definition at line 2735 of file Assembly.h.

Referenced by secondPhiNeighbor().

◆ _xfem

std::shared_ptr<XFEMInterface> Assembly::_xfem
private

The XFEM controller.

Definition at line 2380 of file Assembly.h.

Referenced by modifyFaceWeightsDueToXFEM(), modifyWeightsDueToXFEM(), reinitFE(), reinitFEFace(), and setXFEM().


The documentation for this class was generated from the following files: