https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | Private Attributes | List of all members
MortarUserObjectThread Class Reference

#include <MortarUserObjectThread.h>

Inheritance diagram for MortarUserObjectThread:
[legend]

Public Member Functions

 MortarUserObjectThread (std::vector< MortarUserObject * > &mortar_user_objects, const AutomaticMortarGeneration &amg, SubProblem &subproblem, FEProblemBase &fe_problem, bool displaced, Assembly &assembly)
 
 ~MortarUserObjectThread () override
 Unlike MortarExecutorInterface's other implementers, this object is stack-constructed fresh for a single execution and destroyed well before the FEProblemBase that owns the warehouse we registered with, so (unlike the base class default) it is always safe – and necessary, to avoid leaving a dangling entry behind – to deregister here.
 
void operator() ()
 Loops over the mortar segment mesh and executes the user objects.
 
void mortarSetup (const AutomaticMortarGeneration &amg) override
 Called by the MortarInterfaceWarehouse whenever amg's mortar segment mesh coverage has changed, so that this object may refresh any state (e.g.
 

Protected Attributes

MortarInterfaceWarehouse & _mortar_warehouse
 The warehouse this object is registered with for mortar setup notifications.
 
Materials for Mortar

These containers hold the materials whose properties are required by a given set of consumers.

Note that these containers will also hold materials that may not provide properties explicitly needed by the consumers but do provided properties that are dependencies of the materials that do provide properties needed by the consumers

std::map< SubdomainID, std::deque< MaterialBase * > > _secondary_ip_sub_to_mats
 
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 the primary face.
 
std::deque< MaterialBase * > _secondary_boundary_mats
 A container that holds the boundary materials that will need to be reinit'd on the secondary face.
 

Private Attributes

std::vector< MortarUserObject * > & _mortar_user_objects
 The mortar user objects to loop over when on each mortar segment element.
 
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.
 
FEProblemBase & _fe_problem
 A reference to the FEProblemBase object for reiniting higher-dimensional element and neighbor element quantities.
 
const bool _displaced
 Whether the mortar user objects are operating on the displaced mesh.
 
Assembly & _assembly
 A reference to the assembly object.
 

Detailed Description

Definition at line 23 of file MortarUserObjectThread.h.

Constructor & Destructor Documentation

◆ MortarUserObjectThread()

MortarUserObjectThread::MortarUserObjectThread ( std::vector< MortarUserObject * > &  mortar_user_objects,
const AutomaticMortarGeneration &  amg,
SubProblem &  subproblem,
FEProblemBase &  fe_problem,
bool  displaced,
Assembly &  assembly 
)

Definition at line 27 of file MortarUserObjectThread.C.

34 : MortarExecutorInterface(fe_problem),
35 _mortar_user_objects(mortar_user_objects),
36 _amg(amg),
37 _subproblem(subproblem),
38 _fe_problem(fe_problem),
39 _displaced(displaced),
40 _assembly(assembly)
41{
43}
Interface for objects that need to be notified when the mortar segment mesh for an interface they con...
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.
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 mortarSetup(const AutomaticMortarGeneration &amg) override
Called by the MortarInterfaceWarehouse whenever amg's mortar segment mesh coverage has changed,...

◆ ~MortarUserObjectThread()

MortarUserObjectThread::~MortarUserObjectThread ( )
override

Unlike MortarExecutorInterface's other implementers, this object is stack-constructed fresh for a single execution and destroyed well before the FEProblemBase that owns the warehouse we registered with, so (unlike the base class default) it is always safe – and necessary, to avoid leaving a dangling entry behind – to deregister here.

Definition at line 45 of file MortarUserObjectThread.C.

46{
48}
MortarInterfaceWarehouse & _mortar_warehouse
The warehouse this object is registered with for mortar setup notifications.
void dontNotifyWhenMortarSetup(MortarExecutorInterface *mei)
Removes mei from the container of objects that will have their mortarSetup method called whenever a m...

Member Function Documentation

◆ mortarSetup()

void MortarUserObjectThread::mortarSetup ( const AutomaticMortarGeneration &  amg)
overridevirtual

Called by the MortarInterfaceWarehouse whenever amg's mortar segment mesh coverage has changed, so that this object may refresh any state (e.g.

material dependency lists) that depends on which subdomains/boundaries the mortar segment mesh currently touches.

Implements MortarExecutorInterface.

Definition at line 51 of file MortarUserObjectThread.C.

52{
55 _amg,
56 0,
60}
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
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...

Referenced by MortarUserObjectThread().

◆ operator()()

void MortarUserObjectThread::operator() ( )

Loops over the mortar segment mesh and executes the user objects.

Definition at line 63 of file MortarUserObjectThread.C.

64{
65 const auto & secondary_elems_to_mortar_segments = _amg.secondariesToMortarSegments();
66 typedef decltype(secondary_elems_to_mortar_segments.begin()) it_type;
67
68 std::vector<it_type> iterators;
69 for (auto it = secondary_elems_to_mortar_segments.begin();
70 it != secondary_elems_to_mortar_segments.end();
71 ++it)
72 {
73 auto * const secondary_elem = _subproblem.mesh().getMesh().query_elem_ptr(it->first);
74
75 if (secondary_elem && secondary_elem->processor_id() == _subproblem.processor_id() &&
76 !it->second.empty())
77 {
78 // This is local and the mortar segment set isn't empty, so include
79 iterators.push_back(it);
80 mooseAssert(secondary_elem->active(),
81 "We loop over active elements when building the mortar segment mesh, so we golly "
82 "well hope this is active.");
83 }
84 }
85
86 auto act_functor = [this]()
87 {
88 for (auto * const mc : _mortar_user_objects)
89 {
90 mc->setNormals();
91 mc->execute();
92 }
93 };
94
99 _amg,
102 0,
106 act_functor,
107 /*reinit_mortar_user_objects=*/false);
108}
std::vector< MortarFilterIter > secondariesToMortarSegments(const Node &node) const
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
Definition MooseMesh.C:3512
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,...
Definition MortarUtils.h:91

Member Data Documentation

◆ _amg

const AutomaticMortarGeneration& MortarUserObjectThread::_amg
private

Automatic mortar generation (amg) object providing the mortar mesh to loop over.

Definition at line 53 of file MortarUserObjectThread.h.

Referenced by mortarSetup(), MortarUserObjectThread(), and operator()().

◆ _assembly

Assembly& MortarUserObjectThread::_assembly
private

A reference to the assembly object.

Definition at line 67 of file MortarUserObjectThread.h.

Referenced by operator()().

◆ _displaced

const bool MortarUserObjectThread::_displaced
private

Whether the mortar user objects are operating on the displaced mesh.

Definition at line 64 of file MortarUserObjectThread.h.

Referenced by operator()().

◆ _fe_problem

FEProblemBase& MortarUserObjectThread::_fe_problem
private

A reference to the FEProblemBase object for reiniting higher-dimensional element and neighbor element quantities.

We use the FEProblemBase object for reiniting these because we may be using material properties from either undisplaced or displaced materials

Definition at line 61 of file MortarUserObjectThread.h.

Referenced by mortarSetup(), and operator()().

◆ _mortar_user_objects

std::vector<MortarUserObject *>& MortarUserObjectThread::_mortar_user_objects
private

The mortar user objects to loop over when on each mortar segment element.

Definition at line 50 of file MortarUserObjectThread.h.

Referenced by mortarSetup(), and operator()().

◆ _mortar_warehouse

MortarInterfaceWarehouse& MortarExecutorInterface::_mortar_warehouse
protectedinherited

The warehouse this object is registered with for mortar setup notifications.

Definition at line 69 of file MortarExecutorInterface.h.

Referenced by MortarExecutorInterface::MortarExecutorInterface(), MortarExecutorInterface::MortarExecutorInterface(), and ~MortarUserObjectThread().

◆ _primary_ip_sub_to_mats

std::map<SubdomainID, std::deque<MaterialBase *> > MortarExecutorInterface::_primary_ip_sub_to_mats
protectedinherited

A map from primary interior parent subdomain IDs to the block materials that will need to reinit'd on the primary face.

Definition at line 85 of file MortarExecutorInterface.h.

Referenced by mortarSetup(), operator()(), ComputeMortarFunctor::operator()(), and ComputeMortarFunctor::setupMortarMaterials().

◆ _secondary_boundary_mats

std::deque<MaterialBase *> MortarExecutorInterface::_secondary_boundary_mats
protectedinherited

A container that holds the boundary materials that will need to be reinit'd on the secondary face.

Definition at line 89 of file MortarExecutorInterface.h.

Referenced by mortarSetup(), operator()(), ComputeMortarFunctor::operator()(), and ComputeMortarFunctor::setupMortarMaterials().

◆ _secondary_ip_sub_to_mats

std::map<SubdomainID, std::deque<MaterialBase *> > MortarExecutorInterface::_secondary_ip_sub_to_mats
protectedinherited

A map from secondary interior parent subdomain IDs to the block materials that will need to reinit'd on the secondary face

Definition at line 81 of file MortarExecutorInterface.h.

Referenced by mortarSetup(), operator()(), ComputeMortarFunctor::operator()(), and ComputeMortarFunctor::setupMortarMaterials().

◆ _subproblem

SubProblem& MortarUserObjectThread::_subproblem
private

A reference to the SubProblem object for reiniting lower-dimensional element quantities.

Definition at line 56 of file MortarUserObjectThread.h.

Referenced by operator()().


The documentation for this class was generated from the following files: