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

#include <ComputeMortarFunctor.h>

Inheritance diagram for ComputeMortarFunctor:
[legend]

Public Member Functions

 ComputeMortarFunctor (const std::vector< std::shared_ptr< MortarConstraintBase > > &mortar_constraints, const AutomaticMortarGeneration &amg, SubProblem &subproblem, FEProblemBase &fe_problem, bool displaced, Assembly &assembly)
 
void setupMortarMaterials ()
 Setup step for materials that needs to be re-done if subdomains change.
 
void operator() (Moose::ComputeType compute_type, const std::set< TagID > &vector_tag_ids, const std::set< TagID > &matrix_tag_ids)
 Loops over the mortar segment mesh and computes the residual/Jacobian.
 

Protected Attributes

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< MortarConstraintBase * > _mortar_constraints
 The mortar constraints to loop over when on each 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 constraints are operating on the displaced mesh.
 
Assembly_assembly
 A reference to the assembly object.
 

Detailed Description

Definition at line 33 of file ComputeMortarFunctor.h.

Constructor & Destructor Documentation

◆ ComputeMortarFunctor()

ComputeMortarFunctor::ComputeMortarFunctor ( const std::vector< std::shared_ptr< MortarConstraintBase > > &  mortar_constraints,
const AutomaticMortarGeneration amg,
SubProblem subproblem,
FEProblemBase fe_problem,
bool  displaced,
Assembly assembly 
)

Definition at line 30 of file ComputeMortarFunctor.C.

37 : _amg(amg),
38 _subproblem(subproblem),
39 _fe_problem(fe_problem),
40 _displaced(displaced),
41 _assembly(assembly)
42{
43 // Construct the mortar constraints we will later loop over
44 for (auto mc : mortar_constraints)
45 _mortar_constraints.push_back(mc.get());
46
49 _amg,
50 0,
54}
Assembly & _assembly
A reference to the assembly object.
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...
const bool _displaced
Whether the mortar constraints are operating on the displaced mesh.
std::vector< MortarConstraintBase * > _mortar_constraints
The mortar constraints to loop over when on each element.
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...
const Elem & get(const ElemType type_in)

Member Function Documentation

◆ operator()()

void ComputeMortarFunctor::operator() ( Moose::ComputeType  compute_type,
const std::set< TagID > &  vector_tag_ids,
const std::set< TagID > &  matrix_tag_ids 
)

Loops over the mortar segment mesh and computes the residual/Jacobian.

Definition at line 69 of file ComputeMortarFunctor.C.

