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
82template <
typename P,
typename C>
87 SubdomainID neighbor_sub_id = libMesh::Elem::invalid_subdomain_id);
89template <
typename P,
typename C>
94 SubdomainID neighbor_sub_id = libMesh::Elem::invalid_subdomain_id);
110 template <
typename T>
113 const T *
const * ptr = &inref;
123 const FEBase *
const &
getFE(FEType type,
unsigned int dim)
const
147 const FEBase *
const &
getFEFace(FEType type,
unsigned int dim)
const
171 const FEVectorBase *
const &
getVectorFE(FEType type,
unsigned int dim)
const
213#ifdef MOOSE_KOKKOS_ENABLED
234#ifdef MOOSE_KOKKOS_ENABLED
321#ifdef MOOSE_KOKKOS_ENABLED
371 mooseAssert(
id <
_extra_elem_ids.size(),
"An invalid extra element integer id");
398 template <
bool is_ad>
557 bool allow_negative_qweights =
true);
658 unsigned int elem_side,
660 const std::vector<Point> *
const pts =
nullptr,
661 const std::vector<Real> *
const weights =
nullptr);
668 unsigned int neighbor_side,
670 const std::vector<Point> *
const pts,
671 const std::vector<Real> *
const weights =
nullptr);
676 void reinitDual(
const Elem *
elem,
const std::vector<Point> & pts,
const std::vector<Real> &
JxW);
682 const std::vector<Point> *
const pts =
nullptr,
683 const std::vector<Real> *
const weights =
nullptr);
720 void reinit(
const Elem *
elem,
const std::vector<Point> & reference_points);
735 void reinit(
const Elem *
elem,
unsigned int side,
const std::vector<Point> & reference_points);
753 unsigned int neighbor_side,
754 const std::vector<Point> * neighbor_reference_points =
nullptr);
760 unsigned int neighbor_side,
761 const std::vector<Point> & physical_points);
810 void prepareBlock(
unsigned int ivar,
unsigned jvar,
const std::vector<dof_id_type> & dof_indices);
813 const std::vector<dof_id_type> & idof_indices,
814 const std::vector<dof_id_type> & jdof_indices);
818 template <
typename T>
822 template <
typename T>
826 template <
typename T>
866 void addResidual(GlobalDataKey,
const std::vector<VectorTag> & vector_tags);
876 void addResidualLower(GlobalDataKey,
const std::vector<VectorTag> & vector_tags);
882 void addResidualScalar(GlobalDataKey,
const std::vector<VectorTag> & vector_tags);
888 void cacheResidual(GlobalDataKey,
const std::vector<VectorTag> & tags);
932 void setResidual(NumericVector<Number> & residual, GlobalDataKey,
const VectorTag & vector_tag);
975 std::vector<dof_id_type> & dof_indices,
987 std::vector<dof_id_type> & dof_indices,
989 const std::set<TagID> & tags);
998 const std::vector<dof_id_type> & idof_indices,
999 const std::vector<dof_id_type> & jdof_indices,
1010 const std::vector<dof_id_type> & idof_indices,
1011 const std::vector<dof_id_type> & jdof_indices,
1013 const std::set<TagID> & tags);
1050 std::vector<dof_id_type> & dof_indices,
1051 std::vector<dof_id_type> & neighbor_dof_indices,
1063 std::vector<dof_id_type> & dof_indices,
1064 std::vector<dof_id_type> & neighbor_dof_indices,
1066 const std::set<TagID> & tags);
1108 return _sub_Re[tag_id][var_num];
1117 return _sub_Rn[tag_id][var_num];
1126 return _sub_Rl[tag_id][var_num];
1143 DenseMatrix<Number> &
1175 const std::vector<dof_id_type> & dof_index,
1191 cacheJacobian(numeric_index_type i, numeric_index_type j, Real value, LocalDataKey,
TagID tag);
1205 numeric_index_type j,
1208 const std::set<TagID> & tags);
1218 const std::vector<dof_id_type> & idof_indices,
1219 const std::vector<dof_id_type> & jdof_indices,
1220 Real scaling_factor,
1222 const std::set<TagID> & tags);
1233 template <
typename Res
iduals,
typename Indices>
1235 const Indices & row_indices,
1236 Real scaling_factor,
1238 const std::set<TagID> & vector_tags);
1247 template <
typename Res
iduals,
typename Indices>
1249 const Indices & row_indices,
1250 Real scaling_factor,
1252 const std::set<TagID> & matrix_tags);
1264 template <
typename Res
iduals,
typename Indices>
1266 const Indices & row_indices,
1267 Real scaling_factor,
1269 const std::set<TagID> & vector_tags);
1278 template <
typename Res
iduals,
typename Indices>
1280 const Indices & row_indices,
1281 Real scaling_factor,
1283 const std::set<TagID> & matrix_tags);
1285 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
couplingEntries()
1289 const std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
1294 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
1299 const std::vector<std::pair<MooseVariableFieldBase *, MooseVariableScalar *>> &
1304 const std::vector<std::pair<MooseVariableScalar *, MooseVariableFieldBase *>> &
1312 template <
typename T>
1609 template <
typename OutputType>
1616 template <
typename OutputType>
1623 template <
typename OutputType>
1629 template <
typename OutputType>
1637 template <
typename OutputType>
1640 template <
typename OutputType>
1643 template <
typename OutputType>
1646 template <
typename OutputType>
1650 template <
typename OutputType>
1657 template <
typename OutputType>
1664 template <
typename OutputType>
1670 template <
typename OutputType>
1678 template <
typename OutputType>
1685 template <
typename OutputType>
1692 template <
typename OutputType>
1700 template <
typename OutputType>
1707 template <
typename OutputType>
1715 template <
typename OutputType>
1724 template <
typename OutputType>
1732 template <
typename OutputType>
1740 template <
typename OutputType>
1748 template <
typename OutputType>
1756 template <
typename OutputType>
1763 template <
typename OutputType>
1770 template <
typename OutputType>
1778 template <
typename OutputType>
1798 std::vector<std::pair<unsigned int, unsigned short>> && disp_numbers_and_directions);
1811 const RealEigenVector & v)
const
1813 for (
unsigned int j = 0; j < v.size(); ++j, i += ntest)
1820 const ADRealEigenVector & v)
const;
1838 const RealEigenVector & v)
const
1841 for (
unsigned int k = 0; k < v.size(); ++k, i += ntest, j += pace)
1864 const RealEigenMatrix & v)
const
1868 for (
unsigned int k = 0; k < v.rows(); ++k, i += ntest)
1869 ke(i, j) += v(k, k);
1873 const unsigned int saved_j = j;
1874 for (
unsigned int k = 0; k < v.rows(); ++k, i += ntest)
1877 for (
unsigned int l = 0; l < v.cols(); ++l, j += nphi)
1878 ke(i, j) += v(k, l);
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++)
1890 diag(i) = ke(i, i % cols);
1902 fe.attach_quadrature_rule(qrule);
1914 fe.attach_quadrature_rule(qrule);
1963 void havePRefinement(
const std::unordered_set<FEFamily> & disable_p_refinement_for_families);
1992 template <
typename Po
ints,
typename Coords>
1994 const Points & q_points,
2023 template <
typename OutputType>
2082 void cacheResidual(dof_id_type dof, Real value,
const std::set<TagID> & tags);
2089 std::vector<dof_id_type> & dof_indices,
2090 const std::vector<Real> & scaling_factor);
2096 DenseVector<Number> & res_block,
2097 const std::vector<dof_id_type> & dof_indices,
2098 const std::vector<Real> & scaling_factor);
2104 std::vector<dof_id_type> & cached_residual_rows,
2105 DenseVector<Number> & res_block,
2106 const std::vector<dof_id_type> & dof_indices,
2107 const std::vector<Real> & scaling_factor);
2113 DenseVector<Number> & res_block,
2114 const std::vector<dof_id_type> & dof_indices,
2115 const std::vector<Real> & scaling_factor);
2121 DenseMatrix<Number> & jac_block,
2124 const std::vector<dof_id_type> & idof_indices,
2125 const std::vector<dof_id_type> & jdof_indices);
2133 const std::vector<dof_id_type> & idof_indices,
2134 const std::vector<dof_id_type> & jdof_indices,
2143 const std::vector<dof_id_type> & idof_indices,
2144 const std::vector<dof_id_type> & jdof_indices,
2168 void buildFE(FEType type)
const;
2323 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>>
_cm_ff_entry;
2325 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableScalar *>>
_cm_fs_entry;
2327 std::vector<std::pair<MooseVariableScalar *, MooseVariableFieldBase *>>
_cm_sf_entry;
2329 std::vector<std::pair<MooseVariableScalar *, MooseVariableScalar *>>
_cm_ss_entry;
2394 mutable std::map<unsigned int, std::map<FEType, FEBase *>>
_fe;
2396 mutable std::map<unsigned int, std::map<FEType, FEVectorBase *>>
_vector_fe;
2434 std::unique_ptr<libMesh::QBase>
vol;
2436 std::unique_ptr<libMesh::QBase>
face;
2451 std::unordered_map<SubdomainID, std::vector<QRules>>
_qrules;
2462 template <
typename T>
2472 auto neighbor_block =
neighbor->subdomain_id();
2473 if (neighbor_block ==
elem->subdomain_id())
2476 auto q_neighbor = rule_fn(
qrules(
dim, neighbor_block));
2477 if (q->get_order() > q_neighbor->get_order())
2492 "missing quadrature rules for specified block");
2494 "quadrature rules not sized property for dimension");
2498 "missing quadrature rules for specified block");
2499 mooseAssert(
_qrules[block].size() >
dim,
"quadrature rules not sized property for dimension");
2506 mutable std::map<unsigned int, std::map<FEType, FEBase *>>
_fe_face;
2548 mutable std::map<unsigned int, std::map<FEType, FEBase *>>
_fe_lower;
2652 std::vector<std::vector<DenseVector<Number>>>
_sub_Re;
2653 std::vector<std::vector<DenseVector<Number>>>
_sub_Rn;
2655 std::vector<std::vector<DenseVector<Number>>>
_sub_Rl;
2671 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kee;
2672 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Keg;
2675 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Ken;
2677 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kne;
2679 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Knn;
2681 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kll;
2683 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kle;
2685 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kln;
2687 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Kel;
2689 std::vector<std::vector<std::vector<DenseMatrix<Number>>>>
_sub_Knl;
2775 mutable std::map<FEType, ADTemplateVariablePhiGradient<RealVectorValue>>
2899template <
typename OutputType>
2907template <
typename OutputType>
2915template <
typename OutputType>
2923template <
typename OutputType>
2933Assembly::feADGradPhi<RealVectorValue>(FEType type)
const
2940Assembly::feADGradPhiFace<RealVectorValue>(FEType type)
const
2947Assembly::fePhi<VectorValue<Real>>(FEType type)
const;
2951Assembly::feGradPhi<VectorValue<Real>>(FEType type)
const;
2955Assembly::feSecondPhi<VectorValue<Real>>(FEType type)
const;
2959Assembly::fePhiLower<VectorValue<Real>>(FEType type)
const;
2963Assembly::feDualPhiLower<VectorValue<Real>>(FEType type)
const;
2967Assembly::feGradPhiLower<VectorValue<Real>>(FEType type)
const;
2971Assembly::feGradDualPhiLower<VectorValue<Real>>(FEType type)
const;
2975Assembly::fePhiFace<VectorValue<Real>>(FEType type)
const;
2979Assembly::feGradPhiFace<VectorValue<Real>>(FEType type)
const;
2983Assembly::feSecondPhiFace<VectorValue<Real>>(FEType type)
const;
2987Assembly::fePhiNeighbor<VectorValue<Real>>(FEType type)
const;
2991Assembly::feGradPhiNeighbor<VectorValue<Real>>(FEType type)
const;
2995Assembly::feSecondPhiNeighbor<VectorValue<Real>>(FEType type)
const;
2999Assembly::fePhiFaceNeighbor<VectorValue<Real>>(FEType type)
const;
3003Assembly::feGradPhiFaceNeighbor<VectorValue<Real>>(FEType type)
const;
3007Assembly::feSecondPhiFaceNeighbor<VectorValue<Real>>(FEType type)
const;
3011Assembly::feCurlPhi<VectorValue<Real>>(FEType type)
const;
3015Assembly::feCurlPhiFace<VectorValue<Real>>(FEType type)
const;
3019Assembly::feCurlPhiNeighbor<VectorValue<Real>>(FEType type)
const;
3023Assembly::feCurlPhiFaceNeighbor<VectorValue<Real>>(FEType type)
const;
3027Assembly::feDivPhi<VectorValue<Real>>(FEType type)
const;
3031Assembly::feDivPhiFace<VectorValue<Real>>(FEType type)
const;
3035Assembly::feDivPhiNeighbor<VectorValue<Real>>(FEType type)
const;
3039Assembly::feDivPhiFaceNeighbor<VectorValue<Real>>(FEType type)
const;
3048template <
typename Res
iduals,
typename Indices>
3051 const Indices & input_row_indices,
3052 const Real scaling_factor,
3054 const std::set<TagID> & vector_tags)
3056 mooseAssert(residuals.size() == input_row_indices.size(),
3057 "The number of residuals should match the number of dof indices");
3058 mooseAssert(residuals.size() >= 1,
"Why you calling me with no residuals?");
3063 if (residuals.size() == 1)
3068 residuals, input_row_indices, scaling_factor,
LocalDataKey{}, vector_tags);
3073 _row_indices.assign(input_row_indices.begin(), input_row_indices.end());
3088template <
typename Res
iduals,
typename Indices>
3091 const Indices & row_indices,
3092 const Real scaling_factor,
3094 const std::set<TagID> & vector_tags)
3096 mooseAssert(residuals.size() == row_indices.size(),
3097 "The number of residuals should match the number of dof indices");
3098 mooseAssert(residuals.size() >= 1,
"Why you calling me with no residuals?");
3101 for (
const auto i : index_range(row_indices))
3106template <
typename Res
iduals,
typename Indices>
3109 const Indices & input_row_indices,
3110 const Real scaling_factor,
3112 const std::set<TagID> & matrix_tags)
3117 if (residuals.size() == 1)
3122 residuals, input_row_indices, scaling_factor,
LocalDataKey{}, matrix_tags);
3126 const auto & compare_dofs = residuals[0].derivatives().nude_indices();
3128 auto compare_dofs_set = std::set<dof_id_type>(compare_dofs.begin(), compare_dofs.end());
3130 for (
const auto i : make_range(
decltype(residuals.size())(1), residuals.size()))
3132 const auto & residual = residuals[i];
3133 auto current_dofs_set = std::set<dof_id_type>(residual.derivatives().nude_indices().begin(),
3134 residual.derivatives().nude_indices().end());
3135 mooseAssert(compare_dofs_set == current_dofs_set,
3136 "We're going to see whether the dof sets are the same. IIRC the degree of freedom "
3137 "dependence (as indicated by the dof index set held by the ADReal) has to be the "
3138 "same for every residual passed to this method otherwise constrain_element_matrix "
3150 _row_indices.assign(input_row_indices.begin(), input_row_indices.end());
3155 const auto & sparse_derivatives = residuals[i].derivatives();
3168template <
typename Res
iduals,
typename Indices>
3171 const Indices & row_indices,
3172 const Real scaling_factor,
3174 const std::set<TagID> & matrix_tags)
3176 mooseAssert(residuals.size() == row_indices.size(),
3177 "The number of residuals should match the number of dof indices");
3178 mooseAssert(residuals.size() >= 1,
"Why you calling me with no residuals?");
3183 for (
const auto i : index_range(row_indices))
3185 const auto row_index = row_indices[i];
3187 const auto & sparse_derivatives = residuals[i].derivatives();
3188 const auto & column_indices = sparse_derivatives.nude_indices();
3189 const auto & raw_derivatives = sparse_derivatives.nude_data();
3191 for (std::size_t j = 0; j < column_indices.size(); ++j)
3193 row_index, column_indices[j], raw_derivatives[j] * scaling_factor, {}, matrix_tags);
3213 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
subdomain_id_type SubdomainID
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 > &)
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
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.
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