32 std::shared_ptr<MortarConstraintBase> mc =
42 unsigned int secondary =
mesh.getBoundaryID(nfc->getParam<BoundaryName>(
"secondary"));
43 bool displaced = nfc->parameters().have_parameter<
bool>(
"use_displaced_mesh") &&
44 nfc->getParam<
bool>(
"use_displaced_mesh");
56 bool displaced = mc->getParam<
bool>(
"use_displaced_mesh");
58 auto secondary_boundary_id =
59 mesh.getBoundaryID(mc->getParam<BoundaryName>(
"secondary_boundary"));
60 auto primary_boundary_id =
mesh.getBoundaryID(mc->getParam<BoundaryName>(
"primary_boundary"));
61 auto key = std::make_pair(primary_boundary_id, secondary_boundary_id);
72 bool displaced = ec->parameters().have_parameter<
bool>(
"use_displaced_mesh") &&
73 ec->getParam<
bool>(
"use_displaced_mesh");
74 const InterfaceID interface_id = ec->getInterfaceID();
86 SubdomainID secondary =
mesh.getSubdomainID(nec->getParam<SubdomainName>(
"secondary"));
87 SubdomainID primary =
mesh.getSubdomainID(nec->getParam<SubdomainName>(
"primary"));
88 bool displaced = nec->parameters().have_parameter<
bool>(
"use_displaced_mesh") &&
89 nec->getParam<
bool>(
"use_displaced_mesh");
102 mooseError(
"Unknown type of Constraint object");
105 const std::vector<std::shared_ptr<NodalConstraint>> &
111 const std::vector<std::shared_ptr<NodeFaceConstraint>> &
114 std::map<BoundaryID, MooseObjectWarehouse<NodeFaceConstraint>>::const_iterator it, end_it;
128 mooseAssert(it != end_it,
129 "Unable to locate storage for NodeFaceConstraint objects for the given boundary id: " 131 return it->second.getActiveObjects();
136 const std::pair<BoundaryID, BoundaryID> & mortar_interface_key,
const bool displaced)
const 139 return constraints.find(mortar_interface_key) != constraints.end();
142 const std::vector<std::shared_ptr<MortarConstraintBase>> &
144 const std::pair<BoundaryID, BoundaryID> & mortar_interface_key,
const bool displaced)
const 146 std::map<std::pair<BoundaryID, BoundaryID>,
163 "No MortarConstraints exist for the specified primary-secondary boundary pair, primary " 164 << mortar_interface_key.first <<
" and secondary " << mortar_interface_key.second);
166 return it->second.getActiveObjects();
169 const std::vector<std::shared_ptr<ElemElemConstraint>> &
171 bool displaced)
const 173 std::map<unsigned int, MooseObjectWarehouse<ElemElemConstraint>>::const_iterator it, end_it;
187 mooseAssert(it != end_it,
188 "Unable to locate storage for ElemElemConstraint objects for the given interface id: " 190 return it->second.getActiveObjects();
193 const std::vector<std::shared_ptr<NodeElemConstraint>> &
196 bool displaced)
const 198 std::map<std::pair<SubdomainID, SubdomainID>,
213 mooseAssert(it != end_it,
214 "Unable to locate storage for NodeElemConstraint objects for the given secondary and " 216 << secondary_id <<
", " << primary_id <<
"]");
217 return it->second.getActiveObjects();
228 bool displaced)
const 230 std::map<unsigned int, MooseObjectWarehouse<ElemElemConstraint>>::const_iterator it, end_it;
244 return (it != end_it && it->second.hasActiveObjects());
250 std::map<BoundaryID, MooseObjectWarehouse<NodeFaceConstraint>>::const_iterator it, end_it;
264 return (it != end_it && it->second.hasActiveObjects());
270 bool displaced)
const 272 std::map<std::pair<SubdomainID, SubdomainID>,
288 return (it != end_it && it->second.hasActiveObjects());
297 it.second.updateActive();
300 it.second.updateActive();
304 it.second.updateActive();
307 it.second.updateActive();
310 it.second.updateActive();
315 std::set<std::string> & unique_variables,
321 const auto & objects = pr.second.getActiveObjects();
322 for (
const auto & mc : objects)
330 subdomains_covered.insert(mc->primarySubdomain());
331 subdomains_covered.insert(mc->secondarySubdomain());
338 const auto & objects = pr.second.getActiveObjects();
339 for (
const auto & mc : objects)
347 subdomains_covered.insert(mc->primarySubdomain());
348 subdomains_covered.insert(mc->secondarySubdomain());
358 object->residualEnd();
std::map< std::pair< BoundaryID, BoundaryID >, MooseObjectWarehouse< MortarConstraintBase > > _displaced_mortar_constraints
Displaced MortarConstraints.
MooseObjectWarehouse< NodalConstraint > _nodal_constraints
NodalConstraint objects.
std::map< BoundaryID, MooseObjectWarehouse< NodeFaceConstraint > > _displaced_node_face_constraints
NodeFaceConstraint objects (displaced)
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
const std::vector< std::shared_ptr< NodalConstraint > > & getActiveNodalConstraints() const
Access methods for active objects.
std::map< std::pair< SubdomainID, SubdomainID >, MooseObjectWarehouse< NodeElemConstraint > > _displaced_node_elem_constraints
NodeElemConstraint objects.
A storage container for MooseObjects that inherit from SetupInterface.
Base class for all Constraint types.
const std::vector< std::shared_ptr< NodeFaceConstraint > > & getActiveNodeFaceConstraints(BoundaryID boundary_id, bool displaced) const
void checkThreadID(THREAD_ID tid) const
Calls assert on thread id.
const std::string & name() const override
Get the variable name.
bool hasActiveMortarConstraints(const std::pair< BoundaryID, BoundaryID > &mortar_interface_key, bool displaced) const
bool hasActiveNodalConstraints() const
Deterimine if active objects exist.
std::map< std::pair< SubdomainID, SubdomainID >, MooseObjectWarehouse< NodeElemConstraint > > _node_elem_constraints
NodeElemConstraint objects.
std::unique_ptr< T_DEST, T_DELETER > dynamic_pointer_cast(std::unique_ptr< T_SRC, T_DELETER > &src)
These are reworked from https://stackoverflow.com/a/11003103.
This class provides an interface for common operations on field variables of both FE and FV types wit...
void updateActive(THREAD_ID tid=0) override
Update the various active lists.
bool hasActiveNodeElemConstraints(SubdomainID secondary_id, SubdomainID primary_id, bool displaced) const
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
bool hasActiveNodeFaceConstraints(BoundaryID boundary_id, bool displaced) const
const std::vector< std::shared_ptr< T > > & getActiveObjects(THREAD_ID tid=0) const
Retrieve complete vector to the active all/block/boundary restricted objects for a given thread...
boundary_id_type BoundaryID
A NodeFaceConstraint is used when you need to create constraints between two surfaces in a mesh...
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
std::map< unsigned int, MooseObjectWarehouse< ElemElemConstraint > > _element_constraints
ElemElemConstraints (non-displaced)
std::map< unsigned int, MooseObjectWarehouse< ElemElemConstraint > > _displaced_element_constraints
ElemElemConstraints (displaced)
bool hasActiveObjects(THREAD_ID tid=0) const
void addObject(std::shared_ptr< Constraint > object, THREAD_ID tid=0, bool recurse=true) override
Add Constraint object to the warehouse.
const std::vector< std::shared_ptr< MortarConstraintBase > > & getActiveMortarConstraints(const std::pair< BoundaryID, BoundaryID > &mortar_interface_key, bool displaced) const
std::map< std::pair< BoundaryID, BoundaryID >, MooseObjectWarehouse< MortarConstraintBase > > _mortar_constraints
Undisplaced MortarConstraints.
virtual void updateActive(THREAD_ID tid=0) override
Update the active status of Kernels.
bool hasActiveElemElemConstraints(const InterfaceID interface_id, bool displaced) const
const std::vector< std::shared_ptr< NodeElemConstraint > > & getActiveNodeElemConstraints(SubdomainID secondary_id, SubdomainID primary_id, bool displaced) const
std::vector< std::vector< std::shared_ptr< Constraint > > > _active_objects
All active objects (THREAD_ID on outer vector)
A NodeElemConstraint is used when you need to create constraints between a secondary node and a prima...
void subdomainsCovered(std::set< SubdomainID > &subdomains_covered, std::set< std::string > &unique_variables, THREAD_ID tid=0) const
Update supplied subdomain and variable coverate containters.
const std::vector< std::shared_ptr< ElemElemConstraint > > & getActiveElemElemConstraints(InterfaceID interface_id, bool displaced) const
virtual void insert(NumericVector< Number > &vector)=0
Insert the currently cached degree of freedom values into the provided vector.
virtual void addObject(std::shared_ptr< T > object, THREAD_ID tid=0, bool recurse=true) override
Adds an object to the storage structure.
std::map< BoundaryID, MooseObjectWarehouse< NodeFaceConstraint > > _node_face_constraints
NodeFaceConstraint objects (non-displaced)
virtual void residualEnd(THREAD_ID tid=0) const