https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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.
 

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.
 
const FEBase *const & getFENeighbor (FEType type, unsigned int dim) const
 Get a reference to a pointer that will contain the current 'neighbor' FE.
 
const FEBase *const & getFEFace (FEType type, unsigned int dim) const
 Get a reference to a pointer that will contain the current "face" FE.
 
const FEBase *const & getFEFaceNeighbor (FEType type, unsigned int dim) const
 Get a reference to a pointer that will contain the current "neighbor" FE.
 
const FEVectorBase *const & getVectorFE (FEType type, unsigned int dim) const
 Get a reference to a pointer that will contain the current volume FEVector.
 
const FEVectorBase *const & getVectorFENeighbor (FEType type, unsigned int dim) const
 GetVector a reference to a pointer that will contain the current 'neighbor' FE.
 
const FEVectorBase *const & getVectorFEFace (FEType type, unsigned int dim) const
 GetVector a reference to a pointer that will contain the current "face" FE.
 
const FEVectorBase *const & getVectorFEFaceNeighbor (FEType type, unsigned int dim) const
 GetVector a reference to a pointer that will contain the current "neighbor" FE.
 
const libMesh::QBase *const & qRule () const
 Returns the reference to the current quadrature being used.
 
libMesh::QBase *const & writeableQRule ()
 Returns the reference to the current quadrature being used.
 
libMesh::QBasewriteableQRule (unsigned int dim, SubdomainID block, InternalDataKey)
 Returns the pointer to the quadrature of specified block and dimension.
 
const MooseArray< Point > & qPoints () const
 Returns the reference to the quadrature points.
 
const std::vector< Point > & qPointsMortar () const
 Returns the reference to the mortar segment element quadrature points.
 
const MooseArray< Point > & physicalPoints () const
 The current points in physical space where we have reinited through reinitAtPhysical()
 
const MooseArray< Real > & JxW () const
 Returns the reference to the transformed jacobian weights.
 
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.
 
const MooseArray< Real > & mortarCoordTransformation () const
 Returns the reference to the coordinate transformation coefficients on the mortar segment mesh.
 
const MooseArray< ADReal > & adCoordTransformation () const
 Returns the reference to the AD version of the coordinate transformation coefficients.
 
const Moose::CoordinateSystemTypecoordSystem () const
 Get the coordinate system type.
 
const libMesh::QBase *const & qRuleFace () const
 Returns the reference to the current quadrature being used on a current face.
 
libMesh::QBase *const & writeableQRuleFace ()
 Returns the reference to the current quadrature being used on a current face.
 
libMesh::QBasewriteableQRuleFace (unsigned int dim, SubdomainID block, InternalDataKey)
 Returns the pointer to the quadrature used on a face of specified block and dimension.
 
const MooseArray< Point > & qPointsFace () const
 Returns the reference to the current quadrature being used.
 
const MooseArray< Real > & JxWFace () const
 Returns the reference to the transformed jacobian weights on a current face.
 
const MooseArray< Point > & normals () const
 Returns the array of normals for quadrature points on a current side.
 
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.
 
unsigned int numExtraElemIntegers () const
 Number of extra element integers Assembly tracked.
 
const dof_id_type & extraElemID (unsigned int id) const
 Returns an integer ID of the current element given the index associated with the integer.
 
const dof_id_type & extraElemIDNeighbor (unsigned int id) const
 Returns an integer ID of the current element given the index associated with the integer.
 
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.
 
const SubdomainIDcurrentSubdomainID () const
 Return the current subdomain ID.
 
void setCurrentSubdomainID (SubdomainID i)
 set the current subdomain ID
 
const BoundaryIDcurrentBoundaryID () const
 Return the current boundary ID.
 
void setCurrentBoundaryID (BoundaryID i)
 set the current boundary ID
 
const Real & elemVolume () const
 Returns the reference to the current element volume.
 
const unsigned intside () const
 Returns the current side.
 
const unsigned intneighborSide () const
 Returns the current neighboring side.
 
const Elem *const & sideElem () const
 Returns the side element.
 
const Real & sideElemVolume () const
 Returns the reference to the volume of current side element.
 
const Elem *const & neighbor () const
 Return the neighbor element.
 
const Elem *const & lowerDElem () const
 Return the lower dimensional element.
 
const Elem *const & neighborLowerDElem () const
 Return the neighboring lower dimensional element.
 
const Real & lowerDElemVolume () const
 
const Real & neighborLowerDElemVolume () const
 
const SubdomainIDcurrentNeighborSubdomainID () const
 Return the current subdomain ID.
 
void setCurrentNeighborSubdomainID (SubdomainID i)
 set the current subdomain ID
 
const Real & neighborVolume ()
 Returns the reference to the current neighbor volume.
 
const libMesh::QBase *const & qRuleNeighbor () const
 Returns the reference to the current quadrature being used on a current neighbor.
 
libMesh::QBase *const & writeableQRuleNeighbor ()
 Returns the reference to the current quadrature being used on a current neighbor.
 
const MooseArray< Real > & JxWNeighbor () const
 Returns the reference to the transformed jacobian weights on a current face.
 
const MooseArray< Point > & qPointsFaceNeighbor () const
 Returns the reference to the current quadrature points being used on the neighbor face.
 
const Node *const & node () const
 Returns the reference to the node.
 
const Node *const & nodeNeighbor () const
 Returns the reference to the neighboring node.
 
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.
 
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.
 
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.
 
void setVolumeQRule (libMesh::QBase *qrule, unsigned int dim)
 Set the qrule to be used for volume integration.
 
void setFaceQRule (libMesh::QBase *qrule, unsigned int dim)
 Set the qrule to be used for face integration.
 
void setMortarQRule (Order order)
 Specifies a custom qrule for integration on mortar segment mesh.
 
void activateDual ()
 Indicates that dual shape functions are used for mortar constraint.
 
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)
 
void clearCachedQRules ()
 Set the cached quadrature rules to nullptr.
 
void setNeighborQRule (libMesh::QBase *qrule, unsigned int dim)
 Set the qrule to be used for neighbor integration.
 
void reinit (const Elem *elem)
 Reinitialize objects (JxW, q_points, ...) for an elements.
 
void setVolumeQRule (const Elem *elem)
 Set the volumetric quadrature rule based on the provided element.
 
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.
 
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.
 
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.
 
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.
 
void reinitNeighborLowerDElem (const Elem *elem)
 reinitialize a neighboring lower dimensional element
 
void reinitMortarElem (const Elem *elem)
 reinitialize a mortar segment mesh element in order to get a proper JxW
 
const std::vector< Real > & jxWMortar () const
 Returns a reference to JxW for mortar segment elements.
 
const libMesh::QBase *const & qRuleMortar () const
 Returns a reference to the quadrature rule for the mortar segments.
 
void reinitAtPhysical (const Elem *elem, const std::vector< Point > &physical_points)
 Reinitialize the assembly data at specific physical point in the given element.
 
void reinit (const Elem *elem, const std::vector< Point > &reference_points)
 Reinitialize the assembly data at specific points in the reference element.
 
void setFaceQRule (const Elem *const elem, const unsigned int side)
 Set the face quadrature rule based on the provided element and side.
 
void reinit (const Elem *elem, unsigned int side)
 Reinitialize the assembly data on an side of an element.
 
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.
 
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.
 
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.
 
void reinitNeighborAtPhysical (const Elem *neighbor, const std::vector< Point > &physical_points)
 Reinitializes the neighbor at the physical coordinates within element given.
 
void reinitNeighbor (const Elem *neighbor, const std::vector< Point > &reference_points)
 Reinitializes the neighbor side using reference coordinates.
 
void reinit (const Node *node)
 Reinitialize assembly data for a node.
 
void init (const libMesh::CouplingMatrix *cm)
 Initialize the Assembly object and set the CouplingMatrix for use throughout.
 
void initNonlocalCoupling ()
 Create pair of variables requiring nonlocal jacobian contributions.
 
void prepareJacobianBlock ()
 Sizes and zeroes the Jacobian blocks used for the current element.
 
void prepareResidual ()
 Sizes and zeroes the residual for the current element.
 
void prepare ()
 
void prepareNonlocal ()
 
void prepareVariable (MooseVariableFieldBase *var)
 Used for preparing the dense residual and jacobian blocks for one particular variable.
 
void prepareVariableNonlocal (MooseVariableFieldBase *var)
 
void prepareNeighbor ()
 
void prepareLowerD ()
 Prepare the Jacobians and residuals for a lower dimensional element.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
void cacheResidualLower (GlobalDataKey, const std::vector< VectorTag > &tags)
 Takes the values that are currently in _sub_Rl and appends them to the cached values.
 
void addCachedResiduals (GlobalDataKey, const std::vector< VectorTag > &tags)
 Pushes all cached residuals to the global residual vectors associated with each tag.
 
void clearCachedResiduals (GlobalDataKey)
 Clears all of the residuals in _cached_residual_rows and _cached_residual_values.
 
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)
 
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.
 
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.
 
void addJacobian (GlobalDataKey)
 Adds all local Jacobian to the global Jacobian matrices.
 
void addJacobianNonlocal (GlobalDataKey)
 Adds non-local Jacobian to the global Jacobian matrices.
 
void addJacobianNeighbor (GlobalDataKey)
 Add ElementNeighbor, NeighborElement, and NeighborNeighbor portions of the Jacobian for compute objects like DGKernels.
 
void addJacobianScalar (GlobalDataKey)
 Add Jacobians for pairs of scalar variables into the global Jacobian matrices.
 
void addJacobianOffDiagScalar (unsigned int ivar, GlobalDataKey)
 Add Jacobians for a scalar variables with all other field variables into the global Jacobian matrices.
 
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.
 
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.
 
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.
 
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.
 
void addJacobianNeighborLowerD (GlobalDataKey)
 Add all portions of the Jacobian except PrimaryPrimary, e.g.
 
void addJacobianLowerD (GlobalDataKey)
 Add portions of the Jacobian of LowerLower, LowerSecondary, and SecondaryLower for boundary conditions.
 
void cacheJacobianMortar (GlobalDataKey)
 Cache all portions of the Jacobian, e.g.
 
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.
 
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.
 
void cacheJacobian (GlobalDataKey)
 Takes the values that are currently in _sub_Kee and appends them to the cached values.
 
void cacheJacobianNonlocal (GlobalDataKey)
 Takes the values that are currently in _sub_Keg and appends them to the cached values.
 
void cacheJacobianNeighbor (GlobalDataKey)
 Takes the values that are currently in the neighbor Dense Matrices and appends them to the cached values.
 
void addCachedJacobian (GlobalDataKey)
 Adds the values that have been cached by calling cacheJacobian() and or cacheJacobianNeighbor() to the jacobian matrix.
 
void setCachedJacobian (GlobalDataKey)
 Sets previously-cached Jacobian values via SparseMatrix::set() calls.
 
void zeroCachedJacobian (GlobalDataKey)
 Zero out previously-cached Jacobian rows.
 
DenseVector< Number > & residualBlock (unsigned int var_num, LocalDataKey, TagID tag_id)
 Get local residual block for a variable and a tag.
 
DenseVector< Number > & residualBlockNeighbor (unsigned int var_num, LocalDataKey, TagID tag_id)
 Get local neighbor residual block for a variable and a tag.
 
DenseVector< Number > & residualBlockLower (unsigned int var_num, LocalDataKey, TagID tag_id)
 Get residual block for lower.
 
