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::QBase * writeableQRule (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::CoordinateSystemType & coordSystem () 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::QBase * writeableQRuleFace (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 SubdomainID & currentSubdomainID () const
 Return the current subdomain ID.
 
void setCurrentSubdomainID (SubdomainID i)
 set the current subdomain ID
 
const BoundaryID & currentBoundaryID () 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 int & side () const
 Returns the current side.
 
const unsigned int & neighborSide () 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 SubdomainID & currentNeighborSubdomainID () 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 VariablePhiValue & phi () const
 
template<typename T >
const ADTemplateVariablePhiGradient< T > & adGradPhi (const MooseVariableFE< T > &v) const
 
const VariablePhiValue & phi (const MooseVariableField< Real > &) const
 
const VariablePhiGradient & gradPhi () const
 
const VariablePhiGradient & gradPhi (const MooseVariableField< Real > &) const
 
const VariablePhiSecond & secondPhi () const
 
const VariablePhiSecond & secondPhi (const MooseVariableField< Real > &) const
 
const VariablePhiValue & phiFace () const
 
const VariablePhiValue & phiFace (const MooseVariableField< Real > &) const
 
const VariablePhiGradient & gradPhiFace () const
 
const VariablePhiGradient & gradPhiFace (const MooseVariableField< Real > &) const
 
const VariablePhiSecond & secondPhiFace (const MooseVariableField< Real > &) const
 
const VariablePhiValue & phiNeighbor (const MooseVariableField< Real > &) const
 
const VariablePhiGradient & gradPhiNeighbor (const MooseVariableField< Real > &) const
 
const VariablePhiSecond & secondPhiNeighbor (const MooseVariableField< Real > &) const
 
const VariablePhiValue & phiFaceNeighbor (const MooseVariableField< Real > &) const
 
const VariablePhiGradient & gradPhiFaceNeighbor (const MooseVariableField< Real > &) const
 
const VariablePhiSecond & secondPhiFaceNeighbor (const MooseVariableField< Real > &) const
 
const VectorVariablePhiValue & phi (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiGradient & gradPhi (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiSecond & secondPhi (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiCurl & curlPhi (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiDivergence & divPhi (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiValue & phiFace (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiGradient & gradPhiFace (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiSecond & secondPhiFace (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiCurl & curlPhiFace (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiDivergence & divPhiFace (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiValue & phiNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiGradient & gradPhiNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiSecond & secondPhiNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiCurl & curlPhiNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiDivergence & divPhiNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiValue & phiFaceNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiGradient & gradPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiSecond & secondPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiCurl & curlPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &) const
 
const VectorVariablePhiDivergence & divPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &) const
 
VariablePhiValue & phi (const MooseVariableField< Real > &)
 
VariablePhiGradient & gradPhi (const MooseVariableField< Real > &)
 
VariablePhiSecond & secondPhi (const MooseVariableField< Real > &)
 
VariablePhiValue & phiFace (const MooseVariableField< Real > &)
 
VariablePhiGradient & gradPhiFace (const MooseVariableField< Real > &)
 
VariablePhiSecond & secondPhiFace (const MooseVariableField< Real > &)
 
VariablePhiValue & phiNeighbor (const MooseVariableField< Real > &)
 
VariablePhiGradient & gradPhiNeighbor (const MooseVariableField< Real > &)
 
VariablePhiSecond & secondPhiNeighbor (const MooseVariableField< Real > &)
 
VariablePhiValue & phiFaceNeighbor (const MooseVariableField< Real > &)
 
VariablePhiGradient & gradPhiFaceNeighbor (const MooseVariableField< Real > &)
 
VariablePhiSecond & secondPhiFaceNeighbor (const MooseVariableField< Real > &)
 
VectorVariablePhiValue & phi (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiGradient & gradPhi (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiSecond & secondPhi (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiCurl & curlPhi (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiDivergence & divPhi (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiValue & phiFace (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiGradient & gradPhiFace (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiSecond & secondPhiFace (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiCurl & curlPhiFace (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiDivergence & divPhiFace (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiValue & phiNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiGradient & gradPhiNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiSecond & secondPhiNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiCurl & curlPhiNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiDivergence & divPhiNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiValue & phiFaceNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiGradient & gradPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiSecond & secondPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiCurl & curlPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &)
 
VectorVariablePhiDivergence & divPhiFaceNeighbor (const MooseVariableField< RealVectorValue > &)
 
VariablePhiValue & phi (const MooseVariableField< RealEigenVector > &)
 
VariablePhiGradient & gradPhi (const MooseVariableField< RealEigenVector > &)
 
VariablePhiSecond & secondPhi (const MooseVariableField< RealEigenVector > &)
 
VariablePhiValue & phiFace (const MooseVariableField< RealEigenVector > &)
 
VariablePhiGradient & gradPhiFace (const MooseVariableField< RealEigenVector > &)
 
VariablePhiSecond & secondPhiFace (const MooseVariableField< RealEigenVector > &)
 
VariablePhiValue & phiNeighbor (const MooseVariableField< RealEigenVector > &)
 
VariablePhiGradient & gradPhiNeighbor (const MooseVariableField< RealEigenVector > &)
 
VariablePhiSecond & secondPhiNeighbor (const MooseVariableField< RealEigenVector > &)
 
VariablePhiValue & phiFaceNeighbor (const MooseVariableField< RealEigenVector > &)
 
VariablePhiGradient & gradPhiFaceNeighbor (const MooseVariableField< RealEigenVector > &)
 
VariablePhiSecond & secondPhiFaceNeighbor (const MooseVariableField< RealEigenVector > &)
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValue & fePhi (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradient & feGradPhi (FEType type) const
 
template<typename OutputType >
const ADTemplateVariablePhiGradient< OutputType > & feADGradPhi (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiSecond & feSecondPhi (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValue & fePhiLower (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValue & feDualPhiLower (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiLower (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradient & feGradDualPhiLower (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValue & fePhiFace (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiFace (FEType type) const
 
template<typename OutputType >
const ADTemplateVariablePhiGradient< OutputType > & feADGradPhiFace (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiSecond & feSecondPhiFace (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValue & fePhiNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiSecond & feSecondPhiNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiValue & fePhiFaceNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiFaceNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiSecond & feSecondPhiFaceNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhi (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhiFace (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhiNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhiFaceNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiDivergence & feDivPhi (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiDivergence & feDivPhiFace (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiDivergence & feDivPhiNeighbor (FEType type) const
 
template<typename OutputType >
const OutputTools< OutputType >::VariablePhiDivergence & feDivPhiFaceNeighbor (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::QBase * attachQRuleElem (unsigned int dim, FEBase &fe)
 Attaches the current elem/volume quadrature rule to the given fe.
 
const libMesh::QBase * attachQRuleFace (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 preparePRefinement ()
 Prepare helper FEs for 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 > >::VariablePhiValue & fePhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecond & feSecondPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & fePhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & feDualPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradDualPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & fePhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecond & feSecondPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & fePhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecond & feSecondPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & fePhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecond & feSecondPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurl & feCurlPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurl & feCurlPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurl & feCurlPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurl & feCurlPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergence & feDivPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergence & feDivPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergence & feDivPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergence & feDivPhiFaceNeighbor (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<typename Points , typename Coords >
void setCoordinateTransformation (const QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & fePhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecond & feSecondPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & fePhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & feDualPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradDualPhiLower (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & fePhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecond & feSecondPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & fePhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecond & feSecondPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiValue & fePhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiGradient & feGradPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiSecond & feSecondPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurl & feCurlPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurl & feCurlPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurl & feCurlPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiCurl & feCurlPhiFaceNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergence & feDivPhi (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergence & feDivPhiFace (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergence & feDivPhiNeighbor (FEType type) const
 
template<>
const OutputTools< VectorValue< Real > >::VariablePhiDivergence & feDivPhiFaceNeighbor (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 _prepared_for_p_refinement
 Whether helper FEs have been prepared for 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::QBase * qruleFace (const Elem *elem, unsigned int side)
 This is an abstraction over the internal qrules function.
 
ArbitraryQuadrature * qruleArbitraryFace (const Elem *elem, unsigned int side)
 
template<typename T >
T * qruleFaceHelper (const Elem *elem, unsigned int side, std::function< T *(QRules &)> rule_fn)
 
QRules & qrules (unsigned int dim)
 
QRules & qrules (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 100 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 219 of file Assembly.h.

Constructor & Destructor Documentation

◆ Assembly()

Assembly::Assembly ( SystemBase &  sys,
THREAD_ID  tid 
)

Definition at line 79 of file Assembly.C.

80 : _sys(sys),
82 _displaced(dynamic_cast<DisplacedSystem *>(&sys) ? true : false),
83 _nonlocal_cm(_subproblem.nonlocalCouplingMatrix(_sys.number())),
84 _computing_residual(_subproblem.currentlyComputingResidual()),
85 _computing_jacobian(_subproblem.currentlyComputingJacobian()),
86 _computing_residual_and_jacobian(_subproblem.currentlyComputingResidualAndJacobian()),
87 _dof_map(_sys.dofMap()),
88 _tid(tid),
89 _mesh(sys.mesh()),
90 _mesh_dimension(_mesh.dimension()),
92 FEType(_mesh.hasSecondOrderElements() ? SECOND : FIRST, LAGRANGE).set_p_refinement(false)),
98 _building_helpers(false),
99 _current_qrule(nullptr),
100 _current_qrule_volume(nullptr),
103 _current_qrule_face(nullptr),
106 _need_JxW_neighbor(false),
107 _qrule_msm(nullptr),
109 _current_qrule_lower(nullptr),
110
111 _current_elem(nullptr),
113 _current_side(0),
114 _current_side_elem(nullptr),
116 _current_neighbor_elem(nullptr),
121 _current_node(nullptr),
122 _current_neighbor_node(nullptr),
125
126 _current_lower_d_elem(nullptr),
130 _need_dual(false),
131
133 _cached_residual_values(2), // The 2 is for TIME and NONTIME
134 _cached_residual_rows(2), // The 2 is for TIME and NONTIME
137
139 _calculate_xyz(false),
140 _calculate_face_xyz(false),
142 _calculate_ad_coord(false),
144{
145 const Order helper_order = _mesh.hasSecondOrderElements() ? SECOND : FIRST;
146 _building_helpers = true;
147 // Build fe's for the helpers
153 _building_helpers = false;
154
155 // Build an FE helper object for this type for each dimension up to the dimension of the current
156 // mesh
157 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
158 {
163 }
164
165 for (unsigned int dim = 0; dim < _mesh_dimension; dim++)
167
168 // request phi, dphi, xyz, JxW, etc. data
170
171 // For 3D mortar, mortar segments are always TRI3 elements so we want FIRST LAGRANGE regardless
172 // of discretization
173 const auto mortar_helper_type =
174 FEType(_mesh_dimension == 2 ? helper_order : FIRST, LAGRANGE).set_p_refinement(false);
175 _fe_msm = FEGenericBase<Real>::build(_mesh_dimension - 1, mortar_helper_type);
176 // This FE object should not take part in p-refinement
177 _fe_msm->add_p_level_in_reinit(false);
178 _JxW_msm = &_fe_msm->get_JxW();
179 // Prerequest xyz so that it is computed for _fe_msm so that it can be used for calculating
180 // _coord_msm
181 _fe_msm->get_xyz();
182
183 _extra_elem_ids.resize(_mesh.getMesh().n_elem_integers() + 1);
184 _neighbor_extra_elem_ids.resize(_mesh.getMesh().n_elem_integers() + 1);
185}
unsigned int dim
SystemBase & _sys
Definition Assembly.h:2299
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
helper object for transforming coordinates for lower dimensional element quadrature points
Definition Assembly.h:2547
const bool & _computing_jacobian
Whether we are currently computing the Jacobian.
Definition Assembly.h:2312
const std::vector< Real > * _JxW_msm
A JxW for working on mortar segement elements.
Definition Assembly.h:2566
const bool _displaced
Definition Assembly.h:2302
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
Definition Assembly.h:2509
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:2802
bool _current_side_volume_computed
Boolean to indicate whether current element side volumes has been computed.
Definition Assembly.h:2615
const FEType _helper_type
The finite element type of the FE helper classes.
Definition Assembly.h:2345
Real _current_elem_volume
Volume of the current element.
Definition Assembly.h:2589
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
Definition Assembly.h:2363
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
Definition Assembly.h:2397
const bool & _computing_residual
Whether we are currently computing the residual.
Definition Assembly.h:2309
bool _need_JxW_neighbor
Flag to indicate that JxW_neighbor is needed.
Definition Assembly.h:2554
bool _user_added_fe_of_helper_type
Whether user code requested a FEType the same as our _helper_type.
Definition Assembly.h:2348
bool _calculate_xyz
Definition Assembly.h:2844
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
Definition Assembly.C:346
const libMesh::CouplingMatrix & _nonlocal_cm
Definition Assembly.h:2306
Real _current_neighbor_volume
Volume of the current neighbor.
Definition Assembly.h:2607
bool _need_neighbor_lower_d_elem_volume
Whether we need to compute the neighboring lower dimensional element volume.
Definition Assembly.h:2626
Moose::CoordinateSystemType _coord_type
The coordinate system.
Definition Assembly.h:2409
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
Definition Assembly.h:2543
const libMesh::DofMap & _dof_map
DOF map.
Definition Assembly.h:2335
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
Definition Assembly.h:2534
bool _prepared_for_p_refinement
Whether helper FEs have been prepared for p-refinement.
Definition Assembly.h:2888
const Elem * _current_lower_d_elem
The current lower dimensional element.
Definition Assembly.h:2618
unsigned int _current_side
The current side of the selected element (valid only when working with sides)
Definition Assembly.h:2591
const bool & _computing_residual_and_jacobian
Whether we are currently computing the residual and Jacobian.
Definition Assembly.h:2315
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
Definition Assembly.C:321
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
Definition Assembly.h:2568
const Node * _current_neighbor_node
The current neighboring node we are working with.
Definition Assembly.h:2611
void buildFE(FEType type) const
Build FEs with a type.
Definition Assembly.C:267
const Elem * _current_neighbor_side_elem
The current side element of the ncurrent neighbor element.
Definition Assembly.h:2603
bool _calculate_ad_coord
Whether to calculate coord with AD.
Definition Assembly.h:2850
void helpersRequestData()
request phi, dphi, xyz, JxW, etc.
Definition Assembly.C:4843
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
Definition Assembly.h:2550
void buildLowerDFE(FEType type) const
Build FEs for a lower dimensional element with a type.
Definition Assembly.C:371
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
Definition Assembly.h:2533
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension's actual fe objects indexed on type.
Definition Assembly.h:2389
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
Definition Assembly.h:2613
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
Definition Assembly.h:2501
const std::vector< VectorTag > & _residual_vector_tags
The residual vector tags that Assembly could possibly contribute to.
Definition Assembly.h:2782
const Elem * _current_neighbor_elem
The current neighbor "element".
Definition Assembly.h:2597
bool _user_added_fe_face_neighbor_of_helper_type
Definition Assembly.h:2350
MooseMesh & _mesh
Definition Assembly.h:2339
ArbitraryQuadrature * _current_qface_arbitrary
The current arbitrary quadrature rule used on element faces.
Definition Assembly.h:2511
const Node * _current_node
The current node we are working with.
Definition Assembly.h:2609
THREAD_ID _tid
Thread number (id)
Definition Assembly.h:2337
bool _calculate_face_xyz
Definition Assembly.h:2845
bool _calculate_curvatures
Definition Assembly.h:2846
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME)
Definition Assembly.h:2785
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
Definition Assembly.h:2401
std::vector< dof_id_type > _neighbor_extra_elem_ids
Extra element IDs of neighbor.
Definition Assembly.h:2526
unsigned int _max_cached_residuals
Definition Assembly.h:2790
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
Definition Assembly.C:296
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
Definition Assembly.h:2540
bool _custom_mortar_qrule
Flag specifying whether a custom quadrature rule has been specified for mortar segment mesh.
Definition Assembly.h:2575
bool _need_lower_d_elem_volume
Whether we need to compute the lower dimensional element volume.
Definition Assembly.h:2622
bool _need_neighbor_elem_volume
true is apps need to compute neighbor element volume
Definition Assembly.h:2605
SubProblem & _subproblem
Definition Assembly.h:2300
Real _current_side_volume
Volume of the current side element.
Definition Assembly.h:2595
bool _user_added_fe_neighbor_of_helper_type
Definition Assembly.h:2351
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension's helper objects.
Definition Assembly.h:2539
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
Definition Assembly.h:2573
unsigned int _max_cached_jacobians
Definition Assembly.h:2799
const Elem * _current_side_elem
The current "element" making up the side we are currently on.
Definition Assembly.h:2593
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:2788
std::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension's helper objects.
Definition Assembly.h:2393
const Elem * _current_neighbor_lower_d_elem
The current neighboring lower dimensional element.
Definition Assembly.h:2620
libMesh::QBase * _current_qrule_lower
quadrature rule used on lower dimensional elements.
Definition Assembly.h:2579
unsigned int _current_neighbor_side
The current side of the selected neighboring element (valid only when working with sides)
Definition Assembly.h:2601
const Elem * _current_elem
The current "element" we are currently on.
Definition Assembly.h:2583
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension's helper objects.
Definition Assembly.h:2505
libMesh::QBase * _current_qrule_volume
The current volumetric quadrature for the element.
Definition Assembly.h:2399
bool _user_added_fe_face_of_helper_type
Definition Assembly.h:2349
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
Definition Assembly.h:2524
bool _user_added_fe_lower_of_helper_type
Definition Assembly.h:2352
unsigned int _mesh_dimension
Definition Assembly.h:2341
bool _need_dual
Whether dual shape functions need to be computed for mortar constraints.
Definition Assembly.h:2630
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
Definition MooseMesh.C:3512
bool hasSecondOrderElements()
check if the mesh has SECOND order elements
Definition MooseMesh.C:3779
SubProblem & subproblem()
Definition SystemBase.h:102
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

◆ ~Assembly()

Assembly::~Assembly ( )
virtual

Definition at line 187 of file Assembly.C.

188{
189 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
190 for (auto & it : _fe[dim])
191 delete it.second;
192
193 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
194 for (auto & it : _fe_face[dim])
195 delete it.second;
196
197 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
198 for (auto & it : _fe_neighbor[dim])
199 delete it.second;
200
201 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
202 for (auto & it : _fe_face_neighbor[dim])
203 delete it.second;
204
205 for (unsigned int dim = 0; dim <= _mesh_dimension - 1; dim++)
206 for (auto & it : _fe_lower[dim])
207 delete it.second;
208
209 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
210 for (auto & it : _vector_fe[dim])
211 delete it.second;
212
213 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
214 for (auto & it : _vector_fe_face[dim])
215 delete it.second;
216
217 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
218 for (auto & it : _vector_fe_neighbor[dim])
219 delete it.second;
220
221 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
222 for (auto & it : _vector_fe_face_neighbor[dim])
223 delete it.second;
224
225 for (unsigned int dim = 0; dim <= _mesh_dimension - 1; dim++)
226 for (auto & it : _vector_fe_lower[dim])
227 delete it.second;
228
229 for (auto & it : _ad_grad_phi_data)
230 it.second.release();
231
232 for (auto & it : _ad_vector_grad_phi_data)
233 it.second.release();
234
235 for (auto & it : _ad_grad_phi_data_face)
236 it.second.release();
237
238 for (auto & it : _ad_vector_grad_phi_data_face)
239 it.second.release();
240
242
243 _coord.release();
246
255
256 delete _qrule_msm;
257}
MooseArray< Real > _curvatures
Definition Assembly.h:2836
MooseArray< Real > _coord_neighbor
The current coordinate transformation coefficients.
Definition Assembly.h:2558
MooseArray< VectorValue< ADReal > > _ad_q_points
Definition Assembly.h:2822
MooseArray< Point > _current_physical_points
This will be filled up with the physical points passed into reinitAtPhysical() if it is called....
Definition Assembly.h:2633
MooseArray< VectorValue< ADReal > > _ad_normals
Definition Assembly.h:2834
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
Definition Assembly.h:2768
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension's actual vector fe objects indexed on type.
Definition Assembly.h:2391
MooseArray< ADReal > _ad_JxW_face
Definition Assembly.h:2833
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
Definition Assembly.h:2535
MooseArray< ADReal > _ad_JxW
Definition Assembly.h:2821
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
Definition Assembly.h:2503
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data_face
Definition Assembly.h:2771
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
Definition Assembly.h:2545
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data_face
Definition Assembly.h:2769
MooseArray< ADReal > _ad_coord
The AD version of the current coordinate transformation coefficients.
Definition Assembly.h:2413
MooseArray< Real > _coord
The current coordinate transformation coefficients.
Definition Assembly.h:2411
MooseArray< ADReal > _ad_curvatures
Definition Assembly.h:2837
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data
Definition Assembly.h:2767
MooseArray< VectorValue< ADReal > > _ad_q_points_face
Definition Assembly.h:2835
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
Definition Assembly.h:2536
MooseArray< Real > _coord_msm
The coordinate transformation coefficients evaluated on the quadrature points of the mortar segment m...
Definition Assembly.h:2561
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 608 of file Assembly.h.

608{ _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 291 of file Assembly.h.

292 {
293 // Coord values for non-cartesian coordinate systems are functions of the locations of the
294 // quadrature points in physical space. We also have no way of knowing whether this was called
295 // from a volumetric or face object so we should set both volumetric and face xyz to true
296 _calculate_xyz = true;
297 _calculate_face_xyz = true;
298
299 _calculate_ad_coord = true;
300 return _ad_coord;
301 }

◆ adCurvatures()

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

Definition at line 4832 of file Assembly.C.

4833{
4834 _calculate_curvatures = true;
4835 // Must prerequest the second derivatives. Sadly because there is only one
4836 // _need_second_derivative map for both volumetric and face FE objects we must request both here
4837 feSecondPhi<Real>(_helper_type);
4838 feSecondPhiFace<Real>(_helper_type);
4839 return _ad_curvatures;
4840}

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

3836{
3837#ifndef NDEBUG
3839 {
3840 mooseAssert(_cached_jacobian_rows.size() == _cached_jacobian_cols.size(),
3841 "Error: Cached data sizes MUST be the same!");
3842 for (MooseIndex(_cached_jacobian_rows) i = 0; i < _cached_jacobian_rows.size(); i++)
3843 mooseAssert(_cached_jacobian_rows[i].size() == _cached_jacobian_cols[i].size(),
3844 "Error: Cached data sizes MUST be the same for a given tag!");
3845 }
3846#endif
3847
3848 for (MooseIndex(_cached_jacobian_rows) i = 0; i < _cached_jacobian_rows.size(); i++)
3849 if (_sys.hasMatrix(i))
3850 for (MooseIndex(_cached_jacobian_rows[i]) j = 0; j < _cached_jacobian_rows[i].size(); j++)
3854
3855 for (MooseIndex(_cached_jacobian_rows) i = 0; i < _cached_jacobian_rows.size(); i++)
3856 {
3857 if (!_sys.hasMatrix(i))
3858 continue;
3859
3862
3863 // Try to be more efficient from now on
3864 // The 2 is just a fudge factor to keep us from having to grow the vector during assembly
3865 _cached_jacobian_values[i].clear();
3867
3868 _cached_jacobian_rows[i].clear();
3870
3871 _cached_jacobian_cols[i].clear();
3873 }
3874}
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
Definition Assembly.h:2797
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
Definition Assembly.h:2795
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
Definition Assembly.h:2793
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:388
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 3550 of file Assembly.C.

3553{
3554 const auto & values = _cached_residual_values[vector_tag._type_id];
3555 const auto & rows = _cached_residual_rows[vector_tag._type_id];
3556
3557 mooseAssert(values.size() == rows.size(),
3558 "Number of cached residuals and number of rows must match!");
3559
3560 if (!values.empty())
3561 {
3562 residual.add_vector(values, rows);
3563 clearCachedResiduals(vector_tag);
3564 }
3565}
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:3520
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 3505 of file Assembly.C.

3506{
3507 for (const auto & vector_tag : tags)
3508 {
3509 if (!_sys.hasVector(vector_tag._id))
3510 {
3511 _cached_residual_values[vector_tag._type_id].clear();
3512 _cached_residual_rows[vector_tag._type_id].clear();
3513 continue;
3514 }
3515 addCachedResidualDirectly(_sys.getVector(vector_tag._id), GlobalDataKey{}, vector_tag);
3516 }
3517}
void addCachedResidualDirectly(NumericVector< Number > &residual, GlobalDataKey, const VectorTag &vector_tag)
Adds the values that have been cached by calling cacheResidual(), cacheResidualNeighbor(),...
Definition Assembly.C:3550
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition SystemBase.C:921
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition SystemBase.C:930

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

◆ addJacobian()

void Assembly::addJacobian ( GlobalDataKey  )

Adds all local Jacobian to the global Jacobian matrices.

Definition at line 3892 of file Assembly.C.

3893{
3894 for (const auto & it : _cm_ff_entry)
3895 addJacobianCoupledVarPair(*it.first, *it.second);
3896
3897 for (const auto & it : _cm_sf_entry)
3898 addJacobianCoupledVarPair(*it.first, *it.second);
3899
3900 for (const auto & it : _cm_fs_entry)
3901 addJacobianCoupledVarPair(*it.first, *it.second);
3902}
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
Entries in the coupling matrix for scalar variables vs field variables.
Definition Assembly.h:2322
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
Definition Assembly.h:2318
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:3877
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
Entries in the coupling matrix for field variables vs scalar variables.
Definition Assembly.h:2320

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

Definition at line 3590 of file Assembly.C.

3596{
3597 if (idof_indices.size() == 0 || jdof_indices.size() == 0)
3598 return;
3599 if (jac_block.n() == 0 || jac_block.m() == 0)
3600 return;
3601
3602 const auto & scaling_factors = ivar.arrayScalingFactor();
3603 const unsigned int iv = ivar.number();
3604 const unsigned int jv = jvar.number();
3605
3606 for (unsigned int i = 0; i < ivar.count(); ++i)
3607 {
3608 for (const auto & jt : libMesh::ConstCouplingRow(iv + i, *_cm))
3609 {
3610 if (jt < jv || jt >= jv + jvar.count())
3611 continue;
3612 unsigned int j = jt - jv;
3613
3614 auto di = ivar.componentDofIndices(idof_indices, i);
3615 auto dj = jvar.componentDofIndices(jdof_indices, j);
3616 auto indof = di.size();
3617 auto jndof = dj.size();
3618
3619 unsigned int jj = j;
3620 if (iv == jv && _component_block_diagonal[iv])
3621 // here i must be equal to j
3622 jj = 0;
3623
3624 auto sub = jac_block.sub_matrix(i * indof, indof, jj * jndof, jndof);
3625 if (scaling_factors[i] != 1.0)
3626 sub *= scaling_factors[i];
3627
3628 // If we're computing the jacobian for automatically scaling variables we do not want
3629 // to constrain the element matrix because it introduces 1s on the diagonal for the
3630 // constrained dofs
3632 _dof_map.constrain_element_matrix(sub, di, dj, false);
3633
3634 jacobian.add_matrix(sub, di, dj);
3635 }
3636 }
3637}
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:2805
const libMesh::CouplingMatrix * _cm
Coupling matrices.
Definition Assembly.h:2305
std::vector< dof_id_type > componentDofIndices(const std::vector< dof_id_type > &dof_indices, unsigned int component) const
Obtain DoF indices of a component with the indices of the 0th component.
const std::vector< Real > & arrayScalingFactor() const
unsigned int number() const
Get variable number coming from libMesh.
unsigned int count() const
Get the number of components Note: For standard and vector variables, the number is one.
bool computingScalingJacobian() const
Whether we are computing an initial Jacobian for automatic variable scaling.
unsigned int n() const
unsigned int m() const
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
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...

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

4326{
4327 if (idof_indices.size() == 0 || jdof_indices.size() == 0)
4328 return;
4329 if (jacobian.n() == 0 || jacobian.m() == 0)
4330 return;
4331 if (!(*_cm)(ivar, jvar))
4332 return;
4333
4334 auto & iv = _sys.getVariable(_tid, ivar);
4335 auto & jv = _sys.getVariable(_tid, jvar);
4336 auto & scaling_factor = iv.arrayScalingFactor();
4337
4338 const unsigned int ivn = iv.number();
4339 const unsigned int jvn = jv.number();
4340 auto & keg = jacobianBlockNonlocal(ivn, jvn, LocalDataKey{}, tag);
4341
4342 // It is guaranteed by design iv.number <= ivar since iv is obtained
4343 // through SystemBase::getVariable with ivar.
4344 // Most of times ivar will just be equal to iv.number except for array variables,
4345 // where ivar could be a number for a component of an array variable but calling
4346 // getVariable will return the array variable that has the number of the 0th component.
4347 // It is the same for jvar.
4348 const unsigned int i = ivar - ivn;
4349 const unsigned int j = jvar - jvn;
4350
4351 // DoF indices are independently given
4352 auto di = idof_indices;
4353 auto dj = jdof_indices;
4354
4355 auto indof = di.size();
4356 auto jndof = dj.size();
4357
4358 unsigned int jj = j;
4359 if (ivar == jvar && _component_block_diagonal[ivn])
4360 jj = 0;
4361
4362 auto sub = keg.sub_matrix(i * indof, indof, jj * jndof, jndof);
4363 // If we're computing the jacobian for automatically scaling variables we do not want to
4364 // constrain the element matrix because it introduces 1s on the diagonal for the constrained
4365 // dofs
4367 dof_map.constrain_element_matrix(sub, di, dj, false);
4368
4369 if (scaling_factor[i] != 1.0)
4370 sub *= scaling_factor[i];
4371
4372 jacobian.add_matrix(sub, di, dj);
4373}
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:1144
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition SystemBase.C:89
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 4376 of file Assembly.C.

4384{
4385 for (auto tag : tags)
4387 jacobian, ivar, jvar, dof_map, idof_indices, jdof_indices, GlobalDataKey{}, tag);
4388}
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:4318

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

4257{
4258 for (auto tag : tags)
4259 addJacobianBlock(jacobian, ivar, jvar, dof_map, dof_indices, GlobalDataKey{}, tag);
4260}
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 3877 of file Assembly.C.

3878{
3879 auto i = ivar.number();
3880 auto j = jvar.number();
3881 for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
3882 if (jacobianBlockUsed(tag, i, j) && _sys.hasMatrix(tag))
3884 jacobianBlock(i, j, LocalDataKey{}, tag),
3885 ivar,
3886 jvar,
3887 ivar.dofIndices(),
3888 jvar.dofIndices());
3889}
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:2226
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:1133
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
Definition Assembly.h:2328
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.

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

4044{
4045 for (const auto & it : _cm_ff_entry)
4046 {
4047 auto ivar = it.first;
4048 auto jvar = it.second;
4049 auto i = ivar->number();
4050 auto j = jvar->number();
4051 for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
4052 tag++)
4053 if (jacobianBlockLowerUsed(tag, i, j) && _sys.hasMatrix(tag))
4054 {
4056 jacobianBlockMortar(Moose::LowerLower, i, j, LocalDataKey{}, tag),
4057 *ivar,
4058 *jvar,
4059 ivar->dofIndicesLower(),
4060 jvar->dofIndicesLower());
4061
4063 jacobianBlockMortar(Moose::LowerSecondary, i, j, LocalDataKey{}, tag),
4064 *ivar,
4065 *jvar,
4066 ivar->dofIndicesLower(),
4067 jvar->dofIndices());
4068
4070 jacobianBlockMortar(Moose::SecondaryLower, i, j, LocalDataKey{}, tag),
4071 *ivar,
4072 *jvar,
4073 ivar->dofIndices(),
4074 jvar->dofIndicesLower());
4075 }
4076 }
4077}
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:2262
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:3196
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:2333
@ 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 3927 of file Assembly.C.

3928{
3929 for (const auto & it : _cm_ff_entry)
3930 {
3931 auto ivar = it.first;
3932 auto jvar = it.second;
3933 auto i = ivar->number();
3934 auto j = jvar->number();
3935 for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
3936 tag < _jacobian_block_neighbor_used.size();
3937 tag++)
3938 if (jacobianBlockNeighborUsed(tag, i, j) && _sys.hasMatrix(tag))
3939 {
3941 jacobianBlockNeighbor(Moose::ElementNeighbor, i, j, LocalDataKey{}, tag),
3942 *ivar,
3943 *jvar,
3944 ivar->dofIndices(),
3945 jvar->dofIndicesNeighbor());
3946
3948 jacobianBlockNeighbor(Moose::NeighborElement, i, j, LocalDataKey{}, tag),
3949 *ivar,
3950 *jvar,
3951 ivar->dofIndicesNeighbor(),
3952 jvar->dofIndices());
3953
3955 jacobianBlockNeighbor(Moose::NeighborNeighbor, i, j, LocalDataKey{}, tag),
3956 *ivar,
3957 *jvar,
3958 ivar->dofIndicesNeighbor(),
3959 jvar->dofIndicesNeighbor());
3960 }
3961 }
3962}
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:2331
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:3155
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:2244
@ 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 3965 of file Assembly.C.

3966{
3967 for (const auto & it : _cm_ff_entry)
3968 {
3969 auto ivar = it.first;
3970 auto jvar = it.second;
3971 auto i = ivar->number();
3972 auto j = jvar->number();
3973 for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
3974 tag++)
3975 if (jacobianBlockLowerUsed(tag, i, j) && _sys.hasMatrix(tag))
3976 {
3978 jacobianBlockMortar(Moose::LowerLower, i, j, LocalDataKey{}, tag),
3979 *ivar,
3980 *jvar,
3981 ivar->dofIndicesLower(),
3982 jvar->dofIndicesLower());
3983
3985 jacobianBlockMortar(Moose::LowerSecondary, i, j, LocalDataKey{}, tag),
3986 *ivar,
3987 *jvar,
3988 ivar->dofIndicesLower(),
3989 jvar->dofIndicesNeighbor());
3990
3992 jacobianBlockMortar(Moose::LowerPrimary, i, j, LocalDataKey{}, tag),
3993 *ivar,
3994 *jvar,
3995 ivar->dofIndicesLower(),
3996 jvar->dofIndices());
3997
3999 jacobianBlockMortar(Moose::SecondaryLower, i, j, LocalDataKey{}, tag),
4000 *ivar,
4001 *jvar,
4002 ivar->dofIndicesNeighbor(),
4003 jvar->dofIndicesLower());
4004
4006 jacobianBlockMortar(Moose::PrimaryLower, i, j, LocalDataKey{}, tag),
4007 *ivar,
4008 *jvar,
4009 ivar->dofIndices(),
4010 jvar->dofIndicesLower());
4011 }
4012
4013 for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
4014 tag < _jacobian_block_neighbor_used.size();
4015 tag++)
4016 if (jacobianBlockNeighborUsed(tag, i, j) && _sys.hasMatrix(tag))
4017 {
4019 jacobianBlockNeighbor(Moose::ElementNeighbor, i, j, LocalDataKey{}, tag),
4020 *ivar,
4021 *jvar,
4022 ivar->dofIndices(),
4023 jvar->dofIndicesNeighbor());
4024
4026 jacobianBlockNeighbor(Moose::NeighborElement, i, j, LocalDataKey{}, tag),
4027 *ivar,
4028 *jvar,
4029 ivar->dofIndicesNeighbor(),
4030 jvar->dofIndices());
4031
4033 jacobianBlockNeighbor(Moose::NeighborNeighbor, i, j, LocalDataKey{}, tag),
4034 *ivar,
4035 *jvar,
4036 ivar->dofIndicesNeighbor(),
4037 jvar->dofIndicesNeighbor());
4038 }
4039 }
4040}
@ 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 4460 of file Assembly.C.

4468{
4469 for (const auto tag : tags)
4471 jacobian, ivar, jvar, dof_map, dof_indices, neighbor_dof_indices, GlobalDataKey{}, tag);
4472}
void addJacobianNeighbor(GlobalDataKey)
Add ElementNeighbor, NeighborElement, and NeighborNeighbor portions of the Jacobian for compute objec...
Definition Assembly.C:3927

◆ addJacobianNonlocal()

void Assembly::addJacobianNonlocal ( GlobalDataKey  )

Adds non-local Jacobian to the global Jacobian matrices.

Definition at line 3905 of file Assembly.C.

3906{
3907 for (const auto & it : _cm_nonlocal_entry)
3908 {
3909 auto ivar = it.first;
3910 auto jvar = it.second;
3911 auto i = ivar->number();
3912 auto j = jvar->number();
3913 for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
3914 tag < _jacobian_block_nonlocal_used.size();
3915 tag++)
3916 if (jacobianBlockNonlocalUsed(tag, i, j) && _sys.hasMatrix(tag))
3918 jacobianBlockNonlocal(i, j, LocalDataKey{}, tag),
3919 *ivar,
3920 *jvar,
3921 ivar->dofIndices(),
3922 jvar->allDofIndices());
3923 }
3924}
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
Definition Assembly.h:2326
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:2280
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
Definition Assembly.h:2329

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

4483{
4484 for (const auto & it : _cm_sf_entry)
4485 if (it.first->number() == ivar)
4486 addJacobianCoupledVarPair(*it.first, *it.second);
4487}
if(!dmm->_nl) SETERRQ(PETSC_COMM_WORLD

◆ addJacobianScalar()

void Assembly::addJacobianScalar ( GlobalDataKey  )

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

Definition at line 4475 of file Assembly.C.

4476{
4477 for (const auto & it : _cm_ss_entry)
4478 addJacobianCoupledVarPair(*it.first, *it.second);
4479}
std::vector< std::pair< MooseVariableScalar *, MooseVariableScalar * > > _cm_ss_entry
Entries in the coupling matrix for scalar variables.
Definition Assembly.h:2324

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

3340{
3341 mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3342 "Non-residual tag in Assembly::addResidual");
3343
3344 auto & tag_Re = _sub_Re[vector_tag._type_id];
3345 NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3346 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3347 for (const auto & var : vars)
3348 addResidualBlock(residual, tag_Re[var->number()], var->dofIndices(), var->arrayScalingFactor());
3349}
char ** vars
std::vector< std::vector< DenseVector< Number > > > _sub_Re
Definition Assembly.h:2647
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:3286
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition SystemBase.h:779
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 3352 of file Assembly.C.

3353{
3354 for (const auto & vector_tag : vector_tags)
3355 if (_sys.hasVector(vector_tag._id))
3356 addResidual(vector_tag);
3357}
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:3352

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

3290{
3291 if (dof_indices.size() > 0 && res_block.size())
3292 {
3293 _temp_dof_indices = dof_indices;
3294 _tmp_Re = res_block;
3297 }
3298}
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:3256
DenseVector< Number > _tmp_Re
auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction)
Definition Assembly.h:2653
std::vector< dof_id_type > _temp_dof_indices
Temporary work vector to keep from reallocating it.
Definition Assembly.h:2808
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 3382 of file Assembly.C.

3383{
3384 mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3385 "Non-residual tag in Assembly::addResidualLower");
3386
3387 auto & tag_Rl = _sub_Rl[vector_tag._type_id];
3388 NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3389 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3390 for (const auto & var : vars)
3392 residual, tag_Rl[var->number()], var->dofIndicesLower(), var->arrayScalingFactor());
3393}
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
Definition Assembly.h:2650

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

3397{
3398 for (const auto & vector_tag : vector_tags)
3399 if (_sys.hasVector(vector_tag._id))
3400 addResidualLower(vector_tag);
3401}
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:3396

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

3361{
3362 mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3363 "Non-residual tag in Assembly::addResidualNeighbor");
3364
3365 auto & tag_Rn = _sub_Rn[vector_tag._type_id];
3366 NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3367 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3368 for (const auto & var : vars)
3370 residual, tag_Rn[var->number()], var->dofIndicesNeighbor(), var->arrayScalingFactor());
3371}
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
Definition Assembly.h:2648

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

3375{
3376 for (const auto & vector_tag : vector_tags)
3377 if (_sys.hasVector(vector_tag._id))
3378 addResidualNeighbor(vector_tag);
3379}
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:3374

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

3406{
3407 mooseAssert(vector_tag._type == Moose::VECTOR_TAG_RESIDUAL,
3408 "Non-residual tag in Assembly::addResidualScalar");
3409
3410 // add the scalar variables residuals
3411 auto & tag_Re = _sub_Re[vector_tag._type_id];
3412 NumericVector<Number> & residual = _sys.getVector(vector_tag._id);
3413 const std::vector<MooseVariableScalar *> & vars = _sys.getScalarVariables(_tid);
3414 for (const auto & var : vars)
3415 addResidualBlock(residual, tag_Re[var->number()], var->dofIndices(), var->arrayScalingFactor());
3416}
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition SystemBase.h:786

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

3420{
3421 for (const auto & vector_tag : vector_tags)
3422 if (_sys.hasVector(vector_tag._id))
3423 addResidualScalar(vector_tag);
3424}
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:3419

Referenced by addResidualScalar().

◆ adGradPhi() [1/2]

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

Definition at line 3037 of file Assembly.h.

3039{
3040 return _ad_vector_grad_phi_data.at(v.feType());
3041}
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 1313 of file Assembly.h.

1314 {
1315 return _ad_grad_phi_data.at(v.feType());
1316 }

◆ adJxW()

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

Definition at line 269 of file Assembly.h.

269{ return _ad_JxW; }

◆ adJxWFace()

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

Definition at line 271 of file Assembly.h.

271{ return _ad_JxW_face; }

◆ adNormals()

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

Definition at line 384 of file Assembly.h.

384{ return _ad_normals; }

◆ adQPoints()

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

Definition at line 386 of file Assembly.h.

387 {
388 _calculate_xyz = true;
389 return _ad_q_points;
390 }

Referenced by genericQPoints().

◆ adQPointsFace()

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

Definition at line 392 of file Assembly.h.

393 {
394 _calculate_face_xyz = true;
395 return _ad_q_points_face;
396 }

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

3209{
3210 _disp_numbers_and_directions = std::move(disp_numbers_and_directions);
3211}
std::vector< std::pair< unsigned int, unsigned short > > _disp_numbers_and_directions
Container of displacement numbers and directions.
Definition Assembly.h:2842

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

1900 {
1901 auto qrule = qrules(dim).vol.get();
1902 fe.attach_quadrature_rule(qrule);
1903 return qrule;
1904 }
QRules & qrules(unsigned int dim)
Definition Assembly.h:2477
std::unique_ptr< libMesh::QBase > vol
volume/elem (meshdim) quadrature rule
Definition Assembly.h:2429

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

1912 {
1913 auto qrule = qrules(dim).face.get();
1914 fe.attach_quadrature_rule(qrule);
1915 return qrule;
1916 }
std::unique_ptr< libMesh::QBase > face
area/face (meshdim-1) quadrature rule
Definition Assembly.h:2431

◆ buildFaceFE()

void Assembly::buildFaceFE ( FEType  type) const
private

Build FEs for a face with a type.

Parameters
typeThe type of FE

Definition at line 296 of file Assembly.C.

297{
298 if (!_building_helpers && type == _helper_type)
300
301 if (!_fe_shape_data_face[type])
302 _fe_shape_data_face[type] = std::make_unique<FEShapeData>();
303
304 // Build an FE object for this type for each dimension up to the dimension of the current mesh
305 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
306 {
307 if (!_fe_face[dim][type])
308 {
309 _fe_face[dim][type] = FEGenericBase<Real>::build(dim, type).release();
310 _fe_face[dim][type]->add_p_level_in_reinit(type.p_refinement);
311 }
312
313 _fe_face[dim][type]->get_phi();
314 _fe_face[dim][type]->get_dphi();
315 if (_need_second_derivative.count(type))
316 _fe_face[dim][type]->get_d2phi();
317 }
318}
std::set< FEType > _need_second_derivative
Definition Assembly.h:2852
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
Definition Assembly.h:2753

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

347{
348 if (!_building_helpers && type == _helper_type)
350
352 _fe_shape_data_face_neighbor[type] = std::make_unique<FEShapeData>();
353
354 // Build an FE object for this type for each dimension up to the dimension of the current mesh
355 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
356 {
357 if (!_fe_face_neighbor[dim][type])
358 {
359 _fe_face_neighbor[dim][type] = FEGenericBase<Real>::build(dim, type).release();
360 _fe_face_neighbor[dim][type]->add_p_level_in_reinit(type.p_refinement);
361 }
362
363 _fe_face_neighbor[dim][type]->get_phi();
364 _fe_face_neighbor[dim][type]->get_dphi();
365 if (_need_second_derivative_neighbor.count(type))
366 _fe_face_neighbor[dim][type]->get_d2phi();
367 }
368}
std::set< FEType > _need_second_derivative_neighbor
Definition Assembly.h:2853
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
Definition Assembly.h:2755

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

268{
269 if (!_building_helpers && type == _helper_type)
271
272 if (!_fe_shape_data[type])
273 _fe_shape_data[type] = std::make_unique<FEShapeData>();
274
275 // Build an FE object for this type for each dimension up to the dimension of the current mesh
276 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
277 {
278 if (!_fe[dim][type])
279 {
280 _fe[dim][type] = FEGenericBase<Real>::build(dim, type).release();
281 _fe[dim][type]->add_p_level_in_reinit(type.p_refinement);
282 }
283
284 _fe[dim][type]->get_phi();
285 _fe[dim][type]->get_dphi();
286 // Pre-request xyz. We have always computed xyz, but due to
287 // recent optimizations in libmesh, we now need to explicity
288 // request it, since apps (Yak) may rely on it being computed.
289 _fe[dim][type]->get_xyz();
290 if (_need_second_derivative.count(type))
291 _fe[dim][type]->get_d2phi();
292 }
293}
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
Definition Assembly.h:2752

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

◆ buildLowerDDualFE()

void Assembly::buildLowerDDualFE ( FEType  type) const
private

Definition at line 398 of file Assembly.C.

399{
400 if (!_fe_shape_data_dual_lower[type])
401 _fe_shape_data_dual_lower[type] = std::make_unique<FEShapeData>();
402
403 // Build an FE object for this type for each dimension up to the dimension of
404 // the current mesh minus one (because this is for lower-dimensional
405 // elements!)
406 for (unsigned int dim = 0; dim <= _mesh_dimension - 1; dim++)
407 {
408 if (!_fe_lower[dim][type])
409 {
410 _fe_lower[dim][type] = FEGenericBase<Real>::build(dim, type).release();
411 _fe_lower[dim][type]->add_p_level_in_reinit(type.p_refinement);
412 }
413
414 _fe_lower[dim][type]->get_dual_phi();
415 _fe_lower[dim][type]->get_dual_dphi();
416 if (_need_second_derivative.count(type))
417 _fe_lower[dim][type]->get_dual_d2phi();
418 }
419}
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
Definition Assembly.h:2757

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

372{
373 if (!_building_helpers && type == _helper_type)
375
376 if (!_fe_shape_data_lower[type])
377 _fe_shape_data_lower[type] = std::make_unique<FEShapeData>();
378
379 // Build an FE object for this type for each dimension up to the dimension of
380 // the current mesh minus one (because this is for lower-dimensional
381 // elements!)
382 for (unsigned int dim = 0; dim <= _mesh_dimension - 1; dim++)
383 {
384 if (!_fe_lower[dim][type])
385 {
386 _fe_lower[dim][type] = FEGenericBase<Real>::build(dim, type).release();
387 _fe_lower[dim][type]->add_p_level_in_reinit(type.p_refinement);
388 }
389
390 _fe_lower[dim][type]->get_phi();
391 _fe_lower[dim][type]->get_dphi();
392 if (_need_second_derivative.count(type))
393 _fe_lower[dim][type]->get_d2phi();
394 }
395}
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_lower
Definition Assembly.h:2756

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

322{
323 if (!_building_helpers && type == _helper_type)
325
326 if (!_fe_shape_data_neighbor[type])
327 _fe_shape_data_neighbor[type] = std::make_unique<FEShapeData>();
328
329 // Build an FE object for this type for each dimension up to the dimension of the current mesh
330 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
331 {
332 if (!_fe_neighbor[dim][type])
333 {
334 _fe_neighbor[dim][type] = FEGenericBase<Real>::build(dim, type).release();
335 _fe_neighbor[dim][type]->add_p_level_in_reinit(type.p_refinement);
336 }
337
338 _fe_neighbor[dim][type]->get_phi();
339 _fe_neighbor[dim][type]->get_dphi();
340 if (_need_second_derivative_neighbor.count(type))
341 _fe_neighbor[dim][type]->get_d2phi();
342 }
343}
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
Definition Assembly.h:2754

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

◆ buildVectorDualLowerDFE()

void Assembly::buildVectorDualLowerDFE ( FEType  type) const
private

Definition at line 450 of file Assembly.C.

451{
453 _vector_fe_shape_data_dual_lower[type] = std::make_unique<VectorFEShapeData>();
454
455 // Build an FE object for this type for each dimension up to the dimension of
456 // the current mesh minus one (because this is for lower-dimensional
457 // elements!)
458 unsigned int dim = ((type.family == LAGRANGE_VEC) || (type.family == MONOMIAL_VEC)) ? 0 : 2;
459 const auto ending_dim = cast_int<unsigned int>(_mesh_dimension - 1);
460 if (ending_dim < dim)
461 return;
462 for (; dim <= ending_dim; dim++)
463 {
464 if (!_vector_fe_lower[dim][type])
465 {
466 _vector_fe_lower[dim][type] = FEVectorBase::build(dim, type).release();
467 _vector_fe_lower[dim][type]->add_p_level_in_reinit(type.p_refinement);
468 }
469
470 _vector_fe_lower[dim][type]->get_dual_phi();
471 _vector_fe_lower[dim][type]->get_dual_dphi();
472 if (_need_second_derivative.count(type))
473 _vector_fe_lower[dim][type]->get_dual_d2phi();
474 }
475}
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_dual_lower
Definition Assembly.h:2765

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

513{
515 _vector_fe_shape_data_face[type] = std::make_unique<VectorFEShapeData>();
516
517 // Note that NEDELEC_ONE and RAVIART_THOMAS elements can only be built for dimension > 2
518 unsigned int min_dim;
519 if (type.family == NEDELEC_ONE || type.family == RAVIART_THOMAS ||
520 type.family == L2_RAVIART_THOMAS)
521 min_dim = 2;
522 else
523 min_dim = 0;
524
525 // Build an FE object for this type for each dimension from the min_dim up to the dimension of the
526 // current mesh
527 for (unsigned int dim = min_dim; dim <= _mesh_dimension; dim++)
528 {
529 if (!_vector_fe_face[dim][type])
530 {
531 _vector_fe_face[dim][type] = FEGenericBase<VectorValue<Real>>::build(dim, type).release();
532 _vector_fe_face[dim][type]->add_p_level_in_reinit(type.p_refinement);
533 }
534
535 _vector_fe_face[dim][type]->get_phi();
536 _vector_fe_face[dim][type]->get_dphi();
537 if (_need_curl.count(type))
538 _vector_fe_face[dim][type]->get_curl_phi();
539 if (_need_face_div.count(type))
540 _vector_fe_face[dim][type]->get_div_phi();
541 }
542}
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
Definition Assembly.h:2761
std::set< FEType > _need_curl
Definition Assembly.h:2854
std::set< FEType > _need_face_div
Definition Assembly.h:2856

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

579{
581 _vector_fe_shape_data_face_neighbor[type] = std::make_unique<VectorFEShapeData>();
582
583 // Note that NEDELEC_ONE and RAVIART_THOMAS elements can only be built for dimension > 2
584 unsigned int min_dim;
585 if (type.family == NEDELEC_ONE || type.family == RAVIART_THOMAS ||
586 type.family == L2_RAVIART_THOMAS)
587 min_dim = 2;
588 else
589 min_dim = 0;
590
591 // Build an FE object for this type for each dimension from the min_dim up to the dimension of the
592 // current mesh
593 for (unsigned int dim = min_dim; dim <= _mesh_dimension; dim++)
594 {
595 if (!_vector_fe_face_neighbor[dim][type])
596 {
598 FEGenericBase<VectorValue<Real>>::build(dim, type).release();
599 _vector_fe_face_neighbor[dim][type]->add_p_level_in_reinit(type.p_refinement);
600 }
601
602 _vector_fe_face_neighbor[dim][type]->get_phi();
603 _vector_fe_face_neighbor[dim][type]->get_dphi();
604 if (_need_curl.count(type))
605 _vector_fe_face_neighbor[dim][type]->get_curl_phi();
606 if (_need_face_neighbor_div.count(type))
607 _vector_fe_face_neighbor[dim][type]->get_div_phi();
608 }
609}
std::set< FEType > _need_face_neighbor_div
Definition Assembly.h:2858
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
Definition Assembly.h:2763

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

479{
480 if (!_vector_fe_shape_data[type])
481 _vector_fe_shape_data[type] = std::make_unique<VectorFEShapeData>();
482
483 // Note that NEDELEC_ONE and RAVIART_THOMAS elements can only be built for dimension > 2
484 unsigned int min_dim;
485 if (type.family == NEDELEC_ONE || type.family == RAVIART_THOMAS ||
486 type.family == L2_RAVIART_THOMAS)
487 min_dim = 2;
488 else
489 min_dim = 0;
490
491 // Build an FE object for this type for each dimension from the min_dim up to the dimension of the
492 // current mesh
493 for (unsigned int dim = min_dim; dim <= _mesh_dimension; dim++)
494 {
495 if (!_vector_fe[dim][type])
496 {
497 _vector_fe[dim][type] = FEGenericBase<VectorValue<Real>>::build(dim, type).release();
498 _vector_fe[dim][type]->add_p_level_in_reinit(type.p_refinement);
499 }
500
501 _vector_fe[dim][type]->get_phi();
502 _vector_fe[dim][type]->get_dphi();
503 if (_need_curl.count(type))
504 _vector_fe[dim][type]->get_curl_phi();
505 if (_need_div.count(type))
506 _vector_fe[dim][type]->get_div_phi();
507 _vector_fe[dim][type]->get_xyz();
508 }
509}
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:2760
std::set< FEType > _need_div
Definition Assembly.h:2855

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

423{
425 _vector_fe_shape_data_lower[type] = std::make_unique<VectorFEShapeData>();
426
427 // Build an FE object for this type for each dimension up to the dimension of
428 // the current mesh minus one (because this is for lower-dimensional
429 // elements!)
430 unsigned int dim = ((type.family == LAGRANGE_VEC) || (type.family == MONOMIAL_VEC)) ? 0 : 2;
431 const auto ending_dim = cast_int<unsigned int>(_mesh_dimension - 1);
432 if (ending_dim < dim)
433 return;
434 for (; dim <= ending_dim; dim++)
435 {
436 if (!_vector_fe_lower[dim][type])
437 {
438 _vector_fe_lower[dim][type] = FEVectorBase::build(dim, type).release();
439 _vector_fe_lower[dim][type]->add_p_level_in_reinit(type.p_refinement);
440 }
441
442 _vector_fe_lower[dim][type]->get_phi();
443 _vector_fe_lower[dim][type]->get_dphi();
444 if (_need_second_derivative.count(type))
445 _vector_fe_lower[dim][type]->get_d2phi();
446 }
447}
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_lower
Definition Assembly.h:2764

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

546{
548 _vector_fe_shape_data_neighbor[type] = std::make_unique<VectorFEShapeData>();
549
550 // Note that NEDELEC_ONE and RAVIART_THOMAS elements can only be built for dimension > 2
551 unsigned int min_dim;
552 if (type.family == NEDELEC_ONE || type.family == RAVIART_THOMAS ||
553 type.family == L2_RAVIART_THOMAS)
554 min_dim = 2;
555 else
556 min_dim = 0;
557
558 // Build an FE object for this type for each dimension from the min_dim up to the dimension of the
559 // current mesh
560 for (unsigned int dim = min_dim; dim <= _mesh_dimension; dim++)
561 {
562 if (!_vector_fe_neighbor[dim][type])
563 {
564 _vector_fe_neighbor[dim][type] = FEGenericBase<VectorValue<Real>>::build(dim, type).release();
565 _vector_fe_neighbor[dim][type]->add_p_level_in_reinit(type.p_refinement);
566 }
567
568 _vector_fe_neighbor[dim][type]->get_phi();
569 _vector_fe_neighbor[dim][type]->get_dphi();
570 if (_need_curl.count(type))
571 _vector_fe_neighbor[dim][type]->get_curl_phi();
572 if (_need_neighbor_div.count(type))
573 _vector_fe_neighbor[dim][type]->get_div_phi();
574 }
575}
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
Definition Assembly.h:2762
std::set< FEType > _need_neighbor_div
Definition Assembly.h:2857

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

636{
637 auto & qdefault = _qrules[Moose::ANY_BLOCK_ID];
638 mooseAssert(qdefault.size() > 0, "default quadrature must be initialized before order bumps");
639
640 unsigned int ndims = _mesh_dimension + 1; // must account for 0-dimensional quadrature.
641 auto & qvec = _qrules[block];
642 if (qvec.size() != ndims || !qvec[0].vol)
643 createQRules(qdefault[0].vol->type(), order, order, order, block);
644 else if (qvec[0].vol->get_order() < order || qvec[0].face->get_order() < order)
645 createQRules(qvec[0].vol->type(),
646 std::max(order, qvec[0].arbitrary_vol->get_order()),
647 std::max(order, qvec[0].vol->get_order()),
648 std::max(order, qvec[0].face->get_order()),
649 block);
650 // otherwise do nothing - quadrature order is already as high as requested
651}
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:654
std::unordered_map< SubdomainID, std::vector< QRules > > _qrules
Holds quadrature rules for each dimension.
Definition Assembly.h:2446
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 612 of file Assembly.C.

613{
614 auto & qdefault = _qrules[Moose::ANY_BLOCK_ID];
615 mooseAssert(qdefault.size() > 0, "default quadrature must be initialized before order bumps");
616
617 unsigned int ndims = _mesh_dimension + 1; // must account for 0-dimensional quadrature.
618 auto & qvec = _qrules[block];
619 if (qvec.size() != ndims || !qvec[0].vol)
620 createQRules(qdefault[0].vol->type(),
621 qdefault[0].arbitrary_vol->get_order(),
622 volume_order,
623 qdefault[0].face->get_order(),
624 block);
625 else if (qvec[0].vol->get_order() < volume_order)
626 createQRules(qvec[0].vol->type(),
627 qvec[0].arbitrary_vol->get_order(),
628 volume_order,
629 qvec[0].face->get_order(),
630 block);
631 // otherwise do nothing - quadrature order is already as high as requested
632}

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

3108{
3109 if (!computingJacobian() || matrix_tags.empty())
3110 return;
3111
3112 if (residuals.size() == 1)
3113 {
3114 // No constraining is required. (This is likely a finite volume computation if we only have a
3115 // single dof)
3117 residuals, input_row_indices, scaling_factor, LocalDataKey{}, matrix_tags);
3118 return;
3119 }
3120
3121 const auto & compare_dofs = residuals[0].derivatives().nude_indices();
3122#ifndef NDEBUG
3123 auto compare_dofs_set = std::set<dof_id_type>(compare_dofs.begin(), compare_dofs.end());
3124
3125 for (const auto i : make_range(decltype(residuals.size())(1), residuals.size()))
3126 {
3127 const auto & residual = residuals[i];
3128 auto current_dofs_set = std::set<dof_id_type>(residual.derivatives().nude_indices().begin(),
3129 residual.derivatives().nude_indices().end());
3130 mooseAssert(compare_dofs_set == current_dofs_set,
3131 "We're going to see whether the dof sets are the same. IIRC the degree of freedom "
3132 "dependence (as indicated by the dof index set held by the ADReal) has to be the "
3133 "same for every residual passed to this method otherwise constrain_element_matrix "
3134 "will not work.");
3135 }
3136#endif
3137 _column_indices.assign(compare_dofs.begin(), compare_dofs.end());
3138
3139 // If there's no derivatives then there is nothing to do. Moreover, if we pass zero size column
3140 // indices to constrain_element_matrix then we will potentially get errors out of BLAS
3141 if (!_column_indices.size())
3142 return;
3143
3144 // Need to make a copy because we might modify this in constrain_element_matrix
3145 _row_indices.assign(input_row_indices.begin(), input_row_indices.end());
3146
3148 for (const auto i : index_range(_row_indices))
3149 {
3150 const auto & sparse_derivatives = residuals[i].derivatives();
3151
3152 for (const auto j : index_range(_column_indices))
3153 _element_matrix(i, j) = sparse_derivatives[_column_indices[j]] * scaling_factor;
3154 }
3155
3157
3158 for (const auto i : index_range(_row_indices))
3159 for (const auto j : index_range(_column_indices))
3160 cacheJacobian(_row_indices[i], _column_indices[j], _element_matrix(i, j), {}, matrix_tags);
3161}
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:2880
std::vector< dof_id_type > _column_indices
Definition Assembly.h:2885
bool computingJacobian() const
Definition Assembly.h:1942
void cacheJacobian(GlobalDataKey)
Takes the values that are currently in _sub_Kee and appends them to the cached values.
Definition Assembly.C:4080
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:3165
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:2885
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 4080 of file Assembly.C.

4081{
4082 for (const auto & it : _cm_ff_entry)
4083 cacheJacobianCoupledVarPair(*it.first, *it.second);
4084
4085 for (const auto & it : _cm_fs_entry)
4086 cacheJacobianCoupledVarPair(*it.first, *it.second);
4087
4088 for (const auto & it : _cm_sf_entry)
4089 cacheJacobianCoupledVarPair(*it.first, *it.second);
4090}
void cacheJacobianCoupledVarPair(const MooseVariableBase &ivar, const MooseVariableBase &jvar)
Caches element matrix for ivar rows and jvar columns.
Definition Assembly.C:4094

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

4504{
4505 for (auto tag : tags)
4506 if (_sys.hasMatrix(tag))
4507 cacheJacobian(i, j, value, LocalDataKey{}, tag);
4508}
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 4490 of file Assembly.C.

4492{
4493 _cached_jacobian_rows[tag].push_back(i);
4494 _cached_jacobian_cols[tag].push_back(j);
4495 _cached_jacobian_values[tag].push_back(value);
4496}

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

3647{
3648 if (idof_indices.size() == 0 || jdof_indices.size() == 0)
3649 return;
3650 if (jac_block.n() == 0 || jac_block.m() == 0)
3651 return;
3652 if (!_sys.hasMatrix(tag))
3653 return;
3654
3655 auto & scaling_factors = ivar.arrayScalingFactor();
3656 const unsigned int iv = ivar.number();
3657 const unsigned int jv = jvar.number();
3658
3659 for (unsigned int i = 0; i < ivar.count(); ++i)
3660 {
3661 for (const auto & jt : libMesh::ConstCouplingRow(iv + i, *_cm))
3662 {
3663 if (jt < jv || jt >= jv + jvar.count())
3664 continue;
3665 unsigned int j = jt - jv;
3666
3667 auto di = ivar.componentDofIndices(idof_indices, i);
3668 auto dj = jvar.componentDofIndices(jdof_indices, j);
3669 auto indof = di.size();
3670 auto jndof = dj.size();
3671
3672 unsigned int jj = j;
3673 if (iv == jv && _component_block_diagonal[iv])
3674 // here i must be equal to j
3675 jj = 0;
3676
3677 auto sub = jac_block.sub_matrix(i * indof, indof, jj * jndof, jndof);
3678 if (scaling_factors[i] != 1.0)
3679 sub *= scaling_factors[i];
3680
3681 // If we're computing the jacobian for automatically scaling variables we do not want
3682 // to constrain the element matrix because it introduces 1s on the diagonal for the
3683 // constrained dofs
3685 _dof_map.constrain_element_matrix(sub, di, dj, false);
3686
3687 for (MooseIndex(di) i = 0; i < di.size(); i++)
3688 for (MooseIndex(dj) j = 0; j < dj.size(); j++)
3689 {
3690 _cached_jacobian_values[tag].push_back(sub(i, j));
3691 _cached_jacobian_rows[tag].push_back(di[i]);
3692 _cached_jacobian_cols[tag].push_back(dj[j]);
3693 }
3694 }
3695 }
3696}

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

3762{
3763 const auto has_matrix =
3764 std::any_of(tags.begin(), tags.end(), [this](const auto tag) { return _sys.hasMatrix(tag); });
3765
3766 // Work on a reusable Assembly-owned copy so callers retain their local matrix. This also lets us
3767 // apply constraints and scaling once before caching the same block to every requested matrix tag.
3768 if ((idof_indices.size() > 0) && (jdof_indices.size() > 0) && jac_block.n() && jac_block.m() &&
3769 has_matrix)
3770 {
3771 _row_indices.assign(idof_indices.begin(), idof_indices.end());
3772 _column_indices.assign(jdof_indices.begin(), jdof_indices.end());
3773 _element_matrix = jac_block;
3774
3775 // If we're computing the jacobian for automatically scaling variables we do not want to
3776 // constrain the element matrix because it introduces 1s on the diagonal for the constrained
3777 // dofs
3780
3781 if (scaling_factor != 1.0)
3782 _element_matrix *= scaling_factor;
3783
3784 for (const auto i : index_range(_row_indices))
3785 for (const auto j : index_range(_column_indices))
3787 _row_indices[i], _column_indices[j], _element_matrix(i, j), LocalDataKey{}, tags);
3788 }
3789}

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

3706{
3707 if (idof_indices.size() == 0 || jdof_indices.size() == 0)
3708 return;
3709 if (jac_block.n() == 0 || jac_block.m() == 0)
3710 return;
3711 if (!_sys.hasMatrix(tag))
3712 return;
3713
3714 auto & scaling_factor = ivar.arrayScalingFactor();
3715
3716 for (unsigned int i = 0; i < ivar.count(); ++i)
3717 {
3718 unsigned int iv = ivar.number();
3719 for (const auto & jt : libMesh::ConstCouplingRow(iv + i, *_cm))
3720 {
3721 unsigned int jv = jvar.number();
3722 if (jt < jv || jt >= jv + jvar.count())
3723 continue;
3724 unsigned int j = jt - jv;
3725
3726 auto di = ivar.componentDofIndices(idof_indices, i);
3727 auto dj = jvar.componentDofIndices(jdof_indices, j);
3728 auto indof = di.size();
3729 auto jndof = dj.size();
3730
3731 unsigned int jj = j;
3732 if (iv == jv && _component_block_diagonal[iv])
3733 // here i must be equal to j
3734 jj = 0;
3735
3736 auto sub = jac_block.sub_matrix(i * indof, indof, jj * jndof, jndof);
3737 if (scaling_factor[i] != 1.0)
3738 sub *= scaling_factor[i];
3739
3740 _dof_map.constrain_element_matrix(sub, di, dj, false);
3741
3742 for (MooseIndex(di) i = 0; i < di.size(); i++)
3743 for (MooseIndex(dj) j = 0; j < dj.size(); j++)
3744 if (sub(i, j) != 0.0) // no storage allocated for unimplemented jacobian terms,
3745 // maintaining maximum sparsity possible
3746 {
3747 _cached_jacobian_values[tag].push_back(sub(i, j));
3748 _cached_jacobian_rows[tag].push_back(di[i]);
3749 _cached_jacobian_cols[tag].push_back(dj[j]);
3750 }
3751 }
3752 }
3753}

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

4096{
4097 auto i = ivar.number();
4098 auto j = jvar.number();
4099 for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
4100 if (jacobianBlockUsed(tag, i, j) && _sys.hasMatrix(tag))
4101 cacheJacobianBlock(jacobianBlock(i, j, LocalDataKey{}, tag),
4102 ivar,
4103 jvar,
4104 ivar.dofIndices(),
4105 jvar.dofIndices(),
4106 tag);
4107}
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:3756

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

4171{
4172 for (const auto & it : _cm_ff_entry)
4173 {
4174 auto ivar = it.first;
4175 auto jvar = it.second;
4176 auto i = ivar->number();
4177 auto j = jvar->number();
4178 for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
4179 tag++)
4180 if (jacobianBlockLowerUsed(tag, i, j) && _sys.hasMatrix(tag))
4181 {
4182 cacheJacobianBlock(jacobianBlockMortar(Moose::LowerLower, i, j, LocalDataKey{}, tag),
4183 *ivar,
4184 *jvar,
4185 ivar->dofIndicesLower(),
4186 jvar->dofIndicesLower(),
4187 tag);
4188
4190 *ivar,
4191 *jvar,
4192 ivar->dofIndicesLower(),
4193 jvar->dofIndices(),
4194 tag);
4195
4197 *ivar,
4198 *jvar,
4199 ivar->dofIndicesLower(),
4200 jvar->dofIndicesNeighbor(),
4201 tag);
4202
4204 *ivar,
4205 *jvar,
4206 ivar->dofIndices(),
4207 jvar->dofIndicesLower(),
4208 tag);
4209
4211 jacobianBlockMortar(Moose::SecondarySecondary, i, j, LocalDataKey{}, tag),
4212 *ivar,
4213 *jvar,
4214 ivar->dofIndices(),
4215 jvar->dofIndices(),
4216 tag);
4217
4219 *ivar,
4220 *jvar,
4221 ivar->dofIndices(),
4222 jvar->dofIndicesNeighbor(),
4223 tag);
4224
4226 *ivar,
4227 *jvar,
4228 ivar->dofIndicesNeighbor(),
4229 jvar->dofIndicesLower(),
4230 tag);
4231
4233 *ivar,
4234 *jvar,
4235 ivar->dofIndicesNeighbor(),
4236 jvar->dofIndices(),
4237 tag);
4238
4240 *ivar,
4241 *jvar,
4242 ivar->dofIndicesNeighbor(),
4243 jvar->dofIndicesNeighbor(),
4244 tag);
4245 }
4246 }
4247}
@ 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 4132 of file Assembly.C.

4133{
4134 for (const auto & it : _cm_ff_entry)
4135 {
4136 auto ivar = it.first;
4137 auto jvar = it.second;
4138 auto i = ivar->number();
4139 auto j = jvar->number();
4140
4141 for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
4142 tag < _jacobian_block_neighbor_used.size();
4143 tag++)
4144 if (jacobianBlockNeighborUsed(tag, i, j) && _sys.hasMatrix(tag))
4145 {
4147 *ivar,
4148 *jvar,
4149 ivar->dofIndices(),
4150 jvar->dofIndicesNeighbor(),
4151 tag);
4153 *ivar,
4154 *jvar,
4155 ivar->dofIndicesNeighbor(),
4156 jvar->dofIndices(),
4157 tag);
4159 jacobianBlockNeighbor(Moose::NeighborNeighbor, i, j, LocalDataKey{}, tag),
4160 *ivar,
4161 *jvar,
4162 ivar->dofIndicesNeighbor(),
4163 jvar->dofIndicesNeighbor(),
4164 tag);
4165 }
4166 }
4167}

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

4111{
4112 for (const auto & it : _cm_nonlocal_entry)
4113 {
4114 auto ivar = it.first;
4115 auto jvar = it.second;
4116 auto i = ivar->number();
4117 auto j = jvar->number();
4118 for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
4119 tag < _jacobian_block_nonlocal_used.size();
4120 tag++)
4121 if (jacobianBlockNonlocalUsed(tag, i, j) && _sys.hasMatrix(tag))
4122 cacheJacobianBlockNonzero(jacobianBlockNonlocal(i, j, LocalDataKey{}, tag),
4123 *ivar,
4124 *jvar,
4125 ivar->dofIndices(),
4126 jvar->allDofIndices(),
4127 tag);
4128 }
4129}
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:3700

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

3170{
3171 mooseAssert(residuals.size() == row_indices.size(),
3172 "The number of residuals should match the number of dof indices");
3173 mooseAssert(residuals.size() >= 1, "Why you calling me with no residuals?");
3174
3175 if (!computingJacobian() || matrix_tags.empty())
3176 return;
3177
3178 for (const auto i : index_range(row_indices))
3179 {
3180 const auto row_index = row_indices[i];
3181
3182 const auto & sparse_derivatives = residuals[i].derivatives();
3183 const auto & column_indices = sparse_derivatives.nude_indices();
3184 const auto & raw_derivatives = sparse_derivatives.nude_data();
3185
3186 for (std::size_t j = 0; j < column_indices.size(); ++j)
3188 row_index, column_indices[j], raw_derivatives[j] * scaling_factor, {}, matrix_tags);
3189 }
3190}

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

3453{
3454 for (auto & tag : tags)
3455 cacheResidual(dof, value, tag);
3456}
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:3427

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

3443{
3444 const VectorTag & tag = _subproblem.getVectorTag(tag_id);
3445
3446 _cached_residual_values[tag._type_id].push_back(value);
3447 _cached_residual_rows[tag._type_id].push_back(dof);
3448}
virtual const VectorTag & getVectorTag(const TagID tag_id) const
Get a VectorTag from a TagID.
Definition SubProblem.C:150
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 3427 of file Assembly.C.

3428{
3429 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3430 for (const auto & var : vars)
3431 for (const auto & vector_tag : tags)
3432 if (_sys.hasVector(vector_tag._id))
3433 cacheResidualBlock(_cached_residual_values[vector_tag._type_id],
3434 _cached_residual_rows[vector_tag._type_id],
3435 _sub_Re[vector_tag._type_id][var->number()],
3436 var->dofIndices(),
3437 var->arrayScalingFactor());
3438}
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:3301

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

3306{
3307 if (dof_indices.size() > 0 && res_block.size())
3308 {
3309 _temp_dof_indices = dof_indices;
3310 _tmp_Re = res_block;
3312
3313 for (MooseIndex(_tmp_Re) i = 0; i < _tmp_Re.size(); i++)
3314 {
3315 cached_residual_values.push_back(_tmp_Re(i));
3316 cached_residual_rows.push_back(_temp_dof_indices[i]);
3317 }
3318 }
3319
3320 res_block.zero();
3321}
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 3491 of file Assembly.C.

3492{
3493 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3494 for (const auto & var : vars)
3495 for (const auto & vector_tag : tags)
3496 if (_sys.hasVector(vector_tag._id))
3497 cacheResidualBlock(_cached_residual_values[vector_tag._type_id],
3498 _cached_residual_rows[vector_tag._type_id],
3499 _sub_Rl[vector_tag._type_id][var->number()],
3500 var->dofIndicesLower(),
3501 var->arrayScalingFactor());
3502}

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

3478{
3479 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3480 for (const auto & var : vars)
3481 for (const auto & vector_tag : tags)
3482 if (_sys.hasVector(vector_tag._id))
3483 cacheResidualBlock(_cached_residual_values[vector_tag._type_id],
3484 _cached_residual_rows[vector_tag._type_id],
3485 _sub_Rn[vector_tag._type_id][var->number()],
3486 var->dofIndicesNeighbor(),
3487 var->arrayScalingFactor());
3488}

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

3463{
3464 // Add the residual value and dof_index to cached_residual_values and cached_residual_rows
3465 // respectively.
3466 // This is used by NodalConstraint.C to cache the residual calculated for primary and secondary
3467 // node.
3468 const VectorTag & vector_tag = _subproblem.getVectorTag(tag);
3469 for (MooseIndex(dof_index) i = 0; i < dof_index.size(); ++i)
3470 {
3471 _cached_residual_values[vector_tag._type_id].push_back(res(i));
3472 _cached_residual_rows[vector_tag._type_id].push_back(dof_index[i]);
3473 }
3474}

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

3050{
3051 mooseAssert(residuals.size() == input_row_indices.size(),
3052 "The number of residuals should match the number of dof indices");
3053 mooseAssert(residuals.size() >= 1, "Why you calling me with no residuals?");
3054
3055 if (!computingResidual() || vector_tags.empty())
3056 return;
3057
3058 if (residuals.size() == 1)
3059 {
3060 // No constraining is required. (This is likely a finite volume computation if we only have a
3061 // single dof)
3063 residuals, input_row_indices, scaling_factor, LocalDataKey{}, vector_tags);
3064 return;
3065 }
3066
3067 // Need to make a copy because we might modify this in constrain_element_vector
3068 _row_indices.assign(input_row_indices.begin(), input_row_indices.end());
3069
3071 for (const auto i : index_range(_row_indices))
3072 _element_vector(i) = MetaPhysicL::raw_value(residuals[i]) * scaling_factor;
3073
3074 // At time of writing, this method doesn't do anything with the asymmetric_constraint_rows
3075 // argument, but we set it to false to be consistent with processLocalResidual
3077 _element_vector, _row_indices, /*asymmetric_constraint_rows=*/false);
3078
3079 for (const auto i : index_range(_row_indices))
3080 cacheResidual(_row_indices[i], _element_vector(i), vector_tags);
3081}
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:3085
bool computingResidual() const
Definition Assembly.h:1937
DenseVector< Number > _element_vector
A working vector to avoid repeated heap allocations when caching residuals that must have libMesh-lev...
Definition Assembly.h:2875
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 3085 of file Assembly.h.

3090{
3091 mooseAssert(residuals.size() == row_indices.size(),
3092 "The number of residuals should match the number of dof indices");
3093 mooseAssert(residuals.size() >= 1, "Why you calling me with no residuals?");
3094
3095 if (computingResidual() && !vector_tags.empty())
3096 for (const auto i : index_range(row_indices))
3098 row_indices[i], MetaPhysicL::raw_value(residuals[i]) * scaling_factor, vector_tags);
3099}

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

4542{
4543 for (MooseIndex(_cached_jacobian_rows) tag = 0; tag < _cached_jacobian_rows.size(); tag++)
4544 {
4545 _cached_jacobian_rows[tag].clear();
4546 _cached_jacobian_cols[tag].clear();
4547 _cached_jacobian_values[tag].clear();
4548 }
4549}

Referenced by setCachedJacobian(), and zeroCachedJacobian().

◆ clearCachedQRules()

void Assembly::clearCachedQRules ( )

Set the cached quadrature rules to nullptr.

Definition at line 763 of file Assembly.C.

764{
765 _current_qrule = nullptr;
766 _current_qrule_face = nullptr;
767 _current_qrule_lower = nullptr;
768 _current_qrule_neighbor = nullptr;
769}

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

3529{
3530 auto & values = _cached_residual_values[vector_tag._type_id];
3531 auto & rows = _cached_residual_rows[vector_tag._type_id];
3532
3533 mooseAssert(values.size() == rows.size(),
3534 "Number of cached residuals and number of rows must match!");
3535
3536 // Keep track of the largest size so we can use it to reserve and avoid
3537 // as much dynamic allocation as possible
3538 if (_max_cached_residuals < values.size())
3540
3541 // Clear both vectors (keeps the capacity the same)
3542 values.clear();
3543 rows.clear();
3544 // And then reserve: use 2 as a fudge factor to *really* avoid dynamic allocation!
3545 values.reserve(_max_cached_residuals * 2);
3546 rows.reserve(_max_cached_residuals * 2);
3547}

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

3521{
3522 for (const auto & vector_tag : _residual_vector_tags)
3523 clearCachedResiduals(vector_tag);
3524}

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

2149{
2150 const auto dim = elem.dim();
2151
2153 {
2154 auto n_qp = _current_qrule_face->n_points();
2155 resizeADMappingObjects(n_qp, dim);
2156 _ad_normals.resize(n_qp);
2157 _ad_JxW_face.resize(n_qp);
2161 _ad_curvatures.resize(n_qp);
2162
2163 if (_displaced)
2164 {
2165 const auto & qw = _current_qrule_face->get_weights();
2166 computeFaceMap(elem, side, qw);
2167 const std::vector<Real> dummy_qw(n_qp, 1.);
2168
2169 for (unsigned int qp = 0; qp != n_qp; qp++)
2171 }
2172 else
2173 {
2174 for (unsigned qp = 0; qp < n_qp; ++qp)
2175 {
2177 _ad_normals[qp] = _current_normals[qp];
2178 }
2180 for (unsigned qp = 0; qp < n_qp; ++qp)
2183 for (unsigned qp = 0; qp < n_qp; ++qp)
2184 _ad_curvatures[qp] = _curvatures[qp];
2185 }
2186
2187 for (const auto & it : _fe_face[dim])
2188 {
2189 FEBase & fe = *it.second;
2190 auto fe_type = it.first;
2191 auto num_shapes = FEInterface::n_shape_functions(fe_type, &elem);
2192 auto & grad_phi = _ad_grad_phi_data_face[fe_type];
2193
2194 grad_phi.resize(num_shapes);
2195 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2196 grad_phi[i].resize(n_qp);
2197
2198 const auto & regular_grad_phi = _fe_shape_data_face[fe_type]->_grad_phi;
2199
2200 if (_displaced)
2201 computeGradPhiAD(&elem, n_qp, grad_phi, &fe);
2202 else
2203 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2204 for (unsigned qp = 0; qp < n_qp; ++qp)
2205 grad_phi[i][qp] = regular_grad_phi[i][qp];
2206 }
2207 for (const auto & it : _vector_fe_face[dim])
2208 {
2209 FEVectorBase & fe = *it.second;
2210 auto fe_type = it.first;
2211 auto num_shapes = FEInterface::n_shape_functions(fe_type, &elem);
2212 auto & grad_phi = _ad_vector_grad_phi_data_face[fe_type];
2213
2214 grad_phi.resize(num_shapes);
2215 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2216 grad_phi[i].resize(n_qp);
2217
2218 const auto & regular_grad_phi = _vector_fe_shape_data_face[fe_type]->_grad_phi;
2219
2220 if (_displaced)
2221 computeGradPhiAD(&elem, n_qp, grad_phi, &fe);
2222 else
2223 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
2224 for (unsigned qp = 0; qp < n_qp; ++qp)
2225 grad_phi[i][qp] = regular_grad_phi[i][qp];
2226 }
2227 }
2228}
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
Definition Assembly.h:2515
const Elem *const & elem() const
Return the current element.
Definition Assembly.h:405
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
Definition Assembly.h:2513
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:437
void resizeADMappingObjects(unsigned int n_qp, unsigned int dim)
resize any objects that contribute to automatic differentiation-related mapping calculations
Definition Assembly.C:1008
MooseArray< Point > _current_normals
The current Normal vectors at the quadrature points.
Definition Assembly.h:2517
void computeFaceMap(const Elem &elem, const unsigned int side, const std::vector< Real > &qw)
Definition Assembly.C:1385
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:1038
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
unsigned int n_points() const
const std::vector< Real > & get_weights() const
FEGenericBase< RealGradient > FEVectorBase
FEGenericBase< Real > FEBase

Referenced by reinitElemFaceRef(), and reinitFEFace().

◆ computeCurrentElemVolume()

void Assembly::computeCurrentElemVolume ( )
private

Definition at line 1791 of file Assembly.C.

1792{
1794 return;
1795
1801
1803 for (unsigned int qp = 0; qp < _current_qrule->n_points(); qp++)
1805
1807}
MooseArray< Point > _current_q_points
The current list of quadrature points.
Definition Assembly.h:2405
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
MooseArray< Real > _current_JxW
The current list of transformed jacobian weights.
Definition Assembly.h:2407

Referenced by reinit(), and reinit().

◆ computeCurrentFaceVolume()

void Assembly::computeCurrentFaceVolume ( )
private

Definition at line 1810 of file Assembly.C.

1811{
1813 return;
1814
1820
1822 for (unsigned int qp = 0; qp < _current_qrule_face->n_points(); qp++)
1824
1826}

Referenced by reinit(), and reinit().

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

1386{
1387 // Important quantities calculated by this method:
1388 // - _ad_JxW_face
1389 // - _ad_q_points_face
1390 // - _ad_normals
1391 // - _ad_curvatures
1392
1393 const Elem & side_elem = _compute_face_map_side_elem_builder(elem, side);
1394 const auto dim = elem.dim();
1395 const auto n_qp = qw.size();
1396 const auto & dpsidxi_map = _holder_fe_face_helper[dim]->get_fe_map().get_dpsidxi();
1397 const auto & dpsideta_map = _holder_fe_face_helper[dim]->get_fe_map().get_dpsideta();
1398 const auto & psi_map = _holder_fe_face_helper[dim]->get_fe_map().get_psi();
1399 std::vector<std::vector<Real>> const * d2psidxi2_map = nullptr;
1400 std::vector<std::vector<Real>> const * d2psidxideta_map = nullptr;
1401 std::vector<std::vector<Real>> const * d2psideta2_map = nullptr;
1402 const auto sys_num = _sys.number();
1403 const bool do_derivatives = ADReal::do_derivatives && sys_num == _subproblem.currentNlSysNum();
1404
1406 {
1407 d2psidxi2_map = &_holder_fe_face_helper[dim]->get_fe_map().get_d2psidxi2();
1408 d2psidxideta_map = &_holder_fe_face_helper[dim]->get_fe_map().get_d2psidxideta();
1409 d2psideta2_map = &_holder_fe_face_helper[dim]->get_fe_map().get_d2psideta2();
1410 }
1411
1412 switch (dim)
1413 {
1414 case 1:
1415 {
1416 if (!n_qp)
1417 break;
1418
1419 if (side_elem.node_id(0) == elem.node_id(0))
1420 _ad_normals[0] = Point(-1.);
1421 else
1422 _ad_normals[0] = Point(1.);
1423
1424 VectorValue<ADReal> side_point;
1426 {
1427 const Node & node = side_elem.node_ref(0);
1428 side_point = node;
1429
1430 if (do_derivatives)
1431 for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1433 side_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1434 }
1435
1436 for (const auto p : make_range(n_qp))
1437 {
1439 {
1440 _ad_q_points_face[p].zero();
1441 _ad_q_points_face[p].add_scaled(side_point, psi_map[0][p]);
1442 }
1443
1444 _ad_normals[p] = _ad_normals[0];
1445 _ad_JxW_face[p] = 1.0 * qw[p];
1446 }
1447
1448 break;
1449 }
1450
1451 case 2:
1452 {
1453 _ad_dxyzdxi_map.resize(n_qp);
1455 _ad_d2xyzdxi2_map.resize(n_qp);
1456
1457 for (const auto p : make_range(n_qp))
1458 _ad_dxyzdxi_map[p].zero();
1460 for (const auto p : make_range(n_qp))
1463 for (const auto p : make_range(n_qp))
1465
1466 const auto n_mapping_shape_functions =
1467 libMesh::FE<2, LAGRANGE>::n_dofs(&side_elem, side_elem.default_order());
1468
1469 for (unsigned int i = 0; i < n_mapping_shape_functions; i++)
1470 {
1471 const Node & node = side_elem.node_ref(i);
1472 VectorValue<ADReal> side_point = node;
1473
1474 if (do_derivatives)
1475 for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1477 side_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1478
1479 for (const auto p : make_range(n_qp))
1480 _ad_dxyzdxi_map[p].add_scaled(side_point, dpsidxi_map[i][p]);
1482 for (const auto p : make_range(n_qp))
1483 _ad_q_points_face[p].add_scaled(side_point, psi_map[i][p]);
1485 for (const auto p : make_range(n_qp))
1486 _ad_d2xyzdxi2_map[p].add_scaled(side_point, (*d2psidxi2_map)[i][p]);
1487 }
1488
1489 for (const auto p : make_range(n_qp))
1490 {
1491 _ad_normals[p] =
1492 (VectorValue<ADReal>(_ad_dxyzdxi_map[p](1), -_ad_dxyzdxi_map[p](0), 0.)).unit();
1493 const auto the_jac = _ad_dxyzdxi_map[p].norm();
1494 _ad_JxW_face[p] = the_jac * qw[p];
1496 {
1497 const auto numerator = _ad_d2xyzdxi2_map[p] * _ad_normals[p];
1498 const auto denominator = _ad_dxyzdxi_map[p].norm_sq();
1499 libmesh_assert_not_equal_to(denominator, 0);
1500 _ad_curvatures[p] = numerator / denominator;
1501 }
1502 }
1503
1504 break;
1505 }
1506
1507 case 3:
1508 {
1509 _ad_dxyzdxi_map.resize(n_qp);
1510 _ad_dxyzdeta_map.resize(n_qp);
1512 {
1513 _ad_d2xyzdxi2_map.resize(n_qp);
1514 _ad_d2xyzdxideta_map.resize(n_qp);
1515 _ad_d2xyzdeta2_map.resize(n_qp);
1516 }
1517
1518 for (const auto p : make_range(n_qp))
1519 {
1520 _ad_dxyzdxi_map[p].zero();
1521 _ad_dxyzdeta_map[p].zero();
1522 }
1524 for (const auto p : make_range(n_qp))
1527 for (const auto p : make_range(n_qp))
1528 {
1529 _ad_d2xyzdxi2_map[p].zero();
1530 _ad_d2xyzdxideta_map[p].zero();
1531 _ad_d2xyzdeta2_map[p].zero();
1532 }
1533
1534 const unsigned int n_mapping_shape_functions =
1535 libMesh::FE<3, LAGRANGE>::n_dofs(&side_elem, side_elem.default_order());
1536
1537 for (unsigned int i = 0; i < n_mapping_shape_functions; i++)
1538 {
1539 const Node & node = side_elem.node_ref(i);
1540 VectorValue<ADReal> side_point = node;
1541
1542 if (do_derivatives)
1543 for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1545 side_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1546
1547 for (const auto p : make_range(n_qp))
1548 {
1549 _ad_dxyzdxi_map[p].add_scaled(side_point, dpsidxi_map[i][p]);
1550 _ad_dxyzdeta_map[p].add_scaled(side_point, dpsideta_map[i][p]);
1551 }
1553 for (const auto p : make_range(n_qp))
1554 _ad_q_points_face[p].add_scaled(side_point, psi_map[i][p]);
1556 for (const auto p : make_range(n_qp))
1557 {
1558 _ad_d2xyzdxi2_map[p].add_scaled(side_point, (*d2psidxi2_map)[i][p]);
1559 _ad_d2xyzdxideta_map[p].add_scaled(side_point, (*d2psidxideta_map)[i][p]);
1560 _ad_d2xyzdeta2_map[p].add_scaled(side_point, (*d2psideta2_map)[i][p]);
1561 }
1562 }
1563
1564 for (const auto p : make_range(n_qp))
1565 {
1566 _ad_normals[p] = _ad_dxyzdxi_map[p].cross(_ad_dxyzdeta_map[p]).unit();
1567
1568 const auto &dxdxi = _ad_dxyzdxi_map[p](0), &dxdeta = _ad_dxyzdeta_map[p](0),
1569 &dydxi = _ad_dxyzdxi_map[p](1), &dydeta = _ad_dxyzdeta_map[p](1),
1570 &dzdxi = _ad_dxyzdxi_map[p](2), &dzdeta = _ad_dxyzdeta_map[p](2);
1571
1572 const auto g11 = (dxdxi * dxdxi + dydxi * dydxi + dzdxi * dzdxi);
1573
1574 const auto g12 = (dxdxi * dxdeta + dydxi * dydeta + dzdxi * dzdeta);
1575
1576 const auto & g21 = g12;
1577
1578 const auto g22 = (dxdeta * dxdeta + dydeta * dydeta + dzdeta * dzdeta);
1579
1580 using std::sqrt;
1581 const auto the_jac = sqrt(g11 * g22 - g12 * g21);
1582
1583 _ad_JxW_face[p] = the_jac * qw[p];
1584
1586 {
1587 const auto L = -_ad_d2xyzdxi2_map[p] * _ad_normals[p];
1588 const auto M = -_ad_d2xyzdxideta_map[p] * _ad_normals[p];
1589 const auto N = -_ad_d2xyzdeta2_map[p] * _ad_normals[p];
1590 const auto E = _ad_dxyzdxi_map[p].norm_sq();
1591 const auto F = _ad_dxyzdxi_map[p] * _ad_dxyzdeta_map[p];
1592 const auto G = _ad_dxyzdeta_map[p].norm_sq();
1593
1594 const auto numerator = E * N - 2. * F * M + G * L;
1595 const auto denominator = E * G - F * F;
1596 libmesh_assert_not_equal_to(denominator, 0.);
1597 _ad_curvatures[p] = 0.5 * numerator / denominator;
1598 }
1599 }
1600
1601 break;
1602 }
1603
1604 default:
1605 mooseError("Invalid dimension dim = ", dim);
1606 }
1607}
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:2814
std::vector< VectorValue< ADReal > > _ad_d2xyzdeta2_map
Definition Assembly.h:2819
std::vector< VectorValue< ADReal > > _ad_d2xyzdxideta_map
Definition Assembly.h:2818
std::vector< VectorValue< ADReal > > _ad_dxyzdeta_map
Definition Assembly.h:2815
const Node *const & node() const
Returns the reference to the node.
Definition Assembly.h:536
libMesh::ElemSideBuilder _compute_face_map_side_elem_builder
In place side element builder for computeFaceMap()
Definition Assembly.h:2868
std::vector< VectorValue< ADReal > > _ad_d2xyzdxi2_map
Definition Assembly.h:2817
virtual unsigned int currentNlSysNum() const =0
unsigned int number() const
Gets the number of this system.
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 928 of file Assembly.C.

