33 std::shared_ptr<MortarConstraintBase> mc =
37 std::shared_ptr<NodeElemConstraintBase> nec =
44 unsigned int secondary =
mesh.getBoundaryID(nfc->getParam<BoundaryName>(
"secondary"));
45 bool displaced = nfc->parameters().have_parameter<
bool>(
"use_displaced_mesh") &&
46 nfc->getParam<
bool>(
"use_displaced_mesh");
58 bool displaced = mc->getParam<
bool>(
"use_displaced_mesh");
60 auto secondary_boundary_id =
61 mesh.getBoundaryID(mc->getParam<BoundaryName>(
"secondary_boundary"));
62 auto primary_boundary_id =
mesh.getBoundaryID(mc->getParam<BoundaryName>(
"primary_boundary"));
63 auto key = std::make_pair(primary_boundary_id, secondary_boundary_id);
74 bool displaced = ec->parameters().have_parameter<
bool>(
"use_displaced_mesh") &&
75 ec->getParam<
bool>(
"use_displaced_mesh");
76 const InterfaceID interface_id = ec->getInterfaceID();
88 SubdomainID secondary =
mesh.getSubdomainID(nec->getParam<SubdomainName>(
"secondary"));
89 SubdomainID primary =
mesh.getSubdomainID(nec->getParam<SubdomainName>(
"primary"));
90 bool displaced = nec->parameters().have_parameter<
bool>(
"use_displaced_mesh") &&
91 nec->getParam<
bool>(
"use_displaced_mesh");
104 mooseError(
"Unknown type of Constraint object");
107 const std::vector<std::shared_ptr<NodalConstraint>> &
113 const std::vector<std::shared_ptr<NodeFaceConstraint>> &
116 std::map<BoundaryID, MooseObjectWarehouse<NodeFaceConstraint>>::const_iterator it, end_it;
130 mooseAssert(it != end_it,
131 "Unable to locate storage for NodeFaceConstraint objects for the given boundary id: " 133 return it->second.getActiveObjects();
138 const std::pair<BoundaryID, BoundaryID> & mortar_interface_key,
const bool displaced)
const 141 return constraints.find(mortar_interface_key) != constraints.end();
144 const std::vector<std::shared_ptr<MortarConstraintBase>> &
146 const std::pair<BoundaryID, BoundaryID> & mortar_interface_key,
const bool displaced)
const 148 std::map<std::pair<BoundaryID, BoundaryID>,
165 "No MortarConstraints exist for the specified primary-secondary boundary pair, primary " 166 << mortar_interface_key.first <<
" and secondary " << mortar_interface_key.second);
168 return it->second.getActiveObjects();
171 const std::vector<std::shared_ptr<ElemElemConstraint>> &
173 bool displaced)
const 175 std::map<unsigned int, MooseObjectWarehouse<ElemElemConstraint>>::const_iterator it, end_it;
189 mooseAssert(it != end_it,
190 "Unable to locate storage for ElemElemConstraint objects for the given interface id: " 192 return it->second.getActiveObjects();
195 const std::vector<std::shared_ptr<NodeElemConstraintBase>> &
198 bool displaced)
const 200 std::map<std::pair<SubdomainID, SubdomainID>,
217 "Unable to locate storage for NodeElemConstraintBase objects for the given secondary and " 219 << secondary_id <<
", " << primary_id <<
"]");
220 return it->second.getActiveObjects();
231 bool displaced)
const 233 std::map<unsigned int, MooseObjectWarehouse<ElemElemConstraint>>::const_iterator it, end_it;
247 return (it != end_it && it->second.hasActiveObjects());
253 std::map<BoundaryID, MooseObjectWarehouse<NodeFaceConstraint>>::const_iterator it, end_it;
267 return (it != end_it && it->second.hasActiveObjects());
273 bool displaced)
const 275 std::map<std::pair<SubdomainID, SubdomainID>,
291 return (it != end_it && it->second.hasActiveObjects());
301 it.second.updateActive();
304 it.second.updateActive();
308 it.second.updateActive();
311 it.second.updateActive();
314 it.second.updateActive();
319 std::set<std::string> & unique_variables,
325 const auto & objects = pr.second.getActiveObjects();
326 for (
const auto & mc : objects)
334 subdomains_covered.insert(mc->primarySubdomain());
335 subdomains_covered.insert(mc->secondarySubdomain());
342 const auto & objects = pr.second.getActiveObjects();
343 for (
const auto & mc : objects)
351 subdomains_covered.insert(mc->primarySubdomain());
352 subdomains_covered.insert(mc->secondarySubdomain());
362 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< NodeElemConstraintBase > > _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::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
const std::vector< std::shared_ptr< NodeElemConstraintBase > > & getActiveNodeElemConstraints(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...
virtual void insert(libMesh::NumericVector< libMesh::Number > &vector)=0
Insert the currently cached degree of freedom values into the provided vector.
std::map< unsigned int, MooseObjectWarehouse< ElemElemConstraint > > _element_constraints
ElemElemConstraints (non-displaced)
std::map< std::pair< SubdomainID, SubdomainID >, MooseObjectWarehouse< NodeElemConstraintBase > > _node_elem_constraints
NodeElemConstraint objects.
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
std::vector< std::vector< std::shared_ptr< Constraint > > > _active_objects
All active objects (THREAD_ID on outer vector)
A NodeElemConstraintBase is used when you need to create constraints between a secondary node and a p...
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 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