https://mooseframework.inl.gov
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. More...
 
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. More...
 

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

Private Attributes

std::vector< MortarConstraintBase * > _mortar_constraints
 The mortar constraints to loop over when on each element. More...
 
const AutomaticMortarGeneration_amg
 Automatic mortar generation (amg) object providing the mortar mesh to loop over. More...
 
SubProblem_subproblem
 A reference to the SubProblem object for reiniting lower-dimensional element quantities. More...
 
FEProblemBase_fe_problem
 A reference to the FEProblemBase object for reiniting higher-dimensional element and neighbor element quantities. More...
 
const bool _displaced
 Whether the mortar constraints are operating on the displaced mesh. More...
 
Assembly_assembly
 A reference to the assembly object. More...
 

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 }
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...
Definition: MortarUtils.h:317
SubProblem & _subproblem
A reference to the SubProblem object for reiniting lower-dimensional element quantities.
const AutomaticMortarGeneration & _amg
Automatic mortar generation (amg) object providing the mortar mesh to loop over.
std::map< SubdomainID, std::deque< MaterialBase * > > _secondary_ip_sub_to_mats
const bool _displaced
Whether the mortar constraints are operating on the displaced mesh.
std::deque< MaterialBase * > _secondary_boundary_mats
A container that holds the boundary materials that will need to be reinit&#39;d on the secondary face...
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&#39;d on...
FEProblemBase & _fe_problem
A reference to the FEProblemBase object for reiniting higher-dimensional element and neighbor element...
Assembly & _assembly
A reference to the assembly object.

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,
167  _subproblem,
168  _fe_problem,
169  _amg,
170  _displaced,
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 }
virtual MooseMesh & mesh()=0
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:3440
std::vector< MortarFilterIter > secondariesToMortarSegments(const Node &node) const
virtual const char * what() const
Get out the error message.
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:3454
SubProblem & _subproblem
A reference to the SubProblem object for reiniting lower-dimensional element quantities.
const AutomaticMortarGeneration & _amg
Automatic mortar generation (amg) object providing the mortar mesh to loop over.
void translateMetaPhysicLError(const MetaPhysicL::LogicError &)
emit a relatively clear error message when we catch a MetaPhysicL logic error
Definition: MooseError.C:141
virtual void setException(const std::string &message)
Set an exception, which is stored at this point by toggling a member variable in this class...
const Parallel::Communicator & comm() const
const std::unordered_set< const Elem * > & getInactiveLMElems() const
std::map< SubdomainID, std::deque< MaterialBase * > > _secondary_ip_sub_to_mats
const bool _displaced
Whether the mortar constraints are operating on the displaced mesh.
void addCachedResiduals(GlobalDataKey, const std::vector< VectorTag > &tags)
Pushes all cached residuals to the global residual vectors associated with each tag.
Definition: Assembly.C:3468
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
Definition: MooseMesh.C:3528
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:3390
std::deque< MaterialBase * > _secondary_boundary_mats
A container that holds the boundary materials that will need to be reinit&#39;d on the secondary face...
std::vector< VectorTag > getVectorTags(const std::set< TagID > &tag_ids) const
Definition: SubProblem.C:173
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:70
std::vector< MortarConstraintBase * > _mortar_constraints
The mortar constraints to loop over when on each element.
Provides a way for users to bail out of the current solve.
bool computingResidual() const
Definition: Assembly.h:1949
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&#39;d on...
const std::unordered_set< const Node * > & getInactiveLMNodes() const
bool computingJacobian() const
Definition: Assembly.h:1954
void cacheJacobianMortar(GlobalDataKey)
Cache all portions of the Jacobian, e.g.
Definition: Assembly.C:4126
processor_id_type processor_id() const
FEProblemBase & _fe_problem
A reference to the FEProblemBase object for reiniting higher-dimensional element and neighbor element...
void addCachedJacobian(GlobalDataKey)
Adds the values that have been cached by calling cacheJacobian() and or cacheJacobianNeighbor() to th...
Definition: Assembly.C:3791
Assembly & _assembly
A reference to the assembly object.
Key structure for APIs manipulating global vectors/matrices.
Definition: Assembly.h:844

◆ 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.

58 {
61  _amg,
62  /*thread id*/ 0,
66 }
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...
Definition: MortarUtils.h:317
const AutomaticMortarGeneration & _amg
Automatic mortar generation (amg) object providing the mortar mesh to loop over.
std::map< SubdomainID, std::deque< MaterialBase * > > _secondary_ip_sub_to_mats
std::deque< MaterialBase * > _secondary_boundary_mats
A container that holds the boundary materials that will need to be reinit&#39;d on the secondary face...
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&#39;d on...
FEProblemBase & _fe_problem
A reference to the FEProblemBase object for reiniting higher-dimensional element and neighbor element...

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: