92 template <
typename Variables,
typename DualNumbers>
95 const Variables & moose_var,
96 DualNumbers & ad_vars,
97 const bool is_secondary);
199 mooseAssert(
_amg,
"this should have been set in the constructor");
203template <
typename Variables,
typename DualNumbers>
206 const std::map<unsigned int, unsigned int> & domain_ip_lowerd_map,
207 const Variables & moose_vars,
208 DualNumbers & dual_numbers,
209 const bool is_secondary)
215 mooseAssert(moose_vars.size(),
"Should have passed at least one variable");
216 const auto num_indices = is_secondary ? moose_vars[0]->dofIndices().size()
217 : moose_vars[0]->dofIndicesNeighbor().size();
219 for (
const auto i : make_range(std::size_t(1), moose_vars.size()))
220 if (
auto * moose_var = moose_vars[i])
221 mooseAssert(is_secondary ? moose_var->dofIndices().size()
222 : moose_var->dofIndicesNeighbor().size() == num_indices,
223 "These must be the same for all passed in variables");
226 for (
const auto dof_index : make_range(num_indices))
227 if (!domain_ip_lowerd_map.count(dof_index))
229 for (
const auto *
const moose_var : moose_vars)
237 mooseAssert(moose_var->isNodal(),
238 "Trimming of interior node's derivatives is only supported for Lagrange "
239 "elements in mortar objects");
241 const auto remove_derivative_index = is_secondary
242 ? moose_var->dofIndices()[dof_index]
243 : moose_var->dofIndicesNeighbor()[dof_index];
244 for (
auto & dual_number : dual_numbers)
DualNumber< Real, DNDerivativeType, true > ADReal
boundary_id_type BoundaryID
Keeps track of stuff related to assembling.
This class is a container/interface for the objects involved in automatic generation of mortar spaces...
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Every object that can be built by the factory should be derived from this class.
An interface for accessing mortar mesh data.
SubdomainID primarySubdomain() const
static InputParameters validParams()
const AutomaticMortarGeneration * _amg
std::set< BoundaryID > _boundary_ids
the union of the secondary and primary boundary ids
static InputParameters triangulationParams()
Elem const *const & _lower_secondary_elem
The secondary face lower dimensional element (not the mortar element!).
const bool _interpolate_normals
Whether to interpolate the nodal normals.
const libMesh::QBase *const & _qrule_msm
The quadrature rule on the mortar segment element.
const libMesh::QBase *const & _qrule_face
The arbitrary quadrature rule on the lower dimensional secondary face.
static void trimDerivative(dof_id_type remove_derivative_index, ADReal &dual_number)
Get rid of AD derivative entries by dof index.
FEProblemBase & _mci_fe_problem
void setNormals()
Set the normals vector.
const AutomaticMortarGeneration & amg() const
Retrieve the automatic mortar generation object associated with this constraint.
std::set< BoundaryID > _secondary_set
the secondaryid set
const std::set< SubdomainID > & getHigherDimSubdomainIDs() const
const BoundaryID _primary_id
Boundary ID for the primary surface.
const MortarInterfaceWarehouse & _mortar_data
A reference to the mortar data object that holds all the mortar mesh information.
SubProblem & _mci_subproblem
friend void reinitMortarUserObjects(BoundaryID, BoundaryID, bool)
Calls the reinitialization of mortar user objects.
Elem const *const & _lower_primary_elem
The primary face lower dimensional element (not the mortar element!).
bool onInterface(BoundaryID primary_boundary_id, BoundaryID secondary_boundary_id) const
const MooseArray< Point > & _phys_points_secondary
The locations of the quadrature points on the interior secondary elements.
std::set< SubdomainID > _higher_dim_subdomain_ids
the higher dimensional subdomain ids corresponding to the interior parents
const Elem *const & _msm_elem
The current mortar segment element.
SubdomainID secondarySubdomain() const
const SubdomainID _secondary_subdomain_id
Subdomain ID for the secondary surface.
MooseMesh & _mci_mesh
Mesh to query for boundary and subdomain ID information.
const MooseArray< Point > & _phys_points_primary
The locations of the quadrature points on the interior primary elements.
std::vector< Point > _normals
the normals
static void trimInteriorNodeDerivatives(const std::map< unsigned int, unsigned int > &primary_ip_lowerd_map, const Variables &moose_var, DualNumbers &ad_vars, const bool is_secondary)
Get rid of interior node variable's derivatives.
const BoundaryID _secondary_id
Boundary ID for the secondary surface.
bool interpolateNormals() const
Whether to interpolate the nodal normals (e.g.
const std::vector< Real > & _JxW_msm
The element Jacobian times weights.
const SubdomainID _primary_subdomain_id
Subdomain ID for the primary surface.
const std::set< BoundaryID > & getBoundaryIDs() const
Base class for creating new nodally-based mortar auxiliary kernels.
Generic class for solving transient nonlinear problems.
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...