DenseMatrix< Number > & jacobianBlock (unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
 Get local Jacobian block for a pair of variables and a tag.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
void setXFEM (std::shared_ptr< XFEMInterface > xfem)
 Set the pointer to the XFEM controller object.
 
void assignDisplacements (std::vector< std::pair< unsigned int, unsigned short > > &&disp_numbers_and_directions)
 Assign the displacement numbers and directions.
 
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.
 
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.
 
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.
 
DenseVector< Real > getJacobianDiagonal (const DenseMatrix< Number > &ke)
 
const libMesh::QBaseattachQRuleElem (unsigned int dim, FEBase &fe)
 Attaches the current elem/volume quadrature rule to the given fe.
 
const libMesh::QBaseattachQRuleFace (unsigned int dim, FEBase &fe)
 Attaches the current face/area quadrature rule to the given fe.
 
void hasScalingVector ()
 signals this object that a vector containing variable scaling factors should be used when doing residual and matrix assembly
 
void modifyArbitraryWeights (const std::vector< Real > &weights)
 Modify the weights when using the arbitrary quadrature rule.
 
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.
 
void setCurrentLowerDElem (const Elem *const lower_d_elem)
 Set the current lower dimensional element.
 
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.
 

Protected Attributes

const Elem * _current_elem
 The current "element" we are currently on.
 
SubdomainID _current_subdomain_id
 The current subdomain ID.
 
BoundaryID _current_boundary_id
 The current boundary ID.
 
Real _current_elem_volume
 Volume of the current element.
 
unsigned int _current_side
 The current side of the selected element (valid only when working with sides)
 
const Elem * _current_side_elem
 The current "element" making up the side we are currently on.
 
Real _current_side_volume
 Volume of the current side element.
 
const Elem * _current_neighbor_elem
 The current neighbor "element".
 
SubdomainID _current_neighbor_subdomain_id
 The current neighbor subdomain ID.
 
unsigned int _current_neighbor_side
 The current side of the selected neighboring element (valid only when working with sides)
 
const Elem * _current_neighbor_side_elem
 The current side element of the ncurrent neighbor element.
 
bool _need_neighbor_elem_volume
 true is apps need to compute neighbor element volume
 
Real _current_neighbor_volume
 Volume of the current neighbor.
 
const Node * _current_node
 The current node we are working with.
 
const Node * _current_neighbor_node
 The current neighboring node we are working with.
 
bool _current_elem_volume_computed
 Boolean to indicate whether current element volumes has been computed.
 
bool _current_side_volume_computed
 Boolean to indicate whether current element side volumes has been computed.
 
const Elem * _current_lower_d_elem
 The current lower dimensional element.
 
const Elem * _current_neighbor_lower_d_elem
 The current neighboring lower dimensional element.
 
bool _need_lower_d_elem_volume
 Whether we need to compute the lower dimensional element volume.
 
Real _current_lower_d_elem_volume
 The current lower dimensional element volume.
 
bool _need_neighbor_lower_d_elem_volume
 Whether we need to compute the neighboring lower dimensional element volume.
 
Real _current_neighbor_lower_d_elem_volume
 The current neighboring lower dimensional element volume.
 
bool _need_dual
 Whether dual shape functions need to be computed for mortar constraints.
 
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.
 
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
 
DenseVector< Number > _tmp_Re
 auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction)
 
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>
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kne
 jacobian contributions from the neighbor and element <Tag, ivar, jvar>
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knn
 jacobian contributions from the neighbor <Tag, ivar, jvar>
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kll
 dlower/dlower
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kle
 dlower/dsecondary (or dlower/delement)
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kln
 dlower/dprimary (or dlower/dneighbor)
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kel
 dsecondary/dlower (or delement/dlower)
 
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knl
 dprimary/dlower (or dneighbor/dlower)
 
DenseMatrix< Number > _tmp_Ke
 auxiliary matrix for scaling jacobians (optimization to avoid expensive construction/destruction)
 
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.
 
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.
 
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.
 
std::vector< std::vector< Real > > _cached_residual_values
 Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME)
 
std::vector< std::vector< dof_id_type > > _cached_residual_rows
 Where the cached values should go (the first vector is for TIME vs NONTIME)
 
unsigned int _max_cached_residuals
 
std::vector< std::vector< Real > > _cached_jacobian_values
 Values cached by calling cacheJacobian()
 
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
 Row where the corresponding cached value should go.
 
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
 Column where the corresponding cached value should go.
 
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.
 
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.
 
std::vector< dof_id_type > _temp_dof_indices
 Temporary work vector to keep from reallocating it.
 
std::vector< Point > _temp_reference_points
 Temporary work data for reinitAtPhysical()
 
std::vector< VectorValue< ADReal > > _ad_dxyzdxi_map
 AD quantities.
 
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.
 
bool _calculate_xyz
 
bool _calculate_face_xyz
 
bool _calculate_curvatures
 
bool _calculate_ad_coord
 Whether to calculate coord with AD.
 
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.
 
libMesh::ElemSideBuilder _current_side_elem_builder
 In place side element builder for _current_side_elem.
 
libMesh::ElemSideBuilder _current_neighbor_side_elem_builder
 In place side element builder for _current_neighbor_side_elem.
 
libMesh::ElemSideBuilder _compute_face_map_side_elem_builder
 In place side element builder for computeFaceMap()
 
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.
 
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.
 
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.
 
std::vector< dof_id_type > _column_indices
 
bool _have_p_refinement
 Whether we have ever conducted p-refinement.
 
std::vector< Point > _current_neighbor_ref_points
 The current reference points on the neighbor element.
 

Private Member Functions

void setLowerQRule (libMesh::QBase *qrule, unsigned int dim)
 Set the qrule to be used for lower dimensional integration.
 
void computeADFace (const Elem &elem, const unsigned int side)
 compute AD things on an element face
 
void reinitFE (const Elem *elem)
 Just an internal helper function to reinit the volume FE objects.
 
void reinitFEFace (const Elem *elem, unsigned int side)
 Just an internal helper function to reinit the face FE objects.
 
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.
 
void modifyFaceWeightsDueToXFEM (const Elem *elem, unsigned int side=0)
 Update the face integration weights for XFEM partial elements.
 
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
 
void resizeADMappingObjects (unsigned int n_qp, unsigned int dim)
 resize any objects that contribute to automatic differentiation-related mapping calculations
 
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
 
void addResidual (const VectorTag &vector_tag)
 Add local residuals of all field variables for a tag onto the tag's residual vector.
 
void addResidualNeighbor (const VectorTag &vector_tag)
 Add local neighbor residuals of all field variables for a tag onto the tag's residual vector.
 
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.
 
void addResidualScalar (const VectorTag &vector_tag)
 Add residuals of all scalar variables for a tag onto the tag's residual vector.
 
void clearCachedResiduals (const VectorTag &vector_tag)
 Clears all of the cached residuals for a specific vector tag.
 
void cacheResidual (dof_id_type dof, Real value, TagID tag_id)
 Cache individual residual contributions.
 
void cacheResidual (dof_id_type dof, Real value, const std::set< TagID > &tags)
 Cache individual residual contributions.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
void addJacobianCoupledVarPair (const MooseVariableBase &ivar, const MooseVariableBase &jvar)
 Adds element matrices for ivar rows and jvar columns to the global Jacobian matrices.
 
void cacheJacobianCoupledVarPair (const MooseVariableBase &ivar, const MooseVariableBase &jvar)
 Caches element matrix for ivar rows and jvar columns.
 
void clearCachedJacobian ()
 Clear any currently cached jacobians.
 
void buildFE (FEType type) const
 Build FEs with a type.
 
void buildFaceFE (FEType type) const
 Build FEs for a face with a type.
 
void buildNeighborFE (FEType type) const
 Build FEs for a neighbor with a type.
 
void buildFaceNeighborFE (FEType type) const
 Build FEs for a neighbor face with a type.
 
void buildLowerDFE (FEType type) const
 Build FEs for a lower dimensional element with a type.
 
void buildLowerDDualFE (FEType type) const
 
void buildVectorFE (FEType type) const
 Build Vector FEs with a type.
 
void buildVectorFaceFE (FEType type) const
 Build Vector FEs for a face with a type.
 
void buildVectorNeighborFE (FEType type) const
 Build Vector FEs for a neighbor with a type.
 
void buildVectorFaceNeighborFE (FEType type) const
 Build Vector FEs for a neighbor face with a type.
 
void buildVectorLowerDFE (FEType type) const
 Build Vector FEs for a lower dimensional element with a type.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
void helpersRequestData ()
 request phi, dphi, xyz, JxW, etc.
 
libMesh::QBaseqruleFace (const Elem *elem, unsigned int side)
 This is an abstraction over the internal qrules function.
 
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.
 

Private Attributes

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

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),
85 _nonlocal_cm(_subproblem.nonlocalCouplingMatrix(_sys.number())),
86 _computing_residual(_subproblem.currentlyComputingResidual()),
87 _computing_jacobian(_subproblem.currentlyComputingJacobian()),
88 _computing_residual_and_jacobian(_subproblem.currentlyComputingResidualAndJacobian()),
89 _dof_map(_sys.dofMap()),
90 _tid(tid),
91 _mesh(sys.mesh()),
92 _mesh_dimension(_mesh.dimension()),
93 _helper_type(_mesh.hasSecondOrderElements() ? SECOND : FIRST, LAGRANGE),
99 _building_helpers(false),
100 _current_qrule(nullptr),
101 _current_qrule_volume(nullptr),
104 _current_qrule_face(nullptr),
107 _need_JxW_neighbor(false),
108 _qrule_msm(nullptr),
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
140 _calculate_xyz(false),
141 _calculate_face_xyz(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)];
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))
177 // This FE object should not take part in p-refinement
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}
unsigned int dim
SystemBase & _sys
Definition Assembly.h:2313
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 bool & _computing_jacobian
Whether we are currently computing the Jacobian.
Definition Assembly.h:2326
const std::vector< Real > * _JxW_msm
A JxW for working on mortar segement elements.
Definition Assembly.h:2580
const bool _displaced
Definition Assembly.h:2316
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition Assembly.h:2523
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 _current_side_volume_computed
Boolean to indicate whether current element side volumes has been computed.
Definition Assembly.h:2629
const FEType _helper_type
The finite element type of the FE helper classes.
Definition Assembly.h:2359
Real _current_elem_volume
Volume of the current element.
Definition Assembly.h:2603
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
Definition Assembly.h:2377
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition Assembly.h:2411
const bool & _computing_residual
Whether we are currently computing the residual.
Definition Assembly.h:2323
bool _need_JxW_neighbor
Flag to indicate that JxW_neighbor is needed.
Definition Assembly.h:2568
bool _user_added_fe_of_helper_type
Whether user code requested a FEType the same as our _helper_type.
Definition Assembly.h:2362
bool _calculate_xyz
Definition Assembly.h:2858
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition Assembly.C:338
const libMesh::CouplingMatrix & _nonlocal_cm
Definition Assembly.h:2320
Real _current_neighbor_volume
Volume of the current neighbor.
Definition Assembly.h:2621
bool _need_neighbor_lower_d_elem_volume
Whether we need to compute the neighboring lower dimensional element volume.
Definition Assembly.h:2640
Moose::CoordinateSystemType _coord_type
The coordinate system.
Definition Assembly.h:2423
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition Assembly.h:2557
const libMesh::DofMap & _dof_map
DOF map.
Definition Assembly.h:2349
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition Assembly.h:2548
const Elem * _current_lower_d_elem
The current lower dimensional element.
Definition Assembly.h:2632
unsigned int _current_side
The current side of the selected element (valid only when working with sides)
Definition Assembly.h:2605
const bool & _computing_residual_and_jacobian
Whether we are currently computing the residual and Jacobian.
Definition Assembly.h:2329
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition Assembly.C:316
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
Definition Assembly.h:2582
const Node * _current_neighbor_node
The current neighboring node we are working with.
Definition Assembly.h:2625
void buildFE(FEType type) const
Build FEs with a type.
Definition Assembly.C:268
const Elem * _current_neighbor_side_elem
The current side element of the ncurrent neighbor element.
Definition Assembly.h:2617
bool _calculate_ad_coord
Whether to calculate coord with AD.
Definition Assembly.h:2864
void helpersRequestData()
request phi, dphi, xyz, JxW, etc.
Definition Assembly.C:4811
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition Assembly.h:2564
void buildLowerDFE(FEType type) const
Build FEs for a lower dimensional element with a type.
Definition Assembly.C:360
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, FEBase * > > _fe
Each dimension's actual fe objects indexed on type.
Definition Assembly.h:2403
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
Definition Assembly.h:2627
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition Assembly.h:2515
const std::vector< VectorTag > & _residual_vector_tags
The residual vector tags that Assembly could possibly contribute to.
Definition Assembly.h:2796
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition Assembly.h:2611
bool _user_added_fe_face_neighbor_of_helper_type
Definition Assembly.h:2364
MooseMesh & _mesh
Definition Assembly.h:2353
ArbitraryQuadrature * _current_qface_arbitrary
The current arbitrary quadrature rule used on element faces.
Definition Assembly.h:2525
const Node * _current_node
The current node we are working with.
Definition Assembly.h:2623
THREAD_ID _tid
Thread number (id)
Definition Assembly.h:2351
bool _calculate_face_xyz
Definition Assembly.h:2859
bool _calculate_curvatures
Definition Assembly.h:2860
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
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
Definition Assembly.h:2415
std::vector< dof_id_type > _neighbor_extra_elem_ids
Extra element IDs of neighbor.
Definition Assembly.h:2540
unsigned int _max_cached_residuals
Definition Assembly.h:2804
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition Assembly.C:294
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition Assembly.h:2554
bool _custom_mortar_qrule
Flag specifying whether a custom quadrature rule has been specified for mortar segment mesh.
Definition Assembly.h:2589
bool _need_lower_d_elem_volume
Whether we need to compute the lower dimensional element volume.
Definition Assembly.h:2636
bool _need_neighbor_elem_volume
true is apps need to compute neighbor element volume
Definition Assembly.h:2619
SubProblem & _subproblem
Definition Assembly.h:2314
Real _current_side_volume
Volume of the current side element.
Definition Assembly.h:2609
bool _user_added_fe_neighbor_of_helper_type
Definition Assembly.h:2365
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension's helper objects.
Definition Assembly.h:2553
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition Assembly.h:2587
unsigned int _max_cached_jacobians
Definition Assembly.h:2813
const Elem * _current_side_elem
The current "element" making up the side we are currently on.
Definition Assembly.h:2607
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::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension's helper objects.
Definition Assembly.h:2407
const Elem * _current_neighbor_lower_d_elem
The current neighboring lower dimensional element.
Definition Assembly.h:2634
libMesh::QBase * _current_qrule_lower
quadrature rule used on lower dimensional elements.
Definition Assembly.h:2593
unsigned int _current_neighbor_side
The current side of the selected neighboring element (valid only when working with sides)
Definition Assembly.h:2615
const Elem * _current_elem
The current "element" we are currently on.
Definition Assembly.h:2597
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension's helper objects.
Definition Assembly.h:2519
bool _have_p_refinement
Whether we have ever conducted p-refinement.
Definition Assembly.h:2902
libMesh::QBase * _current_qrule_volume
The current volumetric quadrature for the element.
Definition Assembly.h:2413
bool _user_added_fe_face_of_helper_type
Definition Assembly.h:2363
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition Assembly.h:2538
bool _user_added_fe_lower_of_helper_type
Definition Assembly.h:2366
unsigned int _mesh_dimension
Definition Assembly.h:2355
bool _need_dual
Whether dual shape functions need to be computed for mortar constraints.
Definition Assembly.h:2644
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
Definition MooseMesh.C:3549
bool hasSecondOrderElements()
check if the mesh has SECOND order elements
Definition MooseMesh.C:3816
SubProblem & subproblem()
Definition SystemBase.h:102
void add_p_level_in_reinit(bool value)
unsigned int n_elem_integers() const
MeshBase & mesh
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
@ VECTOR_TAG_RESIDUAL
@ COORD_XYZ
Definition MooseTypes.h:865
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ ~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
256
257 delete _qrule_msm;
258}
MooseArray< Real > _curvatures
Definition Assembly.h:2850
MooseArray< Real > _coord_neighbor
The current coordinate transformation coefficients.
Definition Assembly.h:2572
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition Assembly.h:2836
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< VectorValue< ADReal > > _ad_normals
Definition Assembly.h:2848
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
Definition Assembly.h:2782
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension's actual vector fe objects indexed on type.
Definition Assembly.h:2405
MooseArray< ADReal > _ad_JxW_face
Definition Assembly.h:2847
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition Assembly.h:2549
MooseArray< ADReal > _ad_JxW
Definition Assembly.h:2835
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition Assembly.h:2517
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data_face
Definition Assembly.h:2785
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition Assembly.h:2559
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data_face
Definition Assembly.h:2783
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< ADReal > _ad_curvatures
Definition Assembly.h:2851
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data
Definition Assembly.h:2781
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition Assembly.h:2849
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition Assembly.h:2550
MooseArray< Real > _coord_msm
The coordinate transformation coefficients evaluated on the quadrature points of the mortar segment m...
Definition Assembly.h:2575
void release()
Manually deallocates the data pointer.
Definition MooseArray.h:66

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.

617{ _need_dual = true; }

Referenced by MortarConstraintBase::MortarConstraintBase().

◆ 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 }

◆ 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}

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

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++)
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}
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition Assembly.h:2811
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
virtual bool checkNonlocalCouplingRequirement() const =0
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition SystemBase.h:379
virtual void add(const numeric_index_type i, const numeric_index_type j, const T value)=0

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

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

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::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
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
virtual void add_vector(const T *v, const std::vector< numeric_index_type > &dof_indices)

Referenced by addCachedResiduals().

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

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}
void addCachedResidualDirectly(NumericVector< Number > &residual, GlobalDataKey, const VectorTag &vector_tag)
Adds the values that have been cached by calling cacheResidual(), cacheResidualNeighbor(),...
Definition Assembly.C:3515
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition SystemBase.C:923
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition SystemBase.C:932

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

◆ 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,
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.

◆ addJacobianBlock() [2/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().

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

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}
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
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
const libMesh::CouplingMatrix * _cm
Coupling matrices.
Definition Assembly.h:2319
const std::vector< Real > & arrayScalingFactor() const
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
bool computingScalingJacobian() const
Whether we are computing an initial Jacobian for automatic variable scaling.
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
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 n() const=0
virtual numeric_index_type m() const=0

Referenced by addJacobianBlockNonlocalTags().

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

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}
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
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.
unsigned int number() const
Get variable number coming from libMesh.

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

◆ 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}
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
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
@ LowerLower
Definition MooseTypes.h:856
@ LowerSecondary
Definition MooseTypes.h:857
@ SecondaryLower
Definition MooseTypes.h:859

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

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}
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
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 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
@ NeighborNeighbor
Definition MooseTypes.h:808
@ NeighborElement
Definition MooseTypes.h:807
@ ElementNeighbor
Definition MooseTypes.h:806

Referenced by addJacobianNeighborTags().

◆ 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}
@ PrimaryLower
Definition MooseTypes.h:860
@ LowerPrimary
Definition MooseTypes.h:858

◆ 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}
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition Assembly.h:2340
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

◆ 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}
char ** vars
Class for scalar variables (they are different).
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition SystemBase.h:770
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

◆ 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

◆ addResidual() [1/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}
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition Assembly.h:2661
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
TagID _id
The id associated with the vector tag.
Definition VectorTag.h:30
Moose::VectorTagType _type
The type of the vector tag.
Definition VectorTag.h:53

◆ addResidual() [2/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}
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
if(subdm)

Referenced by addResidual().

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

3255{
3256 if (dof_indices.size() > 0 && res_block.size())
3257 {
3258 _temp_dof_indices = dof_indices;
3259 _tmp_Re = res_block;
3262 }
3263}
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
DenseVector< Number > _tmp_Re
auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction)
Definition Assembly.h:2667
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

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

◆ addResidualLower() [1/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}
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition Assembly.h:2664

◆ addResidualLower() [2/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}
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

Referenced by addResidualLower().

◆ addResidualNeighbor() [1/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}
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition Assembly.h:2662

◆ addResidualNeighbor() [2/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}
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

Referenced by addResidualNeighbor().

◆ addResidualScalar() [1/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}
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition SystemBase.h:777

◆ addResidualScalar() [2/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}
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

Referenced by addResidualScalar().

◆ adGradPhi() [1/2]

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

Definition at line 3051 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.

◆ adGradPhi() [2/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 }

◆ adJxW()

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

Definition at line 278 of file Assembly.h.

278{ return _ad_JxW; }

◆ adJxWFace()

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

Definition at line 280 of file Assembly.h.

280{ return _ad_JxW_face; }

◆ adNormals()

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

Definition at line 393 of file Assembly.h.

393{ return _ad_normals; }

◆ 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 }

Referenced by genericQPoints().

◆ 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 }

◆ 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 }
QRules & qrules(unsigned int dim)
Definition Assembly.h:2491
std::unique_ptr< libMesh::QBase > vol
volume/elem (meshdim) quadrature rule
Definition Assembly.h:2443

◆ 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 }
std::unique_ptr< libMesh::QBase > face
area/face (meshdim-1) quadrature rule
Definition Assembly.h:2445

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

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::set< FEType > _need_second_derivative
Definition Assembly.h:2866
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition Assembly.h:2767
std::unique_ptr< FEGenericBase< Real > > build(const unsigned int dim, const FEType &fet)

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

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

339{
340 if (!_building_helpers && type == _helper_type)
342
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::set< FEType > _need_second_derivative_neighbor
Definition Assembly.h:2867
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition Assembly.h:2769

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

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

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

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

◆ buildLowerDDualFE()

void Assembly::buildLowerDDualFE ( FEType  type) const
private

Definition at line 384 of file Assembly.C.

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}
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
Definition Assembly.h:2771

Referenced by feDualPhiLower(), and feGradDualPhiLower().

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

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}
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_lower
Definition Assembly.h:2770

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

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

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

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

◆ 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::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_dual_lower
Definition Assembly.h:2779

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

487{
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}
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::set< FEType > _need_face_div
Definition Assembly.h:2870
const std::vector< std::vector< OutputShape > > & get_phi() const

Referenced by getVectorFEFace().

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

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
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}
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

Referenced by getVectorFEFaceNeighbor().

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

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< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data
Shape function values, gradients, second derivatives for each vector FE type.
Definition Assembly.h:2774
std::set< FEType > _need_div
Definition Assembly.h:2869

Referenced by getVectorFE().

◆ 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{
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::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_lower
Definition Assembly.h:2778

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

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
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}
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition Assembly.h:2776
std::set< FEType > _need_neighbor_div
Definition Assembly.h:2871

Referenced by getVectorFENeighbor().

◆ 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
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}

◆ cacheJacobian() [1/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}
for(PetscInt i=0;i< nvars;++i)
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
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
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
void resize(const unsigned int new_m, const unsigned int new_n)
auto index_range(const T &sizable)
IntRange< T > make_range(T beg, T end)

◆ cacheJacobian() [2/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.

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}
void cacheJacobianCoupledVarPair(const MooseVariableBase &ivar, const MooseVariableBase &jvar)
Caches element matrix for ivar rows and jvar columns.
Definition Assembly.C:4059

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

◆ 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}
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)

◆ cacheJacobian() [4/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}

◆ cacheJacobianBlock() [1/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.

Definition at line 3606 of file Assembly.C.

3612{
3613 if (idof_indices.size() == 0 || jdof_indices.size() == 0)
3614 return;
3615 if (jac_block.n() == 0 || jac_block.m() == 0)
3616 return;
3617 if (!_sys.hasMatrix(tag))
3618 return;
3619
3620 auto & scaling_factors = ivar.arrayScalingFactor();
3621 const unsigned int iv = ivar.number();
3622 const unsigned int jv = jvar.number();
3623
3624 for (unsigned int i = 0; i < ivar.count(); ++i)
3625 {
3626 for (const auto & jt : ConstCouplingRow(iv + i, *_cm))
3627 {
3628 if (jt < jv || jt >= jv + jvar.count())
3629 continue;
3630 unsigned int j = jt - jv;
3631
3632 auto di = ivar.componentDofIndices(idof_indices, i);
3633 auto dj = jvar.componentDofIndices(jdof_indices, j);
3634 auto indof = di.size();
3635 auto jndof = dj.size();
3636
3637 unsigned int jj = j;
3638 if (iv == jv && _component_block_diagonal[iv])
3639 // here i must be equal to j
3640 jj = 0;
3641
3642 auto sub = jac_block.sub_matrix(i * indof, indof, jj * jndof, jndof);
3643 if (scaling_factors[i] != 1.0)
3644 sub *= scaling_factors[i];
3645
3646 // If we're computing the jacobian for automatically scaling variables we do not want
3647 // to constrain the element matrix because it introduces 1s on the diagonal for the
3648 // constrained dofs
3650 _dof_map.constrain_element_matrix(sub, di, dj, false);
3651
3652 for (MooseIndex(di) i = 0; i < di.size(); i++)
3653 for (MooseIndex(dj) j = 0; j < dj.size(); j++)
3654 {
3655 _cached_jacobian_values[tag].push_back(sub(i, j));
3656 _cached_jacobian_rows[tag].push_back(di[i]);
3657 _cached_jacobian_cols[tag].push_back(dj[j]);
3658 }
3659 }
3660 }
3661}
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.
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one.
unsigned int n() const
unsigned int m() const

◆ cacheJacobianBlock() [2/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.

Definition at line 3721 of file Assembly.C.

3727{
3728 const auto has_matrix =
3729 std::any_of(tags.begin(), tags.end(), [this](const auto tag) { return _sys.hasMatrix(tag); });
3730
3731 // Work on a reusable Assembly-owned copy so callers retain their local matrix. This also lets us
3732 // apply constraints and scaling once before caching the same block to every requested matrix tag.
3733 if ((idof_indices.size() > 0) && (jdof_indices.size() > 0) && jac_block.n() && jac_block.m() &&
3734 has_matrix)
3735 {
3736 _row_indices.assign(idof_indices.begin(), idof_indices.end());
3737 _column_indices.assign(jdof_indices.begin(), jdof_indices.end());
3738 _element_matrix = jac_block;
3739
3740 // If we're computing the jacobian for automatically scaling variables we do not want to
3741 // constrain the element matrix because it introduces 1s on the diagonal for the constrained
3742 // dofs
3745
3746 if (scaling_factor != 1.0)
3747 _element_matrix *= scaling_factor;
3748
3749 for (const auto i : index_range(_row_indices))
3750 for (const auto j : index_range(_column_indices))
3752 _row_indices[i], _column_indices[j], _element_matrix(i, j), LocalDataKey{}, tags);
3753 }
3754}

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

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

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}

Referenced by cacheJacobianNonlocal().

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

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}
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...
Definition Assembly.C:3721

Referenced by cacheJacobian().

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

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
4155 *ivar,
4156 *jvar,
4157 ivar->dofIndicesLower(),
4158 jvar->dofIndices(),
4159 tag);
4160
4162 *ivar,
4163 *jvar,
4164 ivar->dofIndicesLower(),
4165 jvar->dofIndicesNeighbor(),
4166 tag);
4167
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
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
4205 *ivar,
4206 *jvar,
4207 ivar->dofIndicesNeighbor(),
4208 jvar->dofIndicesNeighbor(),
4209 tag);
4210 }
4211 }
4212}
@ SecondarySecondary
Definition MooseTypes.h:852
@ SecondaryPrimary
Definition MooseTypes.h:853
@ PrimarySecondary
Definition MooseTypes.h:854
@ PrimaryPrimary
Definition MooseTypes.h:855

Referenced by ComputeMortarFunctor::operator()().

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

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}

Referenced by SubProblem::cacheJacobianNeighbor().

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

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}
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

Referenced by SubProblem::cacheJacobian().

◆ 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 \emph 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.

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)
3202 row_index, column_indices[j], raw_derivatives[j] * scaling_factor, {}, matrix_tags);
3203 }
3204}

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

◆ cacheResidual() [1/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

◆ 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}
virtual const VectorTag & getVectorTag(const TagID tag_id) const
Get a VectorTag from a TagID.
Definition SubProblem.C:162
Storage for all of the information pretaining to a vector tag.
Definition VectorTag.h:18

◆ cacheResidual() [3/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.

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}
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

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

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

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

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

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

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}

Referenced by ComputeMortarFunctor::operator()().

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

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}

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

◆ 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}

◆ 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 \emph 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.

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 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
bool computingResidual() const
Definition Assembly.h:1946
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 resize(const unsigned int n)
void constrain_element_vector(DenseVector< Number > &rhs, std::vector< dof_id_type > &dofs, bool asymmetric_constraint_rows=true) const
We need to instantiate the following CompareTypes to tell the compiler that ADReal is a subtype of Ch...
auto raw_value(const Eigen::Map< T > &in)

Referenced by TaggingInterface::addResiduals().

◆ 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 \emph 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 \emph 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.

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))
3112 row_indices[i], MetaPhysicL::raw_value(residuals[i]) * scaling_factor, vector_tags);
3113}

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

◆ clearCachedJacobian()

void Assembly::clearCachedJacobian ( )
private

Clear any currently cached jacobians.

This is automatically called by setCachedJacobian

Definition at line 4507 of file Assembly.C.

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}

Referenced by setCachedJacobian(), and zeroCachedJacobian().

◆ 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}

◆ clearCachedResiduals() [1/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())
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}

◆ clearCachedResiduals() [2/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.

3486{
3487 for (const auto & vector_tag : _residual_vector_tags)
3488 clearCachedResiduals(vector_tag);
3489}

Referenced by addCachedResidualDirectly(), and clearCachedResiduals().

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

2114{
2115 const auto dim = elem.dim();
2116
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);
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 {
2142 _ad_normals[qp] = _current_normals[qp];
2143 }
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}
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition Assembly.h:2529
const Elem *const & elem() const
Return the current element.
Definition Assembly.h:414
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition Assembly.h:2527
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...
const unsigned int & side() const
Returns the current side.
Definition Assembly.h:446
void resizeADMappingObjects(unsigned int n_qp, unsigned int dim)
resize any objects that contribute to automatic differentiation-related mapping calculations
Definition Assembly.C:973
MooseArray< Point > _current_normals
The current Normal vectors at the quadrature points.
Definition Assembly.h:2531
void computeFaceMap(const Elem &elem, const unsigned int side, const std::vector< Real > &qw)
Definition Assembly.C:1350
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
void resize(unsigned int size)
Change the number of elements the array can store.
Definition MooseArray.h:216
virtual void haveADObjects(bool have_ad_objects)
Method for setting whether we have any ad objects.
Definition SubProblem.h:775
virtual unsigned short dim() const=0
static unsigned int n_shape_functions(const unsigned int dim, const FEType &fe_t, const ElemType t)
unsigned int n_points() const
const std::vector< Real > & get_weights() const

Referenced by reinitElemFaceRef(), and reinitFEFace().

◆ computeCurrentElemVolume()

void Assembly::computeCurrentElemVolume ( )
private

Definition at line 1756 of file Assembly.C.

1757{
1759 return;
1760
1766
1768 for (unsigned int qp = 0; qp < _current_qrule->n_points(); qp++)
1770
1772}
MooseArray< Point > _current_q_points
The current list of quadrature points.
Definition Assembly.h:2419
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
Definition Assembly.C:1733
MooseArray< Real > _current_JxW
The current list of transformed jacobian weights.
Definition Assembly.h:2421
subdomain_id_type subdomain_id() const

Referenced by reinit(), and reinit().

◆ computeCurrentFaceVolume()

void Assembly::computeCurrentFaceVolume ( )
private

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

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;
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 {
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();
1425 for (const auto p : make_range(n_qp))
1428 for (const auto p : make_range(n_qp))
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]);
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 }
1489 for (const auto p : make_range(n_qp))
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 }
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}
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
std::vector< VectorValue< ADReal > > _ad_dxyzdxi_map
AD quantities.
Definition Assembly.h:2828
std::vector< VectorValue< ADReal > > _ad_d2xyzdeta2_map
Definition Assembly.h:2833
std::vector< VectorValue< ADReal > > _ad_d2xyzdxideta_map
Definition Assembly.h:2832
std::vector< VectorValue< ADReal > > _ad_dxyzdeta_map
Definition Assembly.h:2829
const Node *const & node() const
Returns the reference to the node.
Definition Assembly.h:545
libMesh::ElemSideBuilder _compute_face_map_side_elem_builder
In place side element builder for computeFaceMap()
Definition Assembly.h:2882
std::vector< VectorValue< ADReal > > _ad_d2xyzdxi2_map
Definition Assembly.h:2831
virtual unsigned int currentNlSysNum() const =0
unsigned int number() const
Gets the number of this system.
const Node & node_ref(const unsigned int i) const
virtual Order default_order() const=0
dof_id_type node_id(const unsigned int i) const
unsigned int n_dofs(const ElemType t, const Order o)
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N > > &derivs, libMesh::dof_id_type index, Real value)
Definition ADReal.h:21
const Number zero

Referenced by computeADFace().

◆ 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}
std::vector< ADReal > _ad_dzetady_map
Definition Assembly.h:2844
std::vector< ADReal > _ad_detadx_map
Definition Assembly.h:2840
std::vector< ADReal > _ad_dxidx_map
Definition Assembly.h:2837
std::vector< ADReal > _ad_dxidz_map
Definition Assembly.h:2839
std::vector< ADReal > _ad_dzetadx_map
Definition Assembly.h:2843
std::vector< ADReal > _ad_detadz_map
Definition Assembly.h:2842
std::vector< ADReal > _ad_dzetadz_map
Definition Assembly.h:2845
std::vector< ADReal > _ad_detady_map
Definition Assembly.h:2841
std::vector< ADReal > _ad_dxidy_map
Definition Assembly.h:2838
const std::vector< std::vector< OutputShape > > & get_dphidxi() const
const std::vector< std::vector< OutputShape > > & get_dphidzeta() const
const std::vector< std::vector< OutputShape > > & get_dphideta() 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.

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];
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];
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];
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}
std::vector< VectorValue< ADReal > > _ad_dxyzdzeta_map
Definition Assembly.h:2830
std::vector< ADReal > _ad_jac
Definition Assembly.h:2834
dof_id_type id() const
void print_info(std::ostream &os=libMesh::out) const
const Node *const * get_nodes() const
FEType get_fe_type() const
const FEMap & get_fe_map() const
const std::vector< std::vector< Real > > & get_phi_map() const
const std::vector< std::vector< Real > > & get_dphidxi_map() const
const std::vector< std::vector< Real > > & get_dphideta_map() const
const std::vector< std::vector< Real > > & get_dphidzeta_map() const
libmesh_assert(ctx)
OStreamProxy err(std::cerr)

Referenced by computeADFace(), and reinitFE().

◆ computingJacobian()

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

Definition at line 1951 of file Assembly.h.

1951{ return _computing_jacobian; }

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

◆ computingResidual()

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

Definition at line 1946 of file Assembly.h.

1946{ return _computing_residual; }

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

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

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

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

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

◆ 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; }

◆ 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; }

◆ copyFaceShapes() [1/2]

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

Definition at line 3040 of file Assembly.C.

3041{
3042 phiFace(v).shallowCopy(v.phiFace());
3043 gradPhiFace(v).shallowCopy(v.gradPhiFace());
3044 if (v.computingSecond())
3045 secondPhiFace(v).shallowCopy(v.secondPhiFace());
3046}
const VariablePhiValue & phiFace() const
Definition Assembly.h:1335
const VariablePhiGradient & gradPhiFace() const
Definition Assembly.h:1337
const VariablePhiSecond & secondPhiFace(const MooseVariableField< Real > &) const
Definition Assembly.h:1342
virtual const FieldVariablePhiGradient & gradPhiFace() const =0
Return the gradients of the variable's shape functions on an element face.
virtual const FieldVariablePhiSecond & secondPhiFace() const =0
Return the rank-2 tensor of second derivatives of the variable's shape functions on an element face.
virtual bool computingSecond() const =0
Whether or not this variable is computing any second derivatives.
virtual const FieldVariablePhiValue & phiFace() const =0
Return the variable's shape functions on an element face.

Referenced by copyFaceShapes().

◆ 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 {
3060 copyFaceShapes(v);
3061 }
3062 else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3063 {
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}
void copyFaceShapes(MooseVariableField< T > &v)
Definition Assembly.C:3040
VectorVariablePhiCurl _vector_curl_phi_face
Definition Assembly.h:2730
VectorVariablePhiDivergence _vector_div_phi_face
Definition Assembly.h:2731
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
@ VAR_FIELD_STANDARD
Definition MooseTypes.h:777
@ VAR_FIELD_ARRAY
Definition MooseTypes.h:780
@ VAR_FIELD_VECTOR
Definition MooseTypes.h:779
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
Definition MooseTypes.h:147

◆ copyNeighborShapes() [1/2]

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

Definition at line 3077 of file Assembly.C.

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 VariablePhiSecond & secondPhiNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1355
const VariablePhiGradient & gradPhiNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1351
const VariablePhiGradient & gradPhiFaceNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1364
const VariablePhiSecond & secondPhiFaceNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1368
const VariablePhiValue & phiNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1347
const VariablePhiValue & phiFaceNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1360
virtual const FieldVariablePhiGradient & gradPhiFaceNeighbor() const =0
Return the gradients of the variable's shape functions on a neighboring element face.
virtual const FieldVariablePhiGradient & gradPhiNeighbor() const =0
Return the gradients of the variable's shape functions on a neighboring element.
virtual const FieldVariablePhiValue & phiFaceNeighbor() const =0
Return the variable's shape functions on a neighboring element face.
bool usesPhiNeighbor() const
Whether or not this variable is actually using the shape function value.
virtual const FieldVariablePhiSecond & secondPhiFaceNeighbor() const =0
Return the rank-2 tensor of second derivatives of the variable's shape functions on a neighboring ele...
virtual const FieldVariablePhiSecond & secondPhiNeighbor() const =0
Return the rank-2 tensor of second derivatives of the variable's shape functions on a neighboring ele...
virtual bool usesSecondPhiNeighbor() const =0
Whether or not this variable is actually using the shape function second derivatives.
virtual const FieldVariablePhiValue & phiNeighbor() const =0
Return the variable's shape functions on a neighboring element.
bool usesGradPhiNeighbor() const
Whether or not this variable is actually using the shape function gradient.

Referenced by copyNeighborShapes().

◆ 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);
3104 }
3105 else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY)
3106 {
3109 }
3110 else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3111 {
3114 }
3115 else
3116 mooseError("Unsupported variable field type!");
3117}
void copyNeighborShapes(MooseVariableField< T > &v)
Definition Assembly.C:3077

◆ copyShapes() [1/2]

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

Definition at line 3003 of file Assembly.C.

3004{
3005 phi(v).shallowCopy(v.phi());
3006 gradPhi(v).shallowCopy(v.gradPhi());
3007 if (v.computingSecond())
3008 secondPhi(v).shallowCopy(v.secondPhi());
3009}
const VariablePhiGradient & gradPhi() const
Definition Assembly.h:1327
const VariablePhiValue & phi() const
Definition Assembly.h:1320
const VariablePhiSecond & secondPhi() const
Definition Assembly.h:1329
virtual const FieldVariablePhiSecond & secondPhi() const =0
Return the rank-2 tensor of second derivatives of the variable's elemental shape functions.
virtual const FieldVariablePhiValue & phi() const =0
Return the variable's elemental shape functions.
virtual const FieldVariablePhiGradient & gradPhi() const =0
Return the gradients of the variable's elemental shape functions.

Referenced by copyShapes().

◆ 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 {
3023 copyShapes(v);
3024 }
3025 else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3026 {
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}
const VectorVariablePhiDivergence & divPhi(const MooseVariableField< RealVectorValue > &) const
Definition Assembly.h:1389
const VectorVariablePhiCurl & curlPhi(const MooseVariableField< RealVectorValue > &) const
Definition Assembly.h:1385
void copyShapes(MooseVariableField< T > &v)
Definition Assembly.C:3003

◆ couplingEntries() [1/2]

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

Definition at line 1294 of file Assembly.h.

1295 {
1296 return _cm_ff_entry;
1297 }

Referenced by MortarConstraint::computeJacobian().

◆ 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 }

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

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
static std::unique_ptr< QBase > build(std::string_view name, const unsigned int dim, const Order order=INVALID_ORDER)

Referenced by bumpAllQRuleOrder(), and bumpVolumeQRuleOrder().

◆ curlPhi() [1/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

◆ curlPhi() [2/2]

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

Definition at line 1385 of file Assembly.h.

1386 {
1387 return _vector_curl_phi;
1388 }

Referenced by copyShapes().

◆ curlPhiFace() [1/2]

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

Definition at line 1527 of file Assembly.h.

1528 {
1529 return _vector_curl_phi_face;
1530 }

◆ curlPhiFace() [2/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 }

◆ curlPhiFaceNeighbor() [1/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

◆ curlPhiFaceNeighbor() [2/2]

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

Definition at line 1454 of file Assembly.h.

1455 {
1457 }

◆ curlPhiNeighbor() [1/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

◆ curlPhiNeighbor() [2/2]

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

Definition at line 1429 of file Assembly.h.

1430 {
1432 }

◆ 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]

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

◆ divPhi() [2/2]

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

Definition at line 1389 of file Assembly.h.

1390 {
1391 return _vector_div_phi;
1392 }

Referenced by copyShapes().

◆ divPhiFace() [1/2]

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

Definition at line 1531 of file Assembly.h.

1532 {
1533 return _vector_div_phi_face;
1534 }

◆ divPhiFace() [2/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 }

◆ divPhiFaceNeighbor() [1/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

◆ divPhiFaceNeighbor() [2/2]

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

Definition at line 1459 of file Assembly.h.

1460 {
1462 }

◆ divPhiNeighbor() [1/2]

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

Definition at line 1552 of file Assembly.h.

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

◆ divPhiNeighbor() [2/2]

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

Definition at line 1434 of file Assembly.h.

1435 {
1437 }

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

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}
void coordTransformFactor(const SubProblem &s, SubdomainID sub_id, const P &point, C &factor, SubdomainID neighbor_sub_id=libMesh::Elem::invalid_subdomain_id)
Computes a conversion multiplier for use when computing integraals for the current coordinate system ...
Definition Assembly.C:43
const MooseArray< Real > & JxW() const
Returns the reference to the transformed jacobian weights.
Definition Assembly.h:276

Referenced by reinitLowerDElem(), and reinitNeighborLowerDElem().

◆ elemVolume()

const Real & Assembly::elemVolume ( ) const
inline

◆ 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 }

◆ 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 }

◆ 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 }

◆ feADGradPhi() [2/2]

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

Definition at line 2941 of file Assembly.h.

2943{
2944 return _ad_vector_grad_phi_data[type];
2945}

◆ 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 }

◆ feADGradPhiFace() [2/2]

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

Definition at line 2948 of file Assembly.h.

2950{
2951 return _ad_vector_grad_phi_data_face[type];
2952}

◆ 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 }

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

4715{
4716 _need_curl.insert(type);
4717 buildVectorFE(type);
4718 return _vector_fe_shape_data[type]->_curl_phi;
4719}
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition Assembly.C:455

◆ 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 }

◆ 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 4722 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}
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition Assembly.C:546
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition Assembly.C:486

◆ 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 }

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

4748{
4749 _need_curl.insert(type);
4751
4752 return _vector_fe_shape_data_face_neighbor[type]->_curl_phi;
4753}

◆ 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 }

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

4739{
4740 _need_curl.insert(type);
4742 return _vector_fe_shape_data_neighbor[type]->_curl_phi;
4743}
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition Assembly.C:516

◆ 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 }

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

4758{
4759 _need_div.insert(type);
4760 buildVectorFE(type);
4761 return _vector_fe_shape_data[type]->_div_phi;
4762}

◆ 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 }

◆ 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 4765 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}

◆ 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 }

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

4791{
4792 _need_face_neighbor_div.insert(type);
4794 return _vector_fe_shape_data_face_neighbor[type]->_div_phi;
4795}

◆ 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 }

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

4782{
4783 _need_neighbor_div.insert(type);
4785 return _vector_fe_shape_data_neighbor[type]->_div_phi;
4786}

◆ 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

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

4610{
4612 return _vector_fe_shape_data_dual_lower[type]->_phi;
4613}
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}

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

4626{
4628 return _vector_fe_shape_data_dual_lower[type]->_grad_phi;
4629}

◆ 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 }

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

4585{
4586 buildVectorFE(type);
4587 return _vector_fe_shape_data[type]->_grad_phi;
4588}

◆ 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 }

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

4642{
4643 buildVectorFaceFE(type);
4644 return _vector_fe_shape_data_face[type]->_grad_phi;
4645}

◆ 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 }

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

4698{
4700 return _vector_fe_shape_data_face_neighbor[type]->_grad_phi;
4701}

◆ 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}

◆ 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 4616 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

◆ 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 }

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

4673{
4675 return _vector_fe_shape_data_neighbor[type]->_grad_phi;
4676}

◆ 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 }

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

4577{
4578 buildVectorFE(type);
4579 return _vector_fe_shape_data[type]->_phi;
4580}

◆ 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 }

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

4634{
4635 buildVectorFaceFE(type);
4636 return _vector_fe_shape_data_face[type]->_phi;
4637}

◆ 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 }

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

4690{
4692 return _vector_fe_shape_data_face_neighbor[type]->_phi;
4693}

◆ 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}

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

4602{
4603 buildVectorLowerDFE(type);
4604 return _vector_fe_shape_data_lower[type]->_phi;
4605}

◆ 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 }

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

4665{
4667 return _vector_fe_shape_data_neighbor[type]->_phi;
4668}

◆ 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 }

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

4593{
4594 _need_second_derivative.insert(type);
4595 buildVectorFE(type);
4596 return _vector_fe_shape_data[type]->_second_phi;
4597}

◆ 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 }

◆ 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 4648 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}

◆ 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 {
1729 buildFaceNeighborFE(type);
1730 return _fe_shape_data_face_neighbor[type]->_second_phi;
1731 }

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

4706{
4709 return _vector_fe_shape_data_face_neighbor[type]->_second_phi;
4710}

◆ 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 {
1705 buildNeighborFE(type);
1706 return _fe_shape_data_neighbor[type]->_second_phi;
1707 }

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

4681{
4684 return _vector_fe_shape_data_neighbor[type]->_second_phi;
4685}

◆ 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 }

◆ 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 4956 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 4963 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.

133 {
134 buildFE(type);
135 return constify_ref(_fe[dim][type]);
136 }
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-refe...
Definition Assembly.h:120

Referenced by PointVariableSamplerBase::initialize().

◆ 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 }

◆ 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 {
171 return constify_ref(_fe_face_neighbor[dim][type]);
172 }

◆ 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 }

◆ getJacobianDiagonal()

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

Definition at line 1892 of file Assembly.h.

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 }

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

◆ 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 }

◆ 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 }

◆ 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 {
219 return constify_ref(_vector_fe_face_neighbor[dim][type]);
220 }

◆ 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 {
195 return constify_ref(_vector_fe_neighbor[dim][type]);
196 }

◆ gradPhi() [1/6]

const VariablePhiGradient & Assembly::gradPhi ( ) const
inline

Definition at line 1327 of file Assembly.h.

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

Referenced by copyShapes().

◆ gradPhi() [2/6]

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

Definition at line 1466 of file Assembly.h.

1466{ return _grad_phi; }

◆ gradPhi() [3/6]

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

Definition at line 1328 of file Assembly.h.

1328{ return _grad_phi; }

◆ gradPhi() [4/6]

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

Definition at line 1579 of file Assembly.h.

1579{ return _grad_phi; }

◆ 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]

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

Definition at line 1377 of file Assembly.h.

1378 {
1379 return _vector_grad_phi;
1380 }

◆ gradPhiFace() [1/6]

const VariablePhiGradient & Assembly::gradPhiFace ( ) const
inline

Definition at line 1337 of file Assembly.h.

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

Referenced by copyFaceShapes().

◆ gradPhiFace() [2/6]

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

Definition at line 1470 of file Assembly.h.

1470{ return _grad_phi_face; }

◆ gradPhiFace() [3/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 }

◆ gradPhiFace() [4/6]

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

Definition at line 1583 of file Assembly.h.

1584 {
1585 return _grad_phi_face;
1586 }

◆ 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]

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 }

◆ gradPhiFaceNeighbor() [1/5]

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

Definition at line 1487 of file Assembly.h.

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

◆ gradPhiFaceNeighbor() [2/5]

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

Definition at line 1364 of file Assembly.h.

1365 {
1367 }

Referenced by copyNeighborShapes().

◆ gradPhiFaceNeighbor() [3/5]

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

Definition at line 1609 of file Assembly.h.

1610 {
1612 }

◆ 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]

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

Definition at line 1444 of file Assembly.h.

1445 {
1447 }

◆ gradPhiNeighbor() [1/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() [2/5]

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

Definition at line 1351 of file Assembly.h.

1352 {
1353 return _grad_phi_neighbor;
1354 }

Referenced by copyNeighborShapes().

◆ gradPhiNeighbor() [3/5]

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

Definition at line 1596 of file Assembly.h.

1597 {
1598 return _grad_phi_neighbor;
1599 }

◆ 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]

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

Definition at line 1420 of file Assembly.h.

1421 {
1423 }

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

4560{
4561 _scaling_vector = &_sys.getVector("scaling_factors");
4562}
const NumericVector< Real > * _scaling_vector
The map from global index to variable scaling factor.
Definition Assembly.h:2875

Referenced by SubProblem::hasScalingVector().

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

4845{
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);
4927 process_fe(_mesh_dimension, _vector_fe_lower);
4928
4930
4931 _have_p_refinement = true;
4932}
unsigned int count
Definition MortarUtils.C:53
std::vector< std::unique_ptr< FEBase > > _unique_fe_lower_helper
Definition Assembly.h:2374
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
Definition Assembly.h:2372
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
Definition Assembly.h:2371
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
std::vector< std::unique_ptr< FEBase > > _unique_fe_neighbor_helper
Definition Assembly.h:2373

Referenced by SubProblem::preparePRefinement().

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

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}

Referenced by Assembly(), and havePRefinement().

◆ 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
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}
unsigned int n_vars
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_Kee
Definition Assembly.h:2680
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_Kle
dlower/dsecondary (or dlower/delement)
Definition Assembly.h:2692
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_Kln
dlower/dprimary (or dlower/dneighbor)
Definition Assembly.h:2694
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_Keg
Definition Assembly.h:2681
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_Knl
dprimary/dlower (or dneighbor/dlower)
Definition Assembly.h:2698
virtual unsigned int numMatrixTags() const
The total number of tags.
Definition SubProblem.h:248
virtual unsigned int nVariables() const
Get the number of variables in this system.
Definition SystemBase.C:890
virtual bool isScalarVariable(unsigned int var_name) const
Definition SystemBase.C:884

◆ initNonlocalCoupling()

void Assembly::initNonlocalCoupling ( )

Create pair of variables requiring nonlocal jacobian contributions.

Definition at line 2651 of file Assembly.C.

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}

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

1143 {
1144 jacobianBlockUsed(tag, ivar, jvar, true);
1145 return _sub_Kee[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
1146 }

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

◆ jacobianBlockLowerUsed() [1/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 }

◆ jacobianBlockLowerUsed() [2/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.

2277 {
2278 _jacobian_block_lower_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2279 }

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

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

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];
3176 return _sub_Kle[tag][ivar][0];
3178 return _sub_Kln[tag][ivar][0];
3180 return _sub_Kel[tag][ivar][0];
3182 return _sub_Kee[tag][ivar][0];
3184 return _sub_Ken[tag][ivar][0];
3186 return _sub_Knl[tag][ivar][0];
3188 return _sub_Kne[tag][ivar][0];
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];
3201 return _sub_Kle[tag][ivar][jvar];
3203 return _sub_Kln[tag][ivar][jvar];
3205 return _sub_Kel[tag][ivar][jvar];
3207 return _sub_Kee[tag][ivar][jvar];
3209 return _sub_Ken[tag][ivar][jvar];
3211 return _sub_Knl[tag][ivar][jvar];
3213 return _sub_Kne[tag][ivar][jvar];
3215 return _sub_Knn[tag][ivar][jvar];
3216 }
3217 }
3218}

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

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

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:
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:
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}
@ ElementElement
Definition MooseTypes.h:805

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

◆ jacobianBlockNeighborUsed() [1/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 }

◆ jacobianBlockNeighborUsed() [2/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.

2259 {
2260 _jacobian_block_neighbor_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2261 }

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

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

1154 {
1155 jacobianBlockNonlocalUsed(tag, ivar, jvar, true);
1156 return _sub_Keg[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
1157 }

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

◆ jacobianBlockNonlocalUsed() [1/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 }

◆ jacobianBlockNonlocalUsed() [2/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.

2295 {
2296 _jacobian_block_nonlocal_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2297 }

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

◆ jacobianBlockUsed() [1/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 }

◆ jacobianBlockUsed() [2/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.

2241 {
2242 _jacobian_block_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2243 }

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

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

276{ return _current_JxW; }

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

◆ 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; }

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

707{ return *_JxW_msm; }

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

◆ 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;
265}
MooseArray< Real > _current_JxW_neighbor
The current transformed jacobian weights on a neighbor's face.
Definition Assembly.h:2570

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

476{ return _current_lower_d_elem; }

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

◆ 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

◆ 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}
unsigned int size() const
The number of elements that can currently be stored in the array.
Definition MooseArray.h:259

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

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}
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition Assembly.h:2380
forward declarations
Definition MooseArray.h:18

Referenced by reinitFEFace().

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

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}

Referenced by reinitFE().

◆ 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; }

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

623{ return _need_dual; }

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

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

◆ 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

◆ 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; }

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

509 {
512 }

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

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

545{ return _current_node; }

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

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

551{ return _current_neighbor_node; }

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

◆ 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 }

◆ 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; }

◆ numExtraElemIntegers()

unsigned int Assembly::numExtraElemIntegers ( ) const
inline

Number of extra element integers Assembly tracked.

Definition at line 373 of file Assembly.h.

373{ return _extra_elem_ids.size() - 1; }

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

◆ phi() [1/6]

const VariablePhiValue & Assembly::phi ( ) const
inline

Definition at line 1320 of file Assembly.h.

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

Referenced by copyShapes().

◆ phi() [2/6]

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

Definition at line 1465 of file Assembly.h.

1465{ return _phi; }

◆ phi() [3/6]

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

Definition at line 1326 of file Assembly.h.

1326{ return _phi; }

◆ phi() [4/6]

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

Definition at line 1578 of file Assembly.h.

1578{ return _phi; }

◆ 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]

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

Definition at line 1373 of file Assembly.h.

1374 {
1375 return _vector_phi;
1376 }

◆ phiFace() [1/6]

const VariablePhiValue & Assembly::phiFace ( ) const
inline

Definition at line 1335 of file Assembly.h.

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

Referenced by copyFaceShapes().

◆ phiFace() [2/6]

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

Definition at line 1469 of file Assembly.h.

1469{ return _phi_face; }

◆ phiFace() [3/6]

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

Definition at line 1336 of file Assembly.h.

1336{ return _phi_face; }

◆ phiFace() [4/6]

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

Definition at line 1582 of file Assembly.h.

1582{ return _phi_face; }

◆ 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]

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

Definition at line 1394 of file Assembly.h.

1395 {
1396 return _vector_phi_face;
1397 }

◆ phiFaceNeighbor() [1/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() [2/5]

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

Definition at line 1360 of file Assembly.h.

1361 {
1362 return _phi_face_neighbor;
1363 }

Referenced by copyNeighborShapes().

◆ phiFaceNeighbor() [3/5]

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

Definition at line 1605 of file Assembly.h.

1606 {
1607 return _phi_face_neighbor;
1608 }

◆ 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]

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

Definition at line 1439 of file Assembly.h.

1440 {
1442 }

◆ phiNeighbor() [1/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() [2/5]

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

Definition at line 1347 of file Assembly.h.

1348 {
1349 return _phi_neighbor;
1350 }

Referenced by copyNeighborShapes().

◆ phiNeighbor() [3/5]

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

Definition at line 1592 of file Assembly.h.

1593 {
1594 return _phi_neighbor;
1595 }

◆ 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]

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

Definition at line 1415 of file Assembly.h.

1416 {
1417 return _vector_phi_neighbor;
1418 }

◆ 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; }

◆ prepare()

void Assembly::prepare ( )

Definition at line 2719 of file Assembly.C.

2720{
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}

◆ 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}

◆ prepareJacobianBlock()

void Assembly::prepareJacobianBlock ( )

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

Definition at line 2686 of file Assembly.C.

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}
This class provides an interface for common operations on field variables of both FE and FV types wit...

Referenced by prepare(), and reinitFVFace().

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

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}
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 ...
virtual const std::vector< dof_id_type > & dofIndicesNeighbor() const =0
Get neighbor DOF indices for currently selected element.

Referenced by SubProblem::reinitLowerDElem().

◆ prepareNeighbor()

void Assembly::prepareNeighbor ( )

Definition at line 2812 of file Assembly.C.

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}

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

◆ 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}
const std::vector< dof_id_type > & allDofIndices() const
Get all global dofindices for the variable.

◆ prepareOffDiagScalar()

void Assembly::prepareOffDiagScalar ( )

Definition at line 2977 of file Assembly.C.

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}

Referenced by NodalScalarKernel::reinit().

◆ prepareResidual()

void Assembly::prepareResidual ( )

Sizes and zeroes the residual for the current element.

Definition at line 2710 of file Assembly.C.

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}

Referenced by prepare(), and reinitFVFace().

◆ prepareScalar()

void Assembly::prepareScalar ( )

Definition at line 2953 of file Assembly.C.

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}

Referenced by FEProblemBase::reinitScalars().

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

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}

◆ prepareVariableNonlocal()

void Assembly::prepareVariableNonlocal ( MooseVariableFieldBase var)

Definition at line 2782 of file Assembly.C.

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}

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

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}

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

◆ 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; }

Referenced by genericQPoints().

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

345{ return _current_q_points_face; }

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

◆ 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(); }

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

235{ return constify_ref(_current_qrule); }

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

◆ qruleArbitraryFace()

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

Definition at line 1925 of file Assembly.C.

1926{
1927 return qruleFaceHelper<ArbitraryQuadrature>(
1928 elem, side, [](QRules & q) { return q.arbitrary_face.get(); });
1929}

Referenced by reinit(), and reinitElemFaceRef().

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

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

1920{
1921 return qruleFaceHelper<QBase>(elem, side, [](QRules & q) { return q.face.get(); });
1922}

Referenced by reinitElemFaceRef(), and setFaceQRule().

◆ 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 & neighbor() const
Return the neighbor element.
Definition Assembly.h:470

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

712{ return constify_ref(_qrule_msm); }

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

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

519 {
521 }

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

◆ qrules() [1/2]

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

◆ 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");
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 }

◆ reinit() [1/5]

void Assembly::reinit ( const Elem elem)

Reinitialize objects (JxW, q_points, ...) for an elements.

Parameters
elemThe element we want to reinitialize on

Definition at line 1821 of file Assembly.C.