932{
933 // This function relies on the fact that FE::reinit has already been called. FE::reinit will
934 // importantly have already called FEMap::init_shape_functions which will have computed
935 // these quantities at the integration/quadrature points: dphidxi,
936 // dphideta, and dphidzeta (e.g. \nabla phi w.r.t. reference coordinates). These *phi* quantities
937 // are independent of mesh displacements when using a quadrature rule.
938 //
939 // Note that a user could have specified custom integration points (e.g. independent of a
940 // quadrature rule) which could very well depend on displacements. In that case even the *phi*
941 // quantities from the above paragraph would be a function of the displacements and we would be
942 // missing that derivative information in the calculations below
943
944 auto dim = elem->dim();
945 const auto & dphidxi = fe->get_dphidxi();
946 const auto & dphideta = fe->get_dphideta();
947 const auto & dphidzeta = fe->get_dphidzeta();
948 auto num_shapes = grad_phi.size();
949
950 switch (dim)
951 {
952 case 0:
953 {
954 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
955 for (unsigned qp = 0; qp < n_qp; ++qp)
956 grad_phi[i][qp] = 0;
957 break;
958 }
959
960 case 1:
961 {
962 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
963 for (unsigned qp = 0; qp < n_qp; ++qp)
964 {
965 grad_phi[i][qp].slice(0) = dphidxi[i][qp] * _ad_dxidx_map[qp];
966 grad_phi[i][qp].slice(1) = dphidxi[i][qp] * _ad_dxidy_map[qp];
967 grad_phi[i][qp].slice(2) = dphidxi[i][qp] * _ad_dxidz_map[qp];
968 }
969 break;
970 }
971
972 case 2:
973 {
974 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
975 for (unsigned qp = 0; qp < n_qp; ++qp)
976 {
977 grad_phi[i][qp].slice(0) =
978 dphidxi[i][qp] * _ad_dxidx_map[qp] + dphideta[i][qp] * _ad_detadx_map[qp];
979 grad_phi[i][qp].slice(1) =
980 dphidxi[i][qp] * _ad_dxidy_map[qp] + dphideta[i][qp] * _ad_detady_map[qp];
981 grad_phi[i][qp].slice(2) =
982 dphidxi[i][qp] * _ad_dxidz_map[qp] + dphideta[i][qp] * _ad_detadz_map[qp];
983 }
984 break;
985 }
986
987 case 3:
988 {
989 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
990 for (unsigned qp = 0; qp < n_qp; ++qp)
991 {
992 grad_phi[i][qp].slice(0) = dphidxi[i][qp] * _ad_dxidx_map[qp] +
993 dphideta[i][qp] * _ad_detadx_map[qp] +
994 dphidzeta[i][qp] * _ad_dzetadx_map[qp];
995 grad_phi[i][qp].slice(1) = dphidxi[i][qp] * _ad_dxidy_map[qp] +
996 dphideta[i][qp] * _ad_detady_map[qp] +
997 dphidzeta[i][qp] * _ad_dzetady_map[qp];
998 grad_phi[i][qp].slice(2) = dphidxi[i][qp] * _ad_dxidz_map[qp] +
999 dphideta[i][qp] * _ad_detadz_map[qp] +
1000 dphidzeta[i][qp] * _ad_dzetadz_map[qp];
1001 }
1002 break;
1003 }
1004 }
1005}
std::vector< ADReal > _ad_dzetady_map
Definition Assembly.h:2830
std::vector< ADReal > _ad_detadx_map
Definition Assembly.h:2826
std::vector< ADReal > _ad_dxidx_map
Definition Assembly.h:2823
std::vector< ADReal > _ad_dxidz_map
Definition Assembly.h:2825
std::vector< ADReal > _ad_dzetadx_map
Definition Assembly.h:2829
std::vector< ADReal > _ad_detadz_map
Definition Assembly.h:2828
std::vector< ADReal > _ad_dzetadz_map
Definition Assembly.h:2831
std::vector< ADReal > _ad_detady_map
Definition Assembly.h:2827
std::vector< ADReal > _ad_dxidy_map
Definition Assembly.h:2824

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

1042{
1043 // This function relies on the fact that FE::reinit has already been called. FE::reinit will
1044 // importantly have already called FEMap::init_reference_to_physical_map which will have computed
1045 // these quantities at the integration/quadrature points: phi_map, dphidxi_map,
1046 // dphideta_map, and dphidzeta_map (e.g. phi and \nabla phi w.r.t reference coordinates). *_map is
1047 // used to denote that quantities are in reference to a mapping Lagrange FE object. The FE<Dim,
1048 // LAGRANGE> objects used for mapping will in general have an order matching the order of the
1049 // mesh. These *phi*_map quantities are independent of mesh displacements when using a quadrature
1050 // rule.
1051 //
1052 // Note that a user could have specified custom integration points (e.g. independent of a
1053 // quadrature rule) which could very well depend on displacements. In that case even the *phi*_map
1054 // quantities from the above paragraph would be a function of the displacements and we would be
1055 // missing that derivative information in the calculations below
1056 //
1057 // Important quantities calculated by this method:
1058 // - _ad_JxW;
1059 // - _ad_q_points;
1060 // And the following quantities are important because they are used in the computeGradPhiAD method
1061 // to calculate the shape function gradients with respect to the physical coordinates
1062 // dphi/dphys = dphi/dref * dref/dphys:
1063 // - _ad_dxidx_map;
1064 // - _ad_dxidy_map;
1065 // - _ad_dxidz_map;
1066 // - _ad_detadx_map;
1067 // - _ad_detady_map;
1068 // - _ad_detadz_map;
1069 // - _ad_dzetadx_map;
1070 // - _ad_dzetady_map;
1071 // - _ad_dzetadz_map;
1072 //
1073 // Some final notes. This method will be called both when we are reinit'ing in the volume and on
1074 // faces. When reinit'ing on faces, computation of _ad_JxW will be garbage because we will be
1075 // using dummy quadrature weights. _ad_q_points computation is also currently extraneous during
1076 // face reinit because we compute _ad_q_points_face in the computeFaceMap method. However,
1077 // computation of dref/dphys is absolutely necessary (and the reason we call this method for the
1078 // face case) for both volume and face reinit
1079
1080 auto dim = elem->dim();
1081 const auto & elem_nodes = elem->get_nodes();
1082 auto num_shapes = FEInterface::n_shape_functions(fe->get_fe_type(), elem);
1083 const auto & phi_map = fe->get_fe_map().get_phi_map();
1084 const auto & dphidxi_map = fe->get_fe_map().get_dphidxi_map();
1085 const auto & dphideta_map = fe->get_fe_map().get_dphideta_map();
1086 const auto & dphidzeta_map = fe->get_fe_map().get_dphidzeta_map();
1087 const auto sys_num = _sys.number();
1088 const bool do_derivatives =
1089 ADReal::do_derivatives && _sys.number() == _subproblem.currentNlSysNum();
1090
1091 switch (dim)
1092 {
1093 case 0:
1094 {
1095 _ad_jac[p] = 1.0;
1096 _ad_JxW[p] = qw[p];
1097 if (_calculate_xyz)
1098 _ad_q_points[p] = *elem_nodes[0];
1099 break;
1100 }
1101
1102 case 1:
1103 {
1104 if (_calculate_xyz)
1105 _ad_q_points[p].zero();
1106
1107 _ad_dxyzdxi_map[p].zero();
1108
1109 for (std::size_t i = 0; i < num_shapes; i++)
1110 {
1111 libmesh_assert(elem_nodes[i]);
1112 const Node & node = *elem_nodes[i];
1114 if (do_derivatives)
1115 for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1116 if (node.n_dofs(sys_num, disp_num))
1118 elem_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1119
1120 _ad_dxyzdxi_map[p].add_scaled(elem_point, dphidxi_map[i][p]);
1121
1122 if (_calculate_xyz)
1123 _ad_q_points[p].add_scaled(elem_point, phi_map[i][p]);
1124 }
1125
1126 _ad_jac[p] = _ad_dxyzdxi_map[p].norm();
1127
1128 if (_ad_jac[p].value() <= -TOLERANCE * TOLERANCE)
1129 {
1130 static bool failing = false;
1131 if (!failing)
1132 {
1133 failing = true;
1134 elem->print_info(libMesh::err);
1135 libmesh_error_msg("ERROR: negative Jacobian " << _ad_jac[p].value() << " at point index "
1136 << p << " in element " << elem->id());
1137 }
1138 else
1139 return;
1140 }
1141
1142 const auto jacm2 = 1. / _ad_jac[p] / _ad_jac[p];
1143 _ad_dxidx_map[p] = jacm2 * _ad_dxyzdxi_map[p](0);
1144 _ad_dxidy_map[p] = jacm2 * _ad_dxyzdxi_map[p](1);
1145 _ad_dxidz_map[p] = jacm2 * _ad_dxyzdxi_map[p](2);
1146
1147 _ad_JxW[p] = _ad_jac[p] * qw[p];
1148
1149 break;
1150 }
1151
1152 case 2:
1153 {
1154 if (_calculate_xyz)
1155 _ad_q_points[p].zero();
1156 _ad_dxyzdxi_map[p].zero();
1157 _ad_dxyzdeta_map[p].zero();
1158
1159 for (std::size_t i = 0; i < num_shapes; i++)
1160 {
1161 libmesh_assert(elem_nodes[i]);
1162 const Node & node = *elem_nodes[i];
1164 if (do_derivatives)
1165 for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1166 if (node.n_dofs(sys_num, disp_num))
1168 elem_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1169
1170 _ad_dxyzdxi_map[p].add_scaled(elem_point, dphidxi_map[i][p]);
1171 _ad_dxyzdeta_map[p].add_scaled(elem_point, dphideta_map[i][p]);
1172
1173 if (_calculate_xyz)
1174 _ad_q_points[p].add_scaled(elem_point, phi_map[i][p]);
1175 }
1176
1177 const auto &dx_dxi = _ad_dxyzdxi_map[p](0), &dx_deta = _ad_dxyzdeta_map[p](0),
1178 &dy_dxi = _ad_dxyzdxi_map[p](1), &dy_deta = _ad_dxyzdeta_map[p](1),
1179 &dz_dxi = _ad_dxyzdxi_map[p](2), &dz_deta = _ad_dxyzdeta_map[p](2);
1180
1181 const auto g11 = (dx_dxi * dx_dxi + dy_dxi * dy_dxi + dz_dxi * dz_dxi);
1182
1183 const auto g12 = (dx_dxi * dx_deta + dy_dxi * dy_deta + dz_dxi * dz_deta);
1184
1185 const auto & g21 = g12;
1186
1187 const auto g22 = (dx_deta * dx_deta + dy_deta * dy_deta + dz_deta * dz_deta);
1188
1189 auto det = (g11 * g22 - g12 * g21);
1190
1191 if (det.value() <= -TOLERANCE * TOLERANCE)
1192 {
1193 static bool failing = false;
1194 if (!failing)
1195 {
1196 failing = true;
1197 elem->print_info(libMesh::err);
1198 libmesh_error_msg("ERROR: negative Jacobian " << det << " at point index " << p
1199 << " in element " << elem->id());
1200 }
1201 else
1202 return;
1203 }
1204 else if (det.value() <= 0.)
1205 det.value() = TOLERANCE * TOLERANCE;
1206
1207 const auto inv_det = 1. / det;
1208 using std::sqrt;
1209 _ad_jac[p] = sqrt(det);
1210
1211 _ad_JxW[p] = _ad_jac[p] * qw[p];
1212
1213 const auto g11inv = g22 * inv_det;
1214 const auto g12inv = -g12 * inv_det;
1215 const auto g21inv = -g21 * inv_det;
1216 const auto g22inv = g11 * inv_det;
1217
1218 _ad_dxidx_map[p] = g11inv * dx_dxi + g12inv * dx_deta;
1219 _ad_dxidy_map[p] = g11inv * dy_dxi + g12inv * dy_deta;
1220 _ad_dxidz_map[p] = g11inv * dz_dxi + g12inv * dz_deta;
1221
1222 _ad_detadx_map[p] = g21inv * dx_dxi + g22inv * dx_deta;
1223 _ad_detady_map[p] = g21inv * dy_dxi + g22inv * dy_deta;
1224 _ad_detadz_map[p] = g21inv * dz_dxi + g22inv * dz_deta;
1225
1226 break;
1227 }
1228
1229 case 3:
1230 {
1231 if (_calculate_xyz)
1232 _ad_q_points[p].zero();
1233 _ad_dxyzdxi_map[p].zero();
1234 _ad_dxyzdeta_map[p].zero();
1235 _ad_dxyzdzeta_map[p].zero();
1236
1237 for (std::size_t i = 0; i < num_shapes; i++)
1238 {
1239 libmesh_assert(elem_nodes[i]);
1240 const Node & node = *elem_nodes[i];
1242 if (do_derivatives)
1243 for (const auto & [disp_num, direction] : _disp_numbers_and_directions)
1244 if (node.n_dofs(sys_num, disp_num))
1246 elem_point(direction).derivatives(), node.dof_number(sys_num, disp_num, 0), 1.);
1247
1248 _ad_dxyzdxi_map[p].add_scaled(elem_point, dphidxi_map[i][p]);
1249 _ad_dxyzdeta_map[p].add_scaled(elem_point, dphideta_map[i][p]);
1250 _ad_dxyzdzeta_map[p].add_scaled(elem_point, dphidzeta_map[i][p]);
1251
1252 if (_calculate_xyz)
1253 _ad_q_points[p].add_scaled(elem_point, phi_map[i][p]);
1254 }
1255
1256 const auto &dx_dxi = _ad_dxyzdxi_map[p](0), &dy_dxi = _ad_dxyzdxi_map[p](1),
1257 &dz_dxi = _ad_dxyzdxi_map[p](2), &dx_deta = _ad_dxyzdeta_map[p](0),
1258 &dy_deta = _ad_dxyzdeta_map[p](1), &dz_deta = _ad_dxyzdeta_map[p](2),
1259 &dx_dzeta = _ad_dxyzdzeta_map[p](0), &dy_dzeta = _ad_dxyzdzeta_map[p](1),
1260 &dz_dzeta = _ad_dxyzdzeta_map[p](2);
1261
1262 _ad_jac[p] = (dx_dxi * (dy_deta * dz_dzeta - dz_deta * dy_dzeta) +
1263 dy_dxi * (dz_deta * dx_dzeta - dx_deta * dz_dzeta) +
1264 dz_dxi * (dx_deta * dy_dzeta - dy_deta * dx_dzeta));
1265
1266 if (_ad_jac[p].value() <= -TOLERANCE * TOLERANCE)
1267 {
1268 static bool failing = false;
1269 if (!failing)
1270 {
1271 failing = true;
1272 elem->print_info(libMesh::err);
1273 libmesh_error_msg("ERROR: negative Jacobian " << _ad_jac[p].value() << " at point index "
1274 << p << " in element " << elem->id());
1275 }
1276 else
1277 return;
1278 }
1279
1280 _ad_JxW[p] = _ad_jac[p] * qw[p];
1281
1282 const auto inv_jac = 1. / _ad_jac[p];
1283
1284 _ad_dxidx_map[p] = (dy_deta * dz_dzeta - dz_deta * dy_dzeta) * inv_jac;
1285 _ad_dxidy_map[p] = (dz_deta * dx_dzeta - dx_deta * dz_dzeta) * inv_jac;
1286 _ad_dxidz_map[p] = (dx_deta * dy_dzeta - dy_deta * dx_dzeta) * inv_jac;
1287
1288 _ad_detadx_map[p] = (dz_dxi * dy_dzeta - dy_dxi * dz_dzeta) * inv_jac;
1289 _ad_detady_map[p] = (dx_dxi * dz_dzeta - dz_dxi * dx_dzeta) * inv_jac;
1290 _ad_detadz_map[p] = (dy_dxi * dx_dzeta - dx_dxi * dy_dzeta) * inv_jac;
1291
1292 _ad_dzetadx_map[p] = (dy_dxi * dz_deta - dz_dxi * dy_deta) * inv_jac;
1293 _ad_dzetady_map[p] = (dz_dxi * dx_deta - dx_dxi * dz_deta) * inv_jac;
1294 _ad_dzetadz_map[p] = (dx_dxi * dy_deta - dy_dxi * dx_deta) * inv_jac;
1295
1296 break;
1297 }
1298
1299 default:
1300 libmesh_error_msg("Invalid dim = " << dim);
1301 }
1302}
std::vector< VectorValue< ADReal > > _ad_dxyzdzeta_map
Definition Assembly.h:2816
std::vector< ADReal > _ad_jac
Definition Assembly.h:2820
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 1942 of file Assembly.h.

1942{ 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 1937 of file Assembly.h.

1937{ 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 1947 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 111 of file Assembly.h.

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

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

307{ 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 279 of file Assembly.h.

279{ return _coord; }

◆ copyFaceShapes() [1/2]

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

Definition at line 3075 of file Assembly.C.

3076{
3077 phiFace(v).shallowCopy(v.phiFace());
3078 gradPhiFace(v).shallowCopy(v.gradPhiFace());
3079 if (v.computingSecond())
3080 secondPhiFace(v).shallowCopy(v.secondPhiFace());
3081}
const VariablePhiValue & phiFace() const
Definition Assembly.h:1326
const VariablePhiGradient & gradPhiFace() const
Definition Assembly.h:1328
const VariablePhiSecond & secondPhiFace(const MooseVariableField< Real > &) const
Definition Assembly.h:1333
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 3084 of file Assembly.C.

3085{
3086 auto & v = _sys.getVariable(_tid, var);
3087 if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_STANDARD)
3088 {
3089 auto & v = _sys.getActualFieldVariable<Real>(_tid, var);
3090 copyFaceShapes(v);
3091 }
3092 else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY)
3093 {
3095 copyFaceShapes(v);
3096 }
3097 else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3098 {
3100 copyFaceShapes(v);
3101 if (v.computingCurl())
3102 _vector_curl_phi_face.shallowCopy(v.curlPhi());
3103 if (v.computingDiv())
3104 _vector_div_phi_face.shallowCopy(v.divPhi());
3105 }
3106 else
3107 mooseError("Unsupported variable field type!");
3108}
void copyFaceShapes(MooseVariableField< T > &v)
Definition Assembly.C:3075
VectorVariablePhiCurl _vector_curl_phi_face
Definition Assembly.h:2716
VectorVariablePhiDivergence _vector_div_phi_face
Definition Assembly.h:2717
MooseVariableField< T > & getActualFieldVariable(THREAD_ID tid, const std::string &var_name)
Returns a field variable pointer - this includes finite volume variables.
Definition SystemBase.C:117
@ VAR_FIELD_STANDARD
Definition MooseTypes.h:777
@ VAR_FIELD_ARRAY
Definition MooseTypes.h:780
@ VAR_FIELD_VECTOR
Definition MooseTypes.h:779
VectorValue< Real > RealVectorValue
Definition SubProblem.h:34
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
Definition MooseTypes.h:147
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ copyNeighborShapes() [1/2]

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

Definition at line 3112 of file Assembly.C.

3113{
3114 if (v.usesPhiNeighbor())
3115 {
3116 phiFaceNeighbor(v).shallowCopy(v.phiFaceNeighbor());
3117 phiNeighbor(v).shallowCopy(v.phiNeighbor());
3118 }
3119 if (v.usesGradPhiNeighbor())
3120 {
3121 gradPhiFaceNeighbor(v).shallowCopy(v.gradPhiFaceNeighbor());
3122 gradPhiNeighbor(v).shallowCopy(v.gradPhiNeighbor());
3123 }
3124 if (v.usesSecondPhiNeighbor())
3125 {
3126 secondPhiFaceNeighbor(v).shallowCopy(v.secondPhiFaceNeighbor());
3127 secondPhiNeighbor(v).shallowCopy(v.secondPhiNeighbor());
3128 }
3129}
const VariablePhiSecond & secondPhiNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1346
const VariablePhiGradient & gradPhiNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1342
const VariablePhiGradient & gradPhiFaceNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1355
const VariablePhiSecond & secondPhiFaceNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1359
const VariablePhiValue & phiNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1338
const VariablePhiValue & phiFaceNeighbor(const MooseVariableField< Real > &) const
Definition Assembly.h:1351
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 3132 of file Assembly.C.

3133{
3134 auto & v = _sys.getVariable(_tid, var);
3135 if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_STANDARD)
3136 {
3137 auto & v = _sys.getActualFieldVariable<Real>(_tid, var);
3139 }
3140 else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY)
3141 {
3144 }
3145 else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3146 {
3149 }
3150 else
3151 mooseError("Unsupported variable field type!");
3152}
void copyNeighborShapes(MooseVariableField< T > &v)
Definition Assembly.C:3112

◆ copyShapes() [1/2]

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

Definition at line 3038 of file Assembly.C.

3039{
3040 phi(v).shallowCopy(v.phi());
3041 gradPhi(v).shallowCopy(v.gradPhi());
3042 if (v.computingSecond())
3043 secondPhi(v).shallowCopy(v.secondPhi());
3044}
const VariablePhiGradient & gradPhi() const
Definition Assembly.h:1318
const VariablePhiValue & phi() const
Definition Assembly.h:1311
const VariablePhiSecond & secondPhi() const
Definition Assembly.h:1320
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 3047 of file Assembly.C.

3048{
3049 auto & v = _sys.getVariable(_tid, var);
3050 if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_STANDARD)
3051 {
3052 auto & v = _sys.getActualFieldVariable<Real>(_tid, var);
3053 copyShapes(v);
3054 }
3055 else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_ARRAY)
3056 {
3058 copyShapes(v);
3059 }
3060 else if (v.fieldType() == Moose::VarFieldType::VAR_FIELD_VECTOR)
3061 {
3063 copyShapes(v);
3064 if (v.computingCurl())
3065 curlPhi(v).shallowCopy(v.curlPhi());
3066 if (v.computingDiv())
3067 divPhi(v).shallowCopy(v.divPhi());
3068 }
3069 else
3070 mooseError("Unsupported variable field type!");
3071}
const VectorVariablePhiDivergence & divPhi(const MooseVariableField< RealVectorValue > &) const
Definition Assembly.h:1380
const VectorVariablePhiCurl & curlPhi(const MooseVariableField< RealVectorValue > &) const
Definition Assembly.h:1376
void copyShapes(MooseVariableField< T > &v)
Definition Assembly.C:3038

◆ couplingEntries() [1/2]

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

Definition at line 1285 of file Assembly.h.

1286 {
1287 return _cm_ff_entry;
1288 }

Referenced by MortarConstraint::computeJacobian().

◆ couplingEntries() [2/2]

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

Definition at line 1290 of file Assembly.h.

1291 {
1292 return _cm_ff_entry;
1293 }

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

660{
661 auto & qvec = _qrules[block];
662 unsigned int ndims = _mesh_dimension + 1; // must account for 0-dimensional quadrature.
663 if (qvec.size() != ndims)
664 qvec.resize(ndims);
665
666 for (unsigned int i = 0; i < qvec.size(); i++)
667 {
668 int dim = i;
669 auto & q = qvec[dim];
670 q.vol = QBase::build(type, dim, volume_order);
671 q.vol->allow_rules_with_negative_weights = allow_negative_qweights;
672 q.face = QBase::build(type, dim - 1, face_order);
673 q.face->allow_rules_with_negative_weights = allow_negative_qweights;
674 q.fv_face = QBase::build(libMesh::QMONOMIAL, dim - 1, CONSTANT);
675 q.fv_face->allow_rules_with_negative_weights = allow_negative_qweights;
676 q.neighbor = std::make_unique<ArbitraryQuadrature>(dim - 1, face_order);
677 q.neighbor->allow_rules_with_negative_weights = allow_negative_qweights;
678 q.arbitrary_vol = std::make_unique<ArbitraryQuadrature>(dim, order);
679 q.arbitrary_vol->allow_rules_with_negative_weights = allow_negative_qweights;
680 q.arbitrary_face = std::make_unique<ArbitraryQuadrature>(dim - 1, face_order);
681 q.arbitrary_face->allow_rules_with_negative_weights = allow_negative_qweights;
682 }
683
684 delete _qrule_msm;
685 _custom_mortar_qrule = false;
686 _qrule_msm = QBase::build(type, _mesh_dimension - 1, face_order).release();
687 _qrule_msm->allow_rules_with_negative_weights = allow_negative_qweights;
688 _fe_msm->attach_quadrature_rule(_qrule_msm);
689}
bool allow_rules_with_negative_weights

Referenced by bumpAllQRuleOrder(), and bumpVolumeQRuleOrder().

◆ curlPhi() [1/2]

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

Definition at line 1497 of file Assembly.h.

1498 {
1499 return _vector_curl_phi;
1500 }
VectorVariablePhiCurl _vector_curl_phi
Definition Assembly.h:2710

◆ curlPhi() [2/2]

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

Definition at line 1376 of file Assembly.h.

1377 {
1378 return _vector_curl_phi;
1379 }

Referenced by copyShapes().

◆ curlPhiFace() [1/2]

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

Definition at line 1518 of file Assembly.h.

1519 {
1520 return _vector_curl_phi_face;
1521 }

◆ curlPhiFace() [2/2]

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

Definition at line 1397 of file Assembly.h.

1398 {
1399 return _vector_curl_phi_face;
1400 }

◆ curlPhiFaceNeighbor() [1/2]

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

Definition at line 1559 of file Assembly.h.

1560 {
1562 }
VectorVariablePhiCurl _vector_curl_phi_face_neighbor
Definition Assembly.h:2728

◆ curlPhiFaceNeighbor() [2/2]

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

Definition at line 1445 of file Assembly.h.

1446 {
1448 }

◆ curlPhiNeighbor() [1/2]

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

Definition at line 1539 of file Assembly.h.

1540 {
1542 }
VectorVariablePhiCurl _vector_curl_phi_neighbor
Definition Assembly.h:2722

◆ curlPhiNeighbor() [2/2]

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

Definition at line 1420 of file Assembly.h.

1421 {
1423 }

◆ currentBoundaryID()

const BoundaryID & Assembly::currentBoundaryID ( ) const
inline

Return the current boundary ID.

Definition at line 420 of file Assembly.h.

420{ return _current_boundary_id; }
BoundaryID _current_boundary_id
The current boundary ID.
Definition Assembly.h:2587

◆ currentNeighborSubdomainID()

const SubdomainID & Assembly::currentNeighborSubdomainID ( ) const
inline

Return the current subdomain ID.

Definition at line 488 of file Assembly.h.

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

◆ currentSubdomainID()

const SubdomainID & Assembly::currentSubdomainID ( ) const
inline

Return the current subdomain ID.

Definition at line 410 of file Assembly.h.

410{ return _current_subdomain_id; }
SubdomainID _current_subdomain_id
The current subdomain ID.
Definition Assembly.h:2585

◆ divPhi() [1/2]

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

Definition at line 1501 of file Assembly.h.

1502 {
1503 return _vector_div_phi;
1504 }
VectorVariablePhiDivergence _vector_div_phi
Definition Assembly.h:2711

◆ divPhi() [2/2]

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

Definition at line 1380 of file Assembly.h.

1381 {
1382 return _vector_div_phi;
1383 }

Referenced by copyShapes().

◆ divPhiFace() [1/2]

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

Definition at line 1522 of file Assembly.h.

1523 {
1524 return _vector_div_phi_face;
1525 }

◆ divPhiFace() [2/2]

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

Definition at line 1401 of file Assembly.h.

1402 {
1403 return _vector_div_phi_face;
1404 }

◆ divPhiFaceNeighbor() [1/2]

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

Definition at line 1563 of file Assembly.h.

1564 {
1566 }
VectorVariablePhiDivergence _vector_div_phi_face_neighbor
Definition Assembly.h:2729

◆ divPhiFaceNeighbor() [2/2]

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

Definition at line 1450 of file Assembly.h.

1451 {
1453 }

◆ divPhiNeighbor() [1/2]

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

Definition at line 1543 of file Assembly.h.

1544 {
1546 }
VectorVariablePhiDivergence _vector_div_phi_neighbor
Definition Assembly.h:2723

◆ divPhiNeighbor() [2/2]

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

Definition at line 1425 of file Assembly.h.

1426 {
1428 }

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

3793{
3794 FEType fe_type(elem->default_order(), LAGRANGE);
3795 std::unique_ptr<FEBase> fe(FEBase::build(elem->dim(), fe_type));
3796
3797 // references to the quadrature points and weights
3798 const std::vector<Real> & JxW = fe->get_JxW();
3799 const std::vector<Point> & q_points = fe->get_xyz();
3800
3801 // The default quadrature rule should integrate the mass matrix,
3802 // thus it should be plenty to compute the volume
3803 QGauss qrule(elem->dim(), fe_type.default_quadrature_order());
3804 fe->attach_quadrature_rule(&qrule);
3805 fe->reinit(elem);
3806
3807 // perform a sanity check to ensure that size of quad rule and size of q_points is
3808 // identical
3809 mooseAssert(qrule.n_points() == q_points.size(),
3810 "The number of points in the quadrature rule doesn't match the number of passed-in "
3811 "points in Assembly::setCoordinateTransformation");
3812
3813 // compute the coordinate transformation
3814 Real vol = 0;
3815 for (unsigned int qp = 0; qp < qrule.n_points(); ++qp)
3816 {
3817 Real coord;
3818 coordTransformFactor(_subproblem, elem->subdomain_id(), q_points[qp], coord);
3819 vol += JxW[qp] * coord;
3820 }
3821 return vol;
3822}
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:41
const MooseArray< Real > & JxW() const
Returns the reference to the transformed jacobian weights.
Definition Assembly.h:267

Referenced by MoveNodesByParsedExpressionModifier::prepare(), reinitLowerDElem(), reinitNeighborLowerDElem(), and MoveNodesByParsedExpressionModifier::writeOutputs().

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

370 {
371 mooseAssert(id < _extra_elem_ids.size(), "An invalid extra element integer id");
372 return _extra_elem_ids[id];
373 }

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

379 {
380 mooseAssert(id < _neighbor_extra_elem_ids.size(), "An invalid extra element integer id");
381 return _neighbor_extra_elem_ids[id];
382 }

◆ feADGradPhi() [1/2]

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

Definition at line 1624 of file Assembly.h.

1625 {
1626 return _ad_grad_phi_data[type];
1627 }

◆ feADGradPhi() [2/2]

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

Definition at line 2927 of file Assembly.h.

2929{
2930 return _ad_vector_grad_phi_data[type];
2931}

◆ feADGradPhiFace() [1/2]

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

Definition at line 1665 of file Assembly.h.

1666 {
1667 return _ad_grad_phi_data_face[type];
1668 }

◆ feADGradPhiFace() [2/2]

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

Definition at line 2934 of file Assembly.h.

2936{
2937 return _ad_vector_grad_phi_data_face[type];
2938}

◆ feCurlPhi() [1/3]

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

Definition at line 1725 of file Assembly.h.

1726 {
1727 _need_curl.insert(type);
1728 buildFE(type);
1729 return _fe_shape_data[type]->_curl_phi;
1730 }

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

4749{
4750 _need_curl.insert(type);
4751 buildVectorFE(type);
4752 return _vector_fe_shape_data[type]->_curl_phi;
4753}
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
Definition Assembly.C:478

◆ feCurlPhiFace() [1/3]

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

Definition at line 1733 of file Assembly.h.

1734 {
1735 _need_curl.insert(type);
1736 buildFaceFE(type);
1737 return _fe_shape_data_face[type]->_curl_phi;
1738 }

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

4758{
4759 _need_curl.insert(type);
4760 buildVectorFaceFE(type);
4761
4762 // If we're building for a face we probably need to build for a
4763 // neighbor while _need_curl is set;
4764 // onInterface/reinitNeighbor/etc don't distinguish
4766
4767 return _vector_fe_shape_data_face[type]->_curl_phi;
4768}
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
Definition Assembly.C:578
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
Definition Assembly.C:512

◆ feCurlPhiFaceNeighbor() [1/3]

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

Definition at line 1749 of file Assembly.h.

1750 {
1751 _need_curl.insert(type);
1752 buildFaceNeighborFE(type);
1753 return _fe_shape_data_face_neighbor[type]->_curl_phi;
1754 }

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

4782{
4783 _need_curl.insert(type);
4785
4786 return _vector_fe_shape_data_face_neighbor[type]->_curl_phi;
4787}

◆ feCurlPhiNeighbor() [1/3]

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

Definition at line 1741 of file Assembly.h.

1742 {
1743 _need_curl.insert(type);
1744 buildNeighborFE(type);
1745 return _fe_shape_data_neighbor[type]->_curl_phi;
1746 }

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

4773{
4774 _need_curl.insert(type);
4776 return _vector_fe_shape_data_neighbor[type]->_curl_phi;
4777}
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
Definition Assembly.C:545

◆ feDivPhi() [1/3]

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

Definition at line 1757 of file Assembly.h.

1758 {
1759 buildFE(type);
1760 return _fe_shape_data[type]->_div_phi;
1761 }

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

4792{
4793 _need_div.insert(type);
4794 buildVectorFE(type);
4795 return _vector_fe_shape_data[type]->_div_phi;
4796}

◆ feDivPhiFace() [1/3]

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

Definition at line 1764 of file Assembly.h.

1765 {
1766 buildFaceFE(type);
1767 return _fe_shape_data_face[type]->_div_phi;
1768 }

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

4801{
4802 _need_face_div.insert(type);
4803 buildVectorFaceFE(type);
4804
4805 // If we're building for a face we probably need to build for a
4806 // neighbor while _need_face_div is set;
4807 // onInterface/reinitNeighbor/etc don't distinguish
4809
4810 return _vector_fe_shape_data_face[type]->_div_phi;
4811}

◆ feDivPhiFaceNeighbor() [1/3]

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

Definition at line 1780 of file Assembly.h.

1781 {
1782 buildFaceNeighborFE(type);
1783 return _fe_shape_data_face_neighbor[type]->_div_phi;
1784 }

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

4825{
4826 _need_face_neighbor_div.insert(type);
4828 return _vector_fe_shape_data_face_neighbor[type]->_div_phi;
4829}

◆ feDivPhiNeighbor() [1/3]

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

Definition at line 1772 of file Assembly.h.

1773 {
1774 buildNeighborFE(type);
1775 return _fe_shape_data_neighbor[type]->_div_phi;
1776 }

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

4816{
4817 _need_neighbor_div.insert(type);
4819 return _vector_fe_shape_data_neighbor[type]->_div_phi;
4820}

◆ feDualPhiLower() [1/3]

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

Definition at line 2904 of file Assembly.h.

2905{
2906 buildLowerDDualFE(type);
2907 return _fe_shape_data_dual_lower[type]->_phi;
2908}
void buildLowerDDualFE(FEType type) const
Definition Assembly.C:398

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

4644{
4646 return _vector_fe_shape_data_dual_lower[type]->_phi;
4647}
void buildVectorDualLowerDFE(FEType type) const
Definition Assembly.C:450

◆ feGradDualPhiLower() [1/3]

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

Definition at line 2920 of file Assembly.h.

2921{
2922 buildLowerDDualFE(type);
2923 return _fe_shape_data_dual_lower[type]->_grad_phi;
2924}

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

4660{
4662 return _vector_fe_shape_data_dual_lower[type]->_grad_phi;
4663}

◆ feGradPhi() [1/3]

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

Definition at line 1617 of file Assembly.h.

1618 {
1619 buildFE(type);
1620 return _fe_shape_data[type]->_grad_phi;
1621 }

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

4619{
4620 buildVectorFE(type);
4621 return _vector_fe_shape_data[type]->_grad_phi;
4622}

◆ feGradPhiFace() [1/3]

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

Definition at line 1658 of file Assembly.h.

1659 {
1660 buildFaceFE(type);
1661 return _fe_shape_data_face[type]->_grad_phi;
1662 }

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

4676{
4677 buildVectorFaceFE(type);
4678 return _vector_fe_shape_data_face[type]->_grad_phi;
4679}

◆ feGradPhiFaceNeighbor() [1/3]

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

Definition at line 1709 of file Assembly.h.

1710 {
1711 buildFaceNeighborFE(type);
1712 return _fe_shape_data_face_neighbor[type]->_grad_phi;
1713 }

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

4732{
4734 return _vector_fe_shape_data_face_neighbor[type]->_grad_phi;
4735}

◆ feGradPhiLower() [1/3]

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

Definition at line 2912 of file Assembly.h.

2913{
2914 buildLowerDFE(type);
2915 return _fe_shape_data_lower[type]->_grad_phi;
2916}

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

4652{
4653 buildVectorLowerDFE(type);
4654 return _vector_fe_shape_data_lower[type]->_grad_phi;
4655}
void buildVectorLowerDFE(FEType type) const
Build Vector FEs for a lower dimensional element with a type.
Definition Assembly.C:422

◆ feGradPhiNeighbor() [1/3]

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

Definition at line 1686 of file Assembly.h.

1687 {
1688 buildNeighborFE(type);
1689 return _fe_shape_data_neighbor[type]->_grad_phi;
1690 }

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

4707{
4709 return _vector_fe_shape_data_neighbor[type]->_grad_phi;
4710}

◆ fePhi() [1/3]

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

Definition at line 1610 of file Assembly.h.

1611 {
1612 buildFE(type);
1613 return _fe_shape_data[type]->_phi;
1614 }

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

4611{
4612 buildVectorFE(type);
4613 return _vector_fe_shape_data[type]->_phi;
4614}

◆ fePhiFace() [1/3]

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

Definition at line 1651 of file Assembly.h.

1652 {
1653 buildFaceFE(type);
1654 return _fe_shape_data_face[type]->_phi;
1655 }

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

4668{
4669 buildVectorFaceFE(type);
4670 return _vector_fe_shape_data_face[type]->_phi;
4671}

◆ fePhiFaceNeighbor() [1/3]

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

Definition at line 1701 of file Assembly.h.

1702 {
1703 buildFaceNeighborFE(type);
1704 return _fe_shape_data_face_neighbor[type]->_phi;
1705 }

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

4724{
4726 return _vector_fe_shape_data_face_neighbor[type]->_phi;
4727}

◆ fePhiLower() [1/3]

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

Definition at line 2896 of file Assembly.h.

2897{
2898 buildLowerDFE(type);
2899 return _fe_shape_data_lower[type]->_phi;
2900}

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

4636{
4637 buildVectorLowerDFE(type);
4638 return _vector_fe_shape_data_lower[type]->_phi;
4639}

◆ fePhiNeighbor() [1/3]

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

Definition at line 1679 of file Assembly.h.

1680 {
1681 buildNeighborFE(type);
1682 return _fe_shape_data_neighbor[type]->_phi;
1683 }

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

4699{
4701 return _vector_fe_shape_data_neighbor[type]->_phi;
4702}

◆ feSecondPhi() [1/3]

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

Definition at line 1630 of file Assembly.h.

1631 {
1632 _need_second_derivative.insert(type);
1633 buildFE(type);
1634 return _fe_shape_data[type]->_second_phi;
1635 }

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

4627{
4628 _need_second_derivative.insert(type);
4629 buildVectorFE(type);
4630 return _vector_fe_shape_data[type]->_second_phi;
4631}

◆ feSecondPhiFace() [1/3]

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

Definition at line 1671 of file Assembly.h.

1672 {
1673 _need_second_derivative.insert(type);
1674 buildFaceFE(type);
1675 return _fe_shape_data_face[type]->_second_phi;
1676 }

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

4684{
4685 _need_second_derivative.insert(type);
4686 buildVectorFaceFE(type);
4687
4688 // If we're building for a face we probably need to build for a
4689 // neighbor while _need_second_derivative is set;
4690 // onInterface/reinitNeighbor/etc don't distinguish
4692
4693 return _vector_fe_shape_data_face[type]->_second_phi;
4694}

◆ feSecondPhiFaceNeighbor() [1/3]

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

Definition at line 1717 of file Assembly.h.

1718 {
1720 buildFaceNeighborFE(type);
1721 return _fe_shape_data_face_neighbor[type]->_second_phi;
1722 }

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

4740{
4743 return _vector_fe_shape_data_face_neighbor[type]->_second_phi;
4744}

◆ feSecondPhiNeighbor() [1/3]

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

Definition at line 1693 of file Assembly.h.

1694 {
1696 buildNeighborFE(type);
1697 return _fe_shape_data_neighbor[type]->_second_phi;
1698 }

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

4715{
4718 return _vector_fe_shape_data_neighbor[type]->_second_phi;
4719}

◆ fieldScalarCouplingEntries()

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

Definition at line 1300 of file Assembly.h.

1301 {
1302 return _cm_fs_entry;
1303 }

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

4967{
4968 return qPoints();
4969}
const MooseArray< Point > & qPoints() const
Returns the reference to the quadrature points.
Definition Assembly.h:249

◆ genericQPoints() [3/3]

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

Definition at line 4972 of file Assembly.C.

4974{
4975 return adQPoints();
4976}
const MooseArray< ADPoint > & adQPoints() const
Definition Assembly.h:386

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

124 {
125 buildFE(type);
126 return constify_ref(_fe[dim][type]);
127 }
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:111

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

148 {
149 buildFaceFE(type);
150 return constify_ref(_fe_face[dim][type]);
151 }

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

160 {
162 return constify_ref(_fe_face_neighbor[dim][type]);
163 }

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

136 {
137 buildNeighborFE(type);
138 return constify_ref(_fe_neighbor[dim][type]);
139 }

◆ getJacobianDiagonal()

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

Definition at line 1883 of file Assembly.h.

1884 {
1885 unsigned int rows = ke.m();
1886 unsigned int cols = ke.n();
1887 DenseVector<Real> diag(rows);
1888 for (unsigned int i = 0; i < rows; i++)
1889 // % operation is needed to account for cases of no component coupling of array variables
1890 diag(i) = ke(i, i % cols);
1891 return diag;
1892 }

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

172 {
173 buildVectorFE(type);
174 return constify_ref(_vector_fe[dim][type]);
175 }

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

196 {
197 buildVectorFaceFE(type);
198 return constify_ref(_vector_fe_face[dim][type]);
199 }

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

208 {
210 return constify_ref(_vector_fe_face_neighbor[dim][type]);
211 }

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

184 {
186 return constify_ref(_vector_fe_neighbor[dim][type]);
187 }

◆ gradPhi() [1/6]

const VariablePhiGradient & Assembly::gradPhi ( ) const
inline

Definition at line 1318 of file Assembly.h.

1318{ return _grad_phi; }
VariablePhiGradient _grad_phi
Definition Assembly.h:2691

Referenced by copyShapes().

◆ gradPhi() [2/6]

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

Definition at line 1457 of file Assembly.h.

1457{ return _grad_phi; }

◆ gradPhi() [3/6]

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

Definition at line 1319 of file Assembly.h.

1319{ return _grad_phi; }

◆ gradPhi() [4/6]

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

Definition at line 1570 of file Assembly.h.

1570{ return _grad_phi; }

◆ gradPhi() [5/6]

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

Definition at line 1489 of file Assembly.h.

1490 {
1491 return _vector_grad_phi;
1492 }
VectorVariablePhiGradient _vector_grad_phi
Definition Assembly.h:2708

◆ gradPhi() [6/6]

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

Definition at line 1368 of file Assembly.h.

1369 {
1370 return _vector_grad_phi;
1371 }

◆ gradPhiFace() [1/6]

const VariablePhiGradient & Assembly::gradPhiFace ( ) const
inline

Definition at line 1328 of file Assembly.h.

1328{ return _grad_phi_face; }
VariablePhiGradient _grad_phi_face
Definition Assembly.h:2695

Referenced by copyFaceShapes().

◆ gradPhiFace() [2/6]

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

Definition at line 1461 of file Assembly.h.

1461{ return _grad_phi_face; }

◆ gradPhiFace() [3/6]

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

Definition at line 1329 of file Assembly.h.

1330 {
1331 return _grad_phi_face;
1332 }

◆ gradPhiFace() [4/6]

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

Definition at line 1574 of file Assembly.h.

1575 {
1576 return _grad_phi_face;
1577 }

◆ gradPhiFace() [5/6]

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

Definition at line 1510 of file Assembly.h.

1511 {
1512 return _vector_grad_phi_face;
1513 }
VectorVariablePhiGradient _vector_grad_phi_face
Definition Assembly.h:2714

◆ gradPhiFace() [6/6]

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

Definition at line 1389 of file Assembly.h.

1390 {
1391 return _vector_grad_phi_face;
1392 }

◆ gradPhiFaceNeighbor() [1/5]

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

Definition at line 1478 of file Assembly.h.

1479 {
1481 }
VariablePhiGradient _grad_phi_face_neighbor
Definition Assembly.h:2703

◆ gradPhiFaceNeighbor() [2/5]

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

Definition at line 1355 of file Assembly.h.

1356 {
1358 }

Referenced by copyNeighborShapes().

◆ gradPhiFaceNeighbor() [3/5]

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

Definition at line 1600 of file Assembly.h.

1601 {
1603 }

◆ gradPhiFaceNeighbor() [4/5]

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

Definition at line 1551 of file Assembly.h.

1552 {
1554 }
VectorVariablePhiGradient _vector_grad_phi_face_neighbor
Definition Assembly.h:2726

◆ gradPhiFaceNeighbor() [5/5]

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

Definition at line 1435 of file Assembly.h.

1436 {
1438 }

◆ gradPhiNeighbor() [1/5]

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

Definition at line 1465 of file Assembly.h.

1466 {
1467 return _grad_phi_neighbor;
1468 }
VariablePhiGradient _grad_phi_neighbor
Definition Assembly.h:2699

◆ gradPhiNeighbor() [2/5]

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

Definition at line 1342 of file Assembly.h.

1343 {
1344 return _grad_phi_neighbor;
1345 }

Referenced by copyNeighborShapes().

◆ gradPhiNeighbor() [3/5]

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

Definition at line 1587 of file Assembly.h.

1588 {
1589 return _grad_phi_neighbor;
1590 }

◆ gradPhiNeighbor() [4/5]

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

Definition at line 1531 of file Assembly.h.

1532 {
1534 }
VectorVariablePhiGradient _vector_grad_phi_neighbor
Definition Assembly.h:2720

◆ gradPhiNeighbor() [5/5]

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

Definition at line 1411 of file Assembly.h.

1412 {
1414 }

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

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

Referenced by SubProblem::hasScalingVector().

◆ helpersRequestData()

void Assembly::helpersRequestData ( )
private

request phi, dphi, xyz, JxW, etc.

data through the FE helper functions

Definition at line 4843 of file Assembly.C.

4844{
4845 for (unsigned int dim = 0; dim <= _mesh_dimension; dim++)
4846 {
4847 _holder_fe_helper[dim]->get_phi();
4848 _holder_fe_helper[dim]->get_dphi();
4849 _holder_fe_helper[dim]->get_xyz();
4850 _holder_fe_helper[dim]->get_JxW();
4851
4852 _holder_fe_face_helper[dim]->get_phi();
4853 _holder_fe_face_helper[dim]->get_dphi();
4854 _holder_fe_face_helper[dim]->get_xyz();
4855 _holder_fe_face_helper[dim]->get_JxW();
4856 _holder_fe_face_helper[dim]->get_normals();
4857
4860 _holder_fe_face_neighbor_helper[dim]->get_normals();
4861
4862 _holder_fe_neighbor_helper[dim]->get_xyz();
4863 _holder_fe_neighbor_helper[dim]->get_JxW();
4864 }
4865
4866 for (unsigned int dim = 0; dim < _mesh_dimension; dim++)
4867 {
4868 // We need these computations in order to compute correct lower-d element volumes in
4869 // curvilinear coordinates
4870 _holder_fe_lower_helper[dim]->get_xyz();
4871 _holder_fe_lower_helper[dim]->get_JxW();
4872 }
4873}

Referenced by Assembly(), and preparePRefinement().

◆ init()

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

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

◆ initNonlocalCoupling()

void Assembly::initNonlocalCoupling ( )

Create pair of variables requiring nonlocal jacobian contributions.

Definition at line 2686 of file Assembly.C.

2687{
2688 _cm_nonlocal_entry.clear();
2689
2690 auto & vars = _sys.getVariables(_tid);
2691
2692 for (auto & ivar : vars)
2693 {
2694 auto i = ivar->number();
2695 auto ivar_start = _cm_nonlocal_entry.size();
2696 for (unsigned int k = 0; k < ivar->count(); ++k)
2697 {
2698 unsigned int iv = i + k;
2699 for (const auto & j : libMesh::ConstCouplingRow(iv, _nonlocal_cm))
2700 if (!_sys.isScalarVariable(j))
2701 {
2702 auto & jvar = _sys.getVariable(_tid, j);
2703 auto pair = std::make_pair(ivar, &jvar);
2704 auto c = ivar_start;
2705 // check if the pair has been pushed or not
2706 bool has_pair = false;
2707 for (; c < _cm_nonlocal_entry.size(); ++c)
2708 if (_cm_nonlocal_entry[c] == pair)
2709 {
2710 has_pair = true;
2711 break;
2712 }
2713 if (!has_pair)
2714 _cm_nonlocal_entry.push_back(pair);
2715 }
2716 }
2717 }
2718}

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

1134 {
1135 jacobianBlockUsed(tag, ivar, jvar, true);
1136 return _sub_Kee[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
1137 }
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
Definition Assembly.h:2666

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

2272 {
2273 return _jacobian_block_lower_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2274 }

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

2263 {
2264 _jacobian_block_lower_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2265 }

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

3201{
3202 jacobianBlockLowerUsed(tag, ivar, jvar, true);
3204 {
3205 switch (type)
3206 {
3207 default:
3208 case Moose::LowerLower:
3209 return _sub_Kll[tag][ivar][0];
3211 return _sub_Kle[tag][ivar][0];
3213 return _sub_Kln[tag][ivar][0];
3215 return _sub_Kel[tag][ivar][0];
3217 return _sub_Kee[tag][ivar][0];
3219 return _sub_Ken[tag][ivar][0];
3221 return _sub_Knl[tag][ivar][0];
3223 return _sub_Kne[tag][ivar][0];
3225 return _sub_Knn[tag][ivar][0];
3226 }
3227 }
3228 else
3229 {
3230 switch (type)
3231 {
3232 default:
3233 case Moose::LowerLower:
3234 return _sub_Kll[tag][ivar][jvar];
3236 return _sub_Kle[tag][ivar][jvar];
3238 return _sub_Kln[tag][ivar][jvar];
3240 return _sub_Kel[tag][ivar][jvar];
3242 return _sub_Kee[tag][ivar][jvar];
3244 return _sub_Ken[tag][ivar][jvar];
3246 return _sub_Knl[tag][ivar][jvar];
3248 return _sub_Kne[tag][ivar][jvar];
3250 return _sub_Knn[tag][ivar][jvar];
3251 }
3252 }
3253}
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kll
dlower/dlower
Definition Assembly.h:2676
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Ken
jacobian contributions from the element and neighbor <Tag, ivar, jvar>
Definition Assembly.h:2670
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kle
dlower/dsecondary (or dlower/delement)
Definition Assembly.h:2678
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knn
jacobian contributions from the neighbor <Tag, ivar, jvar>
Definition Assembly.h:2674
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kln
dlower/dprimary (or dlower/dneighbor)
Definition Assembly.h:2680
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kel
dsecondary/dlower (or delement/dlower)
Definition Assembly.h:2682
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kne
jacobian contributions from the neighbor and element <Tag, ivar, jvar>
Definition Assembly.h:2672
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knl
dprimary/dlower (or dneighbor/dlower)
Definition Assembly.h:2684

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

3157{
3158 if (type == Moose::ElementElement)
3159 jacobianBlockUsed(tag, ivar, jvar, true);
3160 else
3161 jacobianBlockNeighborUsed(tag, ivar, jvar, true);
3162
3164 {
3165 switch (type)
3166 {
3167 default:
3169 return _sub_Kee[tag][ivar][0];
3171 return _sub_Ken[tag][ivar][0];
3173 return _sub_Kne[tag][ivar][0];
3175 return _sub_Knn[tag][ivar][0];
3176 }
3177 }
3178 else
3179 {
3180 switch (type)
3181 {
3182 default:
3184 return _sub_Kee[tag][ivar][jvar];
3186 return _sub_Ken[tag][ivar][jvar];
3188 return _sub_Kne[tag][ivar][jvar];
3190 return _sub_Knn[tag][ivar][jvar];
3191 }
3192 }
3193}
@ ElementElement
Definition MooseTypes.h:805

Referenced by TaggingInterface::accumulateTaggedLocalMatrix(), addJacobianNeighbor(), addJacobianNeighborLowerD(), cacheJacobianNeighbor(), TaggingInterface::prepareMatrixTagNeighbor(), 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 2253 of file Assembly.h.

2254 {
2255 return _jacobian_block_neighbor_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2256 }

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

2245 {
2246 _jacobian_block_neighbor_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2247 }

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

1145 {
1146 jacobianBlockNonlocalUsed(tag, ivar, jvar, true);
1147 return _sub_Keg[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
1148 }
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Keg
Definition Assembly.h:2667

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

2290 {
2291 return _jacobian_block_nonlocal_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2292 }

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

2281 {
2282 _jacobian_block_nonlocal_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2283 }

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

2236 {
2237 return _jacobian_block_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar];
2238 }

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

2227 {
2228 _jacobian_block_used[tag][ivar][_block_diagonal_matrix ? 0 : jvar] = used;
2229 }

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

267{ 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 342 of file Assembly.h.

342{ 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 698 of file Assembly.h.

698{ 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 260 of file Assembly.C.

261{
262 _need_JxW_neighbor = true;
264}
MooseArray< Real > _current_JxW_neighbor
The current transformed jacobian weights on a neighbor's face.
Definition Assembly.h:2556

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

467{ return _current_lower_d_elem; }

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

◆ lowerDElemVolume()

const Real & Assembly::lowerDElemVolume ( ) const
inline

Definition at line 3193 of file Assembly.h.

3194{
3197}
Real _current_lower_d_elem_volume
The current lower dimensional element volume.
Definition Assembly.h:2624

◆ mappedNormals()

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

Definition at line 353 of file Assembly.h.

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

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

4600{
4601 mooseAssert(_current_qrule == _current_qrule_arbitrary, "Rule should be arbitrary");
4602 mooseAssert(weights.size() == _current_physical_points.size(), "Size mismatch");
4603
4604 for (MooseIndex(weights.size()) i = 0; i < weights.size(); ++i)
4605 _current_JxW[i] = weights[i];
4606}
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 4572 of file Assembly.C.

4573{
4574 mooseAssert(_xfem != nullptr, "This function should not be called if xfem is inactive");
4575
4577 return;
4578
4579 MooseArray<Real> xfem_face_weight_multipliers;
4580 if (_xfem->getXFEMFaceWeights(
4581 xfem_face_weight_multipliers, elem, _current_qrule_face, _current_q_points_face, side))
4582 {
4583 mooseAssert(xfem_face_weight_multipliers.size() == _current_JxW_face.size(),
4584 "Size of weight multipliers in xfem doesn't match number of quadrature points");
4585 for (unsigned i = 0; i < xfem_face_weight_multipliers.size(); i++)
4586 _current_JxW_face[i] = _current_JxW_face[i] * xfem_face_weight_multipliers[i];
4587
4588 xfem_face_weight_multipliers.release();
4589 }
4590}
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
Definition Assembly.h:2366
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 4552 of file Assembly.C.

4553{
4554 mooseAssert(_xfem != nullptr, "This function should not be called if xfem is inactive");
4555
4557 return;
4558
4559 MooseArray<Real> xfem_weight_multipliers;
4560 if (_xfem->getXFEMWeights(xfem_weight_multipliers, elem, _current_qrule, _current_q_points))
4561 {
4562 mooseAssert(xfem_weight_multipliers.size() == _current_JxW.size(),
4563 "Size of weight multipliers in xfem doesn't match number of quadrature points");
4564 for (unsigned i = 0; i < xfem_weight_multipliers.size(); i++)
4565 _current_JxW[i] = _current_JxW[i] * xfem_weight_multipliers[i];
4566
4567 xfem_weight_multipliers.release();
4568 }
4569}

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

285{ return _coord_msm; }

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

◆ msmElem()

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

Definition at line 1952 of file Assembly.h.

1952{ return _msm_elem; }
const Elem * _msm_elem
Definition Assembly.h:2870

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

614{ 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 473 of file Assembly.h.

◆ neighborLowerDElemVolume()

const Real & Assembly::neighborLowerDElemVolume ( ) const
inline

Definition at line 3200 of file Assembly.h.

3201{
3204}
Real _current_neighbor_lower_d_elem_volume
The current neighboring lower dimensional element volume.
Definition Assembly.h:2628

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

443{ 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 499 of file Assembly.h.

500 {
503 }

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

536{ 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 542 of file Assembly.h.

542{ return _current_neighbor_node; }

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

◆ nonlocalCouplingEntries()

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

Definition at line 1295 of file Assembly.h.

1296 {
1297 return _cm_nonlocal_entry;
1298 }

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

348{ return _current_normals; }

◆ numExtraElemIntegers()

unsigned int Assembly::numExtraElemIntegers ( ) const
inline

Number of extra element integers Assembly tracked.

Definition at line 364 of file Assembly.h.

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

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

◆ phi() [1/6]

const VariablePhiValue & Assembly::phi ( ) const
inline

Definition at line 1311 of file Assembly.h.

1311{ return _phi; }
VariablePhiValue _phi
Definition Assembly.h:2690

Referenced by copyShapes().

◆ phi() [2/6]

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

Definition at line 1456 of file Assembly.h.

1456{ return _phi; }

◆ phi() [3/6]

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

Definition at line 1317 of file Assembly.h.

1317{ return _phi; }

◆ phi() [4/6]

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

Definition at line 1569 of file Assembly.h.

1569{ return _phi; }

◆ phi() [5/6]

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

Definition at line 1488 of file Assembly.h.

1488{ return _vector_phi; }
VectorVariablePhiValue _vector_phi
Definition Assembly.h:2707

◆ phi() [6/6]

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

Definition at line 1364 of file Assembly.h.

1365 {
1366 return _vector_phi;
1367 }

◆ phiFace() [1/6]

const VariablePhiValue & Assembly::phiFace ( ) const
inline

Definition at line 1326 of file Assembly.h.

1326{ return _phi_face; }
VariablePhiValue _phi_face
Definition Assembly.h:2694

Referenced by copyFaceShapes().

◆ phiFace() [2/6]

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

Definition at line 1460 of file Assembly.h.

1460{ return _phi_face; }

◆ phiFace() [3/6]

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

Definition at line 1327 of file Assembly.h.

1327{ return _phi_face; }

◆ phiFace() [4/6]

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

Definition at line 1573 of file Assembly.h.

1573{ return _phi_face; }

◆ phiFace() [5/6]

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

Definition at line 1506 of file Assembly.h.

1507 {
1508 return _vector_phi_face;
1509 }
VectorVariablePhiValue _vector_phi_face
Definition Assembly.h:2713

◆ phiFace() [6/6]

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

Definition at line 1385 of file Assembly.h.

1386 {
1387 return _vector_phi_face;
1388 }

◆ phiFaceNeighbor() [1/5]

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

Definition at line 1474 of file Assembly.h.

1475 {
1476 return _phi_face_neighbor;
1477 }
VariablePhiValue _phi_face_neighbor
Definition Assembly.h:2702

◆ phiFaceNeighbor() [2/5]

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

Definition at line 1351 of file Assembly.h.

1352 {
1353 return _phi_face_neighbor;
1354 }

Referenced by copyNeighborShapes().

◆ phiFaceNeighbor() [3/5]

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

Definition at line 1596 of file Assembly.h.

1597 {
1598 return _phi_face_neighbor;
1599 }

◆ phiFaceNeighbor() [4/5]

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

Definition at line 1547 of file Assembly.h.

1548 {
1550 }
VectorVariablePhiValue _vector_phi_face_neighbor
Definition Assembly.h:2725

◆ phiFaceNeighbor() [5/5]

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

Definition at line 1430 of file Assembly.h.

1431 {
1433 }

◆ phiNeighbor() [1/5]

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

Definition at line 1464 of file Assembly.h.

1464{ return _phi_neighbor; }
VariablePhiValue _phi_neighbor
Definition Assembly.h:2698

◆ phiNeighbor() [2/5]

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

Definition at line 1338 of file Assembly.h.

1339 {
1340 return _phi_neighbor;
1341 }

Referenced by copyNeighborShapes().

◆ phiNeighbor() [3/5]

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

Definition at line 1583 of file Assembly.h.

1584 {
1585 return _phi_neighbor;
1586 }

◆ phiNeighbor() [4/5]

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

Definition at line 1527 of file Assembly.h.

1528 {
1529 return _vector_phi_neighbor;
1530 }
VectorVariablePhiValue _vector_phi_neighbor
Definition Assembly.h:2719

◆ phiNeighbor() [5/5]

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

Definition at line 1406 of file Assembly.h.

1407 {
1408 return _vector_phi_neighbor;
1409 }

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

261{ return _current_physical_points; }

◆ prepare()

void Assembly::prepare ( )

Definition at line 2754 of file Assembly.C.

2755{
2758}
void prepareJacobianBlock()
Sizes and zeroes the Jacobian blocks used for the current element.
Definition Assembly.C:2721
void prepareResidual()
Sizes and zeroes the residual for the current element.
Definition Assembly.C:2745

◆ prepareBlock()

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

Definition at line 2937 of file Assembly.C.

2940{
2941 const auto & iv = _sys.getVariable(_tid, ivar);
2942 const auto & jv = _sys.getVariable(_tid, jvar);
2943 const unsigned int ivn = iv.number();
2944 const unsigned int jvn = jv.number();
2945 const unsigned int icount = iv.count();
2946 unsigned int jcount = jv.count();
2947 if (ivn == jvn && _component_block_diagonal[ivn])
2948 jcount = 1;
2949
2950 for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2951 {
2952 jacobianBlock(ivn, jvn, LocalDataKey{}, tag)
2953 .resize(dof_indices.size() * icount, dof_indices.size() * jcount);
2954 jacobianBlockUsed(tag, ivn, jvn, false);
2955 }
2956
2957 for (auto & tag_Re : _sub_Re)
2958 tag_Re[ivn].resize(dof_indices.size() * icount);
2959}

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

2966{
2967 const auto & iv = _sys.getVariable(_tid, ivar);
2968 const auto & jv = _sys.getVariable(_tid, jvar);
2969 const unsigned int ivn = iv.number();
2970 const unsigned int jvn = jv.number();
2971 const unsigned int icount = iv.count();
2972 unsigned int jcount = jv.count();
2973 if (ivn == jvn && _component_block_diagonal[ivn])
2974 jcount = 1;
2975
2976 for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
2977 tag < _jacobian_block_nonlocal_used.size();
2978 tag++)
2979 {
2980 jacobianBlockNonlocal(ivn, jvn, LocalDataKey{}, tag)
2981 .resize(idof_indices.size() * icount, jdof_indices.size() * jcount);
2982
2983 jacobianBlockNonlocalUsed(tag, ivn, jvn, false);
2984 }
2985}

◆ prepareJacobianBlock()

void Assembly::prepareJacobianBlock ( )

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

Definition at line 2721 of file Assembly.C.

2722{
2723 for (const auto & it : _cm_ff_entry)
2724 {
2725 MooseVariableFEBase & ivar = *(it.first);
2726 MooseVariableFEBase & jvar = *(it.second);
2727
2728 unsigned int vi = ivar.number();
2729 unsigned int vj = jvar.number();
2730
2731 const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2732 auto num_cols = jvar.dofIndices().size();
2733 if (array_block_diagonal_purely_diagonal)
2734 num_cols /= jvar.count();
2735
2736 for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2737 {
2738 jacobianBlock(vi, vj, LocalDataKey{}, tag).resize(ivar.dofIndices().size(), num_cols);
2739 jacobianBlockUsed(tag, vi, vj, false);
2740 }
2741 }
2742}
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 2885 of file Assembly.C.

2886{
2887 for (const auto & it : _cm_ff_entry)
2888 {
2889 MooseVariableFEBase & ivar = *(it.first);
2890 MooseVariableFEBase & jvar = *(it.second);
2891
2892 unsigned int vi = ivar.number();
2893 unsigned int vj = jvar.number();
2894
2895 const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2896 const auto dofs_divisor = array_block_diagonal_purely_diagonal ? jvar.count() : 1;
2897
2898 for (MooseIndex(_jacobian_block_lower_used) tag = 0; tag < _jacobian_block_lower_used.size();
2899 tag++)
2900 {
2901 // To cover all possible cases we should have 9 combinations below for every 2-permutation
2902 // of Lower,Secondary,Primary. However, 4 cases will in general be covered by calls to
2903 // prepare() and prepareNeighbor(). These calls will cover SecondarySecondary
2904 // (ElementElement), SecondaryPrimary (ElementNeighbor), PrimarySecondary (NeighborElement),
2905 // and PrimaryPrimary (NeighborNeighbor). With these covered we only need to prepare the 5
2906 // remaining below
2907
2908 // derivatives w.r.t. lower dimensional residuals
2909 jacobianBlockMortar(Moose::LowerLower, vi, vj, LocalDataKey{}, tag)
2910 .resize(ivar.dofIndicesLower().size(), jvar.dofIndicesLower().size() / dofs_divisor);
2911
2912 jacobianBlockMortar(Moose::LowerSecondary, vi, vj, LocalDataKey{}, tag)
2913 .resize(ivar.dofIndicesLower().size(), jvar.dofIndices().size() / dofs_divisor);
2914
2915 jacobianBlockMortar(Moose::LowerPrimary, vi, vj, LocalDataKey{}, tag)
2916 .resize(ivar.dofIndicesLower().size(), jvar.dofIndicesNeighbor().size() / dofs_divisor);
2917
2918 // derivatives w.r.t. interior secondary residuals
2919 jacobianBlockMortar(Moose::SecondaryLower, vi, vj, LocalDataKey{}, tag)
2920 .resize(ivar.dofIndices().size(), jvar.dofIndicesLower().size() / dofs_divisor);
2921
2922 // derivatives w.r.t. interior primary residuals
2923 jacobianBlockMortar(Moose::PrimaryLower, vi, vj, LocalDataKey{}, tag)
2924 .resize(ivar.dofIndicesNeighbor().size(), jvar.dofIndicesLower().size() / dofs_divisor);
2925
2926 jacobianBlockLowerUsed(tag, vi, vj, false);
2927 }
2928 }
2929
2930 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2931 for (const auto & var : vars)
2932 for (auto & tag_Rl : _sub_Rl)
2933 tag_Rl[var->number()].resize(var->dofIndicesLower().size());
2934}
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 2847 of file Assembly.C.

2848{
2849 for (const auto & it : _cm_ff_entry)
2850 {
2851 MooseVariableFEBase & ivar = *(it.first);
2852 MooseVariableFEBase & jvar = *(it.second);
2853
2854 unsigned int vi = ivar.number();
2855 unsigned int vj = jvar.number();
2856
2857 const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2858 const auto dofs_divisor = array_block_diagonal_purely_diagonal ? jvar.count() : 1;
2859
2860 for (MooseIndex(_jacobian_block_neighbor_used) tag = 0;
2861 tag < _jacobian_block_neighbor_used.size();
2862 tag++)
2863 {
2864 jacobianBlockNeighbor(Moose::ElementNeighbor, vi, vj, LocalDataKey{}, tag)
2865 .resize(ivar.dofIndices().size(), jvar.dofIndicesNeighbor().size() / dofs_divisor);
2866
2867 jacobianBlockNeighbor(Moose::NeighborElement, vi, vj, LocalDataKey{}, tag)
2868 .resize(ivar.dofIndicesNeighbor().size(), jvar.dofIndices().size() / dofs_divisor);
2869
2870 jacobianBlockNeighbor(Moose::NeighborNeighbor, vi, vj, LocalDataKey{}, tag)
2871 .resize(ivar.dofIndicesNeighbor().size(),
2872 jvar.dofIndicesNeighbor().size() / dofs_divisor);
2873
2874 jacobianBlockNeighborUsed(tag, vi, vj, false);
2875 }
2876 }
2877
2878 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2879 for (const auto & var : vars)
2880 for (auto & tag_Rn : _sub_Rn)
2881 tag_Rn[var->number()].resize(var->dofIndicesNeighbor().size());
2882}

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

◆ prepareNonlocal()

void Assembly::prepareNonlocal ( )

Definition at line 2761 of file Assembly.C.

2762{
2763 for (const auto & it : _cm_nonlocal_entry)
2764 {
2765 MooseVariableFEBase & ivar = *(it.first);
2766 MooseVariableFEBase & jvar = *(it.second);
2767
2768 unsigned int vi = ivar.number();
2769 unsigned int vj = jvar.number();
2770
2771 const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2772 auto num_cols = jvar.allDofIndices().size();
2773 if (array_block_diagonal_purely_diagonal)
2774 num_cols /= jvar.count();
2775
2776 for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
2777 tag < _jacobian_block_nonlocal_used.size();
2778 tag++)
2779 {
2780 jacobianBlockNonlocal(vi, vj, LocalDataKey{}, tag).resize(ivar.dofIndices().size(), num_cols);
2781 jacobianBlockNonlocalUsed(tag, vi, vj, false);
2782 }
2783 }
2784}
const std::vector< dof_id_type > & allDofIndices() const
Get all global dofindices for the variable.

◆ prepareOffDiagScalar()

void Assembly::prepareOffDiagScalar ( )

Definition at line 3012 of file Assembly.C.

3013{
3014 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3015 const std::vector<MooseVariableScalar *> & scalar_vars = _sys.getScalarVariables(_tid);
3016
3017 for (const auto & ivar : scalar_vars)
3018 {
3019 auto idofs = ivar->dofIndices().size();
3020
3021 for (const auto & jvar : vars)
3022 {
3023 auto jdofs = jvar->dofIndices().size() * jvar->count();
3024 for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
3025 {
3026 jacobianBlock(ivar->number(), jvar->number(), LocalDataKey{}, tag).resize(idofs, jdofs);
3027 jacobianBlockUsed(tag, ivar->number(), jvar->number(), false);
3028
3029 jacobianBlock(jvar->number(), ivar->number(), LocalDataKey{}, tag).resize(jdofs, idofs);
3030 jacobianBlockUsed(tag, jvar->number(), ivar->number(), false);
3031 }
3032 }
3033 }
3034}

Referenced by NodalScalarKernel::reinit().

◆ preparePRefinement()

void Assembly::preparePRefinement ( )

Prepare helper FEs for p-refinement.

The helper FEs are used for physical locations of quadrature points and JxW, and should not apply element p-levels to their own basis.

Definition at line 4876 of file Assembly.C.

4877{
4879 // Already performed tasks for p-refinement
4880 return;
4881
4882 const auto helper_type = _helper_type;
4883 auto process_fe_and_helpers = [&helper_type](auto & unique_helper_container,
4884 auto & helper_container,
4885 const unsigned int num_dimensionalities,
4886 const bool user_added_helper_type,
4887 auto & fe_container)
4888 {
4889 unique_helper_container.resize(num_dimensionalities);
4890 for (const auto dim : make_range(num_dimensionalities))
4891 {
4892 auto & unique_helper = unique_helper_container[dim];
4893 unique_helper = FEGenericBase<Real>::build(dim, helper_type);
4894 // don't participate in p-refinement
4895 unique_helper->add_p_level_in_reinit(false);
4896 helper_container[dim] = unique_helper.get();
4897
4898 // If the user did not request the helper type then we should erase the original helper FE
4899 // from the ordinary FE container. The unique helper above replaces it for helper use.
4900 if (!user_added_helper_type)
4901 {
4902 auto & fe_container_dim = libmesh_map_find(fe_container, dim);
4903 auto fe_it = fe_container_dim.find(helper_type);
4904 mooseAssert(fe_it != fe_container_dim.end(), "We should have the helper type");
4905 delete fe_it->second;
4906 fe_container_dim.erase(fe_it);
4907 }
4908 }
4909 };
4910
4911 // Handle scalar field families
4912 process_fe_and_helpers(_unique_fe_helper,
4914 _mesh_dimension + 1,
4916 _fe);
4917 process_fe_and_helpers(_unique_fe_face_helper,
4919 _mesh_dimension + 1,
4921 _fe_face);
4922 process_fe_and_helpers(_unique_fe_face_neighbor_helper,
4924 _mesh_dimension + 1,
4927 process_fe_and_helpers(_unique_fe_neighbor_helper,
4929 _mesh_dimension + 1,
4931 _fe_neighbor);
4932 process_fe_and_helpers(_unique_fe_lower_helper,
4936 _fe_lower);
4937
4939
4941}
std::vector< std::unique_ptr< FEBase > > _unique_fe_lower_helper
Definition Assembly.h:2360
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
Definition Assembly.h:2358
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
Definition Assembly.h:2357
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:2356
std::vector< std::unique_ptr< FEBase > > _unique_fe_neighbor_helper
Definition Assembly.h:2359

Referenced by SubProblem::preparePRefinement().

◆ prepareResidual()

void Assembly::prepareResidual ( )

Sizes and zeroes the residual for the current element.

Definition at line 2745 of file Assembly.C.

2746{
2747 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
2748 for (const auto & var : vars)
2749 for (auto & tag_Re : _sub_Re)
2750 tag_Re[var->number()].resize(var->dofIndices().size());
2751}

Referenced by prepare(), and reinitFVFace().

◆ prepareScalar()

void Assembly::prepareScalar ( )

Definition at line 2988 of file Assembly.C.

2989{
2990 const std::vector<MooseVariableScalar *> & vars = _sys.getScalarVariables(_tid);
2991 for (const auto & ivar : vars)
2992 {
2993 auto idofs = ivar->dofIndices().size();
2994
2995 for (auto & tag_Re : _sub_Re)
2996 tag_Re[ivar->number()].resize(idofs);
2997
2998 for (const auto & jvar : vars)
2999 {
3000 auto jdofs = jvar->dofIndices().size();
3001
3002 for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
3003 {
3004 jacobianBlock(ivar->number(), jvar->number(), LocalDataKey{}, tag).resize(idofs, jdofs);
3005 jacobianBlockUsed(tag, ivar->number(), jvar->number(), false);
3006 }
3007 }
3008 }
3009}

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

2788{
2789 for (const auto & it : _cm_ff_entry)
2790 {
2791 MooseVariableFEBase & ivar = *(it.first);
2792 MooseVariableFEBase & jvar = *(it.second);
2793
2794 unsigned int vi = ivar.number();
2795 unsigned int vj = jvar.number();
2796
2797 const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2798 auto num_cols = jvar.dofIndices().size();
2799 if (array_block_diagonal_purely_diagonal)
2800 num_cols /= jvar.count();
2801
2802 if (vi == var->number() || vj == var->number())
2803 {
2804 for (MooseIndex(_jacobian_block_used) tag = 0; tag < _jacobian_block_used.size(); tag++)
2805 {
2806 jacobianBlock(vi, vj, LocalDataKey{}, tag).resize(ivar.dofIndices().size(), num_cols);
2807 jacobianBlockUsed(tag, vi, vj, false);
2808 }
2809 }
2810 }
2811
2812 for (auto & tag_Re : _sub_Re)
2813 tag_Re[var->number()].resize(var->dofIndices().size());
2814}

◆ prepareVariableNonlocal()

void Assembly::prepareVariableNonlocal ( MooseVariableFieldBase *  var)

Definition at line 2817 of file Assembly.C.

2818{
2819 for (const auto & it : _cm_nonlocal_entry)
2820 {
2821 MooseVariableFEBase & ivar = *(it.first);
2822 MooseVariableFEBase & jvar = *(it.second);
2823
2824 unsigned int vi = ivar.number();
2825 unsigned int vj = jvar.number();
2826
2827 const bool array_block_diagonal_purely_diagonal = vi == vj && _component_block_diagonal[vi];
2828 auto num_cols = jvar.dofIndices().size();
2829 if (array_block_diagonal_purely_diagonal)
2830 num_cols /= jvar.count();
2831
2832 if (vi == var->number() || vj == var->number())
2833 {
2834 for (MooseIndex(_jacobian_block_nonlocal_used) tag = 0;
2835 tag < _jacobian_block_nonlocal_used.size();
2836 tag++)
2837 {
2838 jacobianBlockNonlocal(vi, vj, LocalDataKey{}, tag)
2839 .resize(ivar.dofIndices().size(), num_cols);
2840 jacobianBlockNonlocalUsed(tag, vi, vj);
2841 }
2842 }
2843 }
2844}

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

3259{
3260 mooseAssert(res_block.size() == dof_indices.size(),
3261 "The size of residual and degree of freedom container must be the same");
3262
3263 // For an array variable, ndof is the number of dofs of the zero-th component and
3264 // ntdof is the number of dofs of all components.
3265 // For standard or vector variables, ndof will be the same as ntdof.
3266 const auto ntdof = res_block.size();
3267 const auto count = scaling_factor.size();
3268 const auto ndof = ntdof / count;
3269 if (count > 1)
3270 {
3271 unsigned int p = 0;
3272 for (MooseIndex(count) j = 0; j < count; ++j)
3273 for (MooseIndex(ndof) i = 0; i < ndof; ++i)
3274 res_block(p++) *= scaling_factor[j];
3275 }
3276 else
3277 {
3278 if (scaling_factor[0] != 1.0)
3279 res_block *= scaling_factor[0];
3280 }
3281
3282 _dof_map.constrain_element_vector(res_block, dof_indices, false);
3283}
unsigned int count
Definition MortarUtils.C:53

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

249{ 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 336 of file Assembly.h.

336{ 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 530 of file Assembly.h.

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

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

255{ 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 226 of file Assembly.h.

226{ return constify_ref(_current_qrule); }

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

◆ qruleArbitraryFace()

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

Definition at line 1960 of file Assembly.C.

1961{
1962 return qruleFaceHelper<ArbitraryQuadrature>(
1963 elem, side, [](QRules & q) { return q.arbitrary_face.get(); });
1964}

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 313 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 1954 of file Assembly.C.

1955{
1956 return qruleFaceHelper<QBase>(elem, side, [](QRules & q) { return q.face.get(); });
1957}

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

2459 {
2460 auto dim = elem->dim();
2461 auto neighbor = elem->neighbor_ptr(side);
2462 auto q = rule_fn(qrules(dim, elem->subdomain_id()));
2463 if (!neighbor)
2464 return q;
2465
2466 // find the maximum face quadrature order for all blocks the face is in
2467 auto neighbor_block = neighbor->subdomain_id();
2468 if (neighbor_block == elem->subdomain_id())
2469 return q;
2470
2471 auto q_neighbor = rule_fn(qrules(dim, neighbor_block));
2472 if (q->get_order() > q_neighbor->get_order())
2473 return q;
2474 return q_neighbor;
2475 }
const Elem *const & neighbor() const
Return the neighbor element.
Definition Assembly.h:461

◆ qRuleMortar()

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

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

Definition at line 703 of file Assembly.h.

703{ 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 509 of file Assembly.h.

510 {
512 }

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

2483 {
2484 if (_qrules.find(block) == _qrules.end())
2485 {
2486 mooseAssert(_qrules.find(Moose::ANY_BLOCK_ID) != _qrules.end(),
2487 "missing quadrature rules for specified block");
2488 mooseAssert(_qrules[Moose::ANY_BLOCK_ID].size() > dim,
2489 "quadrature rules not sized property for dimension");
2491 }
2492 mooseAssert(_qrules.find(block) != _qrules.end(),
2493 "missing quadrature rules for specified block");
2494 mooseAssert(_qrules[block].size() > dim, "quadrature rules not sized property for dimension");
2495 return _qrules[block][dim];
2496 }

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

1857{
1859 _current_neighbor_elem = nullptr;
1860 mooseAssert(_current_subdomain_id == _current_elem->subdomain_id(),
1861 "current subdomain has been set incorrectly");
1864 reinitFE(elem);
1865
1867}
void reinitFE(const Elem *elem)
Just an internal helper function to reinit the volume FE objects.
Definition Assembly.C:797
void setVolumeQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for volume integration.
void computeCurrentElemVolume()
Definition Assembly.C:1791

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

1871{
1873 _current_neighbor_elem = nullptr;
1874 mooseAssert(_current_subdomain_id == _current_elem->subdomain_id(),
1875 "current subdomain has been set incorrectly");
1877
1878 unsigned int elem_dimension = _current_elem->dim();
1879
1880 _current_qrule_arbitrary = qrules(elem_dimension).arbitrary_vol.get();
1881
1882 // Make sure the qrule is the right one
1885
1886 _current_qrule_arbitrary->setPoints(reference_points);
1887
1888 reinitFE(elem);
1889
1891}
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:2435

◆ reinit() [3/5]

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

Reinitialize the assembly data on an side of an element.

Definition at line 1977 of file Assembly.C.

1978{
1980 _current_neighbor_elem = nullptr;
1981 mooseAssert(_current_subdomain_id == _current_elem->subdomain_id(),
1982 "current subdomain has been set incorrectly");
1986
1988
1991
1993}
void computeCurrentFaceVolume()
Definition Assembly.C:1810
void setFaceQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for face integration.
libMesh::ElemSideBuilder _current_side_elem_builder
In place side element builder for _current_side_elem.
Definition Assembly.h:2864
void reinitFEFace(const Elem *elem, unsigned int side)
Just an internal helper function to reinit the face FE objects.
Definition Assembly.C:1305

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

1997{
1999 _current_neighbor_elem = nullptr;
2000 mooseAssert(_current_subdomain_id == _current_elem->subdomain_id(),
2001 "current subdomain has been set incorrectly");
2005
2006 unsigned int elem_dimension = _current_elem->dim();
2007
2009
2010 // Make sure the qrule is the right one
2013
2014 _current_qrule_arbitrary->setPoints(reference_points);
2015
2017
2019
2021}
ArbitraryQuadrature * qruleArbitraryFace(const Elem *elem, unsigned int side)
Definition Assembly.C:1960
ArbitraryQuadrature * _current_qrule_arbitrary_face
The current arbitrary quadrature rule used on the element face.
Definition Assembly.h:2403

◆ reinit() [5/5]

void Assembly::reinit ( const Node *  node)

Reinitialize assembly data for a node.

Definition at line 2024 of file Assembly.C.

2025{
2028}

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

1830{
1832 _current_neighbor_elem = nullptr;
1833 mooseAssert(_current_subdomain_id == _current_elem->subdomain_id(),
1834 "current subdomain has been set incorrectly");
1836
1837 FEMap::inverse_map(elem->dim(), elem, physical_points, _temp_reference_points);
1838
1840
1841 // Save off the physical points
1842 _current_physical_points = physical_points;
1843}
std::vector< Point > _temp_reference_points
Temporary work data for reinitAtPhysical()
Definition Assembly.h:2811
void reinit(const Elem *elem)
Reinitialize objects (JxW, q_points, ...) for an elements.
Definition Assembly.C:1856

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

2312{
2313 const unsigned int elem_dim = elem->dim();
2314 mooseAssert(elem_dim == _mesh_dimension - 1,
2315 "Dual shape functions should only be computed on lower dimensional face elements");
2316
2317 for (const auto & it : _fe_lower[elem_dim])
2318 {
2319 FEBase & fe_lower = *it.second;
2320 // We use customized quadrature rule for integration along the mortar segment elements
2321 fe_lower.set_calculate_default_dual_coeff(false);
2322 fe_lower.reinit_dual_shape_coeffs(elem, pts, JxW);
2323 }
2324}

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

2036{
2037 _current_neighbor_side = neighbor_side;
2038
2039 reinit(elem, side);
2040
2041 unsigned int neighbor_dim = neighbor->dim();
2042
2043 if (neighbor_reference_points)
2044 _current_neighbor_ref_points = *neighbor_reference_points;
2045 else
2046 FEMap::inverse_map(
2048
2050
2053}
void reinitFEFaceNeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Definition Assembly.C:1610
libMesh::ElemSideBuilder _current_neighbor_side_elem_builder
In place side element builder for _current_neighbor_side_elem.
Definition Assembly.h:2866
void reinitNeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Reinitializes the neighbor side using reference coordinates.
Definition Assembly.C:1724
std::vector< Point > _current_neighbor_ref_points
The current reference points on the neighbor element.
Definition Assembly.h:2891
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 2056 of file Assembly.C.

2061{
2063
2064 unsigned int elem_dim = elem->dim();
2065
2066 // Attach the quadrature rules
2067 if (pts)
2068 {
2069 auto face_rule = qruleArbitraryFace(elem, elem_side);
2070 face_rule->setPoints(*pts);
2071 setFaceQRule(face_rule, elem_dim);
2072 }
2073 else
2074 {
2075 auto rule = qruleFace(elem, elem_side);
2076 if (_current_qrule_face != rule)
2077 setFaceQRule(rule, elem_dim);
2078 }
2079
2080 // reinit face
2081 for (const auto & it : _fe_face[elem_dim])
2082 {
2083 FEBase & fe_face = *it.second;
2084 FEType fe_type = it.first;
2085 FEShapeData & fesd = *_fe_shape_data_face[fe_type];
2086
2087 fe_face.reinit(elem, elem_side, tolerance, pts, weights);
2088
2089 _current_fe_face[fe_type] = &fe_face;
2090
2091 fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face.get_phi()));
2092 fesd._grad_phi.shallowCopy(
2093 const_cast<std::vector<std::vector<RealGradient>> &>(fe_face.get_dphi()));
2094 if (_need_second_derivative_neighbor.count(fe_type))
2095 fesd._second_phi.shallowCopy(
2096 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_d2phi()));
2097 }
2098 for (const auto & it : _vector_fe_face[elem_dim])
2099 {
2100 FEVectorBase & fe_face = *it.second;
2101 const FEType & fe_type = it.first;
2102
2103 _current_vector_fe_face[fe_type] = &fe_face;
2104
2105 VectorFEShapeData & fesd = *_vector_fe_shape_data_face[fe_type];
2106
2107 fe_face.reinit(elem, elem_side, tolerance, pts, weights);
2108
2109 fesd._phi.shallowCopy(
2110 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_phi()));
2111 fesd._grad_phi.shallowCopy(
2112 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_dphi()));
2113 if (_need_second_derivative.count(fe_type))
2114 fesd._second_phi.shallowCopy(
2115 const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe_face.get_d2phi()));
2116 if (_need_curl.count(fe_type))
2117 fesd._curl_phi.shallowCopy(
2118 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_curl_phi()));
2119 if (_need_face_div.count(fe_type))
2120 fesd._div_phi.shallowCopy(
2121 const_cast<std::vector<std::vector<Real>> &>(fe_face.get_div_phi()));
2122 }
2123 if (!_unique_fe_face_helper.empty())
2124 {
2125 mooseAssert(elem_dim < _unique_fe_face_helper.size(), "We should be in bounds here");
2126 _unique_fe_face_helper[elem_dim]->reinit(elem, elem_side, tolerance, pts, weights);
2127 }
2128
2129 // During that last loop the helper objects will have been reinitialized
2131 const_cast<std::vector<Point> &>(_holder_fe_face_helper[elem_dim]->get_xyz()));
2133 const_cast<std::vector<Point> &>(_holder_fe_face_helper[elem_dim]->get_normals()));
2134 _current_tangents.shallowCopy(const_cast<std::vector<std::vector<Point>> &>(
2135 _holder_fe_face_helper[elem_dim]->get_tangents()));
2136 // Note that if the user did pass in points and not weights to this method, JxW will be garbage
2137 // and should not be used
2139 const_cast<std::vector<Real> &>(_holder_fe_face_helper[elem_dim]->get_JxW()));
2142 const_cast<std::vector<Real> &>(_holder_fe_face_helper[elem_dim]->get_curvatures()));
2143
2144 computeADFace(*elem, elem_side);
2145}
MooseArray< std::vector< Point > > _current_tangents
The current tangent vectors at the quadrature points.
Definition Assembly.h:2521
void computeADFace(const Elem &elem, const unsigned int side)
compute AD things on an element face
Definition Assembly.C:2148
libMesh::QBase * qruleFace(const Elem *elem, unsigned int side)
This is an abstraction over the internal qrules function.
Definition Assembly.C:1954
std::map< FEType, FEBase * > _current_fe_face
The "face" fe object that matches the current elem.
Definition Assembly.h:2371
std::map< FEType, FEVectorBase * > _current_vector_fe_face
The "face" vector fe object that matches the current elem.
Definition Assembly.h:2380
void shallowCopy(const MooseArray &rhs)
Doesn't actually make a copy of the data.
Definition MooseArray.h:296

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

