19#include "libmesh/dense_vector.h"
20#include "libmesh/enum_quadrature_type.h"
21#include "libmesh/fe_type.h"
22#include "libmesh/point.h"
23#include "libmesh/fe_base.h"
24#include "libmesh/numeric_vector.h"
25#include "libmesh/elem_side_builder.h"
27#include <unordered_map>
67#ifdef MOOSE_KOKKOS_ENABLED
91template <
typename P,
typename C>
96 SubdomainID neighbor_sub_id = libMesh::Elem::invalid_subdomain_id);
98template <
typename P,
typename C>
103 SubdomainID neighbor_sub_id = libMesh::Elem::invalid_subdomain_id);
119 template <
typename T>
122 const T *
const * ptr = &inref;
222#ifdef MOOSE_KOKKOS_ENABLED
243#ifdef MOOSE_KOKKOS_ENABLED
330#ifdef MOOSE_KOKKOS_ENABLED
380 mooseAssert(
id <
_extra_elem_ids.size(),
"An invalid extra element integer id");
407 template <
bool is_ad>
566 bool allow_negative_qweights =
true);
667 unsigned int elem_side,
669 const std::vector<Point> *
const pts =
nullptr,
670 const std::vector<Real> *
const weights =
nullptr);
677 unsigned int neighbor_side,
679 const std::vector<Point> *
const pts,
680 const std::vector<Real> *
const weights =
nullptr);
685 void reinitDual(
const Elem *
elem,
const std::vector<Point> & pts,
const std::vector<Real> &
JxW);
691 const std::vector<Point> *
const pts =
nullptr,
692 const std::vector<Real> *
const weights =
nullptr);
729 void reinit(
const Elem *
elem,
const std::vector<Point> & reference_points);
744 void reinit(
const Elem *
elem,
unsigned int side,
const std::vector<Point> & reference_points);
762 unsigned int neighbor_side,
763 const std::vector<Point> * neighbor_reference_points =
nullptr);
769 unsigned int neighbor_side,
770 const std::vector<Point> & physical_points);
819 void prepareBlock(
unsigned int ivar,
unsigned jvar,
const std::vector<dof_id_type> & dof_indices);
822 const std::vector<dof_id_type> & idof_indices,
823 const std::vector<dof_id_type> & jdof_indices);
827 template <
typename T>
831 template <
typename T>
835 template <
typename T>
875 void addResidual(GlobalDataKey,
const std::vector<VectorTag> & vector_tags);
885 void addResidualLower(GlobalDataKey,
const std::vector<VectorTag> & vector_tags);
891 void addResidualScalar(GlobalDataKey,
const std::vector<VectorTag> & vector_tags);
897 void cacheResidual(GlobalDataKey,
const std::vector<VectorTag> & tags);
941 void setResidual(NumericVector<Number> & residual, GlobalDataKey,
const VectorTag & vector_tag);
984 std::vector<dof_id_type> & dof_indices,
996 std::vector<dof_id_type> & dof_indices,
998 const std::set<TagID> & tags);
1007 const std::vector<dof_id_type> & idof_indices,
1008 const std::vector<dof_id_type> & jdof_indices,
1019 const std::vector<dof_id_type> & idof_indices,
1020 const std::vector<dof_id_type> & jdof_indices,
1022 const std::set<TagID> & tags);
1059 std::vector<dof_id_type> & dof_indices,
1060 std::vector<dof_id_type> & neighbor_dof_indices,
1072 std::vector<dof_id_type> & dof_indices,
1073 std::vector<dof_id_type> & neighbor_dof_indices,
1075 const std::set<TagID> & tags);
1117 return _sub_Re[tag_id][var_num];
1126 return _sub_Rn[tag_id][var_num];
1135 return _sub_Rl[tag_id][var_num];
1152 DenseMatrix<Number> &
1184 const std::vector<dof_id_type> & dof_index,
1200 cacheJacobian(numeric_index_type i, numeric_index_type j, Real value, LocalDataKey,
TagID tag);
1214 numeric_index_type j,
1217 const std::set<TagID> & tags);
1227 const std::vector<dof_id_type> & idof_indices,
1228 const std::vector<dof_id_type> & jdof_indices,
1229 Real scaling_factor,
1231 const std::set<TagID> & tags);
1242 template <
typename Res
iduals,
typename Indices>
1244 const Indices & row_indices,
1245 Real scaling_factor,
1247 const std::set<TagID> & vector_tags);
1256 template <
typename Res
iduals,
typename Indices>
1258 const Indices & row_indices,
1259 Real scaling_factor,
1261 const std::set<TagID> & matrix_tags);
1273 template <
typename Res
iduals,
typename Indices>
1275 const Indices & row_indices,
1276 Real scaling_factor,
1278 const std::set<TagID> & vector_tags);
1287 template <
typename Res
iduals,
typename Indices>
1289 const Indices & row_indices,
1290 Real scaling_factor,
1292 const std::set<TagID> & matrix_tags);
1294 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
couplingEntries()
1298 const std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
1303 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
1308 const std::vector<std::pair<MooseVariableFieldBase *, MooseVariableScalar *>> &
1313 const std::vector<std::pair<MooseVariableScalar *, MooseVariableFieldBase *>> &
1321 template <
typename T>
1618 template <
typename OutputType>
1625 template <
typename OutputType>
1632 template <
typename OutputType>
1638 template <
typename OutputType>
1646 template <
typename OutputType>
1649 template <
typename OutputType>
1652 template <
typename OutputType>
1655 template <
typename OutputType>
1659 template <
typename OutputType>
1666 template <
typename OutputType>
1673 template <
typename OutputType>
1679 template <
typename OutputType>
1687 template <
typename OutputType>
1694 template <
typename OutputType>
1701 template <
typename OutputType>
1709 template <
typename OutputType>
1716 template <
typename OutputType>
1724 template <
typename OutputType>
1733 template <
typename OutputType>
1741 template <
typename OutputType>
1749 template <
typename OutputType>
1757 template <
typename OutputType>
1765 template <
typename OutputType>
1772 template <
typename OutputType>
1779 template <
typename OutputType>
1787 template <
typename OutputType>
1807 std::vector<std::pair<unsigned int, unsigned short>> && disp_numbers_and_directions);
1820 const RealEigenVector & v)
const
1822 for (
unsigned int j = 0; j < v.size(); ++j, i += ntest)
1829 const ADRealEigenVector & v)
const;
1847 const RealEigenVector & v)
const
1850 for (
unsigned int k = 0; k < v.size(); ++k, i += ntest, j += pace)
1873 const RealEigenMatrix & v)
const
1877 for (
unsigned int k = 0; k < v.rows(); ++k, i += ntest)
1878 ke(i, j) += v(k, k);
1882 const unsigned int saved_j = j;
1883 for (
unsigned int k = 0; k < v.rows(); ++k, i += ntest)
1886 for (
unsigned int l = 0; l < v.cols(); ++l, j += nphi)
1887 ke(i, j) += v(k, l);
1894 unsigned int rows = ke.m();
1895 unsigned int cols = ke.n();
1896 DenseVector<Real> diag(rows);
1897 for (
unsigned int i = 0; i < rows; i++)
1899 diag(i) = ke(i, i % cols);
1911 fe.attach_quadrature_rule(qrule);
1923 fe.attach_quadrature_rule(qrule);
1972 void havePRefinement(
const std::unordered_set<FEFamily> & disable_p_refinement_for_families);
2001 template <
typename Po
ints,
typename Coords>
2003 const Points & q_points,
2032 template <
typename OutputType>
2091 void cacheResidual(dof_id_type dof, Real value,
const std::set<TagID> & tags);
2098 std::vector<dof_id_type> & dof_indices,
2099 const std::vector<Real> & scaling_factor);
2105 DenseVector<Number> & res_block,
2106 const std::vector<dof_id_type> & dof_indices,
2107 const std::vector<Real> & scaling_factor);
2113 std::vector<dof_id_type> & cached_residual_rows,
2114 DenseVector<Number> & res_block,
2115 const std::vector<dof_id_type> & dof_indices,
2116 const std::vector<Real> & scaling_factor);
2122 DenseVector<Number> & res_block,
2123 const std::vector<dof_id_type> & dof_indices,
2124 const std::vector<Real> & scaling_factor);
2130 DenseMatrix<Number> & jac_block,
2133 const std::vector<dof_id_type> & idof_indices,
2134 const std::vector<dof_id_type> & jdof_indices);
2142 const std::vector<dof_id_type> & idof_indices,
2143 const std::vector<dof_id_type> & jdof_indices,
2152 const std::vector<dof_id_type> & idof_indices,
2153 const std::vector<dof_id_type> & jdof_indices,
2332 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>>
_cm_ff_entry;
2334 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableScalar *>>
_cm_fs_entry;
2336 std::vector<std::pair<MooseVariableScalar *, MooseVariableFieldBase *>>
_cm_sf_entry;
2338 std::vector<std::pair<MooseVariableScalar *, MooseVariableScalar *>>
_cm_ss_entry;
2403 mutable std::map<unsigned int, std::map<FEType, FEBase *>>
_fe;
2405 mutable std::map<unsigned int, std::map<FEType, FEVectorBase *>>
_vector_fe;
2443 std::unique_ptr<libMesh::QBase>
vol;
2445 std::unique_ptr<libMesh::QBase>
face;
2460 std::unordered_map<SubdomainID, std::vector<QRules>>
_qrules;
2471 template <
typename T>
2481 auto neighbor_block =
neighbor->subdomain_id();
2482 if (neighbor_block ==
elem->subdomain_id())
2485 auto q_neighbor = rule_fn(
qrules(
dim, neighbor_block));
2486 if (q->get_order() > q_neighbor->get_order())
2501 "missing quadrature rules for specified block");
2503 "quadrature rules not sized property for dimension");
2507 "missing quadrature rules for specified block");
2508 mooseAssert(
_qrules[block].size() >
dim,
"quadrature rules not sized property for dimension");
2515 mutable std::map<unsigned int, std::map<FEType, FEBase *>>
_fe_face;
2557 mutable std::map<unsigned int, std::map<FEType, FEBase *>>
_fe_lower;
2661 std::vector<std::vector<DenseVector<Number>>>
_sub_Re;
2662 std::vector<std::vector<DenseVector<Number>>>
_sub_Rn;
2664 std::vector<std::vector<DenseVector<Number>>>
_sub_Rl;
2680 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kee;
2681 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Keg;
2684 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Ken;
2686 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kne;
2688 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Knn;
2690 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kll;
2692 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kle;
2694 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kln;
2696 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kel;
2698 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Knl;
2784 mutable std::map<FEType, ADTemplateVariablePhiGradient<RealVectorValue>>
2908template <
typename OutputType>
2916template <
typename OutputType>
2924template <
typename OutputType>
2932template <
typename OutputType>
2942Assembly::feADGradPhi<RealVectorValue>(
FEType type)
const
2949Assembly::feADGradPhiFace<RealVectorValue>(
FEType type)
const
2956Assembly::fePhi<VectorValue<Real>>(
FEType type)
const;
2960Assembly::feGradPhi<VectorValue<Real>>(
FEType type)
const;
2964Assembly::feSecondPhi<VectorValue<Real>>(
FEType type)
const;
2968Assembly::fePhiLower<VectorValue<Real>>(
FEType type)
const;
2972Assembly::feDualPhiLower<VectorValue<Real>>(
FEType type)
const;
2976Assembly::feGradPhiLower<VectorValue<Real>>(
FEType type)
const;
2980Assembly::feGradDualPhiLower<VectorValue<Real>>(
FEType type)
const;
2984Assembly::fePhiFace<VectorValue<Real>>(
FEType type)
const;
2988Assembly::feGradPhiFace<VectorValue<Real>>(
FEType type)
const;
2992Assembly::feSecondPhiFace<VectorValue<Real>>(
FEType type)
const;
2996Assembly::fePhiNeighbor<VectorValue<Real>>(
FEType type)
const;
3000Assembly::feGradPhiNeighbor<VectorValue<Real>>(
FEType type)
const;
3004Assembly::feSecondPhiNeighbor<VectorValue<Real>>(
FEType type)
const;
3008Assembly::fePhiFaceNeighbor<VectorValue<Real>>(
FEType type)
const;
3012Assembly::feGradPhiFaceNeighbor<VectorValue<Real>>(
FEType type)
const;
3016Assembly::feSecondPhiFaceNeighbor<VectorValue<Real>>(
FEType type)
const;
3020Assembly::feCurlPhi<VectorValue<Real>>(
FEType type)
const;
3024Assembly::feCurlPhiFace<VectorValue<Real>>(
FEType type)
const;
3028Assembly::feCurlPhiNeighbor<VectorValue<Real>>(
FEType type)
const;
3032Assembly::feCurlPhiFaceNeighbor<VectorValue<Real>>(
FEType type)
const;
3036Assembly::feDivPhi<VectorValue<Real>>(
FEType type)
const;
3040Assembly::feDivPhiFace<VectorValue<Real>>(
FEType type)
const;
3044Assembly::feDivPhiNeighbor<VectorValue<Real>>(
FEType type)
const;
3048Assembly::feDivPhiFaceNeighbor<VectorValue<Real>>(
FEType type)
const;
3057template <
typename Res
iduals,
typename Indices>
3060 const Indices & input_row_indices,
3061 const Real scaling_factor,
3063 const std::set<TagID> & vector_tags)
3065 mooseAssert(residuals.size() == input_row_indices.size(),
3066 "The number of residuals should match the number of dof indices");
3067 mooseAssert(residuals.size() >= 1,
"Why you calling me with no residuals?");
3072 if (residuals.size() == 1)
3077 residuals, input_row_indices, scaling_factor,
LocalDataKey{}, vector_tags);
3082 _row_indices.assign(input_row_indices.begin(), input_row_indices.end());
3097template <
typename Res
iduals,
typename Indices>
3100 const Indices & row_indices,
3101 const Real scaling_factor,
3103 const std::set<TagID> & vector_tags)
3105 mooseAssert(residuals.size() == row_indices.size(),
3106 "The number of residuals should match the number of dof indices");
3107 mooseAssert(residuals.size() >= 1,
"Why you calling me with no residuals?");
3110 for (
const auto i : index_range(row_indices))
3115template <
typename Res
iduals,
typename Indices>
3118 const Indices & input_row_indices,
3119 const Real scaling_factor,
3121 const std::set<TagID> & matrix_tags)
3126 if (residuals.size() == 1)
3131 residuals, input_row_indices, scaling_factor,
LocalDataKey{}, matrix_tags);
3135 const auto & compare_dofs = residuals[0].derivatives().nude_indices();
3137 auto compare_dofs_set = std::set<dof_id_type>(compare_dofs.begin(), compare_dofs.end());
3139 for (
const auto i : make_range(
decltype(residuals.size())(1), residuals.size()))
3141 const auto & residual = residuals[i];
3142 auto current_dofs_set = std::set<dof_id_type>(residual.derivatives().nude_indices().begin(),
3143 residual.derivatives().nude_indices().end());
3144 mooseAssert(compare_dofs_set == current_dofs_set,
3145 "We're going to see whether the dof sets are the same. IIRC the degree of freedom "
3146 "dependence (as indicated by the dof index set held by the ADReal) has to be the "
3147 "same for every residual passed to this method otherwise constrain_element_matrix "
3159 _row_indices.assign(input_row_indices.begin(), input_row_indices.end());
3164 const auto & sparse_derivatives = residuals[i].derivatives();
3177template <
typename Res
iduals,
typename Indices>
3180 const Indices & row_indices,
3181 const Real scaling_factor,
3183 const std::set<TagID> & matrix_tags)
3185 mooseAssert(residuals.size() == row_indices.size(),
3186 "The number of residuals should match the number of dof indices");
3187 mooseAssert(residuals.size() >= 1,
"Why you calling me with no residuals?");
3192 for (
const auto i : index_range(row_indices))
3194 const auto row_index = row_indices[i];
3196 const auto & sparse_derivatives = residuals[i].derivatives();
3197 const auto & column_indices = sparse_derivatives.nude_indices();
3198 const auto & raw_derivatives = sparse_derivatives.nude_data();
3200 for (std::size_t j = 0; j < column_indices.size(); ++j)
3202 row_index, column_indices[j], raw_derivatives[j] * scaling_factor, {}, matrix_tags);
3222 std::vector<std::pair<unsigned int, unsigned short>> && disp_numbers_and_directions)
MooseVariableFE< Real > MooseVariable
MooseVariableFE< RealEigenVector > ArrayMooseVariable
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 ...
MooseVariableFE< RealVectorValue > VectorMooseVariable
boundary_id_type BoundaryID
OutputTools< RealVectorValue >::VariablePhiValue VectorVariablePhiValue
OutputTools< Real >::VariablePhiValue VariablePhiValue
OutputTools< RealVectorValue >::VariablePhiCurl VectorVariablePhiCurl
OutputTools< Real >::VariablePhiCurl VariablePhiCurl
OutputTools< Real >::VariablePhiGradient VariablePhiGradient
typename OutputTools< typename Moose::ADType< T >::type >::VariablePhiGradient ADTemplateVariablePhiGradient
OutputTools< RealVectorValue >::VariablePhiSecond VectorVariablePhiSecond
OutputTools< RealVectorValue >::VariablePhiDivergence VectorVariablePhiDivergence
OutputTools< Real >::VariablePhiSecond VariablePhiSecond
OutputTools< Real >::VariablePhiDivergence VariablePhiDivergence
OutputTools< RealVectorValue >::VariablePhiGradient VectorVariablePhiGradient
Implements a fake quadrature rule where you can specify the locations (in the reference domain) of th...
VariablePhiCurl _curl_phi
VariablePhiGradient _grad_phi
VariablePhiSecond _second_phi
VariablePhiDivergence _div_phi
Key structure for APIs manipulating global vectors/matrices.
GlobalDataKey(const GlobalDataKey &)
Key structure for APIs adding/caching local element residuals/Jacobians.
LocalDataKey(const LocalDataKey &)
VectorVariablePhiValue _phi
VectorVariablePhiGradient _grad_phi
VectorVariablePhiSecond _second_phi
VectorVariablePhiCurl _curl_phi
VectorVariablePhiDivergence _div_phi
Keeps track of stuff related to assembling.
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.
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kll
dlower/dlower
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...
void cacheJacobianNonlocal(GlobalDataKey)
Takes the values that are currently in _sub_Keg and appends them to the cached values.
const VectorVariablePhiValue & phiFace(const MooseVariableField< RealVectorValue > &) const
std::map< unsigned int, FEBase * > _holder_fe_lower_helper
helper object for transforming coordinates for lower dimensional element quadrature points
const VariablePhiSecond & secondPhiNeighbor(const MooseVariableField< Real > &) const
std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > _cm_sf_entry
Entries in the coupling matrix for scalar variables vs field variables.
void addJacobian(GlobalDataKey)
Adds all local Jacobian to the global Jacobian matrices.
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.
const Real & neighborLowerDElemVolume() const
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 k...
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...
void assignDisplacements(std::vector< std::pair< unsigned int, unsigned short > > &&disp_numbers_and_directions)
Assign the displacement numbers and directions.
const FEBase *const & getFENeighbor(FEType type, unsigned int dim) const
Get a reference to a pointer that will contain the current 'neighbor' FE.
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data
Shape function values, gradients, second derivatives for each vector FE type.
const bool & _computing_jacobian
Whether we are currently computing the Jacobian.
MooseArray< Point > _current_q_points
The current list of quadrature points.
VariablePhiGradient & gradPhiFace(const MooseVariableField< Real > &)
const std::vector< Real > * _JxW_msm
A JxW for working on mortar segement elements.
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kee
std::set< FEType > _need_face_neighbor_div
VectorVariablePhiCurl & curlPhiFace(const MooseVariableField< RealVectorValue > &)
void prepareLowerD()
Prepare the Jacobians and residuals for a lower dimensional element.
void modifyWeightsDueToXFEM(const Elem *elem)
Update the integration weights for XFEM partial elements.
VectorVariablePhiDivergence & divPhi(const MooseVariableField< RealVectorValue > &)
void reinitFVFace(const FaceInfo &fi)
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiFace(FEType type) const
VectorVariablePhiValue & phiFace(const MooseVariableField< RealVectorValue > &)
std::vector< std::vector< DenseVector< Number > > > _sub_Re
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 ...
void reinitFE(const Elem *elem)
Just an internal helper function to reinit the volume FE objects.
DenseMatrix< Number > _element_matrix
A working matrix to avoid repeated heap allocations when caching Jacobians that must have libMesh-lev...
VectorVariablePhiValue _vector_phi_face_neighbor
const VariablePhiValue & phiFace() const
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & nonlocalCouplingEntries()
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 ...
VariablePhiSecond & secondPhiNeighbor(const MooseVariableField< Real > &)
MooseArray< Real > _curvatures
std::vector< std::unique_ptr< FEBase > > _unique_fe_lower_helper
MooseArray< Real > _coord_neighbor
The current coordinate transformation coefficients.
const OutputTools< OutputType >::VariablePhiValue & fePhiFaceNeighbor(FEType type) const
VariablePhiGradient & gradPhiFaceNeighbor(const MooseVariableField< Real > &)
void reinitFEFaceNeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
void reinitFENeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
VectorVariablePhiDivergence & divPhiNeighbor(const MooseVariableField< RealVectorValue > &)
void prepareVariableNonlocal(MooseVariableFieldBase *var)
const OutputTools< OutputType >::VariablePhiDivergence & feDivPhi(FEType type) const
void prepareBlock(unsigned int ivar, unsigned jvar, const std::vector< dof_id_type > &dof_indices)
VectorVariablePhiValue & phiFaceNeighbor(const MooseVariableField< RealVectorValue > &)
std::vector< ADReal > _ad_dzetady_map
VariablePhiGradient _grad_phi
libMesh::QBase * _current_qrule_face
quadrature rule used on faces
const OutputTools< OutputType >::VariablePhiDivergence & feDivPhiNeighbor(FEType type) const
bool _block_diagonal_matrix
Will be true if our preconditioning matrix is a block-diagonal matrix. Which means that we can take s...
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_neighbor_used
Flag that indicates if the jacobian block for neighbor was used.
void cacheResidualsWithoutConstraints(const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &vector_tags)
Process the supplied residual values.
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.
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 ...
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhiFaceNeighbor(FEType type) const
VectorVariablePhiCurl _vector_curl_phi
MooseArray< VectorValue< ADReal > > _ad_q_points
bool _current_side_volume_computed
Boolean to indicate whether current element side volumes has been computed.
MooseArray< Real > _current_JxW_face
The current transformed jacobian weights on a face.
const FEType _helper_type
The finite element type of the FE helper classes.
Real _current_elem_volume
Volume of the current element.
const MooseArray< Point > & normals() const
Returns the array of normals for quadrature points on a current side.
VectorVariablePhiSecond _vector_second_phi_face_neighbor
const VectorVariablePhiDivergence & divPhi(const MooseVariableField< RealVectorValue > &) const
void cacheJacobianCoupledVarPair(const MooseVariableBase &ivar, const MooseVariableBase &jvar)
Caches element matrix for ivar rows and jvar columns.
const VariablePhiValue & phi(const MooseVariableField< Real > &) const
bool _building_helpers
Whether we are currently building the FE classes for the helpers.
void addJacobianScalar(GlobalDataKey)
Add Jacobians for pairs of scalar variables into the global Jacobian matrices.
void setVolumeQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for volume integration.
void computeCurrentNeighborVolume()
const VariablePhiGradient & gradPhi() const
FEBase * _current_fe_face_helper
helper object for transforming coordinates
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.
FEBase * _current_fe_helper
The current helper object for transforming coordinates.
MooseArray< Point > _current_physical_points
This will be filled up with the physical points passed into reinitAtPhysical() if it is called....
VectorVariablePhiGradient & gradPhiNeighbor(const MooseVariableField< RealVectorValue > &)
void addJacobianLowerD(GlobalDataKey)
Add portions of the Jacobian of LowerLower, LowerSecondary, and SecondaryLower for boundary condition...
libMesh::QBase * _current_qrule
The current current quadrature rule being used (could be either volumetric or arbitrary - for dirac k...
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 > & qPoints() const
Returns the reference to the quadrature points.
const bool & _computing_residual
Whether we are currently computing the residual.
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...
MooseArray< VectorValue< ADReal > > _ad_normals
VectorVariablePhiSecond & secondPhiFaceNeighbor(const MooseVariableField< RealVectorValue > &)
libMesh::QBase * writeableQRule(unsigned int dim, SubdomainID block, InternalDataKey)
Returns the pointer to the quadrature of specified block and dimension.
const std::vector< std::pair< MooseVariableScalar *, MooseVariableFieldBase * > > & scalarFieldCouplingEntries() const
void addJacobianOffDiagScalar(unsigned int ivar, GlobalDataKey)
Add Jacobians for a scalar variables with all other field variables into the global Jacobian matrices...
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 modifyArbitraryWeights(const std::vector< Real > &weights)
Modify the weights when using the arbitrary quadrature rule.
void computeCurrentFaceVolume()
VectorVariablePhiCurl & curlPhi(const MooseVariableField< RealVectorValue > &)
const VariablePhiGradient & gradPhiFace() const
bool _need_JxW_neighbor
Flag to indicate that JxW_neighbor is needed.
VectorVariablePhiSecond & secondPhi(const MooseVariableField< RealVectorValue > &)
const BoundaryID & currentBoundaryID() const
Return the current boundary ID.
const OutputTools< OutputType >::VariablePhiSecond & feSecondPhi(FEType type) const
VectorVariablePhiSecond _vector_second_phi
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiLower(FEType type) const
bool _user_added_fe_of_helper_type
Whether user code requested a FEType the same as our _helper_type.
VectorVariablePhiCurl & curlPhiNeighbor(const MooseVariableField< RealVectorValue > &)
void setVolumeQRule(const Elem *elem)
Set the volumetric quadrature rule based on the provided element.
const FEVectorBase *const & getVectorFENeighbor(FEType type, unsigned int dim) const
GetVector a reference to a pointer that will contain the current 'neighbor' FE.
VectorVariablePhiCurl _vector_curl_phi_neighbor
void setCurrentNeighborSubdomainID(SubdomainID i)
set the current subdomain ID
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe
Each dimension's actual vector fe objects indexed on type.
const MooseArray< ADPoint > & adQPointsFace() const
MooseArray< ADReal > _ad_JxW_face
const VariablePhiValue & phi() const
void buildFaceNeighborFE(FEType type) const
Build FEs for a neighbor face with a type.
const VectorVariablePhiGradient & gradPhi(const MooseVariableField< RealVectorValue > &) const
SubdomainID _current_subdomain_id
The current subdomain ID.
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face
const libMesh::CouplingMatrix & _nonlocal_cm
VectorVariablePhiDivergence _vector_div_phi_neighbor
Real _current_neighbor_volume
Volume of the current neighbor.
const FEVectorBase *const & getVectorFE(FEType type, unsigned int dim) const
Get a reference to a pointer that will contain the current volume FEVector.
const MooseArray< Moose::GenericType< Point, is_ad > > & genericQPoints() const
bool _need_neighbor_lower_d_elem_volume
Whether we need to compute the neighboring lower dimensional element volume.
DenseVector< Real > getJacobianDiagonal(const DenseMatrix< Number > &ke)
Moose::CoordinateSystemType _coord_type
The coordinate system.
VectorVariablePhiGradient _vector_grad_phi_face_neighbor
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 p...
std::map< FEType, FEBase * > _current_fe_neighbor
The "neighbor" fe object that matches the current elem.
const OutputTools< OutputType >::VariablePhiValue & fePhiLower(FEType type) const
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_lower
FE objects for lower dimensional elements.
std::vector< std::vector< DenseVector< Number > > > _sub_Rn
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...
VariablePhiValue _phi_face_neighbor
const dof_id_type & extraElemID(unsigned int id) const
Returns an integer ID of the current element given the index associated with the integer.
void buildVectorNeighborFE(FEType type) const
Build Vector FEs for a neighbor with a type.
std::vector< Eigen::Map< RealDIMValue > > _mapped_normals
Mapped normals.
const libMesh::DofMap & _dof_map
DOF map.
const VariablePhiSecond & secondPhiFace(const MooseVariableField< Real > &) const
void setFaceQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for face integration.
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face_neighbor
VariablePhiValue & phiFaceNeighbor(const MooseVariableField< Real > &)
const OutputTools< OutputType >::VariablePhiValue & feDualPhiLower(FEType type) const
std::set< FEType > _need_second_derivative_neighbor
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Ken
jacobian contributions from the element and neighbor <Tag, ivar, jvar>
std::vector< VectorValue< ADReal > > _ad_dxyzdxi_map
AD quantities.
VariablePhiSecond _second_phi_face
const MooseArray< ADReal > & adCurvatures() const
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_neighbor_helper
std::vector< Point > _temp_reference_points
Temporary work data for reinitAtPhysical()
std::vector< std::pair< MooseVariableScalar *, MooseVariableScalar * > > _cm_ss_entry
Entries in the coupling matrix for scalar variables.
const Elem * _current_lower_d_elem
The current lower dimensional element.
unsigned int _current_side
The current side of the selected element (valid only when working with sides)
const bool & _computing_residual_and_jacobian
Whether we are currently computing the residual and Jacobian.
void buildNeighborFE(FEType type) const
Build FEs for a neighbor with a type.
ArbitraryQuadrature * qruleArbitraryFace(const Elem *elem, unsigned int side)
const OutputTools< OutputType >::VariablePhiGradient & feGradDualPhiLower(FEType type) const
std::unordered_map< SubdomainID, std::vector< QRules > > _qrules
Holds quadrature rules for each dimension.
void setCoordinateTransformation(const libMesh::QBase *qrule, const Points &q_points, Coords &coord, SubdomainID sub_id)
void reinitAtPhysical(const Elem *elem, const std::vector< Point > &physical_points)
Reinitialize the assembly data at specific physical point in the given element.
std::map< FEType, FEVectorBase * > _current_vector_fe
The "volume" vector fe object that matches the current elem.
std::vector< VectorValue< ADReal > > _ad_dxyzdzeta_map
VariablePhiValue & phiFace(const MooseVariableField< RealEigenVector > &)
VariablePhiSecond & secondPhi(const MooseVariableField< RealEigenVector > &)
VariablePhiGradient _grad_phi_neighbor
bool computingResidualAndJacobian() const
libMesh::QBase *const & writeableQRuleNeighbor()
Returns the reference to the current quadrature being used on a current neighbor.
std::unique_ptr< FEBase > _fe_msm
A FE object for working on mortar segement elements.
std::vector< ADReal > _ad_detadx_map
void addJacobianNonlocal(GlobalDataKey)
Adds non-local Jacobian to the global Jacobian matrices.
const VariablePhiGradient & gradPhiNeighbor(const MooseVariableField< Real > &) const
const unsigned int & neighborSide() const
Returns the current neighboring side.
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...
bool computingResidual() const
VectorVariablePhiGradient _vector_grad_phi_neighbor
const MooseArray< Point > & physicalPoints() const
The current points in physical space where we have reinited through reinitAtPhysical()
const Elem *const & elem() const
Return the current element.
std::map< FEType, FEVectorBase * > _current_vector_fe_face_neighbor
The "neighbor face" vector fe object that matches the current elem.
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.
const Node * _current_neighbor_node
The current neighboring node we are working with.
std::vector< ADReal > _ad_dxidx_map
DenseMatrix< Number > _tmp_Ke
auxiliary matrix for scaling jacobians (optimization to avoid expensive construction/destruction)
void buildFE(FEType type) const
Build FEs with a type.
const OutputTools< OutputType >::VariablePhiSecond & feSecondPhiFaceNeighbor(FEType type) const
void cacheResiduals(const Residuals &residuals, const Indices &row_indices, Real scaling_factor, LocalDataKey, const std::set< TagID > &vector_tags)
Process the supplied residual values.
void setXFEM(std::shared_ptr< XFEMInterface > xfem)
Set the pointer to the XFEM controller object.
VectorVariablePhiDivergence & divPhiFace(const MooseVariableField< RealVectorValue > &)
const Elem *const & neighborLowerDElem() const
Return the neighboring lower dimensional element.
const Elem * _current_neighbor_side_elem
The current side element of the ncurrent neighbor element.
std::vector< ADReal > _ad_dxidz_map
void cacheResidualLower(GlobalDataKey, const std::vector< VectorTag > &tags)
Takes the values that are currently in _sub_Rl and appends them to the cached values.
VariablePhiGradient _grad_phi_face_neighbor
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_neighbor
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kle
dlower/dsecondary (or dlower/delement)
MooseArray< ADReal > _ad_JxW
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 copyFaceShapes(MooseVariableField< T > &v)
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...
DenseVector< Number > _tmp_Re
auxiliary vector for scaling residuals (optimization to avoid expensive construction/destruction)
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & couplingEntries()
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.
const VariablePhiValue & phiFace(const MooseVariableField< Real > &) const
bool _calculate_ad_coord
Whether to calculate coord with AD.
const libMesh::CouplingMatrix * _cm
Coupling matrices.
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.
VectorVariablePhiCurl _vector_curl_phi_face
VariablePhiGradient & gradPhi(const MooseVariableField< Real > &)
MooseArray< Point > _current_q_points_face
The current quadrature points on a face.
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_neighbor
void cacheJacobianNeighbor(GlobalDataKey)
Takes the values that are currently in the neighbor Dense Matrices and appends them to the cached val...
const libMesh::QBase *const & qRuleMortar() const
Returns a reference to the quadrature rule for the mortar segments.
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 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 setNeighborQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for neighbor integration.
void helpersRequestData()
request phi, dphi, xyz, JxW, etc.
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knn
jacobian contributions from the neighbor <Tag, ivar, jvar>
const MooseArray< ADPoint > & adQPoints() const
libMesh::QBase *const & writeableQRule()
Returns the reference to the current quadrature being used.
void clearCachedQRules()
Set the cached quadrature rules to nullptr.
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kln
dlower/dprimary (or dlower/dneighbor)
VariablePhiSecond & secondPhi(const MooseVariableField< Real > &)
libMesh::QBase * _current_qrule_neighbor
quadrature rule used on neighbors
void setLowerQRule(libMesh::QBase *qrule, unsigned int dim)
Set the qrule to be used for lower dimensional integration.
void buildLowerDFE(FEType type) const
Build FEs for a lower dimensional element with a type.
const VectorVariablePhiCurl & curlPhiNeighbor(const MooseVariableField< RealVectorValue > &) const
VariablePhiGradient _grad_phi_face
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 std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & couplingEntries() const
const std::vector< Point > & qPointsMortar() const
Returns the reference to the mortar segment element quadrature points.
std::map< unsigned int, const std::vector< Point > * > _holder_normals
Holds pointers to the dimension's normal vectors.
const OutputTools< OutputType >::VariablePhiValue & fePhiNeighbor(FEType type) const
libMesh::QBase *const & writeableQRuleFace()
Returns the reference to the current quadrature being used on a current face.
void setCurrentSubdomainID(SubdomainID i)
set the current subdomain ID
Real elementVolume(const Elem *elem) const
On-demand computation of volume element accounting for RZ/RSpherical.
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_neighbor
types of finite elements
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 VariablePhiGradient & gradPhiFaceNeighbor(const MooseVariableField< Real > &) const
const VariablePhiGradient & gradPhiFace(const MooseVariableField< Real > &) const
const OutputTools< OutputType >::VariablePhiGradient & feGradPhi(FEType type) const
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhiFace(FEType type) const
const unsigned int & side() const
Returns the current side.
std::vector< VectorValue< ADReal > > _ad_d2xyzdeta2_map
BoundaryID _current_boundary_id
The current boundary ID.
MooseArray< std::vector< Point > > _current_tangents
The current tangent vectors at the quadrature points.
std::vector< std::unique_ptr< FEBase > > _unique_fe_face_helper
std::map< FEType, FEBase * > _current_fe
The "volume" fe object that matches the current elem.
VectorVariablePhiGradient & gradPhiFace(const MooseVariableField< RealVectorValue > &)
const ADTemplateVariablePhiGradient< OutputType > & feADGradPhiFace(FEType type) const
const std::vector< Eigen::Map< RealDIMValue > > & mappedNormals() const
const VectorVariablePhiCurl & curlPhi(const MooseVariableField< RealVectorValue > &) const
void prepareBlockNonlocal(unsigned int ivar, unsigned jvar, const std::vector< dof_id_type > &idof_indices, const std::vector< dof_id_type > &jdof_indices)
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_lower
VectorVariablePhiGradient & gradPhi(const MooseVariableField< RealVectorValue > &)
const Real & lowerDElemVolume() const
VariablePhiSecond _second_phi
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...
std::vector< VectorValue< ADReal > > _ad_d2xyzdxideta_map
void reinit(const Elem *elem, unsigned int side)
Reinitialize the assembly data on an side of an element.
QRules & qrules(unsigned int dim, SubdomainID block)
This is a helper function for accessing quadrature rules for a particular dimensionality of element.
const MooseArray< ADPoint > & adNormals() const
std::vector< std::pair< unsigned int, unsigned short > > _disp_numbers_and_directions
Container of displacement numbers and directions.
T * qruleFaceHelper(const Elem *elem, unsigned int side, std::function< T *(QRules &)> rule_fn)
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face
types of vector finite elements
VectorVariablePhiValue _vector_phi
void buildVectorLowerDFE(FEType type) const
Build Vector FEs for a lower dimensional element with a type.
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.
const OutputTools< OutputType >::VariablePhiSecond & feSecondPhiNeighbor(FEType type) const
std::map< unsigned int, std::map< FEType, FEBase * > > _fe
Each dimension's actual fe objects indexed on type.
std::set< FEType > _need_curl
const VariablePhiSecond & secondPhiFaceNeighbor(const MooseVariableField< Real > &) const
const VectorVariablePhiSecond & secondPhi(const MooseVariableField< RealVectorValue > &) const
std::vector< std::unique_ptr< FEBase > > _unique_fe_helper
Containers for holding unique FE helper types if we are doing p-refinement.
unsigned int numExtraElemIntegers() const
Number of extra element integers Assembly tracked.
const libMesh::QBase * attachQRuleElem(unsigned int dim, FEBase &fe)
Attaches the current elem/volume quadrature rule to the given fe.
void activateDual()
Indicates that dual shape functions are used for mortar constraint.
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_ff_entry
Entries in the coupling matrix for field variables.
const Moose::CoordinateSystemType & coordSystem() const
Get the coordinate system type.
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > _cm_nonlocal_entry
Entries in the coupling matrix for field variables for nonlocal calculations.
bool _current_elem_volume_computed
Boolean to indicate whether current element volumes has been computed.
VectorVariablePhiSecond _vector_second_phi_neighbor
const std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > & fieldScalarCouplingEntries() const
const VectorVariablePhiValue & phi(const MooseVariableField< RealVectorValue > &) const
DenseVector< Number > & residualBlockNeighbor(unsigned int var_num, LocalDataKey, TagID tag_id)
Get local neighbor residual block for a variable and a tag.
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiFaceNeighbor(FEType type) const
void buildLowerDDualFE(FEType type) const
VariablePhiValue _phi_neighbor
VariablePhiValue & phiFace(const MooseVariableField< Real > &)
void addCachedResidualDirectly(NumericVector< Number > &residual, GlobalDataKey, const VectorTag &vector_tag)
Adds the values that have been cached by calling cacheResidual(), cacheResidualNeighbor(),...
std::map< unsigned int, std::map< FEType, FEBase * > > _fe_face
types of finite elements
std::vector< ADReal > _ad_jac
void addJacobianNeighbor(GlobalDataKey)
Add ElementNeighbor, NeighborElement, and NeighborNeighbor portions of the Jacobian for compute objec...
VectorVariablePhiCurl _vector_curl_phi_face_neighbor
void setMortarQRule(Order order)
Specifies a custom qrule for integration on mortar segment mesh.
void saveLocalADArray(std::vector< ADReal > &re, unsigned int i, unsigned int ntest, const ADRealEigenVector &v) const
VariablePhiGradient & gradPhi(const MooseVariableField< RealEigenVector > &)
const std::vector< VectorTag > & _residual_vector_tags
The residual vector tags that Assembly could possibly contribute to.
const Elem * _current_neighbor_elem
The current neighbor "element".
VectorVariablePhiDivergence _vector_div_phi_face
bool _user_added_fe_face_neighbor_of_helper_type
const MooseArray< ADReal > & adJxWFace() const
std::vector< ADReal > _ad_dzetadx_map
std::vector< dof_id_type > _column_indices
const FEBase *const & getFE(FEType type, unsigned int dim) const
Get a reference to a pointer that will contain the current volume FE.
const VariablePhiValue & phiNeighbor(const MooseVariableField< Real > &) const
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.
std::vector< ADReal > _ad_detadz_map
DenseMatrix< Number > & jacobianBlock(unsigned int ivar, unsigned int jvar, LocalDataKey, TagID tag)
Get local Jacobian block for a pair of variables and a tag.
std::vector< dof_id_type > _temp_dof_indices
Temporary work vector to keep from reallocating it.
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_used
Flag that indicates if the jacobian block was used.
void buildVectorFaceNeighborFE(FEType type) const
Build Vector FEs for a neighbor face with a type.
ArbitraryQuadrature * _current_qface_arbitrary
The current arbitrary quadrature rule used on element faces.
VectorVariablePhiGradient _vector_grad_phi
const VectorVariablePhiGradient & gradPhiFace(const MooseVariableField< RealVectorValue > &) const
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 u...
void prepareJacobianBlock()
Sizes and zeroes the Jacobian blocks used for the current element.
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.
void resizeADMappingObjects(unsigned int n_qp, unsigned int dim)
resize any objects that contribute to automatic differentiation-related mapping calculations
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.
const libMesh::QBase *const & qRuleNeighbor() const
Returns the reference to the current quadrature being used on a current neighbor.
std::vector< VectorValue< ADReal > > _ad_dxyzdeta_map
bool computingJacobian() const
const Node * _current_node
The current node we are working with.
VariablePhiValue & phiFaceNeighbor(const MooseVariableField< RealEigenVector > &)
DenseVector< Number > & residualBlockLower(unsigned int var_num, LocalDataKey, TagID tag_id)
Get residual block for lower.
std::map< FEType, ADTemplateVariablePhiGradient< RealVectorValue > > _ad_vector_grad_phi_data_face
void cacheJacobianMortar(GlobalDataKey)
Cache all portions of the Jacobian, e.g.
void bumpVolumeQRuleOrder(Order volume_order, SubdomainID block)
Increases the element/volume quadrature order for the specified mesh block if and only if the current...
THREAD_ID _tid
Thread number (id)
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kel
dsecondary/dlower (or delement/dlower)
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_dual_lower
MooseArray< Point > _current_normals
The current Normal vectors at the quadrature points.
void cacheJacobian(GlobalDataKey)
Takes the values that are currently in _sub_Kee and appends them to the cached values.
bool _calculate_curvatures
std::vector< std::vector< Real > > _cached_residual_values
Values cached by calling cacheResidual() (the first vector is for TIME vs NONTIME)
const Node *const & node() const
Returns the reference to the node.
std::vector< std::vector< dof_id_type > > _cached_jacobian_cols
Column where the corresponding cached value should go.
ArbitraryQuadrature * _current_qrule_arbitrary
The current arbitrary quadrature rule used within the element interior.
void computeADFace(const Elem &elem, const unsigned int side)
compute AD things on an element face
libMesh::ElemSideBuilder _current_side_elem_builder
In place side element builder for _current_side_elem.
const VectorVariablePhiCurl & curlPhiFace(const MooseVariableField< RealVectorValue > &) const
void setCurrentBoundaryID(BoundaryID i)
set the current boundary ID
void computeFaceMap(const Elem &elem, const unsigned int side, const std::vector< Real > &qw)
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_lower
Vector FE objects for lower dimensional elements.
void setCachedJacobian(GlobalDataKey)
Sets previously-cached Jacobian values via SparseMatrix::set() calls.
const VectorVariablePhiSecond & secondPhiNeighbor(const MooseVariableField< RealVectorValue > &) const
void bumpAllQRuleOrder(Order order, SubdomainID block)
Increases the element/volume and face/area quadrature orders for the specified mesh block if and only...
libMesh::QBase * qruleFace(const Elem *elem, unsigned int side)
This is an abstraction over the internal qrules function.
std::vector< std::vector< DenseVector< Number > > > _sub_Rl
residual contributions for each variable from the lower dimensional element
std::map< FEType, FEBase * > _current_fe_face
The "face" fe object that matches the current elem.
VectorVariablePhiValue & phi(const MooseVariableField< RealVectorValue > &)
void addCachedJacobian(GlobalDataKey)
Adds the values that have been cached by calling cacheJacobian() and or cacheJacobianNeighbor() to th...
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 u...
VectorVariablePhiDivergence _vector_div_phi
const OutputTools< OutputType >::VariablePhiValue & fePhi(FEType type) const
const VectorVariablePhiDivergence & divPhiFaceNeighbor(const MooseVariableField< RealVectorValue > &) const
const VectorVariablePhiDivergence & divPhiFace(const MooseVariableField< RealVectorValue > &) const
void reinit(const Elem *elem)
Reinitialize objects (JxW, q_points, ...) for an elements.
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 VectorVariablePhiDivergence & divPhiNeighbor(const MooseVariableField< RealVectorValue > &) const
std::vector< dof_id_type > _neighbor_extra_elem_ids
Extra element IDs of neighbor.
libMesh::ElemSideBuilder _compute_face_map_side_elem_builder
In place side element builder for computeFaceMap()
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 ...
VectorVariablePhiValue & phiNeighbor(const MooseVariableField< RealVectorValue > &)
void modifyFaceWeightsDueToXFEM(const Elem *elem, unsigned int side=0)
Update the face integration weights for XFEM partial elements.
unsigned int _max_cached_residuals
void buildFaceFE(FEType type) const
Build FEs for a face with a type.
const Real & sideElemVolume() const
Returns the reference to the volume of current side element.
std::shared_ptr< XFEMInterface > _xfem
The XFEM controller.
std::map< unsigned int, FEBase * > _holder_fe_face_neighbor_helper
std::set< FEType > _need_neighbor_div
SubdomainID _current_neighbor_subdomain_id
The current neighbor subdomain ID.
const ADTemplateVariablePhiGradient< OutputType > & feADGradPhi(FEType type) const
std::map< FEType, FEVectorBase * > _current_vector_fe_face
The "face" vector fe object that matches the current elem.
bool _custom_mortar_qrule
Flag specifying whether a custom quadrature rule has been specified for mortar segment mesh.
libMesh::ElemSideBuilder _current_neighbor_side_elem_builder
In place side element builder for _current_neighbor_side_elem.
const SubdomainID & currentNeighborSubdomainID() const
Return the current subdomain ID.
std::vector< std::vector< dof_id_type > > _cached_jacobian_rows
Row where the corresponding cached value should go.
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data_face
MooseArray< ADReal > _ad_coord
The AD version of the current coordinate transformation coefficients.
const libMesh::QBase * attachQRuleFace(unsigned int dim, FEBase &fe)
Attaches the current face/area quadrature rule to the given fe.
std::vector< std::unique_ptr< FEBase > > _unique_fe_neighbor_helper
VariablePhiSecond & secondPhiFace(const MooseVariableField< RealEigenVector > &)
std::map< FEType, FEBase * > _current_fe_face_neighbor
The "neighbor face" fe object that matches the current elem.
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...
VariablePhiSecond & secondPhiFaceNeighbor(const MooseVariableField< Real > &)
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_neighbor
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.
VariablePhiValue & phi(const MooseVariableField< Real > &)
VariablePhiValue & phiNeighbor(const MooseVariableField< RealEigenVector > &)
bool _need_lower_d_elem_volume
Whether we need to compute the lower dimensional element volume.
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_face_neighbor
QRules & qrules(unsigned int dim)
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.
bool _need_neighbor_elem_volume
true is apps need to compute neighbor element volume
const OutputTools< OutputType >::VariablePhiDivergence & feDivPhiFace(FEType type) const
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Keg
std::set< FEType > _need_face_div
const std::vector< Real > & jxWMortar() const
Returns a reference to JxW for mortar segment elements.
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.
const MooseArray< std::vector< Point > > & tangents() const
Returns the array of tangents for quadrature points on a current side.
const ADTemplateVariablePhiGradient< T > & adGradPhi(const MooseVariableFE< T > &v) const
void addJacobianCoupledVarPair(const MooseVariableBase &ivar, const MooseVariableBase &jvar)
Adds element matrices for ivar rows and jvar columns to the global Jacobian matrices.
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 referenc...
void init(const libMesh::CouplingMatrix *cm)
Initialize the Assembly object and set the CouplingMatrix for use throughout.
const Real & elemVolume() const
Returns the reference to the current element volume.
VectorVariablePhiSecond & secondPhiNeighbor(const MooseVariableField< RealVectorValue > &)
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.
const OutputTools< OutputType >::VariablePhiGradient & feGradPhiNeighbor(FEType type) const
VectorVariablePhiGradient _vector_grad_phi_face
VariablePhiValue & phiNeighbor(const MooseVariableField< Real > &)
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > _cm_fs_entry
Entries in the coupling matrix for field variables vs scalar variables.
Real _current_side_volume
Volume of the current side element.
void copyShapes(MooseVariableField< T > &v)
const MooseArray< Real > & coordTransformation() const
Returns the reference to the coordinate transformation coefficients.
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.
VariablePhiSecond _second_phi_neighbor
Real _current_neighbor_lower_d_elem_volume
The current neighboring lower dimensional element volume.
MooseArray< Real > _coord
The current coordinate transformation coefficients.
std::map< FEType, std::unique_ptr< VectorFEShapeData > > _vector_fe_shape_data_lower
void buildVectorFE(FEType type) const
Build Vector FEs with a type.
VectorVariablePhiCurl & curlPhiFaceNeighbor(const MooseVariableField< RealVectorValue > &)
const OutputTools< OutputType >::VariablePhiValue & fePhiFace(FEType type) const
VariablePhiGradient & gradPhiFace(const MooseVariableField< RealEigenVector > &)
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...
DenseVector< Number > & residualBlock(unsigned int var_num, LocalDataKey, TagID tag_id)
Get local residual block for a variable and a tag.
ArbitraryQuadrature * _current_qrule_arbitrary_face
The current arbitrary quadrature rule used on the element face.
const MooseArray< Real > & JxW() const
Returns the reference to the transformed jacobian weights.
void havePRefinement(const std::unordered_set< FEFamily > &disable_p_refinement_for_families)
Indicate that we have p-refinement.
VariablePhiValue _phi_face
std::vector< std::vector< std::vector< unsigned char > > > _jacobian_block_nonlocal_used
const FEBase *const & getFEFaceNeighbor(FEType type, unsigned int dim) const
Get a reference to a pointer that will contain the current "neighbor" FE.
VectorVariablePhiGradient & gradPhiFaceNeighbor(const MooseVariableField< RealVectorValue > &)
void prepareResidual()
Sizes and zeroes the residual for the current element.
void setCurrentLowerDElem(const Elem *const lower_d_elem)
Set the current lower dimensional element.
bool needDual() const
Indicates whether dual shape functions are used (computation is now repeated on each element so expen...
void buildVectorFaceFE(FEType type) const
Build Vector FEs for a face with a type.
VectorVariablePhiValue _vector_phi_neighbor
const MooseArray< Real > & JxWNeighbor() const
Returns the reference to the transformed jacobian weights on a current face.
bool _user_added_fe_neighbor_of_helper_type
const MooseArray< Point > & qPointsFace() const
Returns the reference to the current quadrature being used.
VectorVariablePhiValue _vector_phi_face
void reinitFEFace(const Elem *elem, unsigned int side)
Just an internal helper function to reinit the face FE objects.
const MooseArray< ADReal > & adJxW() const
const MooseArray< Point > & qPointsFaceNeighbor() const
Returns the reference to the current quadrature points being used on the neighbor face.
std::map< unsigned int, FEBase * > _holder_fe_neighbor_helper
Each dimension's helper objects.
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.
VectorVariablePhiSecond _vector_second_phi_face
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 arr...
const Elem *const & msmElem() const
const libMesh::QBase *const & qRuleFace() const
Returns the reference to the current quadrature being used on a current face.
void reinitNeighborLowerDElem(const Elem *elem)
reinitialize a neighboring lower dimensional element
void initNonlocalCoupling()
Create pair of variables requiring nonlocal jacobian contributions.
MooseArray< ADReal > _ad_curvatures
VectorVariablePhiSecond & secondPhiFace(const MooseVariableField< RealVectorValue > &)
const VectorVariablePhiCurl & curlPhiFaceNeighbor(const MooseVariableField< RealVectorValue > &) const
const Real & neighborVolume()
Returns the reference to the current neighbor volume.
const OutputTools< OutputType >::VariablePhiSecond & feSecondPhiFace(FEType type) const
libMesh::QBase * _qrule_msm
A qrule object for working on mortar segement elements.
unsigned int _max_cached_jacobians
const Elem * _current_side_elem
The current "element" making up the side we are currently on.
std::set< FEType > _need_div
const FEBase *const & getFEFace(FEType type, unsigned int dim) const
Get a reference to a pointer that will contain the current "face" FE.
std::vector< std::vector< dof_id_type > > _cached_residual_rows
Where the cached values should go (the first vector is for TIME vs NONTIME)
const MooseArray< Real > & JxWFace() const
Returns the reference to the transformed jacobian weights on a current face.
std::map< FEType, ADTemplateVariablePhiGradient< Real > > _ad_grad_phi_data
VariablePhiSecond & secondPhiNeighbor(const MooseVariableField< RealEigenVector > &)
const VariablePhiGradient & gradPhi(const MooseVariableField< Real > &) const
std::map< unsigned int, FEBase * > _holder_fe_helper
Each dimension's helper objects.
VariablePhiGradient & gradPhiFaceNeighbor(const MooseVariableField< RealEigenVector > &)
MooseArray< Point > _current_q_points_face_neighbor
The current quadrature points on the neighbor face.
std::vector< ADReal > _ad_dzetadz_map
std::vector< ADReal > _ad_detady_map
const Elem *const & sideElem() const
Returns the side element.
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhi(FEType type) const
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Kne
jacobian contributions from the neighbor and element <Tag, ivar, jvar>
const NumericVector< Real > * _scaling_vector
The map from global index to variable scaling factor.
MooseArray< Real > _current_JxW
The current list of transformed jacobian weights.
void zeroCachedJacobian(GlobalDataKey)
Zero out previously-cached Jacobian rows.
void buildVectorDualLowerDFE(FEType type) const
const libMesh::QBase *const & qRule() const
Returns the reference to the current quadrature being used.
const Elem * _current_neighbor_lower_d_elem
The current neighboring lower dimensional element.
VariablePhiValue & phi(const MooseVariableField< RealEigenVector > &)
libMesh::QBase * _current_qrule_lower
quadrature rule used on lower dimensional elements.
const VariablePhiValue & phiFaceNeighbor(const MooseVariableField< Real > &) const
void clearCachedResiduals(GlobalDataKey)
Clears all of the residuals in _cached_residual_rows and _cached_residual_values.
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 computeCurrentElemVolume()
const MooseArray< Real > & mortarCoordTransformation() const
Returns the reference to the coordinate transformation coefficients on the mortar segment mesh.
unsigned int _current_neighbor_side
The current side of the selected neighboring element (valid only when working with sides)
std::vector< std::vector< std::vector< DenseMatrix< Number > > > > _sub_Knl
dprimary/dlower (or dneighbor/dlower)
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...
MooseArray< VectorValue< ADReal > > _ad_q_points_face
void reinitMortarElem(const Elem *elem)
reinitialize a mortar segment mesh element in order to get a proper JxW
std::vector< VectorValue< ADReal > > _ad_d2xyzdxi2_map
VariablePhiSecond & secondPhiFaceNeighbor(const MooseVariableField< RealEigenVector > &)
const Elem * _current_elem
The current "element" we are currently on.
std::map< unsigned int, FEBase * > _holder_fe_face_helper
Each dimension's helper objects.
const VectorVariablePhiSecond & secondPhiFaceNeighbor(const MooseVariableField< RealVectorValue > &) const
std::map< unsigned int, std::map< FEType, FEVectorBase * > > _vector_fe_face_neighbor
const VectorVariablePhiGradient & gradPhiNeighbor(const MooseVariableField< RealVectorValue > &) const
VectorVariablePhiDivergence _vector_div_phi_face_neighbor
bool _have_p_refinement
Whether we have ever conducted p-refinement.
VariablePhiGradient & gradPhiNeighbor(const MooseVariableField< RealEigenVector > &)
void reinitNeighbor(const Elem *neighbor, const std::vector< Point > &reference_points)
Reinitializes the neighbor side using reference coordinates.
libMesh::QBase * _current_qrule_volume
The current volumetric quadrature for the element.
void addJacobianNeighborLowerD(GlobalDataKey)
Add all portions of the Jacobian except PrimaryPrimary, e.g.
std::map< FEType, FEVectorBase * > _current_vector_fe_neighbor
The "neighbor" vector fe object that matches the current elem.
VariablePhiGradient & gradPhiNeighbor(const MooseVariableField< Real > &)
MooseArray< Real > _coord_msm
The coordinate transformation coefficients evaluated on the quadrature points of the mortar segment m...
const FEVectorBase *const & getVectorFEFaceNeighbor(FEType type, unsigned int dim) const
GetVector a reference to a pointer that will contain the current "neighbor" FE.
Real _current_lower_d_elem_volume
The current lower dimensional element volume.
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.
const VectorVariablePhiGradient & gradPhiFaceNeighbor(const MooseVariableField< RealVectorValue > &) const
std::vector< std::vector< Real > > _cached_jacobian_values
Values cached by calling cacheJacobian()
bool _user_added_fe_face_of_helper_type
void clearCachedJacobian()
Clear any currently cached jacobians.
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.
const Node *const & nodeNeighbor() const
Returns the reference to the neighboring node.
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_dual_lower
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data
Shape function values, gradients, second derivatives for each FE type.
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.
std::vector< Point > _current_neighbor_ref_points
The current reference points on the neighbor element.
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.
void copyNeighborShapes(MooseVariableField< T > &v)
std::set< FEType > _need_second_derivative
const OutputTools< OutputType >::VariablePhiCurl & feCurlPhiNeighbor(FEType type) const
std::vector< dof_id_type > _row_indices
Working vectors to avoid repeated heap allocations when caching residuals/Jacobians that must have li...
std::vector< dof_id_type > _extra_elem_ids
Extra element IDs.
void hasScalingVector()
signals this object that a vector containing variable scaling factors should be used when doing resid...
void addCachedResiduals(GlobalDataKey, const std::vector< VectorTag > &tags)
Pushes all cached residuals to the global residual vectors associated with each tag.
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face_neighbor
bool _user_added_fe_lower_of_helper_type
MooseArray< Real > _current_JxW_neighbor
The current transformed jacobian weights on a neighbor's face.
std::vector< ADReal > _ad_dxidy_map
unsigned int _mesh_dimension
DenseVector< Number > _element_vector
A working vector to avoid repeated heap allocations when caching residuals that must have libMesh-lev...
const OutputTools< OutputType >::VariablePhiDivergence & feDivPhiFaceNeighbor(FEType type) const
const VectorVariablePhiValue & phiNeighbor(const MooseVariableField< RealVectorValue > &) const
VariablePhiSecond _second_phi_face_neighbor
VectorVariablePhiDivergence & divPhiFaceNeighbor(const MooseVariableField< RealVectorValue > &)
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.
std::map< FEType, std::unique_ptr< FEShapeData > > _fe_shape_data_face
const VariablePhiSecond & secondPhi() const
const VariablePhiSecond & secondPhi(const MooseVariableField< Real > &) const
const Elem *const & neighbor() const
Return the neighbor element.
void prepareOffDiagScalar()
const SubdomainID & currentSubdomainID() const
Return the current subdomain ID.
const FEVectorBase *const & getVectorFEFace(FEType type, unsigned int dim) const
GetVector a reference to a pointer that will contain the current "face" FE.
void prepareVariable(MooseVariableFieldBase *var)
Used for preparing the dense residual and jacobian blocks for one particular variable.
VariablePhiSecond & secondPhiFace(const MooseVariableField< Real > &)
const Elem *const & lowerDElem() const
Return the lower dimensional element.
const VectorVariablePhiValue & phiFaceNeighbor(const MooseVariableField< RealVectorValue > &) const
const VectorVariablePhiSecond & secondPhiFace(const MooseVariableField< RealVectorValue > &) const
bool _need_dual
Whether dual shape functions need to be computed for mortar constraints.
const MooseArray< ADReal > & adCoordTransformation() const
Returns the reference to the AD version of the coordinate transformation coefficients.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
This data structure is used to store geometric and variable related metadata about each cell face in ...
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
const libMesh::FEType & feType() const
Get the type of finite element object.
Class for stuff related to variables.
This class provides an interface for common operations on field variables of both FE and FV types wit...
Class for stuff related to variables.
Class for scalar variables (they are different).
The Kokkos assembly class.
A NodeFaceConstraint is used when you need to create constraints between two surfaces in a mesh.
Nonlinear system to be solved.
Generic class for solving transient nonlinear problems.
Base class for a system (of equations)
Storage for all of the information pretaining to a vector tag.
This is the XFEMInterface class.
void resize(const unsigned int new_m, const unsigned int new_n)
void resize(const unsigned int n)
void constrain_element_matrix(DenseMatrix< Number > &matrix, std::vector< dof_id_type > &elem_dofs, bool asymmetric_constraint_rows=true) const
void constrain_element_vector(DenseVector< Number > &rhs, std::vector< dof_id_type > &dofs, bool asymmetric_constraint_rows=true) const
const SubdomainID ANY_BLOCK_ID
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
FEGenericBase< RealGradient > FEVectorBase
VectorValue< Real > RealVectorValue
FEGenericBase< Real > FEBase
Data structure for tracking/grouping a set of quadrature rules for a particular dimensionality of mes...
std::unique_ptr< ArbitraryQuadrature > arbitrary_vol
volume/elem (meshdim) custom points quadrature rule
std::unique_ptr< ArbitraryQuadrature > neighbor
area/face (meshdim-1) custom points quadrature rule for DG
std::unique_ptr< libMesh::QBase > fv_face
finite volume face/flux quadrature rule (meshdim-1)
std::unique_ptr< libMesh::QBase > vol
volume/elem (meshdim) quadrature rule
std::unique_ptr< ArbitraryQuadrature > arbitrary_face
area/face (meshdim-1) custom points quadrature rule
std::unique_ptr< libMesh::QBase > face
area/face (meshdim-1) quadrature rule