1822{
1824 _current_neighbor_elem = nullptr;
1826 "current subdomain has been set incorrectly");
1829 reinitFE(elem);
1830
1832}
void reinitFE(const Elem *elem)
Just an internal helper function to reinit the volume FE objects.
Definition Assembly.C:762
void setVolumeQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for volume integration.
Definition Assembly.C:657
void computeCurrentElemVolume()
Definition Assembly.C:1756

Referenced by MooseMesh::buildHRefinementAndCoarseningMaps(), MooseMesh::buildPRefinementAndCoarseningMaps(), GeometricSearchData::generateQuadratureNodes(), ComputeBoundaryInitialConditionThread::onNode(), reinitAtPhysical(), reinitElemAndNeighbor(), and GeometricSearchData::updateQuadratureNodes().

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

Definition at line 1835 of file Assembly.C.

1836{
1838 _current_neighbor_elem = nullptr;
1840 "current subdomain has been set incorrectly");
1842
1843 unsigned int elem_dimension = _current_elem->dim();
1844
1845 _current_qrule_arbitrary = qrules(elem_dimension).arbitrary_vol.get();
1846
1847 // Make sure the qrule is the right one
1850
1851 _current_qrule_arbitrary->setPoints(reference_points);
1852
1853 reinitFE(elem);
1854
1856}
void setPoints(const std::vector< libMesh::Point > &points)
Set the quadrature points.
std::unique_ptr< ArbitraryQuadrature > arbitrary_vol
volume/elem (meshdim) custom points quadrature rule
Definition Assembly.h:2449

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

Definition at line 1961 of file Assembly.C.

1962{
1964 _current_neighbor_elem = nullptr;
1966 "current subdomain has been set incorrectly");
1970
1971 unsigned int elem_dimension = _current_elem->dim();
1972
1974
1975 // Make sure the qrule is the right one
1978
1979 _current_qrule_arbitrary->setPoints(reference_points);
1980
1982
1984
1986}
void computeCurrentFaceVolume()
Definition Assembly.C:1775
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
libMesh::ElemSideBuilder _current_side_elem_builder
In place side element builder for _current_side_elem.
Definition Assembly.h:2878
ArbitraryQuadrature * _current_qrule_arbitrary_face
The current arbitrary quadrature rule used on the element face.
Definition Assembly.h:2417
void reinitFEFace(const Elem *elem, unsigned int side)
Just an internal helper function to reinit the face FE objects.
Definition Assembly.C:1270

◆ reinit() [5/5]

void Assembly::reinit ( const Node node)

Reinitialize assembly data for a node.

Definition at line 1989 of file Assembly.C.

1990{
1993}

◆ 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{
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}
std::vector< Point > _temp_reference_points
Temporary work data for reinitAtPhysical()
Definition Assembly.h:2825
void reinit(const Elem *elem)
Reinitialize objects (JxW, q_points, ...) for an elements.
Definition Assembly.C:1821
static Point inverse_map(const unsigned int dim, const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true, const bool extra_checks=true)

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

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}
void set_calculate_default_dual_coeff(const bool val)
virtual void reinit_dual_shape_coeffs(const Elem *, const std::vector< Point > &, const std::vector< Real > &)

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

◆ 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
2013
2015
2018}
void reinitFEFaceNeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Definition Assembly.C:1575
libMesh::ElemSideBuilder _current_neighbor_side_elem_builder
In place side element builder for _current_neighbor_side_elem.
Definition Assembly.h:2880
void reinitNeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Reinitializes the neighbor side using reference coordinates.
Definition Assembly.C:1689
std::vector< Point > _current_neighbor_ref_points
The current reference points on the neighbor element.
Definition Assembly.h:2905
std::vector< T > stdVector() const
Extremely inefficient way to produce a std::vector from a MooseArray!
Definition MooseArray.h:344

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

2026{
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}
MooseArray< std::vector< Point > > _current_tangents
The current tangent vectors at the quadrature points.
Definition Assembly.h:2535
void computeADFace(const Elem &elem, const unsigned int side)
compute AD things on an element face
Definition Assembly.C:2113
libMesh::QBase * qruleFace(const Elem *elem, unsigned int side)
This is an abstraction over the internal qrules function.
Definition Assembly.C:1919
std::map< FEType, FEBase * > _current_fe_face
The "face" fe object that matches the current elem.
Definition Assembly.h:2385
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't actually make a copy of the data.
Definition MooseArray.h:296
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)=0
virtual_for_inffe const std::vector< std::vector< OutputDivergence > > & get_div_phi() const
const std::vector< std::vector< OutputGradient > > & get_dphi() const
const std::vector< std::vector< OutputTensor > > & get_d2phi() const
virtual_for_inffe const std::vector< std::vector< OutputShape > > & get_curl_phi() const

Referenced by SubProblem::reinitElemFaceRef().

◆ 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();
822 resizeADMappingObjects(n_qp, dim);
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))
884 _extra_elem_ids[i] = _current_elem->get_extra_integer(i);
886
887 if (_xfem != nullptr)
889}
void modifyWeightsDueToXFEM(const Elem *elem)
Update the integration weights for XFEM partial elements.
Definition Assembly.C:4518
std::map< FEType, FEVectorBase * > _current_vector_fe
The "volume" vector fe object that matches the current elem.
Definition Assembly.h:2392
std::map< FEType, FEBase * > _current_fe
The "volume" fe object that matches the current elem.
Definition Assembly.h:2383
unsigned int numExtraElemIntegers() const
Number of extra element integers Assembly tracked.
Definition Assembly.h:373

Referenced by reinit(), and reinit().

◆ 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");
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
1339
1340 if (_xfem != nullptr)
1342
1343 auto n = numExtraElemIntegers();
1344 for (auto i : make_range(n))
1345 _extra_elem_ids[i] = _current_elem->get_extra_integer(i);
1347}
void modifyFaceWeightsDueToXFEM(const Elem *elem, unsigned int side=0)
Update the face integration weights for XFEM partial elements.
Definition Assembly.C:4538

Referenced by reinit().

◆ reinitFEFaceNeighbor()

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

Definition at line 1575 of file Assembly.C.

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 }
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}
std::map< FEType, FEVectorBase * > _current_vector_fe_face_neighbor
The "neighbor face" vector fe object that matches the current elem.
Definition Assembly.h:2398
std::map< FEType, FEBase * > _current_fe_face_neighbor
The "neighbor face" fe object that matches the current elem.
Definition Assembly.h:2389

Referenced by reinitElemAndNeighbor(), and reinitNeighborAtPhysical().

◆ 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}
std::map< FEType, FEBase * > _current_fe_neighbor
The "neighbor" fe object that matches the current elem.
Definition Assembly.h:2387
std::map< FEType, FEVectorBase * > _current_vector_fe_neighbor
The "neighbor" vector fe object that matches the current elem.
Definition Assembly.h:2396

Referenced by reinitNeighborAtPhysical().

◆ reinitFVFace()

void Assembly::reinitFVFace ( const FaceInfo fi)

Definition at line 1859 of file Assembly.C.

1860{
1861 _current_elem = &fi.elem();
1866 "current subdomain has been set incorrectly");
1867
1870
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}
Implements a fake quadrature rule where you can specify the locations (in the reference domain) of th...
void prepareNeighbor()
Definition Assembly.C:2812
void setNeighborQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for neighbor integration.
Definition Assembly.C:711
unsigned int neighborSideID() const
Definition FaceInfo.h:114
const Elem & elem() const
Definition FaceInfo.h:85
const Elem * neighborPtr() const
Definition FaceInfo.h:88
unsigned int elemSideID() const
Definition FaceInfo.h:113
static Point map(const unsigned int dim, const Elem *elem, const Point &reference_point)
const std::vector< Point > & get_points() const
virtual void init(const Elem &e, unsigned int p_level=invalid_uint)
std::unique_ptr< ArbitraryQuadrature > neighbor
area/face (meshdim-1) custom points quadrature rule for DG
Definition Assembly.h:2453

Referenced by SubProblem::reinitFVFace().

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

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}
void setWeights(const std::vector< libMesh::Real > &weights)
Set the quadrature weights.
void setLowerQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for lower dimensional integration.
Definition Assembly.C:692
Real elementVolume(const Elem *elem) const
On-demand computation of volume element accounting for RZ/RSpherical.
Definition Assembly.C:3757
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
virtual Real volume() const
virtual_for_inffe const std::vector< Real > & get_JxW() const
virtual_for_inffe const std::vector< Point > & get_xyz() const
const std::vector< std::vector< OutputShape > > & get_dual_phi() const
const std::vector< std::vector< OutputGradient > > & get_dual_dphi() const
const std::vector< std::vector< OutputTensor > > & get_dual_d2phi() const
const Elem & get(const ElemType type_in)
std::unique_ptr< ArbitraryQuadrature > arbitrary_face
area/face (meshdim-1) custom points quadrature rule
Definition Assembly.h:2451

Referenced by SubProblem::reinitLowerDElem().

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

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}

Referenced by SubProblem::reinitMortarElem().

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

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))
1727 _neighbor_extra_elem_ids[i] = _current_neighbor_elem->get_extra_integer(i);
1729}
virtual void attach_quadrature_rule(QBase *q)=0

Referenced by reinitElemAndNeighbor(), reinitNeighborAtPhysical(), and reinitNeighborAtPhysical().

◆ reinitNeighborAtPhysical() [1/2]

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

Reinitializes the neighbor at the physical coordinates within element given.

Definition at line 2456 of file Assembly.C.

2458{
2459 unsigned int neighbor_dim = neighbor->dim();
2460 FEMap::inverse_map(neighbor_dim, neighbor, physical_points, _current_neighbor_ref_points);
2461
2464 // Save off the physical points
2465 _current_physical_points = physical_points;
2466}
void reinitFENeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Definition Assembly.C:1634

◆ reinitNeighborAtPhysical() [2/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.

Definition at line 2420 of file Assembly.C.

2423{
2424 unsigned int neighbor_dim = neighbor->dim();
2425 FEMap::inverse_map(neighbor_dim, neighbor, physical_points, _current_neighbor_ref_points);
2426
2428 {
2429 mooseAssert(
2430 physical_points.size() == 1,
2431 "If reinitializing with more than one point, then I am dubious of your use case. Perhaps "
2432 "you are performing a DG type method and you are reinitializing using points from the "
2433 "element face. In such a case your neighbor JxW must have its index order 'match' the "
2434 "element JxW index order, e.g. imagining a vertical 1D face with two quadrature points, "
2435 "if "
2436 "index 0 for elem JxW corresponds to the 'top' quadrature point, then index 0 for "
2437 "neighbor "
2438 "JxW must also correspond to the 'top' quadrature point. And libMesh/MOOSE has no way to "
2439 "guarantee that with multiple quadrature points.");
2440
2442
2443 // With a single point our size-1 JxW should just be the element volume
2446 }
2447
2450
2451 // Save off the physical points
2452 _current_physical_points = physical_points;
2453}

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

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 }
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}

Referenced by SubProblem::reinitNeighborFaceRef().

◆ reinitNeighborLowerDElem()

void Assembly::reinitNeighborLowerDElem ( const Elem elem)

reinitialize a neighboring lower dimensional element

Definition at line 2385 of file Assembly.C.

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}

Referenced by SubProblem::reinitNeighborLowerDElem().

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

1116 {
1117 return _sub_Re[tag_id][var_num];
1118 }

Referenced by TaggingInterface::prepareVectorTagInternal().

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

1134 {
1135 return _sub_Rl[tag_id][var_num];
1136 }

Referenced by TaggingInterface::prepareVectorTagLower().

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

1125 {
1126 return _sub_Rn[tag_id][var_num];
1127 }

Referenced by TaggingInterface::prepareVectorTagNeighbor().

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

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}

Referenced by computeADFace(), and reinitFE().

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

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 }

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

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

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 }

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

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

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

Referenced by ADArrayKernel::computeJacobian().

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

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

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