798{
799 unsigned int dim = elem->dim();
800
801 for (const auto & it : _fe[dim])
802 {
803 FEBase & fe = *it.second;
804 const FEType & fe_type = it.first;
805
806 _current_fe[fe_type] = &fe;
807
808 FEShapeData & fesd = *_fe_shape_data[fe_type];
809
810 fe.reinit(elem);
811
812 fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe.get_phi()));
813 fesd._grad_phi.shallowCopy(
814 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe.get_dphi()));
815 if (_need_second_derivative.count(fe_type))
816 fesd._second_phi.shallowCopy(
817 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe.get_d2phi()));
818 }
819 for (const auto & it : _vector_fe[dim])
820 {
821 FEVectorBase & fe = *it.second;
822 const FEType & fe_type = it.first;
823
824 _current_vector_fe[fe_type] = &fe;
825
826 VectorFEShapeData & fesd = *_vector_fe_shape_data[fe_type];
827
828 fe.reinit(elem);
829
830 fesd._phi.shallowCopy(const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe.get_phi()));
831 fesd._grad_phi.shallowCopy(
832 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe.get_dphi()));
833 if (_need_second_derivative.count(fe_type))
834 fesd._second_phi.shallowCopy(
835 const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe.get_d2phi()));
836 if (_need_curl.count(fe_type))
837 fesd._curl_phi.shallowCopy(
838 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe.get_curl_phi()));
839 if (_need_div.count(fe_type))
840 fesd._div_phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe.get_div_phi()));
841 }
842 if (!_unique_fe_helper.empty())
843 {
844 mooseAssert(dim < _unique_fe_helper.size(), "We should be in bounds here");
845 _unique_fe_helper[dim]->reinit(elem);
846 }
847
848 // During that last loop the helper objects will have been reinitialized as well
849 // We need to dig out the q_points and JxW from it.
851 const_cast<std::vector<Point> &>(_holder_fe_helper[dim]->get_xyz()));
852 _current_JxW.shallowCopy(const_cast<std::vector<Real> &>(_holder_fe_helper[dim]->get_JxW()));
853
855 {
856 auto n_qp = _current_qrule->n_points();
857 resizeADMappingObjects(n_qp, dim);
858 if (_displaced)
859 {
860 const auto & qw = _current_qrule->get_weights();
861 for (unsigned int qp = 0; qp != n_qp; qp++)
863 }
864 else
865 {
866 for (unsigned qp = 0; qp < n_qp; ++qp)
867 _ad_JxW[qp] = _current_JxW[qp];
868 if (_calculate_xyz)
869 for (unsigned qp = 0; qp < n_qp; ++qp)
871 }
872
873 for (const auto & it : _fe[dim])
874 {
875 FEBase & fe = *it.second;
876 auto fe_type = it.first;
877 auto num_shapes = FEInterface::n_shape_functions(fe_type, elem);
878 auto & grad_phi = _ad_grad_phi_data[fe_type];
879
880 grad_phi.resize(num_shapes);
881 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
882 grad_phi[i].resize(n_qp);
883
884 if (_displaced)
885 computeGradPhiAD(elem, n_qp, grad_phi, &fe);
886 else
887 {
888 const auto & regular_grad_phi = _fe_shape_data[fe_type]->_grad_phi;
889 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
890 for (unsigned qp = 0; qp < n_qp; ++qp)
891 grad_phi[i][qp] = regular_grad_phi[i][qp];
892 }
893 }
894 for (const auto & it : _vector_fe[dim])
895 {
896 FEVectorBase & fe = *it.second;
897 auto fe_type = it.first;
898 auto num_shapes = FEInterface::n_shape_functions(fe_type, elem);
899 auto & grad_phi = _ad_vector_grad_phi_data[fe_type];
900
901 grad_phi.resize(num_shapes);
902 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
903 grad_phi[i].resize(n_qp);
904
905 if (_displaced)
906 computeGradPhiAD(elem, n_qp, grad_phi, &fe);
907 else
908 {
909 const auto & regular_grad_phi = _vector_fe_shape_data[fe_type]->_grad_phi;
910 for (decltype(num_shapes) i = 0; i < num_shapes; ++i)
911 for (unsigned qp = 0; qp < n_qp; ++qp)
912 grad_phi[i][qp] = regular_grad_phi[i][qp];
913 }
914 }
915 }
916
917 auto n = numExtraElemIntegers();
918 for (auto i : make_range(n))
919 _extra_elem_ids[i] = _current_elem->get_extra_integer(i);
920 _extra_elem_ids[n] = _current_elem->subdomain_id();
921
922 if (_xfem != nullptr)
924}
void modifyWeightsDueToXFEM(const Elem *elem)
Update the integration weights for XFEM partial elements.
Definition Assembly.C:4552
std::map< FEType, FEVectorBase * > _current_vector_fe
The "volume" vector fe object that matches the current elem.
Definition Assembly.h:2378
std::map< FEType, FEBase * > _current_fe
The "volume" fe object that matches the current elem.
Definition Assembly.h:2369
unsigned int numExtraElemIntegers() const
Number of extra element integers Assembly tracked.
Definition Assembly.h:364

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

1306{
1307 unsigned int dim = elem->dim();
1308
1309 for (const auto & it : _fe_face[dim])
1310 {
1311 FEBase & fe_face = *it.second;
1312 const FEType & fe_type = it.first;
1313 FEShapeData & fesd = *_fe_shape_data_face[fe_type];
1314 fe_face.reinit(elem, side);
1315 _current_fe_face[fe_type] = &fe_face;
1316
1317 fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face.get_phi()));
1318 fesd._grad_phi.shallowCopy(
1319 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_dphi()));
1320 if (_need_second_derivative.count(fe_type))
1321 fesd._second_phi.shallowCopy(
1322 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_d2phi()));
1323 }
1324 for (const auto & it : _vector_fe_face[dim])
1325 {
1326 FEVectorBase & fe_face = *it.second;
1327 const FEType & fe_type = it.first;
1328
1329 _current_vector_fe_face[fe_type] = &fe_face;
1330
1331 VectorFEShapeData & fesd = *_vector_fe_shape_data_face[fe_type];
1332
1333 fe_face.reinit(elem, side);
1334
1335 fesd._phi.shallowCopy(
1336 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_phi()));
1337 fesd._grad_phi.shallowCopy(
1338 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face.get_dphi()));
1339 if (_need_second_derivative.count(fe_type))
1340 fesd._second_phi.shallowCopy(
1341 const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe_face.get_d2phi()));
1342 if (_need_curl.count(fe_type))
1343 fesd._curl_phi.shallowCopy(
1344 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face.get_curl_phi()));
1345 if (_need_face_div.count(fe_type))
1346 fesd._div_phi.shallowCopy(
1347 const_cast<std::vector<std::vector<Real>> &>(fe_face.get_div_phi()));
1348 }
1349 if (!_unique_fe_face_helper.empty())
1350 {
1351 mooseAssert(dim < _unique_fe_face_helper.size(), "We should be in bounds here");
1353 }
1354
1355 // During that last loop the helper objects will have been reinitialized as well
1356 // We need to dig out the q_points and JxW from it.
1358 const_cast<std::vector<Point> &>(_holder_fe_face_helper[dim]->get_xyz()));
1360 const_cast<std::vector<Real> &>(_holder_fe_face_helper[dim]->get_JxW()));
1362 const_cast<std::vector<Point> &>(_holder_fe_face_helper[dim]->get_normals()));
1363
1364 _mapped_normals.resize(_current_normals.size(), Eigen::Map<RealDIMValue>(nullptr));
1365 for (unsigned int i = 0; i < _current_normals.size(); i++)
1366 // Note: this does NOT do any allocation. It is "reconstructing" the object in place
1367 new (&_mapped_normals[i]) Eigen::Map<RealDIMValue>(const_cast<Real *>(&_current_normals[i](0)));
1368
1371 const_cast<std::vector<Real> &>(_holder_fe_face_helper[dim]->get_curvatures()));
1372
1374
1375 if (_xfem != nullptr)
1377
1378 auto n = numExtraElemIntegers();
1379 for (auto i : make_range(n))
1380 _extra_elem_ids[i] = _current_elem->get_extra_integer(i);
1381 _extra_elem_ids[n] = _current_elem->subdomain_id();
1382}
void modifyFaceWeightsDueToXFEM(const Elem *elem, unsigned int side=0)
Update the face integration weights for XFEM partial elements.
Definition Assembly.C:4572

Referenced by reinit(), and reinit().

◆ reinitFEFaceNeighbor()

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

Definition at line 1610 of file Assembly.C.

1611{
1612 unsigned int neighbor_dim = neighbor->dim();
1613
1614 // reinit neighbor face
1615 for (const auto & it : _fe_face_neighbor[neighbor_dim])
1616 {
1617 FEBase & fe_face_neighbor = *it.second;
1618 FEType fe_type = it.first;
1619 FEShapeData & fesd = *_fe_shape_data_face_neighbor[fe_type];
1620
1621 fe_face_neighbor.reinit(neighbor, &reference_points);
1622
1623 _current_fe_face_neighbor[fe_type] = &fe_face_neighbor;
1624
1625 fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_phi()));
1626 fesd._grad_phi.shallowCopy(
1627 const_cast<std::vector<std::vector<RealGradient>> &>(fe_face_neighbor.get_dphi()));
1628 if (_need_second_derivative_neighbor.count(fe_type))
1629 fesd._second_phi.shallowCopy(
1630 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_d2phi()));
1631 }
1632 for (const auto & it : _vector_fe_face_neighbor[neighbor_dim])
1633 {
1634 FEVectorBase & fe_face_neighbor = *it.second;
1635 const FEType & fe_type = it.first;
1636
1637 _current_vector_fe_face_neighbor[fe_type] = &fe_face_neighbor;
1638
1639 VectorFEShapeData & fesd = *_vector_fe_shape_data_face_neighbor[fe_type];
1640
1641 fe_face_neighbor.reinit(neighbor, &reference_points);
1642
1643 fesd._phi.shallowCopy(
1644 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face_neighbor.get_phi()));
1645 fesd._grad_phi.shallowCopy(
1646 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_dphi()));
1647 if (_need_second_derivative.count(fe_type))
1648 fesd._second_phi.shallowCopy(const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(
1649 fe_face_neighbor.get_d2phi()));
1650 if (_need_curl.count(fe_type))
1651 fesd._curl_phi.shallowCopy(const_cast<std::vector<std::vector<VectorValue<Real>>> &>(
1652 fe_face_neighbor.get_curl_phi()));
1653 if (_need_face_neighbor_div.count(fe_type))
1654 fesd._div_phi.shallowCopy(
1655 const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_div_phi()));
1656 }
1658 {
1659 mooseAssert(neighbor_dim < _unique_fe_face_neighbor_helper.size(),
1660 "We should be in bounds here");
1661 _unique_fe_face_neighbor_helper[neighbor_dim]->reinit(neighbor, &reference_points);
1662 }
1663
1665 const_cast<std::vector<Point> &>(_holder_fe_face_neighbor_helper[neighbor_dim]->get_xyz()));
1666}
std::map< FEType, FEVectorBase * > _current_vector_fe_face_neighbor
The "neighbor face" vector fe object that matches the current elem.
Definition Assembly.h:2384
std::map< FEType, FEBase * > _current_fe_face_neighbor
The "neighbor face" fe object that matches the current elem.
Definition Assembly.h:2375

Referenced by reinitElemAndNeighbor(), and reinitNeighborAtPhysical().

◆ reinitFENeighbor()

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

Definition at line 1669 of file Assembly.C.

1670{
1671 unsigned int neighbor_dim = neighbor->dim();
1672
1673 // reinit neighbor face
1674 for (const auto & it : _fe_neighbor[neighbor_dim])
1675 {
1676 FEBase & fe_neighbor = *it.second;
1677 FEType fe_type = it.first;
1678 FEShapeData & fesd = *_fe_shape_data_neighbor[fe_type];
1679
1680 fe_neighbor.reinit(neighbor, &reference_points);
1681
1682 _current_fe_neighbor[fe_type] = &fe_neighbor;
1683
1684 fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_neighbor.get_phi()));
1685 fesd._grad_phi.shallowCopy(
1686 const_cast<std::vector<std::vector<RealGradient>> &>(fe_neighbor.get_dphi()));
1687 if (_need_second_derivative_neighbor.count(fe_type))
1688 fesd._second_phi.shallowCopy(
1689 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_neighbor.get_d2phi()));
1690 }
1691 for (const auto & it : _vector_fe_neighbor[neighbor_dim])
1692 {
1693 FEVectorBase & fe_neighbor = *it.second;
1694 const FEType & fe_type = it.first;
1695
1696 _current_vector_fe_neighbor[fe_type] = &fe_neighbor;
1697
1698 VectorFEShapeData & fesd = *_vector_fe_shape_data_neighbor[fe_type];
1699
1700 fe_neighbor.reinit(neighbor, &reference_points);
1701
1702 fesd._phi.shallowCopy(
1703 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_neighbor.get_phi()));
1704 fesd._grad_phi.shallowCopy(
1705 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_neighbor.get_dphi()));
1706 if (_need_second_derivative.count(fe_type))
1707 fesd._second_phi.shallowCopy(
1708 const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(fe_neighbor.get_d2phi()));
1709 if (_need_curl.count(fe_type))
1710 fesd._curl_phi.shallowCopy(
1711 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_neighbor.get_curl_phi()));
1712 if (_need_neighbor_div.count(fe_type))
1713 fesd._div_phi.shallowCopy(
1714 const_cast<std::vector<std::vector<Real>> &>(fe_neighbor.get_div_phi()));
1715 }
1716 if (!_unique_fe_neighbor_helper.empty())
1717 {
1718 mooseAssert(neighbor_dim < _unique_fe_neighbor_helper.size(), "We should be in bounds here");
1719 _unique_fe_neighbor_helper[neighbor_dim]->reinit(neighbor, &reference_points);
1720 }
1721}
std::map< FEType, FEBase * > _current_fe_neighbor
The "neighbor" fe object that matches the current elem.
Definition Assembly.h:2373
std::map< FEType, FEVectorBase * > _current_vector_fe_neighbor
The "neighbor" vector fe object that matches the current elem.
Definition Assembly.h:2382

Referenced by reinitNeighborAtPhysical().

◆ reinitFVFace()

void Assembly::reinitFVFace ( const FaceInfo &  fi)

Definition at line 1894 of file Assembly.C.

1895{
1896 _current_elem = &fi.elem();
1900 mooseAssert(_current_subdomain_id == _current_elem->subdomain_id(),
1901 "current subdomain has been set incorrectly");
1902
1905
1909
1910 unsigned int dim = _current_elem->dim();
1911 if (_current_qrule_face != qrules(dim).fv_face.get())
1912 {
1913 setFaceQRule(qrules(dim).fv_face.get(), dim);
1914 // The order of the element that is used for initing here doesn't matter since this will just
1915 // be used for constant monomials (which only need a single integration point)
1916 if (dim == 3)
1917 _current_qrule_face->init(QUAD4, /* p_level = */ 0, /* simple_type_only = */ true);
1918 else
1919 _current_qrule_face->init(EDGE2, /* p_level = */ 0, /* simple_type_only = */ true);
1920 }
1921
1923
1924 mooseAssert(_current_qrule_face->n_points() == 1,
1925 "Our finite volume quadrature rule should always yield a single point");
1926
1927 // We've initialized the reference points. Now we need to compute the physical location of the
1928 // quadrature points. We do not do any FE initialization so we cannot simply copy over FE
1929 // results like we do in reinitFEFace. Instead we handle the computation of the physical
1930 // locations manually
1932 const auto & ref_points = _current_qrule_face->get_points();
1933 const auto & ref_point = ref_points[0];
1934 auto physical_point = FEMap::map(_current_side_elem->dim(), _current_side_elem, ref_point);
1935 _current_q_points_face[0] = physical_point;
1936
1938 {
1939 mooseAssert(_current_neighbor_subdomain_id == _current_neighbor_elem->subdomain_id(),
1940 "current neighbor subdomain has been set incorrectly");
1941 // Now handle the neighbor qrule/qpoints
1942 ArbitraryQuadrature * const neighbor_rule =
1944 // Here we are setting a reference point that is correct for the neighbor *side* element. It
1945 // would be wrong if this reference point is used for a volumetric FE reinit with the neighbor
1946 neighbor_rule->setPoints(ref_points);
1947 setNeighborQRule(neighbor_rule, _current_neighbor_elem->dim());
1949 _current_q_points_face_neighbor[0] = std::move(physical_point);
1950 }
1951}
Implements a fake quadrature rule where you can specify the locations (in the reference domain) of th...
void prepareNeighbor()
Definition Assembly.C:2847
void setNeighborQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for neighbor integration.
Definition Assembly.C:746
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
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:2439

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

2330{
2332
2333 const unsigned int elem_dim = elem->dim();
2334 mooseAssert(elem_dim < _mesh_dimension,
2335 "The lower dimensional element should truly be a lower dimensional element");
2336
2337 if (pts)
2338 {
2339 // Lower rule matches the face rule for the higher dimensional element
2340 ArbitraryQuadrature * lower_rule = qrules(elem_dim + 1).arbitrary_face.get();
2341
2342 // This also sets the quadrature weights to unity
2343 lower_rule->setPoints(*pts);
2344
2345 if (weights)
2346 lower_rule->setWeights(*weights);
2347
2348 setLowerQRule(lower_rule, elem_dim);
2349 }
2350 else if (_current_qrule_lower != qrules(elem_dim + 1).face.get())
2351 setLowerQRule(qrules(elem_dim + 1).face.get(), elem_dim);
2352
2353 for (const auto & it : _fe_lower[elem_dim])
2354 {
2355 FEBase & fe_lower = *it.second;
2356 FEType fe_type = it.first;
2357
2358 fe_lower.reinit(elem);
2359
2360 if (FEShapeData * fesd = _fe_shape_data_lower[fe_type].get())
2361 {
2362 fesd->_phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_lower.get_phi()));
2363 fesd->_grad_phi.shallowCopy(
2364 const_cast<std::vector<std::vector<RealGradient>> &>(fe_lower.get_dphi()));
2365 if (_need_second_derivative_neighbor.count(fe_type))
2366 fesd->_second_phi.shallowCopy(
2367 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_lower.get_d2phi()));
2368 }
2369
2370 // Dual shape functions need to be computed after primal basis being initialized
2371 if (FEShapeData * fesd = _fe_shape_data_dual_lower[fe_type].get())
2372 {
2373 fesd->_phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_lower.get_dual_phi()));
2374 fesd->_grad_phi.shallowCopy(
2375 const_cast<std::vector<std::vector<RealGradient>> &>(fe_lower.get_dual_dphi()));
2376 if (_need_second_derivative_neighbor.count(fe_type))
2377 fesd->_second_phi.shallowCopy(
2378 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_lower.get_dual_d2phi()));
2379 }
2380 }
2381 if (!_unique_fe_lower_helper.empty())
2382 {
2383 mooseAssert(elem_dim < _unique_fe_lower_helper.size(), "We should be in bounds here");
2384 _unique_fe_lower_helper[elem_dim]->reinit(elem);
2385 }
2386
2388 return;
2389
2390 if (pts && !weights)
2391 {
2392 // We only have dummy weights so the JxWs computed during our FE reinits are meaningless and
2393 // we cannot use them
2394
2396 // We are in a Cartesian coordinate system and we can just use the element volume method
2397 // which has fast computation for certain element types
2399 else
2400 // We manually compute the volume taking the curvilinear coordinate transformations into
2401 // account
2403 }
2404 else
2405 {
2406 // During that last loop the helper objects will have been reinitialized as well
2407 FEBase & helper_fe = *_holder_fe_lower_helper[elem_dim];
2408 const auto & physical_q_points = helper_fe.get_xyz();
2409 const auto & JxW = helper_fe.get_JxW();
2410 MooseArray<Real> coord;
2412 _current_qrule_lower, physical_q_points, coord, elem->subdomain_id());
2414 for (const auto qp : make_range(_current_qrule_lower->n_points()))
2415 _current_lower_d_elem_volume += JxW[qp] * coord[qp];
2416 }
2417}
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:727
Real elementVolume(const Elem *elem) const
On-demand computation of volume element accounting for RZ/RSpherical.
Definition Assembly.C:3792
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) 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:2437

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

2442{
2443 mooseAssert(elem->dim() == _mesh_dimension - 1,
2444 "You should be calling reinitMortarElem on a lower dimensional element");
2445
2446 _fe_msm->reinit(elem);
2447 _msm_elem = elem;
2448
2449 MooseArray<Point> array_q_points;
2450 array_q_points.shallowCopy(const_cast<std::vector<Point> &>(_fe_msm->get_xyz()));
2451 setCoordinateTransformation(_qrule_msm, array_q_points, _coord_msm, elem->subdomain_id());
2452}

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

1725{
1726 unsigned int neighbor_dim = neighbor->dim();
1727 mooseAssert(_current_neighbor_subdomain_id == neighbor->subdomain_id(),
1728 "Neighbor subdomain ID has not been correctly set");
1729
1730 ArbitraryQuadrature * neighbor_rule =
1731 qrules(neighbor_dim, _current_neighbor_subdomain_id).neighbor.get();
1732 neighbor_rule->setPoints(reference_points);
1733 setNeighborQRule(neighbor_rule, neighbor_dim);
1734
1736 mooseAssert(_current_neighbor_subdomain_id == _current_neighbor_elem->subdomain_id(),
1737 "current neighbor subdomain has been set incorrectly");
1738
1739 // Calculate the volume of the neighbor
1741 {
1742 unsigned int dim = neighbor->dim();
1744 QBase * qrule = qrules(dim).vol.get();
1745
1746 fe.attach_quadrature_rule(qrule);
1747 fe.reinit(neighbor);
1748
1749 const std::vector<Real> & JxW = fe.get_JxW();
1750 MooseArray<Point> q_points;
1751 q_points.shallowCopy(const_cast<std::vector<Point> &>(fe.get_xyz()));
1752
1754
1756 for (unsigned int qp = 0; qp < qrule->n_points(); qp++)
1758 }
1759
1760 auto n = numExtraElemIntegers();
1761 for (auto i : make_range(n))
1762 _neighbor_extra_elem_ids[i] = _current_neighbor_elem->get_extra_integer(i);
1764}

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

2493{
2494 unsigned int neighbor_dim = neighbor->dim();
2495 FEMap::inverse_map(neighbor_dim, neighbor, physical_points, _current_neighbor_ref_points);
2496
2499 // Save off the physical points
2500 _current_physical_points = physical_points;
2501}
void reinitFENeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Definition Assembly.C:1669

◆ 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 2455 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
2463 {
2464 mooseAssert(
2465 physical_points.size() == 1,
2466 "If reinitializing with more than one point, then I am dubious of your use case. Perhaps "
2467 "you are performing a DG type method and you are reinitializing using points from the "
2468 "element face. In such a case your neighbor JxW must have its index order 'match' the "
2469 "element JxW index order, e.g. imagining a vertical 1D face with two quadrature points, "
2470 "if "
2471 "index 0 for elem JxW corresponds to the 'top' quadrature point, then index 0 for "
2472 "neighbor "
2473 "JxW must also correspond to the 'top' quadrature point. And libMesh/MOOSE has no way to "
2474 "guarantee that with multiple quadrature points.");
2475
2477
2478 // With a single point our size-1 JxW should just be the element volume
2481 }
2482
2485
2486 // Save off the physical points
2487 _current_physical_points = physical_points;
2488}

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

2236{
2238
2239 unsigned int neighbor_dim = neighbor->dim();
2240
2241 ArbitraryQuadrature * neighbor_rule =
2242 qrules(neighbor_dim, neighbor->subdomain_id()).neighbor.get();
2243 neighbor_rule->setPoints(*pts);
2244
2245 // Attach this quadrature rule to all the _fe_face_neighbor FE objects. This
2246 // has to have garbage quadrature weights but that's ok because we never
2247 // actually use the JxW coming from these FE reinit'd objects, e.g. we use the
2248 // JxW coming from the element face reinit for DGKernels or we use the JxW
2249 // coming from reinit of the mortar segment element in the case of mortar
2250 setNeighborQRule(neighbor_rule, neighbor_dim);
2251
2252 // reinit neighbor face
2253 for (const auto & it : _fe_face_neighbor[neighbor_dim])
2254 {
2255 FEBase & fe_face_neighbor = *it.second;
2256 FEType fe_type = it.first;
2257 FEShapeData & fesd = *_fe_shape_data_face_neighbor[fe_type];
2258
2259 fe_face_neighbor.reinit(neighbor, neighbor_side, tolerance, pts, weights);
2260
2261 _current_fe_face_neighbor[fe_type] = &fe_face_neighbor;
2262
2263 fesd._phi.shallowCopy(const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_phi()));
2264 fesd._grad_phi.shallowCopy(
2265 const_cast<std::vector<std::vector<RealGradient>> &>(fe_face_neighbor.get_dphi()));
2266 if (_need_second_derivative_neighbor.count(fe_type))
2267 fesd._second_phi.shallowCopy(
2268 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_d2phi()));
2269 }
2270 for (const auto & it : _vector_fe_face_neighbor[neighbor_dim])
2271 {
2272 FEVectorBase & fe_face_neighbor = *it.second;
2273 const FEType & fe_type = it.first;
2274
2275 _current_vector_fe_face_neighbor[fe_type] = &fe_face_neighbor;
2276
2277 VectorFEShapeData & fesd = *_vector_fe_shape_data_face_neighbor[fe_type];
2278
2279 fe_face_neighbor.reinit(neighbor, neighbor_side, tolerance, pts, weights);
2280
2281 fesd._phi.shallowCopy(
2282 const_cast<std::vector<std::vector<VectorValue<Real>>> &>(fe_face_neighbor.get_phi()));
2283 fesd._grad_phi.shallowCopy(
2284 const_cast<std::vector<std::vector<TensorValue<Real>>> &>(fe_face_neighbor.get_dphi()));
2285 if (_need_second_derivative.count(fe_type))
2286 fesd._second_phi.shallowCopy(const_cast<std::vector<std::vector<TypeNTensor<3, Real>>> &>(
2287 fe_face_neighbor.get_d2phi()));
2288 if (_need_curl.count(fe_type))
2289 fesd._curl_phi.shallowCopy(const_cast<std::vector<std::vector<VectorValue<Real>>> &>(
2290 fe_face_neighbor.get_curl_phi()));
2291 if (_need_face_neighbor_div.count(fe_type))
2292 fesd._div_phi.shallowCopy(
2293 const_cast<std::vector<std::vector<Real>> &>(fe_face_neighbor.get_div_phi()));
2294 }
2296 {
2297 mooseAssert(neighbor_dim < _unique_fe_face_neighbor_helper.size(),
2298 "We should be in bounds here");
2299 _unique_fe_face_neighbor_helper[neighbor_dim]->reinit(
2300 neighbor, neighbor_side, tolerance, pts, weights);
2301 }
2302 // During that last loop the helper objects will have been reinitialized as well
2303 // We need to dig out the q_points from it
2305 const_cast<std::vector<Point> &>(_holder_fe_face_neighbor_helper[neighbor_dim]->get_xyz()));
2306}

Referenced by SubProblem::reinitNeighborFaceRef().

◆ reinitNeighborLowerDElem()

void Assembly::reinitNeighborLowerDElem ( const Elem *  elem)

reinitialize a neighboring lower dimensional element

Definition at line 2420 of file Assembly.C.

2421{
2422 mooseAssert(elem->dim() < _mesh_dimension,
2423 "You should be calling reinitNeighborLowerDElem on a lower dimensional element");
2424
2426
2428 return;
2429
2431 // We are in a Cartesian coordinate system and we can just use the element volume method which
2432 // has fast computation for certain element types
2434 else
2435 // We manually compute the volume taking the curvilinear coordinate transformations into
2436 // account
2438}

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

1107 {
1108 return _sub_Re[tag_id][var_num];
1109 }

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

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

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

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

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

1009{
1010 _ad_dxyzdxi_map.resize(n_qp);
1011 _ad_dxidx_map.resize(n_qp);
1012 _ad_dxidy_map.resize(n_qp); // 1D element may live in 2D ...
1013 _ad_dxidz_map.resize(n_qp); // ... or 3D
1014
1015 if (dim > 1)
1016 {
1017 _ad_dxyzdeta_map.resize(n_qp);
1018 _ad_detadx_map.resize(n_qp);
1019 _ad_detady_map.resize(n_qp);
1020 _ad_detadz_map.resize(n_qp);
1021
1022 if (dim > 2)
1023 {
1024 _ad_dxyzdzeta_map.resize(n_qp);
1025 _ad_dzetadx_map.resize(n_qp);
1026 _ad_dzetady_map.resize(n_qp);
1027 _ad_dzetadz_map.resize(n_qp);
1028 }
1029 }
1030
1031 _ad_jac.resize(n_qp);
1032 _ad_JxW.resize(n_qp);
1033 if (_calculate_xyz)
1034 _ad_q_points.resize(n_qp);
1035}

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