72{
73 libmesh_parallel_only(_fe_problem.comm());
74
75 unsigned int num_cached = 0;
76 const auto & vector_tags = _fe_problem.getVectorTags(vector_tag_ids);
77
78 const auto & secondary_elems_to_mortar_segments = _amg.secondariesToMortarSegments();
79 typedef decltype(secondary_elems_to_mortar_segments.begin()) it_type;
80
81 std::vector<it_type> iterators;
82 for (auto it = secondary_elems_to_mortar_segments.begin();
83 it != secondary_elems_to_mortar_segments.end();
84 ++it)
85 {
86 auto * const secondary_elem = _subproblem.mesh().getMesh().query_elem_ptr(it->first);
87
88 if (secondary_elem && secondary_elem->processor_id() == _subproblem.processor_id() &&
89 !it->second.empty())
90 {
91 // This is local and the mortar segment set isn't empty, so include
92 iterators.push_back(it);
93 mooseAssert(secondary_elem->active(),
94 "We loop over active elements when building the mortar segment mesh, so we golly "
95 "well hope this is active.");
96 }
97 }
98
99 auto act_functor = [this, &num_cached, compute_type, &vector_tags]()
100 {
101 ++num_cached;
102
103 switch (compute_type)
104 {
106 {
107 for (auto * const mc : _mortar_constraints)
108 {
109 mc->setNormals();
110 mc->computeResidual();
111 }
112
116
117 if (num_cached % 20 == 0)
119
120 break;
121 }
122
124 {
125 for (auto * const mc : _mortar_constraints)
126 {
127 mc->setNormals();
128 mc->computeJacobian();
129 }
130
132
133 if (num_cached % 20 == 0)
135 break;
136 }
137
139 {
140 for (auto * const mc : _mortar_constraints)
141 {
142 mc->setNormals();
143 mc->computeResidualAndJacobian();
144 }
145
150
151 if (num_cached % 20 == 0)
152 {
155 }
156 break;
157 }
158 }
159 };
160
161 PARALLEL_TRY
162 {
163 try
164 {
166 _assembly,
169 _amg,
172 0,
176 act_functor,
177 /*reinit_mortar_user_objects=*/true);
178 }
179 catch (MooseException & e)
180 {
182 }
183 catch (MetaPhysicL::LogicError & e)
184 {
186 }
187 catch (std::exception & e)
188 {
189 if (!strstr(e.what(), "Jacobian") && !strstr(e.what(), "singular") &&
190 !strstr(e.what(), "det != 0"))
191 throw;
192
194 "We caught a libMesh degeneracy exception in ComputeMortarFunctor:\n" +
195 std::string(e.what()));
196 }
197 }
198 PARALLEL_CATCH;
199
200 // Call any post operations for our mortar constraints
201 for (auto * const mc : _mortar_constraints)
202 {
204 mc->incorrectEdgeDroppingPost(_amg.getInactiveLMNodes());
205 else
206 mc->post();
207
208 mc->zeroInactiveLMDofs(_amg.getInactiveLMNodes(), _amg.getInactiveLMElems());
209 }
210
211 // Make sure any remaining cached residuals/Jacobians get added
216}
Key structure for APIs manipulating global vectors/matrices.
Definition Assembly.h:845
void cacheResidualNeighbor(GlobalDataKey, const std::vector< VectorTag > &tags)
Takes the values that are currently in _sub_Rn of all field variables and appends them to the cached ...
Definition Assembly.C:3442
bool computingResidual() const
Definition Assembly.h:1946
void cacheResidualLower(GlobalDataKey, const std::vector< VectorTag > &tags)
Takes the values that are currently in _sub_Rl and appends them to the cached values.
Definition Assembly.C:3456
bool computingJacobian() const
Definition Assembly.h:1951
void cacheJacobianMortar(GlobalDataKey)
Cache all portions of the Jacobian, e.g.
Definition Assembly.C:4135
void addCachedJacobian(GlobalDataKey)
Adds the values that have been cached by calling cacheJacobian() and or cacheJacobianNeighbor() to th...
Definition Assembly.C:3800
void cacheResidual(GlobalDataKey, const std::vector< VectorTag > &tags)
Takes the values that are currently in _sub_Re of all field variables and appends them to the cached ...
Definition Assembly.C:3392
void addCachedResiduals(GlobalDataKey, const std::vector< VectorTag > &tags)
Pushes all cached residuals to the global residual vectors associated with each tag.
Definition Assembly.C:3470
std::vector< MortarFilterIter > secondariesToMortarSegments(const Node &node) const
const std::unordered_set< const Elem * > & getInactiveLMElems() const
const std::unordered_set< const Node * > & getInactiveLMNodes() const
virtual void setException(const std::string &message)
Set an exception, which is stored at this point by toggling a member variable in this class,...
Provides a way for users to bail out of the current solve.
virtual const char * what() const
Get out the error message.
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
Definition MooseMesh.C:3549
virtual MooseMesh & mesh()=0
std::vector< VectorTag > getVectorTags(const std::set< TagID > &tag_ids) const
Definition SubProblem.C:173
processor_id_type processor_id() const
const Parallel::Communicator & comm() 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
void translateMetaPhysicLError(const MetaPhysicL::LogicError &)
emit a relatively clear error message when we catch a MetaPhysicL logic error
Definition MooseError.C:155

◆ setupMortarMaterials()

void ComputeMortarFunctor::setupMortarMaterials ( )

Setup step for materials that needs to be re-done if subdomains change.

Definition at line 57 of file ComputeMortarFunctor.C.

Member Data Documentation

◆ _amg

const AutomaticMortarGeneration& ComputeMortarFunctor::_amg
private

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

Definition at line 62 of file ComputeMortarFunctor.h.

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

◆ _assembly

Assembly& ComputeMortarFunctor::_assembly
private

A reference to the assembly object.

Definition at line 76 of file ComputeMortarFunctor.h.

Referenced by operator()().

◆ _displaced

const bool ComputeMortarFunctor::_displaced
private

Whether the mortar constraints are operating on the displaced mesh.

Definition at line 73 of file ComputeMortarFunctor.h.

Referenced by operator()().

◆ _fe_problem

FEProblemBase& ComputeMortarFunctor::_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 70 of file ComputeMortarFunctor.h.

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

◆ _mortar_constraints

std::vector<MortarConstraintBase *> ComputeMortarFunctor::_mortar_constraints
private

The mortar constraints to loop over when on each element.

These must be pointers to the base class otherwise the compiler will fail to compile when running std::vector<MortarConstraint0>::push_back(MortarConstraint1> or visa versa

Definition at line 59 of file ComputeMortarFunctor.h.

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

◆ _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 43 of file MortarExecutorInterface.h.

Referenced by ComputeMortarFunctor(), MortarUserObjectThread::MortarUserObjectThread(), MortarUserObjectThread::operator()(), operator()(), and 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 47 of file MortarExecutorInterface.h.

Referenced by ComputeMortarFunctor(), MortarUserObjectThread::MortarUserObjectThread(), MortarUserObjectThread::operator()(), operator()(), and 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 39 of file MortarExecutorInterface.h.

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

◆ _subproblem

SubProblem& ComputeMortarFunctor::_subproblem
private

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

Definition at line 65 of file ComputeMortarFunctor.h.

Referenced by operator()().


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