21#include "libmesh/fe_base.h"
22#include "libmesh/quadrature.h"
23#include "libmesh/elem.h"
24#include "libmesh/point.h"
25#include "libmesh/mesh_base.h"
28 std::vector<MortarUserObject *> & mortar_user_objects,
34 : _mortar_user_objects(mortar_user_objects),
36 _subproblem(subproblem),
37 _fe_problem(fe_problem),
38 _displaced(displaced),
54 typedef decltype(secondary_elems_to_mortar_segments.begin()) it_type;
56 std::vector<it_type> iterators;
57 for (
auto it = secondary_elems_to_mortar_segments.begin();
58 it != secondary_elems_to_mortar_segments.end();
67 iterators.push_back(it);
68 mooseAssert(secondary_elem->active(),
69 "We loop over active elements when building the mortar segment mesh, so we golly "
70 "well hope this is active.");
74 auto act_functor = [
this]()
Keeps track of stuff related to assembling.
This class is a container/interface for the objects involved in automatic generation of mortar spaces...
std::vector< MortarFilterIter > secondariesToMortarSegments(const Node &node) const
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
std::map< SubdomainID, std::deque< MaterialBase * > > _primary_ip_sub_to_mats
A map from primary interior parent subdomain IDs to the block materials that will need to reinit'd on...
std::deque< MaterialBase * > _secondary_boundary_mats
A container that holds the boundary materials that will need to be reinit'd on the secondary face.
std::map< SubdomainID, std::deque< MaterialBase * > > _secondary_ip_sub_to_mats
const AutomaticMortarGeneration & _amg
Automatic mortar generation (amg) object providing the mortar mesh to loop over.
SubProblem & _subproblem
A reference to the SubProblem object for reiniting lower-dimensional element quantities.
Assembly & _assembly
A reference to the assembly object.
MortarUserObjectThread(std::vector< MortarUserObject * > &mortar_user_objects, const AutomaticMortarGeneration &amg, SubProblem &subproblem, FEProblemBase &fe_problem, bool displaced, Assembly &assembly)
FEProblemBase & _fe_problem
A reference to the FEProblemBase object for reiniting higher-dimensional element and neighbor element...
std::vector< MortarUserObject * > & _mortar_user_objects
The mortar user objects to loop over when on each mortar segment element.
const bool _displaced
Whether the mortar user objects are operating on the displaced mesh.
void operator()()
Loops over the mortar segment mesh and executes the user objects.
Generic class for solving transient nonlinear problems.
virtual MooseMesh & mesh()=0
processor_id_type processor_id() const
void loopOverMortarSegments(const Iterators &secondary_elems_to_mortar_segments, Assembly &assembly, SubProblem &subproblem, FEProblemBase &fe_problem, const AutomaticMortarGeneration &amg, const bool displaced, const Consumers &consumers, const THREAD_ID tid, const std::map< SubdomainID, std::deque< MaterialBase * > > &secondary_ip_sub_to_mats, const std::map< SubdomainID, std::deque< MaterialBase * > > &primary_ip_sub_to_mats, const std::deque< MaterialBase * > &secondary_boundary_mats, const ActionFunctor act, const bool reinit_mortar_user_objects)
This method will loop over pairs of secondary elements and their corresponding mortar segments,...
void setupMortarMaterials(const Consumers &consumers, FEProblemBase &fe_problem, const AutomaticMortarGeneration &amg, const THREAD_ID tid, std::map< SubdomainID, std::deque< MaterialBase * > > &secondary_ip_sub_to_mats, std::map< SubdomainID, std::deque< MaterialBase * > > &primary_ip_sub_to_mats, std::deque< MaterialBase * > &secondary_boundary_mats)
This function creates containers of materials necessary to execute the mortar method for a supplied s...