1839 {
1840 unsigned int pace = (_component_block_diagonal[ivar] ? 0 : nphi);
1841 for (unsigned int k = 0; k < v.size(); ++k, i += ntest, j += pace)
1842 ke(i, j) += v(k);
1843 }

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

1865 {
1866 if (ivar == jvar && _component_block_diagonal[ivar])
1867 {
1868 for (unsigned int k = 0; k < v.rows(); ++k, i += ntest)
1869 ke(i, j) += v(k, k);
1870 }
1871 else
1872 {
1873 const unsigned int saved_j = j;
1874 for (unsigned int k = 0; k < v.rows(); ++k, i += ntest)
1875 {
1876 j = saved_j;
1877 for (unsigned int l = 0; l < v.cols(); ++l, j += nphi)
1878 ke(i, j) += v(k, l);
1879 }
1880 }
1881 }

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

3829{
3830 for (unsigned int j = 0; j < v.size(); ++j, i += ntest)
3831 re[i] += v(j);
3832}

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

1812 {
1813 for (unsigned int j = 0; j < v.size(); ++j, i += ntest)
1814 re(i) += v(j);
1815 }

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

1306 {
1307 return _cm_sf_entry;
1308 }

Referenced by MortarScalarBase::computeScalarOffDiagJacobian().

◆ secondPhi() [1/6]

const VariablePhiSecond & Assembly::secondPhi ( ) const
inline

Definition at line 1320 of file Assembly.h.

1320{ return _second_phi; }
VariablePhiSecond _second_phi
Definition Assembly.h:2692

Referenced by copyShapes().

◆ secondPhi() [2/6]

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

Definition at line 1458 of file Assembly.h.

1458{ return _second_phi; }

◆ secondPhi() [3/6]

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

Definition at line 1321 of file Assembly.h.

1322 {
1323 return _second_phi;
1324 }

◆ secondPhi() [4/6]

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

Definition at line 1571 of file Assembly.h.

1571{ return _second_phi; }

◆ secondPhi() [5/6]

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

Definition at line 1493 of file Assembly.h.

1494 {
1495 return _vector_second_phi;
1496 }
VectorVariablePhiSecond _vector_second_phi
Definition Assembly.h:2709

◆ secondPhi() [6/6]

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

Definition at line 1372 of file Assembly.h.

1373 {
1374 return _vector_second_phi;
1375 }

◆ secondPhiFace() [1/5]

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

Definition at line 1462 of file Assembly.h.

1462{ return _second_phi_face; }
VariablePhiSecond _second_phi_face
Definition Assembly.h:2696

◆ secondPhiFace() [2/5]

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

Definition at line 1333 of file Assembly.h.

1334 {
1335 return _second_phi_face;
1336 }

Referenced by copyFaceShapes().

◆ secondPhiFace() [3/5]

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

Definition at line 1578 of file Assembly.h.

1579 {
1580 return _second_phi_face;
1581 }

◆ secondPhiFace() [4/5]

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

Definition at line 1514 of file Assembly.h.

1515 {
1517 }
VectorVariablePhiSecond _vector_second_phi_face
Definition Assembly.h:2715

◆ secondPhiFace() [5/5]

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

Definition at line 1393 of file Assembly.h.

1394 {
1396 }

◆ secondPhiFaceNeighbor() [1/5]

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

Definition at line 1482 of file Assembly.h.

1483 {
1485 }
VariablePhiSecond _second_phi_face_neighbor
Definition Assembly.h:2704

◆ secondPhiFaceNeighbor() [2/5]

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

Definition at line 1359 of file Assembly.h.

1360 {
1362 }

Referenced by copyNeighborShapes().

◆ secondPhiFaceNeighbor() [3/5]

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

Definition at line 1604 of file Assembly.h.

1605 {
1607 }

◆ secondPhiFaceNeighbor() [4/5]

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

Definition at line 1555 of file Assembly.h.

1556 {
1558 }
VectorVariablePhiSecond _vector_second_phi_face_neighbor
Definition Assembly.h:2727

◆ secondPhiFaceNeighbor() [5/5]

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

Definition at line 1440 of file Assembly.h.

1441 {
1443 }

◆ secondPhiNeighbor() [1/5]

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

Definition at line 1469 of file Assembly.h.

1470 {
1471 return _second_phi_neighbor;
1472 }
VariablePhiSecond _second_phi_neighbor
Definition Assembly.h:2700

◆ secondPhiNeighbor() [2/5]

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

Definition at line 1346 of file Assembly.h.

1347 {
1348 return _second_phi_neighbor;
1349 }

Referenced by copyNeighborShapes().

◆ secondPhiNeighbor() [3/5]

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

Definition at line 1591 of file Assembly.h.

1592 {
1593 return _second_phi_neighbor;
1594 }

◆ secondPhiNeighbor() [4/5]

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

Definition at line 1535 of file Assembly.h.

1536 {
1538 }
VectorVariablePhiSecond _vector_second_phi_neighbor
Definition Assembly.h:2721

◆ secondPhiNeighbor() [5/5]

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

Definition at line 1416 of file Assembly.h.

1417 {
1419 }

◆ setCachedJacobian()

void Assembly::setCachedJacobian ( GlobalDataKey  )

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

Definition at line 4511 of file Assembly.C.

4512{
4513 for (MooseIndex(_cached_jacobian_rows) tag = 0; tag < _cached_jacobian_rows.size(); tag++)
4514 if (_sys.hasMatrix(tag))
4515 {
4516 // First zero the rows (including the diagonals) to prepare for
4517 // setting the cached values.
4519
4520 // TODO: Use SparseMatrix::set_values() for efficiency
4521 for (MooseIndex(_cached_jacobian_values) i = 0; i < _cached_jacobian_values[tag].size(); ++i)
4523 _cached_jacobian_cols[tag][i],
4524 _cached_jacobian_values[tag][i]);
4525 }
4526
4528}
void clearCachedJacobian()
Clear any currently cached jacobians.
Definition Assembly.C:4541
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() [1/2]

template<typename Points , typename Coords >
void Assembly::setCoordinateTransformation ( const libMesh::QBase *  qrule,
const Points &  q_points,
Coords &  coord,
SubdomainID  sub_id 
)
private

◆ setCoordinateTransformation() [2/2]

template<typename Points , typename Coords >
void Assembly::setCoordinateTransformation ( const QBase *  qrule,
const Points &  q_points,
Coords &  coord,
SubdomainID  sub_id 
)

Definition at line 1768 of file Assembly.C.

1772{
1773
1774 mooseAssert(qrule, "The quadrature rule is null in Assembly::setCoordinateTransformation");
1775 auto n_points = qrule->n_points();
1776 mooseAssert(n_points == q_points.size(),
1777 "The number of points in the quadrature rule doesn't match the number of passed-in "
1778 "points in Assembly::setCoordinateTransformation");
1779
1780 // Make sure to honor the name of this method and set the _coord_type member because users may
1781 // make use of the const Moose::CoordinateSystem & coordTransformation() { return _coord_type; }
1782 // API. MaterialBase for example uses it
1784
1785 coord.resize(n_points);
1786 for (unsigned int qp = 0; qp < n_points; qp++)
1787 coordTransformFactor(_subproblem, sub_id, q_points[qp], coord[qp]);
1788}

◆ setCurrentBoundaryID()

void Assembly::setCurrentBoundaryID ( BoundaryID  i)
inline

set the current boundary ID

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

3215{
3216 _current_lower_d_elem = lower_d_elem;
3217}

Referenced by SubProblem::setCurrentLowerDElem().

◆ setCurrentNeighborSubdomainID()

void Assembly::setCurrentNeighborSubdomainID ( SubdomainID  i)
inline

set the current subdomain ID

Definition at line 493 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 1967 of file Assembly.C.

1968{
1969 const auto elem_dimension = elem->dim();
1971 auto rule = qruleFace(elem, side);
1972 if (_current_qrule_face != rule)
1973 setFaceQRule(rule, elem_dimension);
1974}

◆ 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

Referenced by reinit(), 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 727 of file Assembly.C.

728{
729 // The lower-dimensional quadrature rule matches the face quadrature rule
730 setFaceQRule(qrule, dim);
731
732 _current_qrule_lower = qrule;
733
734 for (auto & it : _fe_lower[dim])
735 it.second->attach_quadrature_rule(qrule);
736 for (auto & it : _vector_fe_lower[dim])
737 it.second->attach_quadrature_rule(qrule);
738 if (!_unique_fe_lower_helper.empty())
739 {
740 mooseAssert(dim < _unique_fe_lower_helper.size(), "We should not be indexing out of bounds");
741 _unique_fe_lower_helper[dim]->attach_quadrature_rule(qrule);
742 }
743}

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

773{
774 if (order != _qrule_msm->get_order())
775 {
776 // If custom mortar qrule has not yet been specified
778 {
780 const unsigned int dim = _qrule_msm->get_dim();
781 const QuadratureType type = _qrule_msm->type();
782 delete _qrule_msm;
783
784 _qrule_msm = QBase::build(type, dim, order).release();
785 _fe_msm->attach_quadrature_rule(_qrule_msm);
786 }
787 else
788 mooseError("Mortar quadrature_order: ",
789 order,
790 " does not match previously specified quadrature_order: ",
792 ". Quadrature_order (when specified) must match for all mortar constraints.");
793 }
794}
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 746 of file Assembly.C.

747{
749
750 for (auto & it : _fe_face_neighbor[dim])
751 it.second->attach_quadrature_rule(qrule);
752 for (auto & it : _vector_fe_face_neighbor[dim])
753 it.second->attach_quadrature_rule(qrule);
755 {
756 mooseAssert(dim < _unique_fe_face_neighbor_helper.size(),
757 "We should not be indexing out of bounds");
758 _unique_fe_face_neighbor_helper[dim]->attach_quadrature_rule(qrule);
759 }
760}

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

3569{
3570 auto & tag_Re = _sub_Re[vector_tag._type_id];
3571 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3572 for (const auto & var : vars)
3573 setResidualBlock(residual, tag_Re[var->number()], var->dofIndices(), var->arrayScalingFactor());
3574}
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:3324

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

3328{
3329 if (dof_indices.size() > 0)
3330 {
3331 std::vector<dof_id_type> di(dof_indices);
3332 _tmp_Re = res_block;
3333 processLocalResidual(_tmp_Re, di, scaling_factor);
3334 residual.insert(_tmp_Re, di);
3335 }
3336}
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 3577 of file Assembly.C.

3580{
3581 auto & tag_Rn = _sub_Rn[vector_tag._type_id];
3582 const std::vector<MooseVariableFEBase *> & vars = _sys.getVariables(_tid);
3583 for (const auto & var : vars)
3585 residual, tag_Rn[var->number()], var->dofIndicesNeighbor(), var->arrayScalingFactor());
3586}

◆ setVolumeQRule() [1/2]

void Assembly::setVolumeQRule ( const Elem *  elem)

Set the volumetric quadrature rule based on the provided element.

Definition at line 1846 of file Assembly.C.

1847{
1848 unsigned int elem_dimension = elem->dim();
1849 _current_qrule_volume = qrules(elem_dimension).vol.get();
1850 // Make sure the qrule is the right one
1852 setVolumeQRule(_current_qrule_volume, elem_dimension);
1853}

◆ 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

Referenced by reinit(), reinit(), and setVolumeQRule().

◆ setXFEM()

void Assembly::setXFEM ( std::shared_ptr< XFEMInterface >  xfem)
inline

Set the pointer to the XFEM controller object.

Definition at line 1792 of file Assembly.h.

1792{ _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 437 of file Assembly.h.

437{ return _current_side; }

Referenced by computeADFace(), computeFaceMap(), modifyFaceWeightsDueToXFEM(), qruleArbitraryFace(), qruleFace(), qruleFaceHelper(), reinit(), 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 449 of file Assembly.h.

449{ 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 455 of file Assembly.h.

455{ 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 359 of file Assembly.h.

359{ 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 232 of file Assembly.h.

232{ 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 239 of file Assembly.h.

240 {
241 return qrules(dim, block).vol.get();
242 }

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

319{ 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 326 of file Assembly.h.

327 {
328 return qrules(dim, block).face.get();
329 }

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

518{ return _current_qrule_neighbor; }

◆ zeroCachedJacobian()

void Assembly::zeroCachedJacobian ( GlobalDataKey  )

Zero out previously-cached Jacobian rows.

Definition at line 4531 of file Assembly.C.

4532{
4533 for (MooseIndex(_cached_jacobian_rows) tag = 0; tag < _cached_jacobian_rows.size(); tag++)
4534 if (_sys.hasMatrix(tag))
4536
4538}

Member Data Documentation

◆ _ad_coord

MooseArray<ADReal> Assembly::_ad_coord
private

The AD version of the current coordinate transformation coefficients.

Definition at line 2413 of file Assembly.h.

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

◆ _ad_curvatures

MooseArray<ADReal> Assembly::_ad_curvatures
protected

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

Referenced by computeFaceMap().

◆ _ad_d2xyzdxi2_map

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

Definition at line 2817 of file Assembly.h.

Referenced by computeFaceMap().

◆ _ad_d2xyzdxideta_map

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

Definition at line 2818 of file Assembly.h.

Referenced by computeFaceMap().

◆ _ad_detadx_map

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

Definition at line 2826 of file Assembly.h.

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

◆ _ad_detady_map

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

Definition at line 2827 of file Assembly.h.

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

◆ _ad_detadz_map

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

Definition at line 2828 of file Assembly.h.

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

◆ _ad_dxidx_map

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

Definition at line 2823 of file Assembly.h.

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

◆ _ad_dxidy_map

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

Definition at line 2824 of file Assembly.h.

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

◆ _ad_dxidz_map

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

Definition at line 2825 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 2815 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 2814 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 2816 of file Assembly.h.

Referenced by computeSinglePointMapAD(), and resizeADMappingObjects().

◆ _ad_dzetadx_map

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

Definition at line 2829 of file Assembly.h.

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

◆ _ad_dzetady_map

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

Definition at line 2830 of file Assembly.h.

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

◆ _ad_dzetadz_map

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

Definition at line 2831 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 2767 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 2769 of file Assembly.h.

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

◆ _ad_jac

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

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

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

◆ _ad_normals

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

Definition at line 2834 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 2768 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 2771 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 2363 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 2797 of file Assembly.h.

Referenced by addCachedJacobian(), cacheJacobian(), cacheJacobianBlock(), cacheJacobianBlockNonzero(), clearCachedJacobian(), 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 2795 of file Assembly.h.

Referenced by addCachedJacobian(), cacheJacobian(), cacheJacobianBlock(), cacheJacobianBlockNonzero(), clearCachedJacobian(), 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 2788 of file Assembly.h.

Referenced by addCachedResidualDirectly(), addCachedResiduals(), cacheResidual(), cacheResidual(), cacheResidualLower(), cacheResidualNeighbor(), cacheResidualNodes(), and clearCachedResiduals().

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

Referenced by addCachedResidualDirectly(), addCachedResiduals(), cacheResidual(), cacheResidual(), cacheResidualLower(), cacheResidualNeighbor(), cacheResidualNodes(), and clearCachedResiduals().

◆ _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 2850 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 2845 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 2305 of file Assembly.h.

Referenced by addJacobianBlock(), addJacobianBlockNonlocal(), cacheJacobianBlock(), and cacheJacobianBlockNonzero().

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

Referenced by addJacobian(), cacheJacobian(), and fieldScalarCouplingEntries().

◆ _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 2326 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 2322 of file Assembly.h.

Referenced by addJacobian(), addJacobianOffDiagScalar(), cacheJacobian(), 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 2324 of file Assembly.h.

Referenced by addJacobianScalar().

◆ _column_indices

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

Definition at line 2885 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 2868 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 2312 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 2309 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 2315 of file Assembly.h.

Referenced by computingResidualAndJacobian().

◆ _coord

MooseArray<Real> Assembly::_coord
private

The current coordinate transformation coefficients.

Definition at line 2411 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 2561 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 2558 of file Assembly.h.

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

◆ _coord_type

Moose::CoordinateSystemType Assembly::_coord_type
private

The coordinate system.

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

Referenced by currentBoundaryID(), and setCurrentBoundaryID().

◆ _current_elem

const Elem* Assembly::_current_elem
protected

◆ _current_elem_volume

Real Assembly::_current_elem_volume
protected

Volume of the current element.

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

Referenced by computeCurrentElemVolume(), reinit(), 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 2369 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 2371 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 2507 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 2375 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 2395 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 2373 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 2407 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 2515 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 2556 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 2618 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 2624 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 2597 of file Assembly.h.

Referenced by neighbor(), reinit(), 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 2620 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 2628 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 2611 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 2891 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 2601 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 2603 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 2866 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 2599 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 2607 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 2609 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 2517 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 2633 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 2405 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 2552 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 2511 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 2397 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 2401 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 2403 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 2579 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 2550 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 2399 of file Assembly.h.

Referenced by setVolumeQRule().

◆ _current_side

unsigned int Assembly::_current_side
protected

The current side of the selected element (valid only when working with sides)

Definition at line 2591 of file Assembly.h.

Referenced by reinit(), 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 2593 of file Assembly.h.

Referenced by reinit(), 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 2864 of file Assembly.h.

Referenced by reinit(), reinit(), and reinitFVFace().

◆ _current_side_volume

Real Assembly::_current_side_volume
protected

Volume of the current side element.

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

Referenced by computeCurrentFaceVolume(), reinit(), reinit(), and reinitFVFace().

◆ _current_subdomain_id

SubdomainID Assembly::_current_subdomain_id
protected

The current subdomain ID.

Definition at line 2585 of file Assembly.h.

Referenced by currentSubdomainID(), qrules(), reinit(), 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 2521 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 2378 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 2380 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 2384 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 2382 of file Assembly.h.

Referenced by reinitFENeighbor().

◆ _curvatures

MooseArray<Real> Assembly::_curvatures
protected

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

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

◆ _displaced

const bool Assembly::_displaced
private

Definition at line 2302 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 2880 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 2875 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 2524 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 2389 of file Assembly.h.

Referenced by Assembly(), buildFE(), getFE(), preparePRefinement(), reinitFE(), and ~Assembly().

◆ _fe_face

std::map<unsigned int, std::map<FEType, FEBase *> > Assembly::_fe_face
mutableprivate

types of finite elements

Definition at line 2501 of file Assembly.h.

Referenced by Assembly(), buildFaceFE(), computeADFace(), getFEFace(), preparePRefinement(), reinitElemFaceRef(), reinitFEFace(), 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 2543 of file Assembly.h.

Referenced by Assembly(), buildLowerDDualFE(), buildLowerDFE(), preparePRefinement(), 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 2568 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 2533 of file Assembly.h.

Referenced by Assembly(), buildNeighborFE(), getFENeighbor(), preparePRefinement(), 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 2752 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 2756 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 2691 of file Assembly.h.

Referenced by gradPhi(), gradPhi(), gradPhi(), and gradPhi().

◆ _grad_phi_face

VariablePhiGradient Assembly::_grad_phi_face
protected

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

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

◆ _grad_phi_neighbor

VariablePhiGradient Assembly::_grad_phi_neighbor
protected

Definition at line 2699 of file Assembly.h.

Referenced by gradPhiNeighbor(), gradPhiNeighbor(), and gradPhiNeighbor().

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

Referenced by adCurvatures(), Assembly(), buildFaceFE(), buildFaceNeighborFE(), buildFE(), buildLowerDFE(), buildNeighborFE(), and preparePRefinement().

◆ _holder_fe_face_helper

std::map<unsigned int, FEBase *> Assembly::_holder_fe_face_helper
private

Each dimension's helper objects.

Definition at line 2505 of file Assembly.h.

Referenced by Assembly(), computeADFace(), computeFaceMap(), helpersRequestData(), preparePRefinement(), 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 2393 of file Assembly.h.

Referenced by Assembly(), helpersRequestData(), preparePRefinement(), 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 2547 of file Assembly.h.

Referenced by Assembly(), helpersRequestData(), preparePRefinement(), 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 2539 of file Assembly.h.

Referenced by Assembly(), helpersRequestData(), preparePRefinement(), 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 2528 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 2333 of file Assembly.h.

Referenced by addJacobianLowerD(), addJacobianNeighborLowerD(), cacheJacobianMortar(), 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 2331 of file Assembly.h.

Referenced by addJacobianNeighbor(), addJacobianNeighborLowerD(), cacheJacobianNeighbor(), 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 2566 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 2519 of file Assembly.h.

Referenced by mappedNormals(), and reinitFEFace().

◆ _max_cached_jacobians

unsigned int Assembly::_max_cached_jacobians
protected

Definition at line 2799 of file Assembly.h.

Referenced by addCachedJacobian().

◆ _max_cached_residuals

unsigned int Assembly::_max_cached_residuals
protected

Definition at line 2790 of file Assembly.h.

Referenced by clearCachedResiduals().

◆ _mesh

MooseMesh& Assembly::_mesh
private

Definition at line 2339 of file Assembly.h.

Referenced by Assembly().

◆ _mesh_dimension

unsigned int Assembly::_mesh_dimension
private

◆ _msm_elem

const Elem* Assembly::_msm_elem = nullptr
protected

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

Referenced by activateDual(), and needDual().

◆ _need_face_div

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

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

Referenced by lowerDElemVolume(), and reinitLowerDElem().

◆ _need_neighbor_div

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

Definition at line 2857 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 2605 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 2626 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 2526 of file Assembly.h.

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

◆ _nonlocal_cm

const libMesh::CouplingMatrix& Assembly::_nonlocal_cm
private

Definition at line 2306 of file Assembly.h.

Referenced by initNonlocalCoupling().

◆ _phi

VariablePhiValue Assembly::_phi
protected

Definition at line 2690 of file Assembly.h.

Referenced by phi(), phi(), phi(), and phi().

◆ _phi_face

VariablePhiValue Assembly::_phi_face
protected

Definition at line 2694 of file Assembly.h.

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

◆ _phi_face_neighbor

VariablePhiValue Assembly::_phi_face_neighbor
protected

Definition at line 2702 of file Assembly.h.

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

◆ _phi_neighbor

VariablePhiValue Assembly::_phi_neighbor
protected

Definition at line 2698 of file Assembly.h.

Referenced by phiNeighbor(), phiNeighbor(), and phiNeighbor().

◆ _prepared_for_p_refinement

bool Assembly::_prepared_for_p_refinement
protected

Whether helper FEs have been prepared for p-refinement.

Definition at line 2888 of file Assembly.h.

Referenced by preparePRefinement().

◆ _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 2573 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 2446 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 2782 of file Assembly.h.

Referenced by clearCachedResiduals().

◆ _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 2885 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 2861 of file Assembly.h.

Referenced by hasScalingVector().

◆ _second_phi

VariablePhiSecond Assembly::_second_phi
protected

Definition at line 2692 of file Assembly.h.

Referenced by secondPhi(), secondPhi(), secondPhi(), and secondPhi().

◆ _second_phi_face

VariablePhiSecond Assembly::_second_phi_face
protected

Definition at line 2696 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 2700 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 2666 of file Assembly.h.

Referenced by jacobianBlock(), jacobianBlockMortar(), and jacobianBlockNeighbor().

◆ _sub_Keg

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

Definition at line 2667 of file Assembly.h.

Referenced by jacobianBlockNonlocal().

◆ _sub_Kel

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

dsecondary/dlower (or delement/dlower)

Definition at line 2682 of file Assembly.h.

Referenced by 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 2670 of file Assembly.h.

Referenced by 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 2678 of file Assembly.h.

Referenced by jacobianBlockMortar().

◆ _sub_Kll

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

dlower/dlower

Definition at line 2676 of file Assembly.h.

Referenced by jacobianBlockMortar().

◆ _sub_Kln

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

dlower/dprimary (or dlower/dneighbor)

Definition at line 2680 of file Assembly.h.

Referenced by 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 2672 of file Assembly.h.

Referenced by 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 2684 of file Assembly.h.

Referenced by 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 2674 of file Assembly.h.

Referenced by 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 2650 of file Assembly.h.

Referenced by addResidualLower(), cacheResidualLower(), 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 2808 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 2811 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 2687 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 2653 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 2357 of file Assembly.h.

Referenced by preparePRefinement(), reinitElemFaceRef(), and reinitFEFace().

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

Referenced by preparePRefinement(), and reinitFE().

◆ _unique_fe_lower_helper

std::vector<std::unique_ptr<FEBase> > Assembly::_unique_fe_lower_helper
private

Definition at line 2360 of file Assembly.h.

Referenced by preparePRefinement(), reinitLowerDElem(), and setLowerQRule().

◆ _unique_fe_neighbor_helper

std::vector<std::unique_ptr<FEBase> > Assembly::_unique_fe_neighbor_helper
private

Definition at line 2359 of file Assembly.h.

Referenced by preparePRefinement(), and reinitFENeighbor().

◆ _user_added_fe_face_neighbor_of_helper_type

bool Assembly::_user_added_fe_face_neighbor_of_helper_type
mutableprivate

Definition at line 2350 of file Assembly.h.

Referenced by buildFaceNeighborFE(), and preparePRefinement().

◆ _user_added_fe_face_of_helper_type

bool Assembly::_user_added_fe_face_of_helper_type
mutableprivate

Definition at line 2349 of file Assembly.h.

Referenced by buildFaceFE(), and preparePRefinement().

◆ _user_added_fe_lower_of_helper_type

bool Assembly::_user_added_fe_lower_of_helper_type
mutableprivate

Definition at line 2352 of file Assembly.h.

Referenced by buildLowerDFE(), and preparePRefinement().

◆ _user_added_fe_neighbor_of_helper_type

bool Assembly::_user_added_fe_neighbor_of_helper_type
mutableprivate

Definition at line 2351 of file Assembly.h.

Referenced by buildNeighborFE(), and preparePRefinement().

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

Referenced by buildFE(), and preparePRefinement().

◆ _vector_curl_phi

VectorVariablePhiCurl Assembly::_vector_curl_phi
protected

Definition at line 2710 of file Assembly.h.

Referenced by curlPhi(), and curlPhi().

◆ _vector_curl_phi_face

VectorVariablePhiCurl Assembly::_vector_curl_phi_face
protected

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

Referenced by curlPhiFaceNeighbor(), and curlPhiFaceNeighbor().

◆ _vector_curl_phi_neighbor

VectorVariablePhiCurl Assembly::_vector_curl_phi_neighbor
protected

Definition at line 2722 of file Assembly.h.

Referenced by curlPhiNeighbor(), and curlPhiNeighbor().

◆ _vector_div_phi

VectorVariablePhiDivergence Assembly::_vector_div_phi
protected

Definition at line 2711 of file Assembly.h.

Referenced by divPhi(), and divPhi().

◆ _vector_div_phi_face

VectorVariablePhiDivergence Assembly::_vector_div_phi_face
protected

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

Referenced by divPhiFaceNeighbor(), and divPhiFaceNeighbor().

◆ _vector_div_phi_neighbor

VectorVariablePhiDivergence Assembly::_vector_div_phi_neighbor
protected

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

Referenced by buildVectorFE(), getVectorFE(), reinitFE(), 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 2503 of file Assembly.h.

Referenced by buildVectorFaceFE(), computeADFace(), getVectorFEFace(), reinitElemFaceRef(), reinitFEFace(), 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 2545 of file Assembly.h.

Referenced by buildVectorDualLowerDFE(), buildVectorLowerDFE(), 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 2760 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 2765 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 2761 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 2764 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 2762 of file Assembly.h.

Referenced by buildVectorNeighborFE(), and reinitFENeighbor().

◆ _vector_grad_phi

VectorVariablePhiGradient Assembly::_vector_grad_phi
protected

Definition at line 2708 of file Assembly.h.

Referenced by gradPhi(), and gradPhi().

◆ _vector_grad_phi_face

VectorVariablePhiGradient Assembly::_vector_grad_phi_face
protected

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

Referenced by gradPhiFaceNeighbor(), and gradPhiFaceNeighbor().

◆ _vector_grad_phi_neighbor

VectorVariablePhiGradient Assembly::_vector_grad_phi_neighbor
protected

Definition at line 2720 of file Assembly.h.

Referenced by gradPhiNeighbor(), and gradPhiNeighbor().

◆ _vector_phi

VectorVariablePhiValue Assembly::_vector_phi
protected

Definition at line 2707 of file Assembly.h.

Referenced by phi(), and phi().

◆ _vector_phi_face

VectorVariablePhiValue Assembly::_vector_phi_face
protected

Definition at line 2713 of file Assembly.h.

Referenced by phiFace(), and phiFace().

◆ _vector_phi_face_neighbor

VectorVariablePhiValue Assembly::_vector_phi_face_neighbor
protected

Definition at line 2725 of file Assembly.h.

Referenced by phiFaceNeighbor(), and phiFaceNeighbor().

◆ _vector_phi_neighbor

VectorVariablePhiValue Assembly::_vector_phi_neighbor
protected

Definition at line 2719 of file Assembly.h.

Referenced by phiNeighbor(), and phiNeighbor().

◆ _vector_second_phi

VectorVariablePhiSecond Assembly::_vector_second_phi
protected

Definition at line 2709 of file Assembly.h.

Referenced by secondPhi(), and secondPhi().

◆ _vector_second_phi_face

VectorVariablePhiSecond Assembly::_vector_second_phi_face
protected

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

Referenced by secondPhiFaceNeighbor(), and secondPhiFaceNeighbor().

◆ _vector_second_phi_neighbor

VectorVariablePhiSecond Assembly::_vector_second_phi_neighbor
protected

Definition at line 2721 of file Assembly.h.

Referenced by secondPhiNeighbor(), and secondPhiNeighbor().

◆ _xfem

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

The XFEM controller.

Definition at line 2366 of file Assembly.h.

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


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