◆ scalarFieldCouplingEntries()

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

Definition at line 1314 of file Assembly.h.

1315 {
1316 return _cm_sf_entry;
1317 }

Referenced by MortarScalarBase::computeScalarOffDiagJacobian().

◆ secondPhi() [1/6]

const VariablePhiSecond & Assembly::secondPhi ( ) const
inline

Definition at line 1329 of file Assembly.h.

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

Referenced by copyShapes().

◆ secondPhi() [2/6]

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

Definition at line 1467 of file Assembly.h.

1467{ return _second_phi; }

◆ secondPhi() [3/6]

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

Definition at line 1330 of file Assembly.h.

1331 {
1332 return _second_phi;
1333 }

◆ secondPhi() [4/6]

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

Definition at line 1580 of file Assembly.h.

1580{ return _second_phi; }

◆ 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]

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

Definition at line 1381 of file Assembly.h.

1382 {
1383 return _vector_second_phi;
1384 }

◆ secondPhiFace() [1/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() [2/5]

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

Definition at line 1342 of file Assembly.h.

1343 {
1344 return _second_phi_face;
1345 }

Referenced by copyFaceShapes().

◆ secondPhiFace() [3/5]

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

Definition at line 1587 of file Assembly.h.

1588 {
1589 return _second_phi_face;
1590 }

◆ secondPhiFace() [4/5]

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

Definition at line 1523 of file Assembly.h.

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

◆ secondPhiFace() [5/5]

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

Definition at line 1402 of file Assembly.h.

1403 {
1405 }

◆ secondPhiFaceNeighbor() [1/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() [2/5]

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

Definition at line 1368 of file Assembly.h.

1369 {
1371 }

Referenced by copyNeighborShapes().

◆ secondPhiFaceNeighbor() [3/5]

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

Definition at line 1613 of file Assembly.h.

1614 {
1616 }

◆ 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]

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

Definition at line 1449 of file Assembly.h.

1450 {
1452 }

◆ secondPhiNeighbor() [1/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() [2/5]

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

Definition at line 1355 of file Assembly.h.

1356 {
1357 return _second_phi_neighbor;
1358 }

Referenced by copyNeighborShapes().

◆ secondPhiNeighbor() [3/5]

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

Definition at line 1600 of file Assembly.h.

1601 {
1602 return _second_phi_neighbor;
1603 }

◆ 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]

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

Definition at line 1425 of file Assembly.h.

1426 {
1428 }

◆ setCachedJacobian()

void Assembly::setCachedJacobian ( GlobalDataKey  )

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

Definition at line 4477 of file Assembly.C.

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)
4489 _cached_jacobian_cols[tag][i],
4490 _cached_jacobian_values[tag][i]);
4491 }
4492
4494}
void clearCachedJacobian()
Clear any currently cached jacobians.
Definition Assembly.C:4507
virtual void zero_rows(std::vector< numeric_index_type > &rows, T diag_value=0.0)
virtual void set(const numeric_index_type i, const numeric_index_type j, const T value)=0

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

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}

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

◆ setCurrentBoundaryID()

void Assembly::setCurrentBoundaryID ( BoundaryID  i)
inline

set the current boundary ID

Definition at line 434 of file Assembly.h.

Referenced by SubProblem::setCurrentBoundaryID().

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

3229{
3230 _current_lower_d_elem = lower_d_elem;
3231}

Referenced by SubProblem::setCurrentLowerDElem().

◆ setCurrentNeighborSubdomainID()

void Assembly::setCurrentNeighborSubdomainID ( SubdomainID  i)
inline

set the current subdomain ID

Definition at line 502 of file Assembly.h.

Referenced by DisplacedProblem::setNeighborSubdomainID().

◆ setCurrentSubdomainID()

void Assembly::setCurrentSubdomainID ( SubdomainID  i)
inline

◆ setFaceQRule() [1/2]

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

Set the face quadrature rule based on the provided element and side.

Definition at line 1932 of file Assembly.C.

1933{
1934 const auto elem_dimension = elem->dim();
1936 auto rule = qruleFace(elem, side);
1937 if (_current_qrule_face != rule)
1938 setFaceQRule(rule, elem_dimension);
1939}

◆ setFaceQRule() [2/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.

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}

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

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

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}

Referenced by reinitLowerDElem().

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

738{
739 if (order != _qrule_msm->get_order())
740 {
741 // If custom mortar qrule has not yet been specified
743 {
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}
Order get_order() const
virtual QuadratureType type() const=0
unsigned int get_dim() const

Referenced by MortarConstraintBase::MortarConstraintBase().

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

712{
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);
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}

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

◆ 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}
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.

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)

Referenced by setResidual(), and setResidualNeighbor().

◆ 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}

◆ setVolumeQRule() [1/2]

void Assembly::setVolumeQRule ( const Elem *  elem)

Set the volumetric quadrature rule based on the provided element.

◆ setVolumeQRule() [2/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}

Referenced by reinit(), and reinit().

◆ 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; }

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

446{ return _current_side; }

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

◆ 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; }

◆ 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; }

◆ 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; }

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

241{ return _current_qrule; }

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

◆ 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 }

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

328{ return _current_qrule_face; }

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

◆ 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 }

◆ 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; }

◆ 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}

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 adGradPhi(), feADGradPhi(), 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(), feADGradPhiFace(), and ~Assembly().

◆ _block_diagonal_matrix

bool Assembly::_block_diagonal_matrix
protected

◆ _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(), cacheJacobianBlock(), 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(), cacheJacobianBlock(), 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(), 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(), 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 addJacobianBlockNonlocal(), cacheJacobianBlock(), 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(), and cacheJacobianBlock().

◆ _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(), reinit(), reinit(), reinit(), 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(), reinit(), reinit(), reinit(), 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(), and reinitNeighborAtPhysical().

◆ _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(), reinit(), reinit(), reinit(), 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(), and reinit().

◆ _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(), reinitNeighborAtPhysical(), and reinitNeighborAtPhysical().

◆ _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(), and reinitNeighborAtPhysical().

◆ _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(), and reinitNeighborAtPhysical().

◆ _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(), and reinit().

◆ _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(), reinitNeighborAtPhysical(), reinitNeighborAtPhysical(), 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(), reinit(), 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(), modifyWeightsDueToXFEM(), reinit(), and reinit().

◆ _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.

Referenced by reinit().

◆ _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 reinit(), 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 reinit(), 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 reinit(), and 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(), reinit(), 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(), reinit(), reinit(), reinit(), 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(), and cacheJacobianBlock().

◆ _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(), gradPhi(), gradPhi(), and gradPhi().

◆ _grad_phi_face

VariablePhiGradient Assembly::_grad_phi_face
protected

Definition at line 2709 of file Assembly.h.

Referenced by gradPhiFace(), gradPhiFace(), gradPhiFace(), and gradPhiFace().

◆ _grad_phi_face_neighbor

VariablePhiGradient Assembly::_grad_phi_face_neighbor
protected

Definition at line 2717 of file Assembly.h.

Referenced by gradPhiFaceNeighbor(), gradPhiFaceNeighbor(), and gradPhiFaceNeighbor().

◆ _grad_phi_neighbor

VariablePhiGradient Assembly::_grad_phi_neighbor
protected

Definition at line 2713 of file Assembly.h.

Referenced by gradPhiNeighbor(), gradPhiNeighbor(), and 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(), 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(), 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(), and reinitNeighborAtPhysical().

◆ _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(), phi(), and phi().

◆ _phi_face

VariablePhiValue Assembly::_phi_face
protected

Definition at line 2708 of file Assembly.h.

Referenced by phiFace(), phiFace(), phiFace(), and phiFace().

◆ _phi_face_neighbor

VariablePhiValue Assembly::_phi_face_neighbor
protected

Definition at line 2716 of file Assembly.h.

Referenced by phiFaceNeighbor(), phiFaceNeighbor(), and phiFaceNeighbor().

◆ _phi_neighbor

VariablePhiValue Assembly::_phi_neighbor
protected

Definition at line 2712 of file Assembly.h.

Referenced by phiNeighbor(), phiNeighbor(), and 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(), cacheJacobianBlock(), 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(), secondPhi(), secondPhi(), and secondPhi().

◆ _second_phi_face

VariablePhiSecond Assembly::_second_phi_face
protected

Definition at line 2710 of file Assembly.h.

Referenced by secondPhiFace(), secondPhiFace(), and secondPhiFace().

◆ _second_phi_face_neighbor

VariablePhiSecond Assembly::_second_phi_face_neighbor
protected

◆ _second_phi_neighbor

VariablePhiSecond Assembly::_second_phi_neighbor
protected

Definition at line 2714 of file Assembly.h.

Referenced by secondPhiNeighbor(), secondPhiNeighbor(), and 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(), and curlPhi().

◆ _vector_curl_phi_face

VectorVariablePhiCurl Assembly::_vector_curl_phi_face
protected

Definition at line 2730 of file Assembly.h.

Referenced by copyFaceShapes(), curlPhiFace(), 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(), and curlPhiFaceNeighbor().

◆ _vector_curl_phi_neighbor

VectorVariablePhiCurl Assembly::_vector_curl_phi_neighbor
protected

Definition at line 2736 of file Assembly.h.

Referenced by curlPhiNeighbor(), and curlPhiNeighbor().

◆ _vector_div_phi

VectorVariablePhiDivergence Assembly::_vector_div_phi
protected

Definition at line 2725 of file Assembly.h.

Referenced by divPhi(), and divPhi().

◆ _vector_div_phi_face

VectorVariablePhiDivergence Assembly::_vector_div_phi_face
protected

Definition at line 2731 of file Assembly.h.

Referenced by copyFaceShapes(), divPhiFace(), 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(), and divPhiFaceNeighbor().

◆ _vector_div_phi_neighbor

VectorVariablePhiDivergence Assembly::_vector_div_phi_neighbor
protected

Definition at line 2737 of file Assembly.h.

Referenced by divPhiNeighbor(), and 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(), and gradPhi().

◆ _vector_grad_phi_face

VectorVariablePhiGradient Assembly::_vector_grad_phi_face
protected

Definition at line 2728 of file Assembly.h.

Referenced by gradPhiFace(), and 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(), and gradPhiFaceNeighbor().

◆ _vector_grad_phi_neighbor

VectorVariablePhiGradient Assembly::_vector_grad_phi_neighbor
protected

Definition at line 2734 of file Assembly.h.

Referenced by gradPhiNeighbor(), and gradPhiNeighbor().

◆ _vector_phi

VectorVariablePhiValue Assembly::_vector_phi
protected

Definition at line 2721 of file Assembly.h.

Referenced by phi(), and phi().

◆ _vector_phi_face

VectorVariablePhiValue Assembly::_vector_phi_face
protected

Definition at line 2727 of file Assembly.h.

Referenced by phiFace(), and phiFace().

◆ _vector_phi_face_neighbor

VectorVariablePhiValue Assembly::_vector_phi_face_neighbor
protected

Definition at line 2739 of file Assembly.h.

Referenced by phiFaceNeighbor(), and phiFaceNeighbor().

◆ _vector_phi_neighbor

VectorVariablePhiValue Assembly::_vector_phi_neighbor
protected

Definition at line 2733 of file Assembly.h.

Referenced by phiNeighbor(), and phiNeighbor().

◆ _vector_second_phi

VectorVariablePhiSecond Assembly::_vector_second_phi
protected

Definition at line 2723 of file Assembly.h.

Referenced by secondPhi(), and secondPhi().

◆ _vector_second_phi_face

VectorVariablePhiSecond Assembly::_vector_second_phi_face
protected

Definition at line 2729 of file Assembly.h.

Referenced by secondPhiFace(), and 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(), and secondPhiFaceNeighbor().

◆ _vector_second_phi_neighbor

VectorVariablePhiSecond Assembly::_vector_second_phi_neighbor
protected

Definition at line 2735 of file Assembly.h.

Referenced by secondPhiNeighbor(), and 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: